blob: c059308c1259ade7b2184f9766b2c6b16221ec6d [file] [log] [blame]
njn9a55ee82009-04-15 05:35:00 +00001// Replacement for sys/mman.h which factors out platform differences.
2
3#include <sys/mman.h>
4
njnf76d27a2009-05-28 01:53:07 +00005#if defined(VGO_darwin)
6# define MAP_ANONYMOUS MAP_ANON
7#endif
8
njn9a55ee82009-04-15 05:35:00 +00009
10#include <assert.h>
11#include <unistd.h>
12
13// Map a page, then unmap it, then return that address. That
14// guarantees to give an address which will fault when accessed,
15// without making any assumptions about the layout of the address
16// space.
17
18__attribute__((unused))
19static void* get_unmapped_page(void)
20{
21 void* ptr;
22 int r;
23 long pagesz = sysconf(_SC_PAGE_SIZE);
sewardj5db15402012-06-07 09:13:21 +000024 assert(pagesz == 4096 || pagesz == 16384 || pagesz == 65536);
njn9a55ee82009-04-15 05:35:00 +000025 ptr = mmap(0, pagesz, PROT_READ, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
26 assert(ptr != (void*)-1);
27 r = munmap(ptr, pagesz);
28 assert(r == 0);
29 return ptr;
30}
31