about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <seebastien.chev@gmail.com>2023-09-02 12:45:59 +0200
committerptitSeb <seebastien.chev@gmail.com>2023-09-02 12:45:59 +0200
commit646770ff68d9538e7d89a904ebbb04dc32471284 (patch)
treef2f6a1d377e1ec3f584c80a4507960f6aaa38257 /src
parent90ad1653590dab359d1b8acb41faccd3c8039a0c (diff)
downloadbox64-646770ff68d9538e7d89a904ebbb04dc32471284.tar.gz
box64-646770ff68d9538e7d89a904ebbb04dc32471284.zip
[ANDROID] More change to android/dynarec build
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/dynablock.c9
-rw-r--r--src/dynarec/dynarec.c4
-rw-r--r--src/emu/x64emu_private.h1
-rw-r--r--src/libtools/signals.c4
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)":"");
     }