tasking: add brk to process struct
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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,8 +102,8 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,6 +111,8 @@ void exec_from_file(const char* filename, const char* dirname)
|
|||||||
//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");
|
||||||
|
|
||||||
//TODO: i think this thing allocates more pages than needed
|
//TODO: i think this thing allocates more pages than needed
|
||||||
@@ -145,5 +149,8 @@ void exec_from_file(const char* filename, const char* dirname)
|
|||||||
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");
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user