1
0
Fork 0
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:
Stefan Lankes 2015-08-03 22:06:25 +02:00
parent 148f31fba4
commit f6aa000bd4
4 changed files with 17 additions and 4 deletions

8
.gitmodules vendored
View file

@ -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

View file

@ -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

@ -0,0 +1 @@
Subproject commit 103e1454982e711374d12cac05d48238f982a4ea

1
hermit/newlib/pte Submodule

@ -0,0 +1 @@
Subproject commit dd62610a3d3ca59b1034e73286a7d3f5903b0bee