mirror of
https://github.com/hermitcore/libhermit.git
synced 2025-03-09 00:00:03 +01:00
align address of the program segments to the page boundary
This commit is contained in:
parent
148f31fba4
commit
f6aa000bd4
4 changed files with 17 additions and 4 deletions
8
.gitmodules
vendored
8
.gitmodules
vendored
|
@ -2,3 +2,11 @@
|
|||
path = linux
|
||||
url = git@github.com:RWTH-OS/linux.git
|
||||
branch = hermit
|
||||
[submodule "hermit/newlib/pte"]
|
||||
path = hermit/newlib/pte
|
||||
url = git@github.com:RWTH-OS/pthread-embeded.git
|
||||
branch = hermit
|
||||
[submodule "hermit/newlib/gcc"]
|
||||
path = hermit/newlib/gcc
|
||||
url = git@github.com:RWTH-OS/gcc.git
|
||||
branch = gcc-5-branch
|
||||
|
|
|
@ -198,8 +198,9 @@ static int load_task(load_args_t* largs)
|
|||
if (!prog_header.virt_addr)
|
||||
continue;
|
||||
|
||||
npages = (prog_header.mem_size >> PAGE_BITS);
|
||||
if (prog_header.mem_size & (PAGE_SIZE-1))
|
||||
npages = (prog_header.virt_addr + prog_header.mem_size) - (prog_header.virt_addr & ~(PAGE_SIZE-1));
|
||||
npages = (npages >> PAGE_BITS);
|
||||
if ((prog_header.virt_addr + prog_header.mem_size) & (PAGE_SIZE-1))
|
||||
npages++;
|
||||
|
||||
addr = get_pages(npages);
|
||||
|
@ -214,14 +215,14 @@ static int load_task(load_args_t* largs)
|
|||
flags |= PG_XD;
|
||||
|
||||
// map page frames in the address space of the current task
|
||||
if (page_map(prog_header.virt_addr, addr, npages, flags|PG_RW)) {
|
||||
if (page_map(prog_header.virt_addr & ~(PAGE_SIZE-1), addr, npages, flags|PG_RW)) {
|
||||
kprintf("Could not map 0x%x at 0x%x\n", addr, prog_header.virt_addr);
|
||||
ret = -ENOMEM;
|
||||
goto Lerr;
|
||||
}
|
||||
|
||||
// clear pages
|
||||
memset((void*) prog_header.virt_addr, 0x00, npages*PAGE_SIZE);
|
||||
memset((void*) (prog_header.virt_addr & ~(PAGE_SIZE-1)), 0x00, npages*PAGE_SIZE);
|
||||
|
||||
// update heap location
|
||||
if (heap < prog_header.virt_addr + prog_header.mem_size)
|
||||
|
@ -281,6 +282,8 @@ static int load_task(load_args_t* largs)
|
|||
flags |= VMA_EXECUTE;
|
||||
vma_add(stack, stack+npages*PAGE_SIZE-1, flags);
|
||||
break;
|
||||
default:
|
||||
kprintf("Unknown type 0x%lx in program header\n", prog_header.type);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
1
hermit/newlib/gcc
Submodule
1
hermit/newlib/gcc
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 103e1454982e711374d12cac05d48238f982a4ea
|
1
hermit/newlib/pte
Submodule
1
hermit/newlib/pte
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit dd62610a3d3ca59b1034e73286a7d3f5903b0bee
|
Loading…
Add table
Reference in a new issue