about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-12-08 19:59:08 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-12-08 19:59:08 +0100
commitdff14a868fdfe973243fc52c513d08f769ac2dc4 (patch)
tree88795a9f48554058a109f1446068bcc7eace2fc7
parent4304301701b1990f855d30f9874e333ccb233f6a (diff)
downloadbox64-dff14a868fdfe973243fc52c513d08f769ac2dc4.tar.gz
box64-dff14a868fdfe973243fc52c513d08f769ac2dc4.zip
Some small fixes for pagesize != 4096
-rw-r--r--src/custommem.c8
-rwxr-xr-xsrc/elfs/elfloader.c2
-rwxr-xr-xsrc/libtools/signals.c4
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)