diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-09-02 16:35:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-02 16:35:07 +0200 |
| commit | 25a064f3a8da90626b8c33fc01bb1e1bd0b4c4c8 (patch) | |
| tree | dc564c30b2155310cf82c7bd6a4664255fea4a6c /src/dynarec | |
| parent | eb1e607b935a1c90c0c9cf0b352d95423e42740d (diff) | |
| parent | 8a25b91ad23b8ef0c1154f43f95459209d372463 (diff) | |
| download | box64-25a064f3a8da90626b8c33fc01bb1e1bd0b4c4c8.tar.gz box64-25a064f3a8da90626b8c33fc01bb1e1bd0b4c4c8.zip | |
Merge pull request #962 from ptitSeb/android
[ANDROID] Try to create an Android build, porting box86 Android build
Diffstat (limited to 'src/dynarec')
| -rw-r--r-- | src/dynarec/dynablock.c | 11 | ||||
| -rw-r--r-- | src/dynarec/dynarec.c | 11 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c index 114479bc..d95fb829 100644 --- a/src/dynarec/dynablock.c +++ b/src/dynarec/dynablock.c @@ -171,11 +171,16 @@ dynablock_t *AddNewDynablock(uintptr_t addr) } //TODO: move this to dynrec_arm.c and track allocated structure to avoid memory leak -static __thread struct __jmp_buf_tag dynarec_jmpbuf; +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 77ca980c..b832b1e5 100644 --- a/src/dynarec/dynarec.c +++ b/src/dynarec/dynarec.c @@ -103,16 +103,21 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) void DynaRun(x64emu_t* emu) { // prepare setjump for signal handling - struct __jmp_buf_tag jmpbuf[1] = {0}; + JUMPBUFF jmpbuf[1] = {0}; int skip = 0; - struct __jmp_buf_tag *old_jmpbuf = emu->jmpbuf; + JUMPBUFF *old_jmpbuf = emu->jmpbuf; emu->flags.jmpbuf_ready = 0; while(!(emu->quit)) { if(!emu->jmpbuf || (emu->flags.need_jmpbuf && emu->jmpbuf!=jmpbuf)) { emu->jmpbuf = jmpbuf; emu->flags.jmpbuf_ready = 1; - if((skip=sigsetjmp(emu->jmpbuf, 1))) { + #ifdef ANDROID + if((skip=sigsetjmp(*(JUMPBUFF*)emu->jmpbuf, 1))) + #else + if((skip=sigsetjmp(emu->jmpbuf, 1))) + #endif + { printf_log(LOG_DEBUG, "Setjmp DynaRun, fs=0x%x\n", emu->segs[_FS]); #ifdef DYNAREC if(box64_dynarec_test) { |