diff options
Diffstat (limited to 'arch/x86_64/proc/init.c')
| -rw-r--r-- | arch/x86_64/proc/init.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/arch/x86_64/proc/init.c b/arch/x86_64/proc/init.c index 3787c7b..155cff6 100644 --- a/arch/x86_64/proc/init.c +++ b/arch/x86_64/proc/init.c @@ -5,6 +5,7 @@ #include "jove.h" #include "hal/obj.h" #include "lib/string.h" +#include "sys/objdir.h" #include "panic/panic.h" #include "lib/printf.h" #include "arch/x86_64/lib/elf.h" @@ -50,7 +51,7 @@ init_setup(void) kpanic("Kernel commandline is missing 'init' arg.\n"); } - jove_owned_obj_t *initrd_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_INITRD_I); + jove_owned_obj_t *initrd_obj = objdir_getlocal(_rootdir_obj, INIT_ROOTDIR_INITRD_I); jove_owned_obj_t *init_obj = initrd_seek(initrd_obj, init_path); if(init_obj == NULL) { kpanic("init: Cannot find file '%s' in initrd.\n", init_path); @@ -69,7 +70,7 @@ init_setup(void) kpanic("init: Either passed file '%s' is not an ELF file or is not loadable.\n", init_path); } - jove_owned_obj_t *init_pagedir = objdir_getlocal(_rootdir_obj, ROOTDIR_PAGEDIR_I); + jove_owned_obj_t *init_pagedir = objdir_getlocal(_rootdir_obj, INIT_ROOTDIR_PAGEDIR_I); page_t *pml4 = obj_deref(init_pagedir); size_t last_base = 0; @@ -133,7 +134,7 @@ init_setup(void) memcpy((void*)last_base, &_init_payload, sizeof(struct init_payload)); - jove_owned_obj_t *message_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_MESSAGE_I); + jove_owned_obj_t *message_obj = objdir_getlocal(_rootdir_obj, INIT_ROOTDIR_MESSAGE_I); obj_settype(message_obj, JOVE_OBJ_MESSAGE); obj_setvalue(message_obj, last_base | 1); obj_release(message_obj); @@ -144,13 +145,9 @@ init_setup(void) extern void _syscall_entry(void); msr_set_lstar(_syscall_entry); - //Setup KSP for syscalls - jove_owned_obj_t *pcb_obj = process_current(); - pcb_t *pcb = obj_deref(pcb_obj); - - obj_release(pcb_obj); obj_release(_rootdir_obj); + //Setup KSP for syscalls uintptr_t usp = 0x00007FFFFFFFFFF8; uintptr_t uip = init_ehdr->e_entry; |
