diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-03-26 16:10:50 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-03-27 07:02:35 +0100 |
| commit | 8d06763f47e7b7c93af2a55f6bd2dbc4aa9abfa2 (patch) | |
| tree | b4da8395e2ba5dec565500b6b257a2091faeeb17 /kernel/kapi | |
| parent | d56700342ea0266a6e49f9515eb83279f66b4fcf (diff) | |
| download | teachos-8d06763f47e7b7c93af2a55f6bd2dbc4aa9abfa2.tar.xz teachos-8d06763f47e7b7c93af2a55f6bd2dbc4aa9abfa2.zip | |
kapi/cpu: simplify exception handling
Diffstat (limited to 'kernel/kapi')
| -rw-r--r-- | kernel/kapi/cpu.cpp | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/kernel/kapi/cpu.cpp b/kernel/kapi/cpu.cpp index 2089098..13de584 100644 --- a/kernel/kapi/cpu.cpp +++ b/kernel/kapi/cpu.cpp @@ -1,30 +1,35 @@ #include "kapi/cpu.hpp" +#include "kapi/system.hpp" + +#include <kstd/print> + namespace kapi::cpu { namespace { - struct null_exception_handler : exception_handler + auto handle_page_fault(kapi::cpu::exception const & context) -> bool { - auto handle(exception const &) -> bool override - { - return false; - } - } static constinit default_exception_handler; - - exception_handler * current_handler = &default_exception_handler; + kstd::println(kstd::print_sink::stderr, "\tFault address: {:#018x}", context.access_address); + kstd::println(kstd::print_sink::stderr, "\tPresent: {}", context.is_present); + kstd::println(kstd::print_sink::stderr, "\tWrite: {}", context.is_write_access); + kstd::println(kstd::print_sink::stderr, "\tUser: {}", context.is_user_mode); + kapi::system::panic("Halting the system due to an unrecoverable page fault."); + } } // namespace - auto get_exception_handler() -> exception_handler & + auto dispatch(exception const & context) -> bool { - return *current_handler; - } - - auto set_exception_handler(exception_handler & handler) -> void - { - current_handler = &handler; + kstd::println(kstd::print_sink::stderr, "[OS:CPU] {} @ {:#018x}", context.type, context.instruction_pointer); + switch (context.type) + { + case kapi::cpu::exception::type::page_fault: + return handle_page_fault(context); + default: + return false; + } } } // namespace kapi::cpu
\ No newline at end of file |
