# HG changeset patch # User Michael Pavone # Date 1435512111 25200 # Node ID c47e1750c26428e4a2e5b9ba8f5ed7f3fcbc3717 # Parent b52cd6854c28c527f7e31c6a78f1543a0846532e Use MAP_32BIT on Linux since my hint seems to be ignored diff -r b52cd6854c28 -r c47e1750c264 mem.c --- a/mem.c Sun Jun 28 10:12:37 2015 -0700 +++ b/mem.c Sun Jun 28 10:21:51 2015 -0700 @@ -14,13 +14,17 @@ #define MAP_ANONYMOUS MAP_ANON #endif +#ifndef MAP_32BIT +#define MAP_32BIT 0 +#endif + void * alloc_code(size_t *size) { //start at the 1GB mark to allow plenty of room for sbrk based malloc implementations //while still keeping well within 32-bit displacement range for calling code compiled into the executable static uint8_t *next = (uint8_t *)0x40000000; *size += PAGE_SIZE - (*size & (PAGE_SIZE - 1)); - uint8_t *ret = mmap(NULL, *size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + uint8_t *ret = mmap(NULL, *size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0); next = ret + *size; return ret; }