diff options
| author | Mike Pall <mike> | 2013-05-25 10:20:46 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2013-05-25 10:20:46 +0200 |
| commit | 26e4287e60f636af93493ccb16b7173110db9087 (patch) | |
| tree | 0f638112910ccd515aea3b5471b96c72f4bcb191 | |
| parent | 992f7d4b71d0f39266c9b2d7f8ce28c278afb667 (diff) | |
| parent | 5a261dd92c72d8f9d2aab0714ce9e051f0d70219 (diff) | |
| download | luajit-26e4287e60f636af93493ccb16b7173110db9087.tar.gz luajit-26e4287e60f636af93493ccb16b7173110db9087.tar.bz2 luajit-26e4287e60f636af93493ccb16b7173110db9087.zip | |
Merge branch 'master' into v2.1
| -rw-r--r-- | src/lj_alloc.c | 17 | ||||
| -rw-r--r-- | src/luajit.c | 15 | ||||
| -rw-r--r-- | src/vm_x86.dasc | 4 |
3 files changed, 23 insertions, 13 deletions
diff --git a/src/lj_alloc.c b/src/lj_alloc.c index 82b4e5b1..8f285d17 100644 --- a/src/lj_alloc.c +++ b/src/lj_alloc.c | |||
| @@ -188,21 +188,24 @@ static LJ_AINLINE void *CALL_MMAP(size_t size) | |||
| 188 | return ptr; | 188 | return ptr; |
| 189 | } | 189 | } |
| 190 | 190 | ||
| 191 | #elif LJ_TARGET_OSX || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) | 191 | #elif LJ_TARGET_OSX || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__sun__) |
| 192 | 192 | ||
| 193 | /* OSX and FreeBSD mmap() use a naive first-fit linear search. | 193 | /* OSX and FreeBSD mmap() use a naive first-fit linear search. |
| 194 | ** That's perfect for us. Except that -pagezero_size must be set for OSX, | 194 | ** That's perfect for us. Except that -pagezero_size must be set for OSX, |
| 195 | ** otherwise the lower 4GB are blocked. And the 32GB RLIMIT_DATA needs | 195 | ** otherwise the lower 4GB are blocked. And the 32GB RLIMIT_DATA needs |
| 196 | ** to be reduced to 250MB on FreeBSD. | 196 | ** to be reduced to 250MB on FreeBSD. |
| 197 | */ | 197 | */ |
| 198 | #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) | 198 | #if LJ_TARGET_OSX |
| 199 | #include <sys/resource.h> | ||
| 200 | #define MMAP_REGION_START ((uintptr_t)0x10000000) | ||
| 201 | #else | ||
| 202 | #define MMAP_REGION_START ((uintptr_t)0x10000) | 199 | #define MMAP_REGION_START ((uintptr_t)0x10000) |
| 200 | #else | ||
| 201 | #define MMAP_REGION_START ((uintptr_t)0x10000000) | ||
| 203 | #endif | 202 | #endif |
| 204 | #define MMAP_REGION_END ((uintptr_t)0x80000000) | 203 | #define MMAP_REGION_END ((uintptr_t)0x80000000) |
| 205 | 204 | ||
| 205 | #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) | ||
| 206 | #include <sys/resource.h> | ||
| 207 | #endif | ||
| 208 | |||
| 206 | static LJ_AINLINE void *CALL_MMAP(size_t size) | 209 | static LJ_AINLINE void *CALL_MMAP(size_t size) |
| 207 | { | 210 | { |
| 208 | int olderr = errno; | 211 | int olderr = errno; |
| @@ -227,6 +230,10 @@ static LJ_AINLINE void *CALL_MMAP(size_t size) | |||
| 227 | return p; | 230 | return p; |
| 228 | } | 231 | } |
| 229 | if (p != CMFAIL) munmap(p, size); | 232 | if (p != CMFAIL) munmap(p, size); |
| 233 | #ifdef __sun__ | ||
| 234 | alloc_hint += 0x1000000; /* Need near-exhaustive linear scan. */ | ||
| 235 | if (alloc_hint + size < MMAP_REGION_END) continue; | ||
| 236 | #endif | ||
| 230 | if (retry) break; | 237 | if (retry) break; |
| 231 | retry = 1; | 238 | retry = 1; |
| 232 | alloc_hint = MMAP_REGION_START; | 239 | alloc_hint = MMAP_REGION_START; |
diff --git a/src/luajit.c b/src/luajit.c index 35496339..680984da 100644 --- a/src/luajit.c +++ b/src/luajit.c | |||
| @@ -498,15 +498,15 @@ static int handle_luainit(lua_State *L) | |||
| 498 | return dostring(L, init, "=" LUA_INIT); | 498 | return dostring(L, init, "=" LUA_INIT); |
| 499 | } | 499 | } |
| 500 | 500 | ||
| 501 | struct Smain { | 501 | static struct Smain { |
| 502 | char **argv; | 502 | char **argv; |
| 503 | int argc; | 503 | int argc; |
| 504 | int status; | 504 | int status; |
| 505 | }; | 505 | } smain; |
| 506 | 506 | ||
| 507 | static int pmain(lua_State *L) | 507 | static int pmain(lua_State *L) |
| 508 | { | 508 | { |
| 509 | struct Smain *s = (struct Smain *)lua_touserdata(L, 1); | 509 | struct Smain *s = &smain; |
| 510 | char **argv = s->argv; | 510 | char **argv = s->argv; |
| 511 | int script; | 511 | int script; |
| 512 | int flags = 0; | 512 | int flags = 0; |
| @@ -555,17 +555,16 @@ static int pmain(lua_State *L) | |||
| 555 | int main(int argc, char **argv) | 555 | int main(int argc, char **argv) |
| 556 | { | 556 | { |
| 557 | int status; | 557 | int status; |
| 558 | struct Smain s; | ||
| 559 | lua_State *L = lua_open(); /* create state */ | 558 | lua_State *L = lua_open(); /* create state */ |
| 560 | if (L == NULL) { | 559 | if (L == NULL) { |
| 561 | l_message(argv[0], "cannot create state: not enough memory"); | 560 | l_message(argv[0], "cannot create state: not enough memory"); |
| 562 | return EXIT_FAILURE; | 561 | return EXIT_FAILURE; |
| 563 | } | 562 | } |
| 564 | s.argc = argc; | 563 | smain.argc = argc; |
| 565 | s.argv = argv; | 564 | smain.argv = argv; |
| 566 | status = lua_cpcall(L, pmain, &s); | 565 | status = lua_cpcall(L, pmain, NULL); |
| 567 | report(L, status); | 566 | report(L, status); |
| 568 | lua_close(L); | 567 | lua_close(L); |
| 569 | return (status || s.status) ? EXIT_FAILURE : EXIT_SUCCESS; | 568 | return (status || smain.status) ? EXIT_FAILURE : EXIT_SUCCESS; |
| 570 | } | 569 | } |
| 571 | 570 | ||
diff --git a/src/vm_x86.dasc b/src/vm_x86.dasc index 6c8302a0..62a5e139 100644 --- a/src/vm_x86.dasc +++ b/src/vm_x86.dasc | |||
| @@ -5659,7 +5659,11 @@ static void emit_asm_debug(BuildCtx *ctx) | |||
| 5659 | ".LEFDE1:\n\n", (int)ctx->codesz - fcofs); | 5659 | ".LEFDE1:\n\n", (int)ctx->codesz - fcofs); |
| 5660 | #endif | 5660 | #endif |
| 5661 | #if (defined(__sun__) && defined(__svr4__)) | 5661 | #if (defined(__sun__) && defined(__svr4__)) |
| 5662 | #if LJ_64 | ||
| 5663 | fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@unwind\n"); | ||
| 5664 | #else | ||
| 5662 | fprintf(ctx->fp, "\t.section .eh_frame,\"aw\",@progbits\n"); | 5665 | fprintf(ctx->fp, "\t.section .eh_frame,\"aw\",@progbits\n"); |
| 5666 | #endif | ||
| 5663 | #else | 5667 | #else |
| 5664 | fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@progbits\n"); | 5668 | fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@progbits\n"); |
| 5665 | #endif | 5669 | #endif |
