mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-25 14:25:38 +03:00
Fixed bug where JIT did not work on linux (memory alignment issues)
This commit is contained in:
parent
31436e3ecf
commit
eaf102d78f
@ -17,7 +17,7 @@ OBJECTS = meta_api.cpp CFile.cpp CVault.cpp vault.cpp float.cpp file.cpp modules
|
|||||||
amxxfile.cpp CLang.cpp md5.cpp emsg.cpp CForward.cpp CPlugin.cpp CModule.cpp \
|
amxxfile.cpp CLang.cpp md5.cpp emsg.cpp CForward.cpp CPlugin.cpp CModule.cpp \
|
||||||
CMenu.cpp util.cpp amx.cpp amxdbg.cpp
|
CMenu.cpp util.cpp amx.cpp amxdbg.cpp
|
||||||
|
|
||||||
LINK = -lz JIT/amxexecn.o JIT/amxjitsn.o
|
LINK = -lz
|
||||||
|
|
||||||
INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
|
INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
|
||||||
-I$(MM_ROOT) -Lzlib -I$(HLSDK)/common
|
-I$(MM_ROOT) -Lzlib -I$(HLSDK)/common
|
||||||
@ -41,7 +41,8 @@ ifeq "$(AMD64)" "true"
|
|||||||
CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
|
CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
|
||||||
else
|
else
|
||||||
BINARY = $(NAME)_i386.so
|
BINARY = $(NAME)_i386.so
|
||||||
CFLAGS += -DPAWN_CELL_SIZE=32
|
OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o
|
||||||
|
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
|
||||||
OPT_FLAGS += -march=i686
|
OPT_FLAGS += -march=i686
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -49,6 +49,8 @@
|
|||||||
#include "osdefs.h"
|
#include "osdefs.h"
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
#include <sclinux.h>
|
#include <sclinux.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
#if !defined AMX_NODYNALOAD
|
#if !defined AMX_NODYNALOAD
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#endif
|
#endif
|
||||||
@ -1034,9 +1036,13 @@ int AMXAPI amx_Init(AMX *amx,void *program)
|
|||||||
return !VirtualProtect(addr, len, p, &prev);
|
return !VirtualProtect(addr, len, p, &prev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ALIGN(addr) (addr)
|
||||||
|
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
|
|
||||||
/* Linux already has mprotect() */
|
/* Linux already has mprotect() */
|
||||||
|
/* But wants the address aligned! */
|
||||||
|
#define ALIGN(addr) (char *)(((long)addr + sysconf(_SC_PAGESIZE)-1) & ~(sysconf(_SC_PAGESIZE)-1))
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -1064,7 +1070,7 @@ int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code)
|
|||||||
*/
|
*/
|
||||||
assert(amx->sysreq_d==0);
|
assert(amx->sysreq_d==0);
|
||||||
|
|
||||||
if (mprotect(asm_runJIT, CODESIZE_JIT, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
|
if (mprotect(ALIGN(asm_runJIT), CODESIZE_JIT, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
|
||||||
{
|
{
|
||||||
return AMX_ERR_INIT_JIT;
|
return AMX_ERR_INIT_JIT;
|
||||||
}
|
}
|
||||||
|
@ -392,7 +392,7 @@ int load_amxscript(AMX *amx, void **program, const char *filename, char error[64
|
|||||||
{
|
{
|
||||||
delete[] np;
|
delete[] np;
|
||||||
delete[] rt;
|
delete[] rt;
|
||||||
strcpy(error,"Failed to initialize plugin");
|
strcpy(error,"Failed to initialize JIT'd plugin");
|
||||||
return (amx->error = AMX_ERR_INIT);
|
return (amx->error = AMX_ERR_INIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user