diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-11-13 10:15:46 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-11-13 10:15:46 +0100 |
| commit | 62966c2f64ddd230948b1ffa023df6001ea0fcae (patch) | |
| tree | 2884e4da985dd6e08f5f6610bd46c47a2e0dded2 /src | |
| parent | dfd2a4ef0e236b5e043ef5b5bf1e16791dec3dd7 (diff) | |
| download | box64-62966c2f64ddd230948b1ffa023df6001ea0fcae.tar.gz box64-62966c2f64ddd230948b1ffa023df6001ea0fcae.zip | |
[ELFLOADER] Some more fixes to elf memory manager
Diffstat (limited to 'src')
| -rw-r--r-- | src/elfs/elfloader.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index cf3dfc7c..c1e5dbdb 100644 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -217,6 +217,7 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) } return 1; } + printf_log(log_level, "Pre-allocated 0x%zx byte at %p for %s\n", head->memsz, image, head->name); head->delta = offs; printf_log(log_level, "Delta of %p (vaddr=%p) for Elf \"%s\"\n", (void*)offs, (void*)head->vaddr, head->name); @@ -255,9 +256,9 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) // check if alignment is correct uintptr_t balign = head->multiblocks[n].align-1; if(balign<(box64_pagesize-1)) balign = (box64_pagesize-1); - head->multiblocks[n].asize = ALIGN(e->p_memsz+(head->multiblocks[n].paddr&balign)); + head->multiblocks[n].asize = ALIGN(e->p_memsz+(e->p_paddr&balign)); int try_mmap = 1; - if(e->p_paddr&(box64_pagesize-1)) + if(e->p_paddr&balign) try_mmap = 0; if(e->p_offset&(box64_pagesize-1)) try_mmap = 0; @@ -287,7 +288,7 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) if(!try_mmap) { uintptr_t paddr = head->multiblocks[n].paddr&~balign; size_t asize = head->multiblocks[n].asize; - printf_log(log_level, "Allocating 0x%lx bytes @%p for Elf \"%s\"\n", asize, (void*)paddr, head->name); + printf_log(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); void* p = mmap64( (void*)paddr, asize, |