mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-25 22:35:37 +03:00
fixed amx_BrowseRelocate overwriting the flag state
This commit is contained in:
parent
4b9425cf3b
commit
ba24020857
@ -57,7 +57,7 @@
|
|||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if defined __LCC__
|
#if defined __LCC__ || defined __GNUC__
|
||||||
#include <wchar.h> /* for wcslen() */
|
#include <wchar.h> /* for wcslen() */
|
||||||
#endif
|
#endif
|
||||||
#include "amx.h"
|
#include "amx.h"
|
||||||
@ -416,20 +416,6 @@ int AMXAPI amx_Flags(AMX *amx,uint16_t *flags)
|
|||||||
}
|
}
|
||||||
#endif /* AMX_FLAGS */
|
#endif /* AMX_FLAGS */
|
||||||
|
|
||||||
void debug(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, fmt);
|
|
||||||
FILE *fp = fopen("c:\\dump.txt", "at");
|
|
||||||
if (fp)
|
|
||||||
{
|
|
||||||
vfprintf(fp, fmt, ap);
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if defined AMX_INIT
|
#if defined AMX_INIT
|
||||||
int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params)
|
int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params)
|
||||||
{
|
{
|
||||||
@ -538,7 +524,7 @@ static int amx_BrowseRelocate(AMX *amx)
|
|||||||
assert(hdr->magic==AMX_MAGIC);
|
assert(hdr->magic==AMX_MAGIC);
|
||||||
code=amx->base+(int)hdr->cod;
|
code=amx->base+(int)hdr->cod;
|
||||||
codesize=hdr->dat - hdr->cod;
|
codesize=hdr->dat - hdr->cod;
|
||||||
amx->flags=AMX_FLAG_BROWSE;
|
amx->flags|=AMX_FLAG_BROWSE;
|
||||||
|
|
||||||
/* sanity checks */
|
/* sanity checks */
|
||||||
assert(OP_PUSH_PRI==36);
|
assert(OP_PUSH_PRI==36);
|
||||||
@ -569,7 +555,6 @@ static int amx_BrowseRelocate(AMX *amx)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* start browsing code */
|
/* start browsing code */
|
||||||
debug("opcode_list=%p\n", opcode_list);
|
|
||||||
for (cip=0; cip<codesize; ) {
|
for (cip=0; cip<codesize; ) {
|
||||||
op=(OPCODE) *(ucell *)(code+(int)cip);
|
op=(OPCODE) *(ucell *)(code+(int)cip);
|
||||||
assert(op>0 && op<OP_NUM_OPCODES);
|
assert(op>0 && op<OP_NUM_OPCODES);
|
||||||
@ -1069,7 +1054,6 @@ int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code)
|
|||||||
|
|
||||||
if ((amx->flags & AMX_FLAG_JITC)==0)
|
if ((amx->flags & AMX_FLAG_JITC)==0)
|
||||||
{
|
{
|
||||||
debug("failing at line %d\n", __LINE__);
|
|
||||||
return AMX_ERR_INIT_JIT; /* flag not set, this AMX is not prepared for JIT */
|
return AMX_ERR_INIT_JIT; /* flag not set, this AMX is not prepared for JIT */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1082,7 +1066,6 @@ int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code)
|
|||||||
|
|
||||||
if (mprotect(asm_runJIT, CODESIZE_JIT, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
|
if (mprotect(asm_runJIT, CODESIZE_JIT, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
|
||||||
{
|
{
|
||||||
debug("failing at line %d\n", __LINE__);
|
|
||||||
return AMX_ERR_INIT_JIT;
|
return AMX_ERR_INIT_JIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1110,8 +1093,6 @@ int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code)
|
|||||||
amx->stk = amx->stp;
|
amx->stk = amx->stp;
|
||||||
} /* if */
|
} /* if */
|
||||||
|
|
||||||
debug("return value is %d\n", res);
|
|
||||||
|
|
||||||
return (res == 0) ? AMX_ERR_NONE : AMX_ERR_INIT_JIT;
|
return (res == 0) ? AMX_ERR_NONE : AMX_ERR_INIT_JIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2731,7 +2712,6 @@ int AMXAPI amx_Exec(AMX *amx, cell *retval, int index)
|
|||||||
return AMX_ERR_INDEX;
|
return AMX_ERR_INDEX;
|
||||||
func=GETENTRY(hdr,publics,index);
|
func=GETENTRY(hdr,publics,index);
|
||||||
cip=(cell *)(code + (int)func->address);
|
cip=(cell *)(code + (int)func->address);
|
||||||
debug("CIP: %p. CIP op: %p. opcode_list: %p", cip, *cip, amx_opcodelist);
|
|
||||||
} /* if */
|
} /* if */
|
||||||
/* check values just copied */
|
/* check values just copied */
|
||||||
CHKSTACK();
|
CHKSTACK();
|
||||||
|
Loading…
Reference in New Issue
Block a user