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/memory/paging/page_entry.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86_64/src/memory/paging/page_entry.cpp b/arch/x86_64/src/memory/paging/page_entry.cpp
index 5aa0982..3a0f03f 100644
--- a/arch/x86_64/src/memory/paging/page_entry.cpp
+++ b/arch/x86_64/src/memory/paging/page_entry.cpp
@@ -10,7 +10,7 @@ namespace teachos::arch::memory::paging
} // namespace
entry::entry(uint64_t flags)
- : flags(flags)
+ : flags(flags | entry::USER_ACCESSIBLE) // TODO: Temporarily make all entries user accessible
{
// Nothing to do.
}
@@ -21,14 +21,19 @@ namespace teachos::arch::memory::paging
{
flags |= entry::PRESENT;
}
+
if (elf_flags.contains_flags(multiboot::elf_section_flags::WRITABLE))
{
flags |= entry::WRITABLE;
}
+
if (!elf_flags.contains_flags(multiboot::elf_section_flags::EXECUTABLE_CODE))
{
flags |= entry::EXECUTING_CODE_FORBIDDEN;
}
+
+ // TODO: Temporarily make all entries user accessible
+ flags |= entry::USER_ACCESSIBLE;
}
auto entry::is_unused() const -> bool { return flags == 0U; }
@@ -51,7 +56,9 @@ namespace teachos::arch::memory::paging
{
exception_handling::assert((frame.start_address() & ~PHYSICAL_ADDRESS_MASK) == 0,
"[Paging Entry] Start address is not aligned with page");
- flags = frame.start_address() | additional_flags.to_ulong();
+
+ // TODO: Temporarily make all entries user accessible
+ flags = frame.start_address() | additional_flags.to_ulong() | entry::USER_ACCESSIBLE;
}
auto entry::get_flags() const -> std::bitset<64U> { return flags.to_ulong() & ~PHYSICAL_ADDRESS_MASK; }