diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-12-08 19:59:08 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-12-08 19:59:08 +0100 |
| commit | dff14a868fdfe973243fc52c513d08f769ac2dc4 (patch) | |
| tree | 88795a9f48554058a109f1446068bcc7eace2fc7 | |
| parent | 4304301701b1990f855d30f9874e333ccb233f6a (diff) | |
| download | box64-dff14a868fdfe973243fc52c513d08f769ac2dc4.tar.gz box64-dff14a868fdfe973243fc52c513d08f769ac2dc4.zip | |
Some small fixes for pagesize != 4096
| -rw-r--r-- | src/custommem.c | 8 | ||||
| -rwxr-xr-x | src/elfs/elfloader.c | 2 | ||||
| -rwxr-xr-x | src/libtools/signals.c | 4 |
3 files changed, 7 insertions, 7 deletions
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) |