From c18bd3b4ac42a00d1244dae4ca9b5c1ee9fc449a Mon Sep 17 00:00:00 2001 From: user Date: Sun, 22 Feb 2026 20:13:38 +0100 Subject: [PATCH] iterating over getModule in case we have more than 1 module --- kernel/memory/pageframealloc.cc | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/kernel/memory/pageframealloc.cc b/kernel/memory/pageframealloc.cc index 006ae41..fad2955 100644 --- a/kernel/memory/pageframealloc.cc +++ b/kernel/memory/pageframealloc.cc @@ -51,20 +51,28 @@ void PageFrameAllocator::init(){ //mark as unavailable memory_map_entry = memory_map_start; while(memory_map_entry != 0){ - uintptr_t start = (uintptr_t)memory_map_entry->getStartAddress(); - uintptr_t end = (uintptr_t)memory_map_entry->getEndAddress(); - bool available = memory_map_entry->isAvailable(); + uintptr_t start = (uintptr_t)memory_map_entry->getStartAddress(); + uintptr_t end = (uintptr_t)memory_map_entry->getEndAddress(); + bool available = memory_map_entry->isAvailable(); - if(!available) - mark_pageframes(start, end, false); + if(!available) + mark_pageframes(start, end, false); - memory_map_entry = memory_map_entry->getNext(); + memory_map_entry = memory_map_entry->getNext(); } - Multiboot::Module* mod = Multiboot::getModule(0); + for (size_t i = 0; i < Multiboot::getModuleCount(); ++i) { + Multiboot::Module* mod = Multiboot::getModule(i); + if (!mod) continue; + + mark_pageframes((uintptr_t)mod, (uintptr_t)mod + 1, false); + mark_pageframes((uintptr_t)mod->getStartAddress(), + (uintptr_t)mod->getEndAddress(), + false); + } + + - mark_pageframes((uintptr_t)mod, (uintptr_t)mod+1, false); - mark_pageframes((uintptr_t)mod->getStartAddress(), (uintptr_t)mod->getEndAddress(), false); //mark other known regions as unavailable mark_pageframes((uintptr_t)&___KERNEL_START___, (uintptr_t)&___KERNEL_END___, false);