about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-11-05 13:21:02 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-11-05 13:21:02 +0100
commitf8b88418ed59de4de0e7206031cb66c38b91b95c (patch)
treee17205346aff1106ca70ae8e5ba6877427be791c /src/libtools
parent9c120168593c9565780c365aef0f511f3e692d61 (diff)
downloadbox64-f8b88418ed59de4de0e7206031cb66c38b91b95c.tar.gz
box64-f8b88418ed59de4de0e7206031cb66c38b91b95c.zip
[DYNAREC] Cancel dynablock creation on SEGBUS too
Diffstat (limited to 'src/libtools')
-rw-r--r--src/libtools/signals.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/libtools/signals.c b/src/libtools/signals.c
index 2826b2ef..d5385b57 100644
--- a/src/libtools/signals.c
+++ b/src/libtools/signals.c
@@ -1221,8 +1221,8 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx)
     }
     #endif
 #ifdef DYNAREC
-    if((Locks & is_dyndump_locked) && (sig==SIGSEGV) && current_helper) {
-        printf_log(LOG_INFO, "FillBlock triggered a segfault at %p from %p\n", addr, pc);
+    if((Locks & is_dyndump_locked) && ((sig==SIGSEGV) || (sig==SIGBUS)) && current_helper) {
+        printf_log(LOG_INFO, "FillBlock triggered a %s at %p from %p\n", (sig==SIGSEGV)?"segfault":"bus error", addr, pc);
         CancelBlock64(0);
         relockMutex(Locks);
         cancelFillBlock();  // Segfault inside a Fillblock, cancel it's creation...
@@ -1596,12 +1596,13 @@ exit(-1);
                 for (int i=0; i<6; ++i)
                     printf_log(log_minimum, "%s:0x%04x ", seg_name[i], emu->segs[i]);
             }
-            if(sig==SIGILL)
+            if(sig==SIGILL) {
                 printf_log(log_minimum, " opcode=%02X %02X %02X %02X %02X %02X %02X %02X (%02X %02X %02X %02X %02X)\n", ((uint8_t*)pc)[0], ((uint8_t*)pc)[1], ((uint8_t*)pc)[2], ((uint8_t*)pc)[3], ((uint8_t*)pc)[4], ((uint8_t*)pc)[5], ((uint8_t*)pc)[6], ((uint8_t*)pc)[7], ((uint8_t*)x64pc)[0], ((uint8_t*)x64pc)[1], ((uint8_t*)x64pc)[2], ((uint8_t*)x64pc)[3], ((uint8_t*)x64pc)[4]);
-            else if(sig==SIGBUS)
+            } else if(sig==SIGBUS) {
                 printf_log(log_minimum, " x86opcode=%02X %02X %02X %02X %02X %02X %02X %02X (opcode=%08x)\n", ((uint8_t*)x64pc)[0], ((uint8_t*)x64pc)[1], ((uint8_t*)x64pc)[2], ((uint8_t*)x64pc)[3], ((uint8_t*)x64pc)[4], ((uint8_t*)x64pc)[5], ((uint8_t*)x64pc)[6], ((uint8_t*)x64pc)[7], *(uint32_t*)pc);
-            else
+            } else {
                 printf_log(log_minimum, "\n");
+            }
         }
     }
     relockMutex(Locks);