From e6a9d939ed5e9f89e69efdacc60a1ce6edd1061c Mon Sep 17 00:00:00 2001 From: Fabian Imhof Date: Sat, 15 Mar 2025 12:38:11 +0000 Subject: temporarily make all page table entries user accessible --- arch/x86_64/src/memory/paging/page_entry.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'arch/x86_64/src/memory/paging') 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; } -- cgit v1.2.3