diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2025-12-10 16:51:44 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2025-12-10 16:51:44 +0100 |
| commit | b9d445bf92725d79269becf978059e040519c00a (patch) | |
| tree | 768eb7158b8a106a2577d87661cde1a4e5ee108a /arch/x86_64/src/memory/page_table.cpp | |
| parent | 448a79328544e3ecb72d0b3b95c0b9b0d49faafc (diff) | |
| download | kernel-b9d445bf92725d79269becf978059e040519c00a.tar.xz kernel-b9d445bf92725d79269becf978059e040519c00a.zip | |
x86_64/memory: implement simple kernel remapper
Diffstat (limited to 'arch/x86_64/src/memory/page_table.cpp')
| -rw-r--r-- | arch/x86_64/src/memory/page_table.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86_64/src/memory/page_table.cpp b/arch/x86_64/src/memory/page_table.cpp index 60bf94d..e797b22 100644 --- a/arch/x86_64/src/memory/page_table.cpp +++ b/arch/x86_64/src/memory/page_table.cpp @@ -1,6 +1,7 @@ #include "x86_64/memory/page_table.hpp" #include <algorithm> +#include <utility> namespace teachos::memory::x86_64 { @@ -25,6 +26,18 @@ namespace teachos::memory::x86_64 return std::bit_cast<flags>(m_raw & ~frame_number_mask); } + auto page_table::entry::all_flags(flags flags) -> void + { + m_raw = (m_raw & ~frame_number_mask) | std::to_underlying(flags); + } + + auto page_table::entry::operator|=(flags rhs) -> page_table::entry & + { + auto raw_flags = std::to_underlying(rhs) & ~frame_number_mask; + m_raw |= raw_flags; + return *this; + } + auto page_table::entry::frame() const -> std::optional<struct frame> { if (present()) |
