tasking: add brk to process struct
This commit is contained in:
@@ -53,6 +53,8 @@ void exec_from_file(const char* filename, const char* dirname)
|
||||
uint8_t* file;
|
||||
dir_t dir;
|
||||
|
||||
uint32_t bss_start, bss_end;
|
||||
|
||||
int result = read_file(filename, &file, &dir);
|
||||
//debug_log("result: %X\n", result);
|
||||
//debug_log("buffer: %s\n", file);
|
||||
@@ -100,14 +102,16 @@ void exec_from_file(const char* filename, const char* dirname)
|
||||
memcpy((void*)elf_phdr->p_vaddr, file+elf_phdr->p_offset, elf_phdr->p_filesz);
|
||||
|
||||
if (elf_phdr->p_memsz > elf_phdr->p_filesz) {
|
||||
uint32_t bss_start = elf_phdr->p_vaddr + elf_phdr->p_filesz;
|
||||
uint32_t bss_end = elf_phdr->p_vaddr + elf_phdr->p_memsz;
|
||||
bss_start = elf_phdr->p_vaddr + elf_phdr->p_filesz;
|
||||
bss_end = elf_phdr->p_vaddr + elf_phdr->p_memsz;
|
||||
memset((void*)bss_start, 0, bss_end - bss_start);
|
||||
}
|
||||
|
||||
//debug_log("p_filesz: 0x%X (%X)\n", elf_phdr->p_filesz, elf_phdr->p_filesz);
|
||||
//debug_log("================================\n\n\n\n");
|
||||
}
|
||||
|
||||
debug_log("BSS: %X - %X (%X)\n", bss_start, bss_end, DivRoundUp(bss_end+1, 0x1000));
|
||||
|
||||
debug_log("setting up the user stack...\n");
|
||||
|
||||
@@ -144,6 +148,9 @@ void exec_from_file(const char* filename, const char* dirname)
|
||||
set_page_dir(curr_pd_phys);
|
||||
Process* p_task1 = task_create(elf_ehdr->e_entry, USER_STACK_TOP, 3, proc_pd);
|
||||
*p_task1->cwd = dir;
|
||||
|
||||
uint32_t brk_address = DivRoundUp(bss_end+1, 0x1000)*0x1000;
|
||||
p_task1->brk = (void*)brk_address;
|
||||
|
||||
asm volatile("sti");
|
||||
}
|
||||
Reference in New Issue
Block a user