aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/src/memory/multiboot/reader.cpp22
-rw-r--r--arch/x86_64/src/memory/paging/page_entry.cpp2
-rw-r--r--arch/x86_64/src/memory/paging/virtual_page.cpp2
3 files changed, 12 insertions, 14 deletions
diff --git a/arch/x86_64/src/memory/multiboot/reader.cpp b/arch/x86_64/src/memory/multiboot/reader.cpp
index 545e517..c750ae1 100644
--- a/arch/x86_64/src/memory/multiboot/reader.cpp
+++ b/arch/x86_64/src/memory/multiboot/reader.cpp
@@ -55,20 +55,18 @@ namespace teachos::arch::memory::multiboot
for (auto section = begin; section != end; ++section)
{
+ if (section->virtual_address < kernel_start)
+ {
+ kernel_start = section->virtual_address;
+ }
+ auto virtual_address_end = section->virtual_address + section->section_size;
+ if (virtual_address_end > kernel_end)
+ {
+ kernel_end = virtual_address_end;
+ }
+
switch (section->type)
{
- case elf_section_type::PROGRAMM: {
- if (section->virtual_address < kernel_start)
- {
- kernel_start = section->virtual_address;
- }
- auto virtual_address_end = section->virtual_address + section->section_size;
- if (virtual_address_end > kernel_end)
- {
- kernel_end = virtual_address_end;
- }
- break;
- }
case elf_section_type::DYNAMIC_SYMBOL_TABLE:
case elf_section_type::SYMBOL_TABLE:
symbol_table_section_count++;
diff --git a/arch/x86_64/src/memory/paging/page_entry.cpp b/arch/x86_64/src/memory/paging/page_entry.cpp
index 09d048b..8b4aa36 100644
--- a/arch/x86_64/src/memory/paging/page_entry.cpp
+++ b/arch/x86_64/src/memory/paging/page_entry.cpp
@@ -19,7 +19,7 @@ namespace teachos::arch::memory::paging
if (contains_flags(PRESENT))
{
auto physical_address = calculate_physical_address();
- return allocator::physical_frame::containing_address(physical_address);
+ return allocator::physical_frame::containing_address(physical_address & 0x000ffffffffff000);
}
return std::nullopt;
}
diff --git a/arch/x86_64/src/memory/paging/virtual_page.cpp b/arch/x86_64/src/memory/paging/virtual_page.cpp
index 91f63b4..db0d96c 100644
--- a/arch/x86_64/src/memory/paging/virtual_page.cpp
+++ b/arch/x86_64/src/memory/paging/virtual_page.cpp
@@ -21,6 +21,6 @@ namespace teachos::arch::memory::paging
auto virtual_page::get_level_index(page_table_handle::level level) const -> size_t
{
- return (start_address() >> (level * 9U)) & 0x1FF;
+ return (page_number >> (level * 9U)) & 0x1FF;
}
} // namespace teachos::arch::memory::paging