From df45ffe2ceafc6e9b513648daa84733ac02da9d8 Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Thu, 31 Jul 2025 17:02:56 +0300 Subject: [PATCH] tasking: add brk to process struct --- include/task.h | 2 ++ src/tasking/exec_from_file.c | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/task.h b/include/task.h index 8fdb46d..a56f01f 100644 --- a/include/task.h +++ b/include/task.h @@ -66,6 +66,8 @@ typedef struct Process file_t* file_descriptors[MAX_OPEN_FILES]; dir_t* cwd; + + void* brk; } Process; extern Process* current; diff --git a/src/tasking/exec_from_file.c b/src/tasking/exec_from_file.c index 9578b58..471bcf0 100644 --- a/src/tasking/exec_from_file.c +++ b/src/tasking/exec_from_file.c @@ -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"); } \ No newline at end of file