From 0ca0c40c197c214288ad2ed1179ae9ae28c50194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matteo=20Gm=C3=BCr?= Date: Mon, 11 Nov 2024 14:16:18 +0000 Subject: Improve calculation of kernel end and start address. --- arch/x86_64/src/memory/multiboot/reader.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'arch/x86_64/src/memory/multiboot') diff --git a/arch/x86_64/src/memory/multiboot/reader.cpp b/arch/x86_64/src/memory/multiboot/reader.cpp index 1dd18ff..2bf5b25 100644 --- a/arch/x86_64/src/memory/multiboot/reader.cpp +++ b/arch/x86_64/src/memory/multiboot/reader.cpp @@ -6,6 +6,7 @@ #include "arch/memory/multiboot/info.hpp" #include +#include namespace teachos::arch::memory::multiboot { @@ -56,11 +57,15 @@ namespace teachos::arch::memory::multiboot elf_section_header_container sections{begin, end}; + auto allocated_sections = sections | std::views::filter([](auto const & section) { + return section.flags.contains_flags(elf_section_flags::OCCUPIES_MEMORY); + }); + auto const elf_section_with_lowest_physical_address = std::ranges::min_element( - sections, [](auto const & a, auto const & b) { return a.physical_address < b.physical_address; }); + allocated_sections, [](auto const & a, auto const & b) { return a.physical_address < b.physical_address; }); auto const elf_section_with_highest_physical_address = - std::ranges::max_element(sections, [](auto const & a, auto const & b) { + std::ranges::max_element(allocated_sections, [](auto const & a, auto const & b) { auto a_physical_address_end = a.physical_address + a.section_size; auto b_physical_address_end = b.physical_address + b.section_size; return a_physical_address_end < b_physical_address_end; -- cgit v1.2.3