about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-06-21 10:48:54 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-06-21 10:48:54 +0200
commit7057b7f92962c6971fbd617cb9e78c7251a1c403 (patch)
treed776125ad898c53f3af2370b16f67d8e9a28c90d /src/libtools
parent6af070e25f20030844fb68534ee58766861d545e (diff)
downloadbox64-7057b7f92962c6971fbd617cb9e78c7251a1c403.tar.gz
box64-7057b7f92962c6971fbd617cb9e78c7251a1c403.zip
More logs on 'strange' SIGSEGV...
Diffstat (limited to 'src/libtools')
-rwxr-xr-xsrc/libtools/signals.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libtools/signals.c b/src/libtools/signals.c
index 501c101f..0e3bf721 100755
--- a/src/libtools/signals.c
+++ b/src/libtools/signals.c
@@ -726,7 +726,7 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx)
         // check if SMC inside block
         db = FindDynablockFromNativeAddress(pc);
         db_searched = 1;
-        dynarec_log(LOG_DEBUG, "SIGSEGV with Access error on %p for %p , db=%p(%p)\n", pc, addr, db, db?((void*)db->x64_addr):NULL);
+        dynarec_log(LOG_DEBUG, "SIGSEGV with Access error on %p for %p , db=%p(%p), prot=0x%x\n", pc, addr, db, db?((void*)db->x64_addr):NULL, prot);
         if(db && ((addr>=db->x64_addr && addr<(db->x64_addr+db->x64_size)) || db->need_test)) {
             // dynablock got auto-dirty! need to get out of it!!!
             emu_jmpbuf_t* ejb = GetJmpBuf();
@@ -777,13 +777,14 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx)
         if(addr && pc && db) {
             if((glitch_pc!=pc || glitch_addr!=addr || glitch_prot!=prot)) {
                 // probably a glitch due to intensive multitask...
-                dynarec_log(/*LOG_DEBUG*/LOG_INFO, "SIGSEGV with Access error on %p for %p , db=%p, retrying\n", pc, addr, db);
-                relockMutex(Locks);
+                dynarec_log(/*LOG_DEBUG*/LOG_INFO, "SIGSEGV with Access error on %p for %p, db=%p, prot=0x%x, retrying\n", pc, addr, db, prot);
                 glitch_pc = pc;
                 glitch_addr = addr;
                 glitch_prot = prot;
+                relockMutex(Locks);
                 return; // try again
             }
+dynarec_log(/*LOG_DEBUG*/LOG_INFO, "Repeated SIGSEGV with Access error on %p for %p, db=%p, prot=0x%x\n", pc, addr, db, prot);
             glitch_pc = NULL;
             glitch_addr = NULL;
             glitch_prot = 0;