diff options
author | Marvin Borner | 2021-04-10 15:25:27 +0200 |
---|---|---|
committer | Marvin Borner | 2021-04-10 15:25:27 +0200 |
commit | f96b8ad1ee83dec08ae636e179cc48019ca50b12 (patch) | |
tree | 80ff605e1305673291ce6230941db7ed4229856d /kernel/features/load.c | |
parent | 9655593d80e23d2ea3c091e3187e8e47b278bc3d (diff) |
Some changes here and there
Diffstat (limited to 'kernel/features/load.c')
-rw-r--r-- | kernel/features/load.c | 28 |
1 files changed, 8 insertions, 20 deletions
diff --git a/kernel/features/load.c b/kernel/features/load.c index 02c02ae..77bb680 100644 --- a/kernel/features/load.c +++ b/kernel/features/load.c @@ -157,33 +157,21 @@ res elf_load(const char *name, struct proc *proc) memory_backup_dir(&prev); memory_switch_dir(proc->page_dir); - stac(); - // Allocate user stack with readonly lower and upper page boundary - u32 user_stack = - PAGE_SIZE + (u32)memory_alloc(proc->page_dir, PROC_STACK_SIZE + 2 * PAGE_SIZE, - MEMORY_USER | MEMORY_CLEAR); - virtual_remap_readonly(proc->page_dir, memory_range(user_stack - PAGE_SIZE, PAGE_SIZE)); - virtual_remap_readonly(proc->page_dir, - memory_range(user_stack + PROC_STACK_SIZE, PAGE_SIZE)); + u32 user_stack = (u32)memory_alloc_with_boundary(proc->page_dir, PROC_STACK_SIZE, + MEMORY_CLEAR | MEMORY_USER); // Allocate kernel stack with readonly lower and upper page boundary u32 kernel_stack = - PAGE_SIZE + - (u32)memory_alloc(proc->page_dir, PROC_STACK_SIZE + 2 * PAGE_SIZE, MEMORY_CLEAR); - virtual_remap_readonly(proc->page_dir, memory_range(kernel_stack - PAGE_SIZE, PAGE_SIZE)); - virtual_remap_readonly(proc->page_dir, - memory_range(kernel_stack + PROC_STACK_SIZE, PAGE_SIZE)); - - proc->user_stack = user_stack + PROC_STACK_SIZE; - proc->kernel_stack = kernel_stack + PROC_STACK_SIZE; - proc->regs.ebp = proc->user_stack; - proc->regs.useresp = proc->user_stack; + (u32)memory_alloc_with_boundary(proc->page_dir, PROC_STACK_SIZE, MEMORY_CLEAR); + + proc->stack.user = user_stack + PROC_STACK_SIZE; + proc->stack.kernel = kernel_stack + PROC_STACK_SIZE; + proc->regs.ebp = proc->stack.user; + proc->regs.useresp = proc->stack.user; proc->regs.eip = header.entry + rand_off; proc->entry = header.entry + rand_off; - clac(); - memory_switch_dir(prev); return EOK; } |