diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-05 11:12:02 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-05 11:12:02 +0100 |
| commit | a30433ea120ba502045782296db85bb27f643d6b (patch) | |
| tree | b16692e1b2de15b9b5a3e10fa19ebca4bcb36cc3 /src | |
| parent | 6f7b462d53e5a573318a343cf3db0b322e587855 (diff) | |
| download | box64-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.c | 6 | ||||
| -rw-r--r-- | src/libtools/signals.c | 8 |
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; |