aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory/page_table.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2025-12-10 16:51:44 +0100
committerFelix Morgner <felix.morgner@ost.ch>2025-12-10 16:51:44 +0100
commitb9d445bf92725d79269becf978059e040519c00a (patch)
tree768eb7158b8a106a2577d87661cde1a4e5ee108a /arch/x86_64/src/memory/page_table.cpp
parent448a79328544e3ecb72d0b3b95c0b9b0d49faafc (diff)
downloadkernel-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.cpp13
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())