x64: Allow building with LUAJIT_USE_SYSMALLOC and LUAJIT_USE_VALGRIND.

Valgrind 3.9 killed MAP_32BIT support. Ugh. So now we have to rely on
undocumented behavior where Valgrind always allocates from the bottom
of memory. Alas, such a binary won't run properly without Valgrind.
This commit is contained in:
Mike Pall 2014-04-21 22:26:46 +02:00
parent 65626eac23
commit f3374b5266
3 changed files with 6 additions and 4 deletions

View File

@ -122,8 +122,10 @@ XCFLAGS=
# #
# Use the system provided memory allocator (realloc) instead of the # Use the system provided memory allocator (realloc) instead of the
# bundled memory allocator. This is slower, but sometimes helpful for # bundled memory allocator. This is slower, but sometimes helpful for
# debugging. It's helpful for Valgrind's memcheck tool, too. This option # debugging. This option cannot be enabled on x64, since realloc usually
# cannot be enabled on x64, since the built-in allocator is mandatory. # doesn't return addresses in the right address range.
# OTOH this option is mandatory for Valgrind's memcheck tool on x64 and
# the only way to get useful results from it for all other architectures.
#XCFLAGS+= -DLUAJIT_USE_SYSMALLOC #XCFLAGS+= -DLUAJIT_USE_SYSMALLOC
# #
# This define is required to run LuaJIT under Valgrind. The Valgrind # This define is required to run LuaJIT under Valgrind. The Valgrind

View File

@ -302,7 +302,7 @@ static int panic(lua_State *L)
#ifdef LUAJIT_USE_SYSMALLOC #ifdef LUAJIT_USE_SYSMALLOC
#if LJ_64 #if LJ_64 && !defined(LUAJIT_USE_VALGRIND)
#error "Must use builtin allocator for 64 bit target" #error "Must use builtin allocator for 64 bit target"
#endif #endif

View File

@ -175,7 +175,7 @@ static void close_state(lua_State *L)
g->allocf(g->allocd, G2GG(g), sizeof(GG_State), 0); g->allocf(g->allocd, G2GG(g), sizeof(GG_State), 0);
} }
#if LJ_64 #if LJ_64 && !(defined(LUAJIT_USE_VALGRIND) && defined(LUAJIT_USE_SYSMALLOC))
lua_State *lj_state_newstate(lua_Alloc f, void *ud) lua_State *lj_state_newstate(lua_Alloc f, void *ud)
#else #else
LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud) LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud)