From 19d981c87805bbe7e233dcfe03994b35558400b6 Mon Sep 17 00:00:00 2001 From: Liam Kerr Date: Wed, 11 Feb 2026 00:12:14 +0000 Subject: [PATCH] zeroing bss and changing init ordering --- src/kernel/kernel.c | 11 +++++------ src/kernel/memory.c | 13 ++++++++++++- src/kernel/memory.h | 1 + 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 06c3c87..1d935c3 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -8,14 +8,13 @@ void kmain() { - kputs("----------------------"); - kprintf("Hello, from %s!", "SquidgeOS"); - kputs("----------------------"); - knewline(); + zero_bss(); plic_init(); uart_init(); page_init(); interrupt_init(); - - kpanic_force(); + kputs("----------------------"); + kprintf("Hello, from %s!", "SquidgeOS"); + kputs("----------------------"); + knewline(); } diff --git a/src/kernel/memory.c b/src/kernel/memory.c index 6706f1b..13b0b9b 100644 --- a/src/kernel/memory.c +++ b/src/kernel/memory.c @@ -2,16 +2,27 @@ #include #include "drivers/uart.h" #include "memory.h" +#include "lib/string.h" #include "interrupts.h" static struct Page *free_list = NULL; HeapHeader *heap_free_list; -extern uint8_t _heap_start[]; // named in the linker script + +// named in the linker script +extern uint8_t _heap_start[]; +extern uint8_t _bss_start[]; +extern uint8_t _bss_end[]; + +void zero_bss() +{ + memset(_bss_start, 0, (size_t)_bss_end - (size_t)_bss_start); +} void page_init() { kprint("Initialising page allocator..."); + uintptr_t start = ((uintptr_t)_heap_start + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1); uintptr_t end = 0x88000000; // Default QEMU RAM limit diff --git a/src/kernel/memory.h b/src/kernel/memory.h index f607468..bd7cf90 100644 --- a/src/kernel/memory.h +++ b/src/kernel/memory.h @@ -16,6 +16,7 @@ typedef struct HeapHeader struct HeapHeader *prev; } HeapHeader; +void zero_bss(); void page_init(); void page_free(void *addr); void *page_alloc();