Fixed JIT crashing on some kernel configs (like FC2 >= 2.6.6)

This commit is contained in:
David Anderson 2004-10-29 20:35:23 +00:00
parent 826893d8d2
commit 712859eb20

View File

@ -29,6 +29,9 @@
* version. * version.
*/ */
#ifdef __linux__
#include <sys/mman.h>
#endif
#include "amxmodx.h" #include "amxmodx.h"
#include "osdep.h" // sleep, etc #include "osdep.h" // sleep, etc
#include "CFile.h" #include "CFile.h"
@ -174,10 +177,16 @@ int load_amxscript(AMX *amx, void **program, const char *filename, char error[64
return (amx->error = AMX_ERR_INIT); return (amx->error = AMX_ERR_INIT);
} }
if (amx_InitJIT(amx, rt, np) == AMX_ERR_NONE) if ( (err = amx_InitJIT(amx, rt, np)) == AMX_ERR_NONE )
{ {
void *blk;
//amx->base = (unsigned char FAR *)realloc( np, amx->code_size ); //amx->base = (unsigned char FAR *)realloc( np, amx->code_size );
#ifndef __linux__
amx->base = new unsigned char[ amx->code_size ]; amx->base = new unsigned char[ amx->code_size ];
#else
posix_memalign((void **)&(amx->base), sysconf(_SC_PAGESIZE), amx->code_size);
mprotect((void *)amx->base, amx->code_size, PROT_READ|PROT_WRITE|PROT_EXEC);
#endif
if ( amx->base ) if ( amx->base )
memcpy( amx->base , np , amx->code_size ); memcpy( amx->base , np , amx->code_size );
delete[] np; delete[] np;
@ -193,7 +202,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"); sprintf(error, "Failed to initialize plugin (%d)", err);
return (amx->error = AMX_ERR_INIT_JIT); return (amx->error = AMX_ERR_INIT_JIT);
} }