about summary refs log tree commit diff stats
path: root/src/libtools/signal32.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-07-21 10:46:53 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-07-21 10:46:53 +0200
commit5d90fe95e4a087ff0b68f2f8a749cf140016fbe7 (patch)
tree5d64d98b5d2810206282761629f4f571274f6fc3 /src/libtools/signal32.c
parent8271d37539068bb5fd9ab5b32d4aee2c0b52aae8 (diff)
downloadbox64-5d90fe95e4a087ff0b68f2f8a749cf140016fbe7.tar.gz
box64-5d90fe95e4a087ff0b68f2f8a749cf140016fbe7.zip
[DYNAREC] Consolidate access to native register in signal and register mapping acrross all 3 supported dynarec archs
Diffstat (limited to 'src/libtools/signal32.c')
-rw-r--r--src/libtools/signal32.c36
1 files changed, 13 insertions, 23 deletions
diff --git a/src/libtools/signal32.c b/src/libtools/signal32.c
index 56c844ab..9399aba8 100644
--- a/src/libtools/signal32.c
+++ b/src/libtools/signal32.c
@@ -36,6 +36,18 @@
 #include "dynablock.h"
 #include "../dynarec/dynablock_private.h"
 #include "dynarec_native.h"
+#if defined(ARM64)
+#include "dynarec/arm64/arm64_mapping.h"
+#define CONTEXT_REG(P, X) P->uc_mcontext.regs[X]
+#elif defined(LA64)
+#include "dynarec/la64/la64_mapping.h"
+#define CONTEXT_REG(P, X) P->uc_mcontext.__gregs[X]
+#elif defined(RV64)
+#include "dynarec/rv64/rv64_mapping.h"
+#define CONTEXT_REG(P, X) P->uc_mcontext.__gregs[X]
+#else
+#error Unsupported Architecture
+#endif //arch
 #endif
 
 
@@ -481,36 +493,14 @@ void my_sigactionhandler_oldcode_32(x64emu_t* emu, int32_t sig, int simple, sigi
         emu = thread_get_emu();
     uintptr_t frame = R_RSP;
 #if defined(DYNAREC)
-#if defined(ARM64)
     dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc);
     ucontext_t *p = (ucontext_t *)ucntx;
     void* pc = NULL;
     if(p) {
         pc = (void*)p->uc_mcontext.pc;
         if(db)
-            frame = from_ptr((ptr_t)p->uc_mcontext.regs[10+_SP]);
+            frame = from_ptr((ptr_t)CONTEXT_REG(p, xRSP));
     }
-#elif defined(LA64)
-    dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc);
-    ucontext_t *p = (ucontext_t *)ucntx;
-    void* pc = NULL;
-    if(p) {
-        pc = (void*)p->uc_mcontext.__pc;
-        if(db)
-            frame = from_ptr((ptr_t)p->uc_mcontext.__gregs[12+_SP]);
-    }
-#elif defined(RV64)
-    dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc);
-    ucontext_t *p = (ucontext_t *)ucntx;
-    void* pc = NULL;
-    if(p) {
-        pc = (void*)p->uc_mcontext.__gregs[0];
-        if(db)
-            frame = from_ptr((ptr_t)p->uc_mcontext.__gregs[9]);
-    }
-#else
-#error Unsupported architecture
-#endif
 #else
     (void)ucntx; (void)cur_db;
     void* pc = NULL;