From 4d4e23116284f41329ea809e2bda86feea1b325c Mon Sep 17 00:00:00 2001 From: Fabian Imhof Date: Sun, 4 May 2025 10:51:12 +0000 Subject: fix returning from syscall --- arch/x86_64/src/context_switching/main.cpp | 3 ++- arch/x86_64/src/context_switching/syscall/syscall_handler.cpp | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/x86_64/src/context_switching/main.cpp b/arch/x86_64/src/context_switching/main.cpp index 7fe159e..6c6ec1a 100644 --- a/arch/x86_64/src/context_switching/main.cpp +++ b/arch/x86_64/src/context_switching/main.cpp @@ -27,6 +27,7 @@ namespace teachos::arch::context_switching auto user_mode_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: @@ -38,7 +39,7 @@ namespace teachos::arch::context_switching // 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 - const char syscall_message[32] = "Successfully entered user mode!"; + const char syscall_message[68] = "Successfully entered user mode and wrote to VGA buffer via syscall!"; auto error = syscall::syscall(syscall::WRITE, {reinterpret_cast(&syscall_message)}); if (!error) diff --git a/arch/x86_64/src/context_switching/syscall/syscall_handler.cpp b/arch/x86_64/src/context_switching/syscall/syscall_handler.cpp index f6e1c9e..759a092 100644 --- a/arch/x86_64/src/context_switching/syscall/syscall_handler.cpp +++ b/arch/x86_64/src/context_switching/syscall/syscall_handler.cpp @@ -12,6 +12,7 @@ namespace teachos::arch::context_switching::syscall { video::vga::text::write(reinterpret_cast(buffer), video::vga::text::common_attributes::green_on_black); + video::vga::text::newline(); } } // namespace @@ -62,7 +63,8 @@ namespace teachos::arch::context_switching::syscall : [input] "m"(rflags) : "memory"); - asm volatile("sysretq"); + asm volatile("leave\n" + "sysretq"); } } // namespace teachos::arch::context_switching::syscall \ No newline at end of file -- cgit v1.2.3