summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-29 19:16:19 +0100
committerAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-29 19:16:19 +0100
commit43ae417266c3127bbae35527c95c26e01ed50bd9 (patch)
treeefbbaa92ab7e11a69bd295cba7da65f487572836 /Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
parent7e5be1572c043484293ee0cdd840dd41f54e87ee (diff)
Kernel: See below.
- Add HPET header. - Add note for ApplicationRef. - Update PowerPC and x86 Stackframes. - Add #UD handler inside interrupt descriptor in x86. Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
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