summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp')
-rw-r--r--Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp34
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