aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src')
-rw-r--r--arch/x86_64/src/kernel/main.cpp4
-rw-r--r--arch/x86_64/src/memory/multiboot/reader.cpp9
2 files changed, 10 insertions, 3 deletions
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
index ea1a157..f9b252d 100644
--- a/arch/x86_64/src/kernel/main.cpp
+++ b/arch/x86_64/src/kernel/main.cpp
@@ -25,9 +25,11 @@ namespace teachos::arch::kernel
memory::cpu::set_efer_bit(memory::cpu::efer_flags::NXE);
memory::paging::kernel_mapper kernel(allocator, memory_information);
- kernel.remap_kernel();
+ auto & active_table = kernel.remap_kernel();
video::vga::text::write("Kernel remapping successfull", video::vga::text::common_attributes::green_on_black);
+ // TODO: Map heap virtual pages with active table
+
/*
size_t address = 42 * memory::paging::PAGE_TABLE_ENTRY_COUNT * memory::paging::PAGE_TABLE_ENTRY_COUNT *
memory::allocator::PAGE_FRAME_SIZE; // 42th P3 entry
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 <algorithm>
+#include <ranges>
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;