From 48df965268e6f964bc608bd3ec3cab97e38ea4aa Mon Sep 17 00:00:00 2001 From: slinky55 Date: Wed, 1 Jul 2026 22:09:01 -0500 Subject: [PATCH] working on getting a unified stack setup for user and kernel tasks --- kernel/kmain.c | 5 ++--- kernel/scheduler.c | 10 +++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/kernel/kmain.c b/kernel/kmain.c index e58f9ee..fc0dcdd 100644 --- a/kernel/kmain.c +++ b/kernel/kmain.c @@ -129,10 +129,9 @@ void load_root_program(const char* path) { *(--u_esp) = 0; // argc = 0 create_task(e_hdr->e_entry, (uint32_t)cr3, 1, (uint32_t)u_esp); + load_pd((void*)kernel_cr3); flush_tlb(); - - kprintf("task created for origin program %s\n", path); } void kmain(uint32_t magic, multiboot_info* mbi) { @@ -168,10 +167,10 @@ void kmain(uint32_t magic, multiboot_info* mbi) { mount(vfs_root, initrd_root); kprintf("initrd read, mounted @ /\n"); + disable_interrupts(); init_scheduler(); enable_interrupts(); kprintf("loading origin program\n"); load_root_program("/origin.elf"); - yield(); } diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 021e58a..a5a9ac7 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -12,7 +12,7 @@ #include "gdt.h" static process_t* process_table; - + static int current_process = 0; static int total_processes = 0; @@ -138,6 +138,8 @@ int create_task(uint32_t entry_point, uint32_t cr3, int user, uint32_t u_esp) { *(--esp) = 0x23; } else { // IRET values for Ring 0 + *(--esp) = 0x23; // User Data Segment (SS) with RPL 3 (0x20 | 3) + *(--esp) = kstack_top; // User Stack Pointer (ESP) - location mapped in user space *(--esp) = 0x0202; // EFLAGS *(--esp) = 0x08; // Kernel Code Segment (CS) *(--esp) = entry_point; // EIP @@ -153,6 +155,12 @@ int create_task(uint32_t entry_point, uint32_t cr3, int user, uint32_t u_esp) { *(--esp) = 0; // ESI *(--esp) = 0; // EDI + if (user) { + *(--esp) = 0x23; // User Data Segment + } else { + *(--esp) = 0x10; // Kernel Data Segment + } + process->esp = (uint32_t)esp; if (!reuse) { total_processes++;