aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2025-05-05 11:27:29 +0000
committerMatteo Gmür <matteo.gmuer1@ost.ch>2025-05-05 11:27:29 +0000
commit7d2e8bc16e6c1bacb3c676d21ea2245d8132218f (patch)
treee43e0c3e43f0288cf721de56f0ac33aac9dddbc0 /arch/x86_64/src
parent27d4fb90ebbc754e98ff68ce5bc7839a44ed99c1 (diff)
downloadteachos-7d2e8bc16e6c1bacb3c676d21ea2245d8132218f.tar.xz
teachos-7d2e8bc16e6c1bacb3c676d21ea2245d8132218f.zip
Remove the addition of USER_ACCESSIBLE flag to every entry created
Diffstat (limited to 'arch/x86_64/src')
-rw-r--r--arch/x86_64/src/memory/main.cpp3
-rw-r--r--arch/x86_64/src/memory/paging/inactive_page_table.cpp2
-rw-r--r--arch/x86_64/src/memory/paging/page_entry.cpp10
-rw-r--r--arch/x86_64/src/memory/paging/temporary_page.cpp10
-rw-r--r--arch/x86_64/src/user/main.cpp12
5 files changed, 12 insertions, 25 deletions
diff --git a/arch/x86_64/src/memory/main.cpp b/arch/x86_64/src/memory/main.cpp
index bd094e0..4cccabb 100644
--- a/arch/x86_64/src/memory/main.cpp
+++ b/arch/x86_64/src/memory/main.cpp
@@ -31,7 +31,8 @@ namespace teachos::arch::memory
for (auto const & page : pages)
{
- active_table.map_page_to_next_free_frame(allocator, page, paging::entry::WRITABLE);
+ active_table.map_page_to_next_free_frame(allocator, page,
+ paging::entry::WRITABLE | paging::entry::USER_ACCESSIBLE);
}
}
} // namespace
diff --git a/arch/x86_64/src/memory/paging/inactive_page_table.cpp b/arch/x86_64/src/memory/paging/inactive_page_table.cpp
index 4e0610e..780f12c 100644
--- a/arch/x86_64/src/memory/paging/inactive_page_table.cpp
+++ b/arch/x86_64/src/memory/paging/inactive_page_table.cpp
@@ -14,7 +14,7 @@ namespace teachos::arch::memory::paging
{
auto table = temporary_page.map_table_frame(page_table_level_4_frame, active_page_table);
table.zero_entries();
- table[511].set_entry(page_table_level_4_frame, entry::PRESENT | entry::WRITABLE);
+ table[511].set_entry(page_table_level_4_frame, entry::PRESENT | entry::WRITABLE | entry::USER_ACCESSIBLE);
temporary_page.unmap_page(active_page_table);
}
} // namespace teachos::arch::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 3a0f03f..c76c673 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 | entry::USER_ACCESSIBLE) // TODO: Temporarily make all entries user accessible
+ : flags(flags)
{
// Nothing to do.
}
@@ -31,15 +31,14 @@ namespace teachos::arch::memory::paging
{
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; }
auto entry::set_unused() -> void { flags = 0U; }
+ auto entry::set_user_accesible() -> void { flags |= entry::USER_ACCESSIBLE; }
+
auto entry::calculate_pointed_to_frame() const -> std::optional<allocator::physical_frame>
{
if (contains_flags(PRESENT))
@@ -57,8 +56,7 @@ namespace teachos::arch::memory::paging
exception_handling::assert((frame.start_address() & ~PHYSICAL_ADDRESS_MASK) == 0,
"[Paging Entry] Start address is not aligned with page");
- // TODO: Temporarily make all entries user accessible
- flags = frame.start_address() | additional_flags.to_ulong() | entry::USER_ACCESSIBLE;
+ flags = frame.start_address() | additional_flags.to_ulong();
}
auto entry::get_flags() const -> std::bitset<64U> { return flags.to_ulong() & ~PHYSICAL_ADDRESS_MASK; }
diff --git a/arch/x86_64/src/memory/paging/temporary_page.cpp b/arch/x86_64/src/memory/paging/temporary_page.cpp
index 152241d..9946f36 100644
--- a/arch/x86_64/src/memory/paging/temporary_page.cpp
+++ b/arch/x86_64/src/memory/paging/temporary_page.cpp
@@ -4,21 +4,21 @@
namespace teachos::arch::memory::paging
{
- auto temporary_page::map_table_frame(allocator::physical_frame frame,
- active_page_table & active_table) -> page_table_handle
+ auto temporary_page::map_table_frame(allocator::physical_frame frame, active_page_table & active_table)
+ -> page_table_handle
{
page_table_handle handle{reinterpret_cast<page_table *>(map_to_frame(frame, active_table)),
page_table_handle::LEVEL1};
return handle;
}
- auto temporary_page::map_to_frame(allocator::physical_frame frame,
- active_page_table & active_table) -> virtual_address
+ auto temporary_page::map_to_frame(allocator::physical_frame frame, active_page_table & active_table)
+ -> virtual_address
{
exception_handling::assert(!active_table.translate_page(page).has_value(),
"[Temporary page] Page is already mapped");
- active_table.map_page_to_frame(allocator, page, frame, entry::WRITABLE);
+ active_table.map_page_to_frame(allocator, page, frame, entry::WRITABLE | entry::USER_ACCESSIBLE);
return page.start_address();
}
diff --git a/arch/x86_64/src/user/main.cpp b/arch/x86_64/src/user/main.cpp
index 1d56d2e..3ddcb32 100644
--- a/arch/x86_64/src/user/main.cpp
+++ b/arch/x86_64/src/user/main.cpp
@@ -10,18 +10,6 @@ namespace teachos::arch::user
[[gnu::section(".user_text")]]
auto main() -> void
{
- // TODO: Remove or replace this wall of text
- // RFLAGS is saved into R11, RIP of the next instruction into RCX
- // Required for SYSRETURN to know where to return too.
- // Additional state needs to be saved by calling convention:
-
- // Syscall Number: RAX, Return Value: RAX (0 indicating no error, and -1 indicating an error, use as a boolean)
- // Argument in this order (max 6. no argument on stack): RDI, RSI, RDX, R10, R8, R9
- // Not used registers: RBX, RSP, R12, R13, R14
-
- // Actual Source: https://man7.org/linux/man-pages/man2/syscall.2.html More cleare documentation:
- // https://sys.readthedocs.io/en/latest/doc/05_calling_system_calls.html
-
char constexpr syscall_message[] = "Successfully entered user mode and wrote to VGA buffer via syscall!";
auto const error = context_switching::syscall::syscall(context_switching::syscall::type::WRITE,
{reinterpret_cast<uint64_t>(&syscall_message)});