diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-23 19:13:48 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-23 19:15:17 +0100 |
| commit | a13e1c0911c0627184bc38f18c7fdda64447b3ad (patch) | |
| tree | 073a62c09bf216e85a3f310376640fa1805147f9 /dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc | |
| parent | 149fa096eb306d03686b3b67e813cf1a78e08cd0 (diff) | |
meta(kernel): Reworked repository's filesystem structure.
Removing useless parts of the project too.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc')
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc | 245 |
1 files changed, 0 insertions, 245 deletions
diff --git a/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc deleted file mode 100644 index 9eaa24eb..00000000 --- a/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc +++ /dev/null @@ -1,245 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.h> -#include <KernelKit/UserProcessScheduler.h> -#include <NewKit/KString.h> -#include <SignalKit/Signals.h> - -STATIC BOOL kIsScheduling = NO; - -/// @brief Handle GPF fault. -/// @param rsp -EXTERN_C void idt_handle_gpf(NeOS::UIntPtr rsp) -{ - auto process = NeOS::UserProcessScheduler::The().CurrentProcess(); - - if (process.Leak().Status != NeOS::ProcessStatusKind::kRunning) - return; - - kIsScheduling = NO; - - kout << "Kernel: General Protection Fault.\r"; - - process.Leak().ProcessSignal.SignalArg = rsp; - process.Leak().ProcessSignal.SignalID = SIGKILL; - process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - - kout << "Kernel: SIGKILL status.\r"; - - process.Leak().Status = NeOS::ProcessStatusKind::kKilled; - - process.Leak().Crash(); -} - -/// @brief Handle page fault. -/// @param rsp -EXTERN_C void idt_handle_pf(NeOS::UIntPtr rsp) -{ - auto process = NeOS::UserProcessScheduler::The().CurrentProcess(); - - if (process.Leak().Status != NeOS::ProcessStatusKind::kRunning) - return; - - kIsScheduling = NO; - - kout << "Kernel: Page Fault.\r"; - kout << "Kernel: SIGKILL\r"; - - process.Leak().ProcessSignal.SignalArg = rsp; - process.Leak().ProcessSignal.SignalID = SIGKILL; - process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - - process.Leak().Status = NeOS::ProcessStatusKind::kKilled; - - process.Leak().Crash(); -} - -namespace NeOS::Detail -{ - constexpr static Int32 kTimeoutCount = 100000UL; -} - -/// @brief Handle scheduler interrupt. -EXTERN_C void idt_handle_scheduler(NeOS::UIntPtr rsp) -{ - static NeOS::Int64 try_count_before_brute = NeOS::Detail::kTimeoutCount; - - while (kIsScheduling) - { - --try_count_before_brute; - - if (try_count_before_brute < 1) - break; - } - - try_count_before_brute = NeOS::Detail::kTimeoutCount; - kIsScheduling = YES; - - NeOS::UserProcessHelper::StartScheduling(); - - kIsScheduling = NO; -} - -/// @brief Handle math fault. -/// @param rsp -EXTERN_C void idt_handle_math(NeOS::UIntPtr rsp) -{ - auto process = NeOS::UserProcessScheduler::The().CurrentProcess(); - - if (process.Leak().Status != NeOS::ProcessStatusKind::kRunning) - return; - - kIsScheduling = NO; - - kout << "Kernel: Math error (division by zero?).\r"; - - process.Leak().ProcessSignal.SignalArg = rsp; - process.Leak().ProcessSignal.SignalID = SIGKILL; - process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - - kout << "Kernel: SIGKILL status.\r"; - - process.Leak().Status = NeOS::ProcessStatusKind::kKilled; - - process.Leak().Crash(); -} - -/// @brief Handle any generic fault. -/// @param rsp -EXTERN_C void idt_handle_generic(NeOS::UIntPtr rsp) -{ - auto process = NeOS::UserProcessScheduler::The().CurrentProcess(); - - if (process.Leak().Status != NeOS::ProcessStatusKind::kRunning) - { - kout << "Getting here.\r"; - return; - } - - kIsScheduling = NO; - - kout << "Kernel: Generic Process Fault.\r"; - - process.Leak().ProcessSignal.SignalArg = rsp; - process.Leak().ProcessSignal.SignalID = SIGKILL; - process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - - kout << "Kernel: SIGKILL status.\r"; - - process.Leak().Status = NeOS::ProcessStatusKind::kKilled; - - process.Leak().Crash(); -} - -EXTERN_C NeOS::Void idt_handle_breakpoint(NeOS::UIntPtr rip) -{ - auto process = NeOS::UserProcessScheduler::The().CurrentProcess(); - - if (process.Leak().Status != NeOS::ProcessStatusKind::kRunning) - { - kout << "Kernel: SIGTRAP\r"; - - while (YES) - ; - } - - kIsScheduling = NO; - - kout << "Kernel: Process RIP: " << NeOS::hex_number(rip) << kendl; - kout << "Kernel: SIGTRAP\r"; - - process.Leak().ProcessSignal.SignalArg = rip; - process.Leak().ProcessSignal.SignalID = SIGTRAP; - - process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - - kout << "Kernel: SIGTRAP status.\r"; - - process.Leak().Status = NeOS::ProcessStatusKind::kFrozen; -} - -/// @brief Handle #UD fault. -/// @param rsp -EXTERN_C void idt_handle_ud(NeOS::UIntPtr rsp) -{ - auto process = NeOS::UserProcessScheduler::The().CurrentProcess(); - - if (process.Leak().Status != NeOS::ProcessStatusKind::kRunning) - return; - - kIsScheduling = NO; - - kout << "Kernel: Undefined Opcode.\r"; - - process.Leak().ProcessSignal.SignalArg = rsp; - process.Leak().ProcessSignal.SignalID = SIGKILL; - process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status; - - kout << "Kernel: SIGKILL status.\r"; - - process.Leak().Status = NeOS::ProcessStatusKind::kKilled; - - process.Leak().Crash(); -} - -/// @brief Enter syscall from assembly. -/// @param stack the stack pushed from assembly routine. -/// @return nothing. -EXTERN_C NeOS::Void hal_system_call_enter(NeOS::UIntPtr rcx_syscall_index, NeOS::UIntPtr rdx_syscall_struct) -{ - if (rcx_syscall_index < kSyscalls.Count()) - { - kout << "syscall: Enter Syscall.\r"; - - if (kSyscalls[rcx_syscall_index].fHooked) - { - if (kSyscalls[rcx_syscall_index].fProc) - { - (kSyscalls[rcx_syscall_index].fProc)((NeOS::VoidPtr)rdx_syscall_struct); - } - else - { - kout << "syscall: syscall isn't valid at all! (is nullptr)\r"; - } - } - else - { - kout << "syscall: syscall isn't hooked at all! (is set to false)\r"; - } - - 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 NeOS::Void hal_kernel_call_enter(NeOS::UIntPtr rcx_kerncall_index, NeOS::UIntPtr rdx_kerncall_struct) -{ - if (rcx_kerncall_index < kKerncalls.Count()) - { - kout << "kerncall: Enter Kernel Call List.\r"; - - if (kKerncalls[rcx_kerncall_index].fHooked) - { - if (kKerncalls[rcx_kerncall_index].fProc) - { - (kKerncalls[rcx_kerncall_index].fProc)((NeOS::VoidPtr)rdx_kerncall_struct); - } - else - { - kout << "kerncall: Kernel call isn't valid at all! (is nullptr)\r"; - } - } - else - { - kout << "kerncall: Kernel call isn't hooked at all! (is set to false)\r"; - } - - kout << "kerncall: Exit Kernel Call List.\r"; - } -} |
