diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-10-14 15:11:15 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-14 09:11:15 +0200 |
| commit | 3d0423acf703be7e0e7b004ee85630f6684bf72e (patch) | |
| tree | ffd0958823f0cd8a4a2ac2cccfea53ed6ff2350d /src/elfs | |
| parent | 3ad0ddfe880ee2edbc6cd05ce9cb8acb82b34331 (diff) | |
| download | box64-3d0423acf703be7e0e7b004ee85630f6684bf72e.tar.gz box64-3d0423acf703be7e0e7b004ee85630f6684bf72e.zip | |
Added preliminary unit test runner (#3045)
* Added preliminary unit test runner * Set .text section address * Added support for added custom memory regions * Move json.h to include * Display banner * Added support for custom memory data * Added the ability to include path in nasm * Print env variables
Diffstat (limited to 'src/elfs')
| -rw-r--r-- | src/elfs/elfloader.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 14694313..7cc6b490 100644 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -296,7 +296,8 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) head->multiblocks[n].paddr = e->p_paddr + offs; head->multiblocks[n].size = e->p_filesz; head->multiblocks[n].align = e->p_align; - uint8_t prot = ((e->p_flags & PF_R)?PROT_READ:0)|((e->p_flags & PF_W)?PROT_WRITE:0)|((e->p_flags & PF_X)?PROT_EXEC:0); + // HACK: Mark all the code pages writable in unittest mode because some tests mix code and (writable) data... + uint8_t prot = ((e->p_flags & PF_R)?PROT_READ:0)|(((e->p_flags & PF_W) || box64_unittest_mode)?PROT_WRITE:0)|((e->p_flags & PF_X)?PROT_EXEC:0); // check if alignment is correct uintptr_t balign = head->multiblocks[n].align-1; if (balign < (box64_pagesize - 1)) balign = box64_pagesize - 1; @@ -313,7 +314,7 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) if(e->p_align<box64_pagesize) try_mmap = 0; if(try_mmap) { - printf_dump(log_level, "Mmaping 0x%lx(0x%lx) bytes @%p for Elf \"%s\"\n", head->multiblocks[n].size, head->multiblocks[n].asize, (void*)head->multiblocks[n].paddr, head->name); + printf_dump(log_level, "Mmaping 0x%lx(0x%lx) bytes @%p with prot %x for Elf \"%s\"\n", head->multiblocks[n].size, head->multiblocks[n].asize, (void*)head->multiblocks[n].paddr, prot, head->name); void* p = InternalMmap( (void*)head->multiblocks[n].paddr, head->multiblocks[n].size, |