From dff14a868fdfe973243fc52c513d08f769ac2dc4 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Thu, 8 Dec 2022 19:59:08 +0100 Subject: Some small fixes for pagesize != 4096 --- src/custommem.c | 8 ++++---- src/elfs/elfloader.c | 2 +- src/libtools/signals.c | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/custommem.c b/src/custommem.c index e11881d1..bb4ead49 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -1029,8 +1029,8 @@ void addMapMem(uintptr_t begin, uintptr_t end) { if(!mapmem) return; - begin &=~0xfff; - end = (end&~0xfff)+0xfff; // full page + begin &=~(box64_pagesize-1); + end = (end&~(box64_pagesize-1))+(box64_pagesize-1); // full page // sanitize values if(end<0x10000) return; if(!begin) begin = 0x10000; @@ -1068,8 +1068,8 @@ void removeMapMem(uintptr_t begin, uintptr_t end) { if(!mapmem) return; - begin &=~0xfff; - end = (end&~0xfff)+0xfff; // full page + begin &=~(box64_pagesize-1); + end = (end&~(box64_pagesize-1))+(box64_pagesize-1); // full page // sanitize values if(end<0x10000) return; if(!begin) begin = 0x10000; diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 52f4be44..f4178ba3 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -305,7 +305,7 @@ int LoadElfMemory(FILE* f, box64context_t* context, elfheader_t* head) char* dest = (char*)e->p_paddr + head->delta; printf_log(LOG_DEBUG, "MMap block #%zu @%p offset=%p (0x%zx/0x%zx)\n", i, dest, (void*)e->p_offset, e->p_filesz, e->p_memsz); void* p = (void*)-1; - if(e->p_memsz==e->p_filesz && !(e->p_align&0xfff)) { + if(e->p_memsz==e->p_filesz && !(e->p_align&(box64_pagesize-1))) { printf_log(LOG_DEBUG, "MMap block #%zu @%p offset=%p (0x%zx/0x%zx, flags:0x%x)\n", i, dest, (void*)e->p_offset, e->p_filesz, e->p_memsz, e->p_flags); p = mmap(dest, e->p_filesz, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED | MAP_PRIVATE, fileno(f), e->p_offset); } diff --git a/src/libtools/signals.c b/src/libtools/signals.c index 394c67db..b7594d24 100755 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -798,12 +798,12 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx) static uintptr_t repeated_page = 0; dynarec_log(LOG_DEBUG, "SIGSEGV with Access error on %p for %p , db=%p(%p), prot=0x%x (old page=%p)\n", pc, addr, db, db?((void*)db->x64_addr):NULL, prot, (void*)repeated_page); static int repeated_count = 0; - if(repeated_page == ((uintptr_t)addr&~0xfff)) { + if(repeated_page == ((uintptr_t)addr&~(box64_pagesize-1))) { ++repeated_count; // Access eoor multiple time on same page, disable dynarec on this page a few time... dynarec_log(LOG_DEBUG, "Detecting a Hotpage at %p (%d)\n", (void*)repeated_page, repeated_count); AddHotPage(repeated_page); } else { - repeated_page = (uintptr_t)addr&~0xfff; + repeated_page = (uintptr_t)addr&~(box64_pagesize-1); repeated_count = 0; } // access error, unprotect the block (and mark them dirty) -- cgit 1.4.1