summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-04-25 13:08:33 +0200
committerAmlal <amlal@nekernel.org>2025-04-25 13:08:33 +0200
commitfb790b07aeba8e22e4190cf3e1834d11ecde6c96 (patch)
tree4cec7d1b321307b1d5935577631dae116a658a37 /dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
parent63a2d92c5dfe976175cda024ec01905d11b43738 (diff)
dev: better .clang-format, ran format command.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc')
-rw-r--r--dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc265
1 files changed, 117 insertions, 148 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
index 4c873554..641fb8e4 100644
--- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
------------------------------------------- */
@@ -13,232 +13,201 @@ STATIC BOOL kIsScheduling = NO;
/// @brief Handle GPF fault.
/// @param rsp
-EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp)
-{
- auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
+EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp) {
+ auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
- if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning)
- return;
+ if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) return;
- kIsScheduling = NO;
+ kIsScheduling = NO;
- Kernel::kout << "Kernel: General Protection Fault.\r";
+ Kernel::kout << "Kernel: General Protection Fault.\r";
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Leak().Signal.SignalArg = rsp;
+ process.Leak().Signal.SignalID = SIGKILL;
+ process.Leak().Signal.Status = process.Leak().Status;
- Kernel::kout << "Kernel: SIGKILL status.\r";
+ Kernel::kout << "Kernel: SIGKILL status.\r";
- process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
+ process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
- process.Leak().Crash();
+ process.Leak().Crash();
}
/// @brief Handle page fault.
/// @param rsp
-EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp)
-{
- auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
+EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp) {
+ auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
- if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning)
- return;
+ if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) return;
- kIsScheduling = NO;
+ kIsScheduling = NO;
- Kernel::kout << "Kernel: Page Fault.\r";
- Kernel::kout << "Kernel: SIGKILL\r";
+ Kernel::kout << "Kernel: Page Fault.\r";
+ Kernel::kout << "Kernel: SIGKILL\r";
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Leak().Signal.SignalArg = rsp;
+ process.Leak().Signal.SignalID = SIGKILL;
+ process.Leak().Signal.Status = process.Leak().Status;
- process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
+ process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
- process.Leak().Crash();
+ process.Leak().Crash();
}
-namespace Kernel::Detail
-{
- constexpr static Int32 kTimeoutCount = 100000UL;
+namespace Kernel::Detail {
+constexpr static Int32 kTimeoutCount = 100000UL;
}
/// @brief Handle scheduler interrupt.
-EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp)
-{
- NE_UNUSED(rsp);
+EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp) {
+ NE_UNUSED(rsp);
- static Kernel::Int64 try_count_before_brute = Kernel::Detail::kTimeoutCount;
+ static Kernel::Int64 try_count_before_brute = Kernel::Detail::kTimeoutCount;
- while (kIsScheduling)
- {
- --try_count_before_brute;
+ while (kIsScheduling) {
+ --try_count_before_brute;
- if (try_count_before_brute < 1)
- break;
- }
+ if (try_count_before_brute < 1) break;
+ }
- try_count_before_brute = Kernel::Detail::kTimeoutCount;
- kIsScheduling = YES;
+ try_count_before_brute = Kernel::Detail::kTimeoutCount;
+ kIsScheduling = YES;
- Kernel::UserProcessHelper::StartScheduling();
+ Kernel::UserProcessHelper::StartScheduling();
- kIsScheduling = NO;
+ kIsScheduling = NO;
}
/// @brief Handle math fault.
/// @param rsp
-EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp)
-{
- auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
+EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) {
+ auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
- if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning)
- return;
+ if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) return;
- kIsScheduling = NO;
+ kIsScheduling = NO;
- Kernel::kout << "Kernel: Math error (division by zero?).\r";
+ Kernel::kout << "Kernel: Math error (division by zero?).\r";
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Leak().Signal.SignalArg = rsp;
+ process.Leak().Signal.SignalID = SIGKILL;
+ process.Leak().Signal.Status = process.Leak().Status;
- Kernel::kout << "Kernel: SIGKILL status.\r";
+ Kernel::kout << "Kernel: SIGKILL status.\r";
- process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
+ process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
- process.Leak().Crash();
+ process.Leak().Crash();
}
/// @brief Handle any generic fault.
/// @param rsp
-EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp)
-{
- auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
+EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) {
+ auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
- if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning)
- return;
+ if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) return;
- kIsScheduling = NO;
+ kIsScheduling = NO;
- Kernel::kout << "Kernel: Generic Process Fault.\r";
+ Kernel::kout << "Kernel: Generic Process Fault.\r";
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Leak().Signal.SignalArg = rsp;
+ process.Leak().Signal.SignalID = SIGKILL;
+ process.Leak().Signal.Status = process.Leak().Status;
- Kernel::kout << "Kernel: SIGKILL status.\r";
+ Kernel::kout << "Kernel: SIGKILL status.\r";
- process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
+ process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
- process.Leak().Crash();
+ process.Leak().Crash();
}
-EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip)
-{
- auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
+EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip) {
+ auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
- if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning)
- {
- Kernel::kout << "Kernel: SIGTRAP\r";
+ if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) {
+ Kernel::kout << "Kernel: SIGTRAP\r";
- while (YES)
- ;
- }
+ while (YES);
+ }
- kIsScheduling = NO;
+ kIsScheduling = NO;
- (Void)(Kernel::kout << "Kernel: Process RIP: " << Kernel::hex_number(rip) << Kernel::kendl);
- Kernel::kout << "Kernel: SIGTRAP\r";
+ (Void)(Kernel::kout << "Kernel: Process RIP: " << Kernel::hex_number(rip) << Kernel::kendl);
+ Kernel::kout << "Kernel: SIGTRAP\r";
- process.Leak().Signal.SignalArg = rip;
- process.Leak().Signal.SignalID = SIGTRAP;
+ process.Leak().Signal.SignalArg = rip;
+ process.Leak().Signal.SignalID = SIGTRAP;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Leak().Signal.Status = process.Leak().Status;
- Kernel::kout << "Kernel: SIGTRAP status.\r";
+ Kernel::kout << "Kernel: SIGTRAP status.\r";
- process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
+ process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
}
/// @brief Handle #UD fault.
/// @param rsp
-EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp)
-{
- auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
+EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) {
+ auto process = Kernel::UserProcessScheduler::The().CurrentProcess();
- if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning)
- return;
+ if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) return;
- kIsScheduling = NO;
+ kIsScheduling = NO;
- Kernel::kout << "Kernel: Undefined Opcode.\r";
+ Kernel::kout << "Kernel: Undefined Opcode.\r";
- process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Leak().Signal.SignalArg = rsp;
+ process.Leak().Signal.SignalID = SIGKILL;
+ process.Leak().Signal.Status = process.Leak().Status;
- Kernel::kout << "Kernel: SIGKILL status.\r";
+ Kernel::kout << "Kernel: SIGKILL status.\r";
- process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
+ process.Leak().Status = Kernel::ProcessStatusKind::kKilled;
- process.Leak().Crash();
+ process.Leak().Crash();
}
/// @brief Enter syscall from assembly.
/// @param stack the stack pushed from assembly routine.
/// @return nothing.
-EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx_syscall_index, Kernel::UIntPtr rdx_syscall_struct)
-{
- if (rcx_syscall_index < kSysCalls.Count())
- {
- Kernel::kout << "syscall: Enter Syscall.\r";
-
- if (kSysCalls[rcx_syscall_index].fHooked)
- {
- if (kSysCalls[rcx_syscall_index].fProc)
- {
- (kSysCalls[rcx_syscall_index].fProc)((Kernel::VoidPtr)rdx_syscall_struct);
- }
- else
- {
- Kernel::kout << "syscall: syscall isn't valid at all! (is nullptr)\r";
- }
- }
- else
- {
- Kernel::kout << "syscall: syscall isn't hooked at all! (is set to false)\r";
- }
-
- Kernel::kout << "syscall: Exit Syscall.\r";
- }
+EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx_syscall_index,
+ Kernel::UIntPtr rdx_syscall_struct) {
+ if (rcx_syscall_index < kSysCalls.Count()) {
+ Kernel::kout << "syscall: Enter Syscall.\r";
+
+ if (kSysCalls[rcx_syscall_index].fHooked) {
+ if (kSysCalls[rcx_syscall_index].fProc) {
+ (kSysCalls[rcx_syscall_index].fProc)((Kernel::VoidPtr) rdx_syscall_struct);
+ } else {
+ Kernel::kout << "syscall: syscall isn't valid at all! (is nullptr)\r";
+ }
+ } else {
+ Kernel::kout << "syscall: syscall isn't hooked at all! (is set to false)\r";
+ }
+
+ Kernel::kout << "syscall: Exit Syscall.\r";
+ }
}
/// @brief Enter Kernel call from assembly (DDK only).
/// @param stack the stack pushed from assembly routine.
/// @return nothing.
-EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_kerncall_index, Kernel::UIntPtr rdx_kerncall_struct)
-{
- if (rcx_kerncall_index < kKernCalls.Count())
- {
- Kernel::kout << "kerncall: Enter Kernel Call List.\r";
-
- if (kKernCalls[rcx_kerncall_index].fHooked)
- {
- if (kKernCalls[rcx_kerncall_index].fProc)
- {
- (kKernCalls[rcx_kerncall_index].fProc)((Kernel::VoidPtr)rdx_kerncall_struct);
- }
- else
- {
- Kernel::kout << "kerncall: Kernel call isn't valid at all! (is nullptr)\r";
- }
- }
- else
- {
- Kernel::kout << "kerncall: Kernel call isn't hooked at all! (is set to false)\r";
- }
-
- Kernel::kout << "kerncall: Exit Kernel Call List.\r";
- }
+EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx_kerncall_index,
+ Kernel::UIntPtr rdx_kerncall_struct) {
+ if (rcx_kerncall_index < kKernCalls.Count()) {
+ Kernel::kout << "kerncall: Enter Kernel Call List.\r";
+
+ if (kKernCalls[rcx_kerncall_index].fHooked) {
+ if (kKernCalls[rcx_kerncall_index].fProc) {
+ (kKernCalls[rcx_kerncall_index].fProc)((Kernel::VoidPtr) rdx_kerncall_struct);
+ } else {
+ Kernel::kout << "kerncall: Kernel call isn't valid at all! (is nullptr)\r";
+ }
+ } else {
+ Kernel::kout << "kerncall: Kernel call isn't hooked at all! (is set to false)\r";
+ }
+
+ Kernel::kout << "kerncall: Exit Kernel Call List.\r";
+ }
}