From ddb3cc2deee1b73663aa061f56c6e380483e0812 Mon Sep 17 00:00:00 2001 From: Natasha Moongrave Date: Mon, 30 Mar 2026 14:44:25 +0200 Subject: add debug messages for heap and alloc in entry function --- StrixKernel/src/main.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/StrixKernel/src/main.rs b/StrixKernel/src/main.rs index 7351a4e..36df1be 100644 --- a/StrixKernel/src/main.rs +++ b/StrixKernel/src/main.rs @@ -28,6 +28,14 @@ use bootloader::{entry_point, BootInfo}; use core::panic::PanicInfo; use strix_os::println; +use x86_64::VirtAddr; +use strix_os::{ allocator, memory, memory::BootInfoFrameAllocator }; + +extern crate alloc; +use alloc::{ boxed::Box, rc::Rc, vec, vec::Vec }; + + + // Register kernel_main as the entry point. // The bootloader crate uses this macro to generate the actual entry point code // with the correct calling convention and stack setup. @@ -68,6 +76,32 @@ fn kernel_main(boot_info: &'static BootInfo) -> ! { // Initialize all kernel subsystems (GDT, IDT, PICs, enable interrupts) strix_os::init(); + let phys_mem_offset = VirtAddr::new(boot_info.physical_memory_offset); + let mut mapper = unsafe { memory::init(phys_mem_offset) }; + let mut frame_allocator = unsafe { BootInfoFrameAllocator::init(&boot_info.memory_map) }; + + allocator::init_heap(&mut mapper, &mut frame_allocator) + .expect("heap initialization failed"); + + + // allocate a number on the heap + let heap_value = Box::new(41); + println!("heap_value at {:p}", heap_value); + + // create a dynamically sized vector + let mut vec = Vec::new(); + for i in 0..500 { + vec.push(i); + } + println!("vec at {:p}", vec.as_slice()); + + // create a reference counted vector -> will be freed when count reaches 0 + let reference_counted = Rc::new(vec![1, 2, 3]); + let cloned_reference = reference_counted.clone(); + println!("current reference count is {}", Rc::strong_count(&cloned_reference)); + core::mem::drop(reference_counted); + println!("reference count is {} now", Rc::strong_count(&cloned_reference)); + // In test mode, run the test harness instead of normal operation #[cfg(test)] test_main(); -- cgit v1.2.3