From f466364b8a3858e7b3f19258d142851cb4a7e6d6 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Mon, 11 Aug 2025 19:04:26 -0400 Subject: remove _initData, replace with enum indexes --- arch/x86_64/usermode.c | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) (limited to 'arch/x86_64/usermode.c') diff --git a/arch/x86_64/usermode.c b/arch/x86_64/usermode.c index 66a641c..68cb45a 100644 --- a/arch/x86_64/usermode.c +++ b/arch/x86_64/usermode.c @@ -15,7 +15,7 @@ static uintptr_t s_new_mapping(objdir_t *untyped_dir) { objdir_entry_t *untyped_entry = NULL; - for(int i = 1; i < OBJECT_DIRECTORY_MAX_ENTRIES; i++) { + for(int i = untyped_dir->self.data - 1; i != 0; i--) { untyped_entry = &untyped_dir->entries[i]; if(untyped_entry->type != KO_MEMORY_UNTYPED) continue; uintptr_t mapping = 0; @@ -23,7 +23,7 @@ s_new_mapping(objdir_t *untyped_dir) if(err != 0) continue; return mapping; } - return 0; + kpanic("Could not allocate page for init\n"); } static pmle_t* @@ -97,22 +97,13 @@ init_load(void) kpanic("Init file not found in initrd. (expected \"%s\")", init_filename); } - size_t tcb_diri = _initDirectory.self.data++; - size_t message_diri = _initDirectory.self.data++; - - _initData.tcb_object = tcb_diri; - _initData.message_object = message_diri; - - _initDirectory.entries[tcb_diri] = (objdir_entry_t) { + _initDirectory.entries[INIT_OBJECT_TCB] = (objdir_entry_t) { .type = KO_TCB, .data = (uintptr_t)&s_init_tcb }; - size_t untyped_diri = _initData.untyped_data_dir; - objdir_t *untyped_dir = (objdir_t*)_initDirectory.entries[untyped_diri].data; - - size_t pml4_diri = _initData.pm_object; - pmle_t *pml4 = vmem_phys_tovirt(_initDirectory.entries[pml4_diri].data & ~3ULL); + objdir_t *untyped_dir = (objdir_t*)_initDirectory.entries[INIT_OBJECT_UNTYPED_DIR].data; + pmle_t *pml4 = vmem_phys_tovirt(_initDirectory.entries[INIT_OBJECT_PAGEMAP].data & ~3ULL); //Reserve and map pages for init binary size_t init_size = initrd_file_size(init_header); @@ -143,17 +134,14 @@ init_load(void) message_base += ((~(message_base & 0xFFF)) & 0xFFF) + 1; uintptr_t message_phys = s_map_page(pml4, untyped_dir, message_base); - _initDirectory.entries[message_diri] = (objdir_entry_t) { + _initDirectory.entries[INIT_OBJECT_MESSAGE] = (objdir_entry_t) { .type = KO_MESSAGE, .data = (uintptr_t)vmem_phys_tovirt(message_phys) }; - _initData.message_object_address = message_base; - //Write init data to user stack. - sp -= sizeof(init_data_t); - memcpy((void*)sp, &_initData, sizeof(init_data_t)); + //Write message address to user stack. sp -= sizeof(uintptr_t); - *((uintptr_t*)sp) = sp + sizeof(uintptr_t); + *((uintptr_t*)sp) = message_base; //Setup usermode and jump proc->tcb = &s_init_tcb; -- cgit v1.2.1