diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_alloc.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/lj_alloc.c b/src/lj_alloc.c index 9aa6440d..0c498a7d 100644 --- a/src/lj_alloc.c +++ b/src/lj_alloc.c | |||
@@ -160,16 +160,29 @@ static LJ_AINLINE int CALL_MUNMAP(void *ptr, size_t size) | |||
160 | #define MMAP_PROT (PROT_READ|PROT_WRITE) | 160 | #define MMAP_PROT (PROT_READ|PROT_WRITE) |
161 | #if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) | 161 | #if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) |
162 | #define MAP_ANONYMOUS MAP_ANON | 162 | #define MAP_ANONYMOUS MAP_ANON |
163 | #endif /* MAP_ANON */ | 163 | #endif |
164 | #define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) | ||
164 | 165 | ||
165 | #if LJ_64 | 166 | #if LJ_64 |
166 | #define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS|MAP_32BIT) | 167 | /* Need special support for allocating memory in the lower 2GB. */ |
168 | |||
169 | #if defined(__linux__) | ||
170 | /* Actually this only gives us max. 1GB in current Linux kernels. */ | ||
171 | #define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MAP_32BIT|MMAP_FLAGS, -1, 0) | ||
172 | #elif defined(__MACH__) && defined(__APPLE__) | ||
173 | #error "NYI: no support for 64 bit OSX (yet)" | ||
174 | #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) | ||
175 | /* FreeBSD 64 bit kernel ignores mmap() hints for lower 8GB of memory. */ | ||
176 | #error "No support for 64 bit FreeBSD" | ||
167 | #else | 177 | #else |
168 | #define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) | 178 | #error "NYI: need an equivalent of MAP_32BIT for this 64 bit OS" |
169 | #endif | 179 | #endif |
170 | 180 | ||
171 | #define INIT_MMAP() ((void)0) | 181 | #else |
172 | #define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) | 182 | #define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) |
183 | #endif | ||
184 | |||
185 | #define INIT_MMAP() ((void)0) | ||
173 | #define DIRECT_MMAP(s) CALL_MMAP(s) | 186 | #define DIRECT_MMAP(s) CALL_MMAP(s) |
174 | #define CALL_MUNMAP(a, s) munmap((a), (s)) | 187 | #define CALL_MUNMAP(a, s) munmap((a), (s)) |
175 | 188 | ||