From 5a8c9d2f2e4a3d2810f81c35070c6ef0926cfdd1 Mon Sep 17 00:00:00 2001 From: Fabian Imhof Date: Sat, 3 May 2025 09:45:45 +0000 Subject: write wrapper function for syscall --- .../arch/context_switching/syscall/main.hpp | 28 ++++++++++++++++++++++ .../context_switching/syscall/syscall_handler.hpp | 23 ++++++++++++++++++ .../generic_interrupt_handler.hpp | 8 ------- 3 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 arch/x86_64/include/arch/context_switching/syscall/main.hpp create mode 100644 arch/x86_64/include/arch/context_switching/syscall/syscall_handler.hpp (limited to 'arch/x86_64/include') diff --git a/arch/x86_64/include/arch/context_switching/syscall/main.hpp b/arch/x86_64/include/arch/context_switching/syscall/main.hpp new file mode 100644 index 0000000..c75268a --- /dev/null +++ b/arch/x86_64/include/arch/context_switching/syscall/main.hpp @@ -0,0 +1,28 @@ +#ifndef TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_MAIN_HPP +#define TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_MAIN_HPP + +#include "arch/context_switching/syscall/syscall_handler.hpp" + +#include +#include +#include + +namespace teachos::arch::context_switching::syscall +{ + struct arguments + { + uint64_t arg_0{}; + uint64_t arg_1{}; + uint64_t arg_2{}; + uint64_t arg_3{}; + uint64_t arg_4{}; + uint64_t arg_5{}; + }; + + auto enable_syscall() -> void; + + auto syscall(type syscall_number, arguments args = {}) -> uint64_t; + +} // namespace teachos::arch::context_switching::syscall + +#endif // TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_MAIN_HPP diff --git a/arch/x86_64/include/arch/context_switching/syscall/syscall_handler.hpp b/arch/x86_64/include/arch/context_switching/syscall/syscall_handler.hpp new file mode 100644 index 0000000..e076995 --- /dev/null +++ b/arch/x86_64/include/arch/context_switching/syscall/syscall_handler.hpp @@ -0,0 +1,23 @@ +#ifndef TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_SYSCALL_HANDLER_HPP +#define TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_SYSCALL_HANDLER_HPP + +#include + +namespace teachos::arch::context_switching::syscall +{ + enum type : uint64_t + { + WRITE = 1U + }; + + /** + * @brief Handler for SYSCALL instruction. Calls a specific implementation based + * on the register RAX. + * + * @return Returns with SYSRETQ + */ + auto syscall_handler() -> void; + +} // namespace teachos::arch::context_switching::syscall + +#endif // TEACHOS_ARCH_X86_64_CONTEXT_SWITCHING_SYSCALL_SYSCALL_HANDLER_HPP diff --git a/arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp b/arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp index 866d15d..8091a58 100644 --- a/arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp +++ b/arch/x86_64/include/arch/interrupt_handling/generic_interrupt_handler.hpp @@ -29,14 +29,6 @@ namespace teachos::arch::interrupt_handling [[gnu::interrupt]] [[gnu::section(".interrupt_text")]] auto generic_interrupt_handler(interrupt_frame * frame) -> void; - /** - * @brief Interrupt handler function for syscalls (INT 0x80). - * - * @param frame Pointer to the interrupt frame containing CPU state. - */ - [[gnu::interrupt]] [[gnu::section(".interrupt_text")]] - auto syscall_interrupt_handler(interrupt_frame * frame) -> void; - } // namespace teachos::arch::interrupt_handling #endif // TEACHOS_ARCH_X86_64_INTERRUPT_HANDLING_GENERIC_INTERRUPT_HANDLER_HPP -- cgit v1.2.3