From 43ae417266c3127bbae35527c95c26e01ed50bd9 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 29 Mar 2024 19:16:19 +0100 Subject: 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 --- .../HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp | 34 ++++++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp') 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 #include +/// @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 -- cgit v1.2.3