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
15 int
getpagesizes(size_t * pagesize,int nelem)16 getpagesizes(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
34 void*
mmap(void * addr,size_t len,int prot,int flags,int fd,off_t offset)35 mmap(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
54 int
munmap(void * addr,size_t len)55 munmap(void *addr, size_t len)
56 {
57 // XXX: Update mappings
58
59 return OSMemUnmap(addr, len);
60 }
61
62 int
mprotect(void * addr,size_t len,int prot)63 mprotect(void *addr, size_t len, int prot)
64 {
65 // XXX: Update mappings
66
67 return OSMemProtect(addr, len, prot);
68 }
69
70 int
madvise(void * addr,size_t len,int behav)71 madvise(void *addr, size_t len, int behav)
72 {
73 return 0;
74 }
75
76