From 5317cb54b482655d97fc2083d14c3676627fa6d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gr=C3=A9goire?= Date: Mon, 5 Oct 2026 13:03:16 -0400 Subject: [PATCH] ke+loader: rework kernel entry oops, didn't test last commit on debug runs. Now this starts the kernel on its 16 kib stack. --- src/kern/init.zig | 10 ++++++++-- src/loader/main.zig | 4 +--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/kern/init.zig b/src/kern/init.zig index de7ceba..1af3798 100644 --- a/src/kern/init.zig +++ b/src/kern/init.zig @@ -1,3 +1,6 @@ +//! Kernel initialization. + +const config = @import("config"); const std = @import("std"); const r = @import("root"); const pl = r.pl; @@ -6,7 +9,6 @@ const arch = r.arch; const kep = ke.private; const ex = r.ex; const bv = r.bv; -const config = @import("config"); var thread0: ke.Thread = undefined; @@ -22,7 +24,7 @@ export fn kmain(boot_info: *r.BootInfo) callconv(.c) void { // Immediately initialize the context of what will eventually become // our idle thread. At this point we're already running on the kernel stack. thread0.init(.{ - .stack = boot_info.kernel_stack + boot_info.kernel_stack_size, + .stack = 0, .priority = .IdleThread, .entry = undefined, // Shouldn't block @@ -32,6 +34,10 @@ export fn kmain(boot_info: *r.BootInfo) callconv(.c) void { thread0.continuation = null; thread0.pinned = true; + thread0.context = .init_with_stack( + boot_info.kernel_stack + boot_info.kernel_stack_size, + ); + init(); } diff --git a/src/loader/main.zig b/src/loader/main.zig index 8d6315c..2b64ff4 100644 --- a/src/loader/main.zig +++ b/src/loader/main.zig @@ -81,8 +81,6 @@ fn cmp_entries(ctx: void, a: Entry, b: Entry) bool { return a.base < b.base; } -var bootstrap_stack: [4096]u8 = undefined; - pub fn loader_main(kernel: *anyopaque) void { r.arch.init(); r.mem.init(); @@ -105,6 +103,6 @@ pub fn loader_main(kernel: *anyopaque) void { jump_to_kernel( @intFromPtr(&r.loader_info), entry, - @intFromPtr(&bootstrap_stack) + bootstrap_stack.len, + stack + stack_size, ); }