about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-03-07 14:44:38 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-03-07 14:44:38 +0100
commit0b37d4aac24518623d5a697ec0914961f827853f (patch)
tree6fe5c7a2cee8effe3ae5387350d1d47464fcaba4 /src/libtools
parent749c8711242a5cd1ba303468a8740aaedf8c93bd (diff)
downloadbox64-0b37d4aac24518623d5a697ec0914961f827853f.tar.gz
box64-0b37d4aac24518623d5a697ec0914961f827853f.zip
Rolback this change in signal, and better change the interpretor handling of IP instead
Diffstat (limited to 'src/libtools')
-rwxr-xr-xsrc/libtools/signals.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/libtools/signals.c b/src/libtools/signals.c
index e0410b1c..a98b570a 100755
--- a/src/libtools/signals.c
+++ b/src/libtools/signals.c
@@ -505,7 +505,7 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void
     sigcontext->uc_mcontext.gregs[X64_RBP] = R_RBP;
     sigcontext->uc_mcontext.gregs[X64_RSP] = R_RSP;
     sigcontext->uc_mcontext.gregs[X64_RBX] = R_RBX;
-    sigcontext->uc_mcontext.gregs[X64_RIP] = emu->old_ip;
+    sigcontext->uc_mcontext.gregs[X64_RIP] = R_RIP;//emu->old_ip;   // old_ip should be more accurate as the "current" IP, but it's not always up-to-date
     // flags
     sigcontext->uc_mcontext.gregs[X64_EFL] = emu->eflags.x64;
     // get segments
@@ -934,7 +934,10 @@ exit(-1);
         const char* x64name = NULL;
         const char* elfname = NULL;
         x64emu_t* emu = thread_get_emu();
-        x64pc = emu->old_ip;
+        // Adjust RIP for special case of NULL function run
+        if(sig==SIGSEGV && R_RIP==0x1 && (uintptr_t)info->si_addr==0x0)
+            R_RIP = 0x0;
+        x64pc = R_RIP;
         rsp = (void*)R_RSP;
 #if defined(DYNAREC)
 #if defined(ARM64)