about summary refs log tree commit diff stats
path: root/src/elfs/elfloader.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-23 14:13:28 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-23 14:13:28 +0200
commite0ce06483c1bf676f81405c6048b39f8b993af2a (patch)
tree0ededf00ded1cdf0b1ec8c406ad6bbe8ef2ad58f /src/elfs/elfloader.c
parent95e78088d6c8b066a169c0e25817f7d397f5ec0c (diff)
downloadbox64-e0ce06483c1bf676f81405c6048b39f8b993af2a.tar.gz
box64-e0ce06483c1bf676f81405c6048b39f8b993af2a.zip
[NON4K][ELFLOADER] more Elfloader work for non-4k pagesize OS ([BOX32] too)
Diffstat (limited to 'src/elfs/elfloader.c')
-rw-r--r--src/elfs/elfloader.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index d7d8d539..bd89176b 100644
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -242,8 +242,10 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin)
         image = raw = mmap64((void*)head->vaddr, sz, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0);
         if(head->vaddr&(box64_pagesize-1)) {
             // load address might be lower
-            if((uintptr_t)image == (head->vaddr&~(box64_pagesize-1)))
+            if((uintptr_t)image == (head->vaddr&~(box64_pagesize-1))) {
                 image = (void*)head->vaddr;
+                sz += ((uintptr_t)image)-((uintptr_t)raw);
+            }
         }
     }
     if(image!=MAP_FAILED && !head->vaddr && image!=(void*)offs) {
@@ -330,7 +332,7 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin)
                 size_t asize = head->multiblocks[n].asize+(head->multiblocks[n].paddr-paddr);
                 void* p = MAP_FAILED;
                 if(paddr==(paddr&~(box64_pagesize-1)) && (asize==ALIGN(asize))) {
-                    printf_dump(log_level, "Mmapping 0x%zx (0x%zx) bytes @%p, will read 0x%zx @%p for Elf \"%s\"\n", asize, e->p_memsz, (void*)paddr, e->p_filesz, (void*)head->multiblocks[n].paddr, head->name);
+                    printf_dump(log_level, "Allocating 0x%zx (0x%zx) bytes @%p, will read 0x%zx @%p for Elf \"%s\"\n", asize, e->p_memsz, (void*)paddr, e->p_filesz, (void*)head->multiblocks[n].paddr, head->name);
                     p = mmap64(
                         (void*)paddr,
                         asize,