mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-07 16:06:09 +00:00
32 lines
763 B
C
32 lines
763 B
C
// Replacement for sys/mman.h which factors out platform differences.
|
|
|
|
#include <sys/mman.h>
|
|
|
|
#if defined(VGO_darwin)
|
|
# define MAP_ANONYMOUS MAP_ANON
|
|
#endif
|
|
|
|
|
|
#include <assert.h>
|
|
#include <unistd.h>
|
|
|
|
// Map a page, then unmap it, then return that address. That
|
|
// guarantees to give an address which will fault when accessed,
|
|
// without making any assumptions about the layout of the address
|
|
// space.
|
|
|
|
__attribute__((unused))
|
|
static void* get_unmapped_page(void)
|
|
{
|
|
void* ptr;
|
|
int r;
|
|
long pagesz = sysconf(_SC_PAGE_SIZE);
|
|
assert(pagesz == 4096 || pagesz == 16384 || pagesz == 65536);
|
|
ptr = mmap(0, pagesz, PROT_READ, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
|
assert(ptr != (void*)-1);
|
|
r = munmap(ptr, pagesz);
|
|
assert(r == 0);
|
|
return ptr;
|
|
}
|
|
|