diff options
| author | ptitSeb <seebastien.chev@gmail.com> | 2023-09-02 12:45:59 +0200 |
|---|---|---|
| committer | ptitSeb <seebastien.chev@gmail.com> | 2023-09-02 12:45:59 +0200 |
| commit | 646770ff68d9538e7d89a904ebbb04dc32471284 (patch) | |
| tree | f2f6a1d377e1ec3f584c80a4507960f6aaa38257 /src | |
| parent | 90ad1653590dab359d1b8acb41faccd3c8039a0c (diff) | |
| download | box64-646770ff68d9538e7d89a904ebbb04dc32471284.tar.gz box64-646770ff68d9538e7d89a904ebbb04dc32471284.zip | |
[ANDROID] More change to android/dynarec build
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/dynablock.c | 9 | ||||
| -rw-r--r-- | src/dynarec/dynarec.c | 4 | ||||
| -rw-r--r-- | src/emu/x64emu_private.h | 1 | ||||
| -rw-r--r-- | src/libtools/signals.c | 4 |
4 files changed, 16 insertions, 2 deletions
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c index 2113bd2d..d95fb829 100644 --- a/src/dynarec/dynablock.c +++ b/src/dynarec/dynablock.c @@ -172,10 +172,15 @@ dynablock_t *AddNewDynablock(uintptr_t addr) //TODO: move this to dynrec_arm.c and track allocated structure to avoid memory leak static __thread JUMPBUFF dynarec_jmpbuf; +#ifdef ANDROID +#define DYN_JMPBUF dynarec_jmpbuf +#else +#define DYN_JMPBUF &dynarec_jmpbuf +#endif void cancelFillBlock() { - longjmp(&dynarec_jmpbuf, 1); + longjmp(DYN_JMPBUF, 1); } /* @@ -208,7 +213,7 @@ static dynablock_t* internalDBGetBlock(x64emu_t* emu, uintptr_t addr, uintptr_t // fill the block block->x64_addr = (void*)addr; - if(sigsetjmp(&dynarec_jmpbuf, 1)) { + if(sigsetjmp(DYN_JMPBUF, 1)) { printf_log(LOG_INFO, "FillBlock at %p triggered a segfault, canceling\n", (void*)addr); FreeDynablock(block, 0); if(need_lock) diff --git a/src/dynarec/dynarec.c b/src/dynarec/dynarec.c index a0084a8e..9416352d 100644 --- a/src/dynarec/dynarec.c +++ b/src/dynarec/dynarec.c @@ -103,7 +103,11 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) void DynaRun(x64emu_t* emu) { // prepare setjump for signal handling + #ifdef ANDROID + JUMPBUFF jmpbuf = {0}; + #else JUMPBUFF jmpbuf[1] = {0}; + #endif int skip = 0; JUMPBUFF *old_jmpbuf = emu->jmpbuf; emu->flags.jmpbuf_ready = 0; diff --git a/src/emu/x64emu_private.h b/src/emu/x64emu_private.h index 701d5add..25601105 100644 --- a/src/emu/x64emu_private.h +++ b/src/emu/x64emu_private.h @@ -45,6 +45,7 @@ typedef struct emu_flags_s { } emu_flags_t; #ifdef ANDROID +#include <setjmp.h> #define JUMPBUFF sigjmp_buf #else #define JUMPBUFF struct __jmp_buf_tag diff --git a/src/libtools/signals.c b/src/libtools/signals.c index 43d8f58c..1aff0608 100644 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -860,7 +860,11 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void if(Locks & is_dyndump_locked) CancelBlock64(1); #endif + #ifdef ANDROID + siglongjmp(*emu->jmpbuf, 1); + #else siglongjmp(emu->jmpbuf, 1); + #endif } printf_log(LOG_INFO, "Warning, context has been changed in Sigactionhanlder%s\n", (sigcontext->uc_mcontext.gregs[X64_RIP]!=sigcontext_copy.uc_mcontext.gregs[X64_RIP])?" (EIP changed)":""); } |