diff options
Diffstat (limited to 'Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp')
| -rw-r--r-- | Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp b/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp index 9ac3f3e1..e87459ac 100644 --- a/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp +++ b/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp @@ -8,6 +8,8 @@ #include <KernelKit/ProcessScheduler.hpp> #include <NewKit/String.hpp> +/// @brief Handle GPF fault. +/// @param rsp EXTERN_C void idt_handle_gpf(NewOS::UIntPtr rsp) { MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent()); @@ -21,6 +23,8 @@ EXTERN_C void idt_handle_gpf(NewOS::UIntPtr rsp) { NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash(); } +/// @brief Handle the scheduler interrupt, raised from the HPET timer. +/// @param rsp EXTERN_C void idt_handle_scheduler(NewOS::UIntPtr rsp) { NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp); @@ -35,10 +39,11 @@ EXTERN_C void idt_handle_scheduler(NewOS::UIntPtr rsp) { } } +/// @brief Handle page fault. +/// @param rsp EXTERN_C void idt_handle_pf(NewOS::UIntPtr rsp) { - NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp); - MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent()); + NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp); NewOS::kcout << "NewKernel.exe: Segmentation Fault, caused by " @@ -47,10 +52,11 @@ EXTERN_C void idt_handle_pf(NewOS::UIntPtr rsp) { NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash(); } +/// @brief Handle math fault. +/// @param rsp EXTERN_C void idt_handle_math(NewOS::UIntPtr rsp) { - NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp); - MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent()); + NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp); NewOS::kcout << "NewKernel.exe: Math error, caused by " @@ -59,10 +65,11 @@ EXTERN_C void idt_handle_math(NewOS::UIntPtr rsp) { NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash(); } +/// @brief Handle any generic fault. +/// @param rsp EXTERN_C void idt_handle_generic(NewOS::UIntPtr rsp) { - NewOS::kcout << NewOS::StringBuilder::FromInt("sp{%}", rsp); - MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent()); + NewOS::kcout << NewOS::StringBuilder::FromInt("sp{%}", rsp); NewOS::kcout << "NewKernel.exe: Execution error, caused by " @@ -70,3 +77,18 @@ EXTERN_C void idt_handle_generic(NewOS::UIntPtr rsp) { NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash(); } + +/// @brief Handle #UD fault. +/// @param rsp +EXTERN_C void idt_handle_ud(NewOS::UIntPtr rsp) { + MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent()); + + NewOS::kcout << "NewKernel.exe: Stack Pointer: " + << NewOS::StringBuilder::FromInt("rsp{%}", rsp); + + NewOS::kcout + << "NewKernel.exe: Invalid interrupt, caused by " + << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName(); + + NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash(); +}
\ No newline at end of file |
