diff options
Diffstat (limited to 'arch/x86_64/include')
3 files changed, 51 insertions, 8 deletions
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 <array> +#include <cstdint> +#include <optional> + +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 <cstdint> + +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 |
