diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-07-21 10:46:53 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-07-21 10:46:53 +0200 |
| commit | 5d90fe95e4a087ff0b68f2f8a749cf140016fbe7 (patch) | |
| tree | 5d64d98b5d2810206282761629f4f571274f6fc3 /src/libtools/signal32.c | |
| parent | 8271d37539068bb5fd9ab5b32d4aee2c0b52aae8 (diff) | |
| download | box64-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.c | 36 |
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; |