CS350 COS
COS
Loading...
Searching...
No Matches
mman.c
Go to the documentation of this file.
1
2#include <stdlib.h>
3#include <sys/types.h>
4#include <sys/mman.h>
5
6#if defined(__x86_64__)
7#include <sys/cdefs.h>
8#include <machine/amd64.h>
9#else
10#error "Unsupported Architecture!"
11#endif
12
13#include <syscall.h>
14
15int
16getpagesizes(size_t *pagesize, int nelem)
17{
18#if defined(__x86_64__)
19 if (pagesize) {
20 if (nelem >= 1)
21 pagesize[0] = PGSIZE;
22 if (nelem >= 2)
23 pagesize[1] = LARGE_PGSIZE;
24 if (nelem >= 3)
25 pagesize[2] = HUGE_PGSIZE;
26 return (nelem > 3 ? 3 : nelem);
27 }
28 return 3;
29#else
30#error "Unsupported Architecture!"
31#endif
32}
33
34void*
35mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
36{
37 void *realAddr;
38
39 if (!(flags & MAP_FIXED)) {
40 // Find an address
41 }
42
43 if (flags & MAP_ANON) {
44 realAddr = OSMemMap(addr, len, prot | flags);
45 } else {
46 abort();
47 }
48
49 // XXX: Update mapping
50
51 return realAddr;
52}
53
54int
55munmap(void *addr, size_t len)
56{
57 // XXX: Update mappings
58
59 return OSMemUnmap(addr, len);
60}
61
62int
63mprotect(void *addr, size_t len, int prot)
64{
65 // XXX: Update mappings
66
67 return OSMemProtect(addr, len, prot);
68}
69
70int
71madvise(void *addr, size_t len, int behav)
72{
73 return 0;
74}
75
#define HUGE_PGSIZE
Definition: amd64.h:29
#define LARGE_PGSIZE
Definition: amd64.h:25
void * OSMemMap(void *addr, uint64_t len, int flags)
Definition: syscall.c:41
int OSMemUnmap(void *addr, uint64_t len)
Definition: syscall.c:47
int OSMemProtect(void *addr, uint64_t len, int flags)
Definition: syscall.c:53
#define PGSIZE
Definition: malloc.c:21
int munmap(void *addr, size_t len)
Definition: mman.c:55
void * mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)
Definition: mman.c:35
int madvise(void *addr, size_t len, int behav)
Definition: mman.c:71
int getpagesizes(size_t *pagesize, int nelem)
Definition: mman.c:16
int mprotect(void *addr, size_t len, int prot)
Definition: mman.c:63
#define MAP_ANON
Definition: mman.h:11
#define MAP_FIXED
Definition: mman.h:12
uint64_t addr
Definition: multiboot.h:1
uint64_t len
Definition: multiboot.h:2
_Noreturn void abort(void)
Definition: abort.c:9
int64_t off_t
Definition: types.h:20