aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory/multiboot
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2024-11-02 11:49:38 +0000
committerMatteo Gmür <matteo.gmuer1@ost.ch>2024-11-02 11:49:38 +0000
commit5ffe7d69545bf098efdd70f105a5df83304b211a (patch)
tree52172b6cefe76644e7348f280a289ab52d974d14 /arch/x86_64/src/memory/multiboot
parentd488a0709c5a2701482130a3d9c972c0b468a1d2 (diff)
downloadteachos-5ffe7d69545bf098efdd70f105a5df83304b211a.tar.xz
teachos-5ffe7d69545bf098efdd70f105a5df83304b211a.zip
Add physical frame iterator and continue implementing kernel mapping.
Diffstat (limited to 'arch/x86_64/src/memory/multiboot')
-rw-r--r--arch/x86_64/src/memory/multiboot/reader.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/arch/x86_64/src/memory/multiboot/reader.cpp b/arch/x86_64/src/memory/multiboot/reader.cpp
index c3a78df..e35baf3 100644
--- a/arch/x86_64/src/memory/multiboot/reader.cpp
+++ b/arch/x86_64/src/memory/multiboot/reader.cpp
@@ -34,8 +34,9 @@ namespace teachos::arch::memory::multiboot
end_area = begin_area + number_of_entries;
}
- auto process_elf_sections(elf_symbols_section_header * symbol, uint64_t & kernel_start,
- uint64_t & kernel_end) -> void
+ auto process_elf_sections(elf_symbols_section_header * symbol, std::size_t & kernel_start, std::size_t & kernel_end,
+ elf_section_header_container::iterator & begin_kernel,
+ elf_section_header_container::iterator & end_kernel) -> void
{
auto const expected_entry_size = symbol->entry_size;
auto constexpr actual_entry_size = sizeof(elf_section_header);
@@ -49,12 +50,12 @@ namespace teachos::arch::memory::multiboot
exception_handling::assert(expected_total_size == actual_total_size,
"[Multiboot Reader] Unexpected elf symbols section header total size");
- auto const begin = elf_section_header_container::iterator{reinterpret_cast<elf_section_header *>(&symbol->end)};
- auto const end = begin + symbol->number_of_sections;
- exception_handling::assert(begin->is_null(),
+ begin_kernel = elf_section_header_container::iterator{reinterpret_cast<elf_section_header *>(&symbol->end)};
+ end_kernel = begin_kernel + symbol->number_of_sections;
+ exception_handling::assert(begin_kernel->is_null(),
"[Multiboot Reader] Elf symbols section not starting with SHT_NULL section");
- elf_section_header_container container{begin, end};
+ elf_section_header_container container{begin_kernel, end_kernel};
auto const elf_section_with_lowest_virtual_address =
std::ranges::min_element(container, [](elf_section_header const & a, elf_section_header const & b) {
@@ -93,6 +94,8 @@ namespace teachos::arch::memory::multiboot
{
memory_information mem_info{UINT64_MAX,
0U,
+ elf_section_header_container::iterator{},
+ elf_section_header_container::iterator{},
boot::multiboot_information_pointer,
0U,
memory_area_container::iterator{},
@@ -108,7 +111,8 @@ namespace teachos::arch::memory::multiboot
{
case tag_type::ELF_SECTIONS: {
auto const symbol = reinterpret_cast<elf_symbols_section_header *>(tag);
- process_elf_sections(symbol, mem_info.kernel_start, mem_info.kernel_end);
+ process_elf_sections(symbol, mem_info.kernel_start, mem_info.kernel_end, mem_info.begin_kernel,
+ mem_info.end_kernel);
break;
}
case tag_type::MEMORY_MAP: {