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