about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-05 11:12:02 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-05 11:12:02 +0100
commita30433ea120ba502045782296db85bb27f643d6b (patch)
treeb16692e1b2de15b9b5a3e10fa19ebca4bcb36cc3 /src
parent6f7b462d53e5a573318a343cf3db0b322e587855 (diff)
downloadbox64-a30433ea120ba502045782296db85bb27f643d6b.tar.gz
box64-a30433ea120ba502045782296db85bb27f643d6b.zip
[NON4KPAGE] Some more adjustments for non-4Kpagesize system (should help #2110)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/dynablock.c6
-rw-r--r--src/libtools/signals.c8
2 files changed, 7 insertions, 7 deletions
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c
index f651e5fd..62a63bec 100644
--- a/src/dynarec/dynablock.c
+++ b/src/dynarec/dynablock.c
@@ -199,9 +199,10 @@ static dynablock_t* internalDBGetBlock(x64emu_t* emu, uintptr_t addr, uintptr_t
 {
     if(hasAlternate((void*)addr))
         return NULL;
+    const uint32_t req_prot = (box64_pagesize==4096)?(PROT_EXEC|PROT_READ):PROT_READ;
     dynablock_t* block = getDB(addr);
     if(block || !create) {
-        if(block && getNeedTest(addr) && (getProtection(addr)&(PROT_EXEC|PROT_READ))!=(PROT_EXEC|PROT_READ))
+        if(block && getNeedTest(addr) && (getProtection(addr)&req_prot)!=req_prot)
             block = NULL;
         return block;
     }
@@ -215,13 +216,12 @@ static dynablock_t* internalDBGetBlock(x64emu_t* emu, uintptr_t addr, uintptr_t
         }
         block = getDB(addr);    // just in case
         if(block) {
-            if(block && getNeedTest(addr) && (getProtection_fast(addr)&(PROT_EXEC|PROT_READ))!=(PROT_EXEC|PROT_READ))
+            if(block && getNeedTest(addr) && (getProtection_fast(addr)&req_prot)!=req_prot)
                 block = NULL;
             mutex_unlock(&my_context->mutex_dyndump);
             return block;
         }
     }
-    const uint32_t req_prot = (box64_pagesize==4096)?(PROT_EXEC|PROT_READ):PROT_READ;
     if((getProtection_fast(addr)&req_prot)!=req_prot) {// cannot be run, get out of the Dynarec
         if(need_lock)
             mutex_unlock(&my_context->mutex_dyndump);
diff --git a/src/libtools/signals.c b/src/libtools/signals.c
index dd98e4c6..db4a5709 100644
--- a/src/libtools/signals.c
+++ b/src/libtools/signals.c
@@ -1401,10 +1401,6 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx)
         signal_jmpbuf_active = 0;
         longjmp(SIG_JMPBUF, 1);
     }
-    if((sig==SIGSEGV || sig==SIGBUS) && box64_quit) {
-        printf_log(LOG_INFO, "Sigfault/Segbus while quitting, exiting silently\n");
-        _exit(box64_exit_code);    // Hack, segfault while quiting, exit silently
-    }
     ucontext_t *p = (ucontext_t *)ucntx;
     void* addr = (void*)info->si_addr;  // address that triggered the issue
     void* rsp = NULL;
@@ -1614,6 +1610,10 @@ dynarec_log(/*LOG_DEBUG*/LOG_INFO, "Repeated SIGSEGV with Access error on %p for
 #else
     void* db = NULL;
 #endif
+    if((sig==SIGSEGV || sig==SIGBUS) && box64_quit) {
+        printf_log(LOG_INFO, "Sigfault/Segbus while quitting, exiting silently\n");
+        _exit(box64_exit_code);    // Hack, segfault while quiting, exit silently
+    }
     static int old_code = -1;
     static void* old_pc = 0;
     static void* old_addr = 0;