From f96b8ad1ee83dec08ae636e179cc48019ca50b12 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sat, 10 Apr 2021 15:25:27 +0200 Subject: Some changes here and there --- kernel/features/load.c | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) (limited to 'kernel/features/load.c') 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; } -- cgit v1.2.3