From 57aada680b37e6e185dd2ac5692f17720694af2e Mon Sep 17 00:00:00 2001 From: notsomeidiot123 Date: Sun, 17 Aug 2025 18:14:15 -0400 Subject: [PATCH] Fixed Module loader --- src/kernel/arch_i386/interrupts.c | 2 +- src/kernel/system/elf.c | 20 +++++++++++--------- src/kernel/system/modules.c | 3 ++- src/kmodules/disk_driver.c | 4 ++-- src/kmodules/fs_driver.c | 9 +++++++-- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/kernel/arch_i386/interrupts.c b/src/kernel/arch_i386/interrupts.c index 99ada79..767ba44 100644 --- a/src/kernel/arch_i386/interrupts.c +++ b/src/kernel/arch_i386/interrupts.c @@ -96,7 +96,7 @@ void _isr_handler(cpu_registers_t *regs){ printf("Error Code: %x\n", regs->pfa); if (regs->int_no == 14){ uint32_t cr2; - asm volatile("mov %%cr3, %%eax;mov %0, %%eax": "=r"(cr2)); + asm volatile("mov %%cr2, %%eax;mov %0, %%eax": "=r"(cr2)); printf("Address: %x", cr2); } for(;;); diff --git a/src/kernel/system/elf.c b/src/kernel/system/elf.c index 7ad1e61..7735ed7 100644 --- a/src/kernel/system/elf.c +++ b/src/kernel/system/elf.c @@ -9,7 +9,7 @@ char *flags[] = {"---", "X--", "-W-", "XW-", "--R", "X-R", "-WR", "XWR"}; void *load_segment(program_entry_t entry, void *file_data, void *base_segment, uint32_t map_flags){ // mlog("ELFLOAD", "p_addr: %d\n", MLOG_DEBUG, entry.paddr); - printf("Type: %x, Flags: %s, Vaddr: %x, Offset: %x, Size: %x, Align: %x\n", entry.type, flags[entry.flags], entry.vaddr, entry.data_offset, entry.msize, entry.alignment); + printf("Type: %x, Flags: %s, Vaddr: %x, Offset: %x, Size: %x, Align: %x\n", entry.type, flags[entry.flags], entry.paddr, entry.data_offset, entry.msize, entry.alignment); uint32_t *segment; uint32_t data_offset = ((elf_header_t *)file_data)->entry_offset; printf("Base: %x\n", base_segment); @@ -23,12 +23,12 @@ void *load_segment(program_entry_t entry, void *file_data, void *base_segment, u segment = base_segment + (entry.vaddr & 0xfffff000); uint32_t count = 1; count += ((entry.vaddr+entry.msize) - entry.vaddr) ? 1 : 0; - count += entry.msize/4096; - printf("count: %x\n", count); + count += entry.msize/4096 + 1; + // printf("count: %x\n", count); // for (;;); for(uint32_t i = 0; i < count; i++){ - map(segment + (i << 12), (void *)pm_alloc(), PT_PRESENT | map_flags); - printf("Mapping : %x\n", segment + (i << 12)); + map(segment + (i << 12)/4, (void *)pm_alloc(), PT_PRESENT | map_flags); + // printf("Mapping : %x\n", segment + (i << 12)/4); } } for(uint32_t i = 0; i < entry.fsize/sizeof(uint32_t) + 1; i++){ @@ -65,10 +65,12 @@ void *load_elf(void *file_data, uint32_t map_flags){ base_segment = load_segment(program_header[i], file_data, base_segment, map_flags); } // void (*vt)(void) = base_segment; - uint32_t (*vt)(uint32_t) = base_segment + 0x1000; + void (*vt)(uint32_t) = base_segment + header->entry_offset; // printf("%x", *vt); - uint32_t i = (*vt)(0); - printf("%x\n", i); - for(;;); + (*vt)(0); + // printf("%x\n", i); + // for(;;); // (*vt)(); + printf(":D\n"); + return 0; } \ No newline at end of file diff --git a/src/kernel/system/modules.c b/src/kernel/system/modules.c index 23bd760..97ee77f 100644 --- a/src/kernel/system/modules.c +++ b/src/kernel/system/modules.c @@ -8,6 +8,7 @@ void init_modules(kernel_info_t *kernel_info){ mlog(MODULE_NAME, "Initializing Boot-Time Modules\n", MLOG_PRINT); kernel_module_t *module = kernel_info->loaded_modules; + uint32_t i = 0; while(module){ if(!module->ptr){ continue; @@ -15,8 +16,8 @@ void init_modules(kernel_info_t *kernel_info){ // printf("Module Type: %x, Module Size (Bytes): %x, Ptr: %x\n", module->type, module->size, module->ptr); load_elf(module->ptr, 0); mlog(MODULE_NAME, "Loaded module of type %x\n", MLOG_PRINT, module->type); - module = module->link; // module->type |= 0x8000;//set present flag in type module->type |= MODULE_PRESENT; + module = module->link; } } \ No newline at end of file diff --git a/src/kmodules/disk_driver.c b/src/kmodules/disk_driver.c index 07ac4f2..c24b6bf 100644 --- a/src/kmodules/disk_driver.c +++ b/src/kmodules/disk_driver.c @@ -3,7 +3,7 @@ KOS_MAPI_FP api; -uint32_t init(KOS_MAPI_FP module_api){ +void init(KOS_MAPI_FP module_api){ uint16_t *t = (void *)0xb8000; *t = 0x0f41; api = module_api; @@ -11,5 +11,5 @@ uint32_t init(KOS_MAPI_FP module_api){ // (*t)++; // // asm volatile( " " ); // } - return &api; + return; } \ No newline at end of file diff --git a/src/kmodules/fs_driver.c b/src/kmodules/fs_driver.c index 9b1ff4c..9301809 100644 --- a/src/kmodules/fs_driver.c +++ b/src/kmodules/fs_driver.c @@ -1,11 +1,16 @@ #include +#include "modlib.h" -void init(){ +KOS_MAPI_FP api; + +void init(KOS_MAPI_FP module_api){ uint16_t *t = (void *)0xb8002; *t = 0x0f41; // for(int i = 0; i < 1000; i++){ // (*t)++; // // asm volatile( " " ); // } - for(;;); + // t = 0x50000000; + // *t = 1; + return; } \ No newline at end of file