tasking: add brk to process struct

This commit is contained in:
2025-07-31 17:02:56 +03:00
parent 992d82c6d4
commit df45ffe2ce
2 changed files with 11 additions and 2 deletions
+2
View File
@@ -66,6 +66,8 @@ typedef struct Process
file_t* file_descriptors[MAX_OPEN_FILES]; file_t* file_descriptors[MAX_OPEN_FILES];
dir_t* cwd; dir_t* cwd;
void* brk;
} Process; } Process;
extern Process* current; extern Process* current;
+9 -2
View File
@@ -53,6 +53,8 @@ void exec_from_file(const char* filename, const char* dirname)
uint8_t* file; uint8_t* file;
dir_t dir; dir_t dir;
uint32_t bss_start, bss_end;
int result = read_file(filename, &file, &dir); int result = read_file(filename, &file, &dir);
//debug_log("result: %X\n", result); //debug_log("result: %X\n", result);
//debug_log("buffer: %s\n", file); //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); memcpy((void*)elf_phdr->p_vaddr, file+elf_phdr->p_offset, elf_phdr->p_filesz);
if (elf_phdr->p_memsz > 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; bss_start = elf_phdr->p_vaddr + elf_phdr->p_filesz;
uint32_t bss_end = elf_phdr->p_vaddr + elf_phdr->p_memsz; bss_end = elf_phdr->p_vaddr + elf_phdr->p_memsz;
memset((void*)bss_start, 0, bss_end - bss_start); 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("p_filesz: 0x%X (%X)\n", elf_phdr->p_filesz, elf_phdr->p_filesz);
//debug_log("================================\n\n\n\n"); //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"); 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); set_page_dir(curr_pd_phys);
Process* p_task1 = task_create(elf_ehdr->e_entry, USER_STACK_TOP, 3, proc_pd); Process* p_task1 = task_create(elf_ehdr->e_entry, USER_STACK_TOP, 3, proc_pd);
*p_task1->cwd = dir; *p_task1->cwd = dir;
uint32_t brk_address = DivRoundUp(bss_end+1, 0x1000)*0x1000;
p_task1->brk = (void*)brk_address;
asm volatile("sti"); asm volatile("sti");
} }