Touching up new system for linux support
This commit is contained in:
parent
a7fb4e85c9
commit
13ed6ed2d6
@ -89,8 +89,8 @@ public:
|
||||
inline void setAuthor( const char* n ) { author.assign(n); }
|
||||
inline void setVersion( const char* n ) { version.assign(n); }
|
||||
inline void setError( const char* n ) { errorMsg.assign(n); }
|
||||
inline bool isValid() const { return ((status != ps_bad_load) && (status != ps_locked)); }
|
||||
inline bool isPaused() const { return ( (status == ps_paused) || (status == ps_stopped)); }
|
||||
inline bool isValid() const { return ((status == ps_running) && (status != ps_locked)); }
|
||||
inline bool isPaused() const { return ( (status == ps_paused) ); }
|
||||
//inline bool isFunctionPaused( int id ) const { return (paused_fun & (1<<id)) ? true : false; }
|
||||
inline bool isExecutable(int id) const { return (isValid() && !isPaused()); }
|
||||
void Finalize();
|
||||
|
@ -15,7 +15,7 @@ OBJECTS = meta_api.cpp CFile.cpp CVault.cpp vault.cpp float.cpp file.cpp modules
|
||||
CMisc.cpp CTask.cpp string.cpp amxmodx.cpp CEvent.cpp CCmd.cpp CLogEvent.cpp \
|
||||
srvcmd.cpp strptime.cpp amxcore.cpp amxtime.cpp power.cpp amxxlog.cpp fakemeta.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 natives.cpp newmenus.cpp \
|
||||
|
||||
LINK = -lz
|
||||
|
||||
@ -39,9 +39,11 @@ CFLAGS += -DLINUX -DNDEBUG -fPIC -Wno-deprecated -fno-exceptions -DHAVE_STDINT_H
|
||||
ifeq "$(AMD64)" "true"
|
||||
BINARY = $(NAME)_amd64.so
|
||||
CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
|
||||
OBJECTS += JIT/natives-amd64.o
|
||||
LINK += -lstdc++
|
||||
else
|
||||
BINARY = $(NAME)_i386.so
|
||||
OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o
|
||||
OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o JIT/natives-x86.o
|
||||
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
|
||||
OPT_FLAGS += -march=i686
|
||||
endif
|
||||
|
@ -377,12 +377,16 @@ int load_amxscript(AMX *amx, void **program, const char *filename, char error[64
|
||||
|
||||
if (will_be_debugged)
|
||||
{
|
||||
#ifdef JIT
|
||||
amx->flags |= AMX_FLAG_DEBUG;
|
||||
#endif
|
||||
amx_SetDebugHook(amx, amxx_DebugHook);
|
||||
} else {
|
||||
//set this again because amx_Init() erases it!
|
||||
#ifdef JIT
|
||||
amx->flags |= AMX_FLAG_JITC;
|
||||
amx->sysreq_d = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef JIT
|
||||
|
@ -20,7 +20,8 @@ global amxx_DynaInit, _amxx_DynaInit
|
||||
amxx_DynaInit:
|
||||
_amxx_DynaInit:
|
||||
mov rax, rdi ;get pointer, first param is in rdi
|
||||
mov [GLOBAL_GATE], rax ;store
|
||||
lea rdi, [GLOBAL_GATE wrt rip]
|
||||
mov [rdi], rax ;store
|
||||
|
||||
mov rax, 1
|
||||
ret
|
||||
@ -67,7 +68,7 @@ _amxx_DynaFuncStart:
|
||||
;this old trick, we'll move in the real pointer in a bit.
|
||||
_amxx_DynaMoveOffset:
|
||||
mov rsi, qword 1234567812345678h
|
||||
call [GLOBAL_GATE] ;pass through teh global gateway.
|
||||
call [GLOBAL_GATE wrt rip] ;pass through teh global gateway.
|
||||
|
||||
pop rbp
|
||||
ret
|
||||
@ -83,3 +84,4 @@ _amxx_DynaCodesize:
|
||||
ret
|
||||
|
||||
GLOBAL_GATE DQ 0
|
||||
|
||||
|
@ -1,7 +1,13 @@
|
||||
#include "amxmodx.h"
|
||||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
#include "CStack.h"
|
||||
#include "natives.h"
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
CVector<regnative *> g_RegNatives;
|
||||
CStack<regnative *> g_NativeStack;
|
||||
CVector<String> g_Libraries;
|
||||
@ -76,7 +82,7 @@ AMX_NATIVE_INFO *BuildNativeTable()
|
||||
{
|
||||
pNative = g_RegNatives[i];
|
||||
info.name = pNative->name.c_str();
|
||||
info.func = reinterpret_cast<AMX_NATIVE>(pNative->pfn);
|
||||
info.func = (AMX_NATIVE)((void *)(pNative->pfn));
|
||||
pNatives[i] = info;
|
||||
}
|
||||
pNatives[g_RegNatives.size()].name = NULL;
|
||||
@ -301,7 +307,7 @@ static cell AMX_NATIVE_CALL register_library(AMX *amx, cell *params)
|
||||
static cell AMX_NATIVE_CALL register_native(AMX *amx, cell *params)
|
||||
{
|
||||
if (!g_Initialized)
|
||||
amxx_DynaInit(static_cast<void *>(amxx_DynaCallback));
|
||||
amxx_DynaInit((void *)(amxx_DynaCallback));
|
||||
|
||||
g_Initialized = true;
|
||||
|
||||
@ -328,7 +334,7 @@ static cell AMX_NATIVE_CALL register_native(AMX *amx, cell *params)
|
||||
pNative->pfn = new char[size + 10];
|
||||
VirtualProtect(pNative->pfn, size+10, PAGE_EXECUTE_READWRITE, &temp);
|
||||
#else
|
||||
pNative->pfn = (unsigned char *)memalign(sysconf(_SC_PAGESIZE), amx->code_size);
|
||||
pNative->pfn = (char *)memalign(sysconf(_SC_PAGESIZE), amx->code_size);
|
||||
mprotect((void *)pNative->pfn, size+10, PROT_READ|PROT_WRITE|PROT_EXEC);
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user