From 1d81e061a71162e0de392c8fa600cec46e716fa3 Mon Sep 17 00:00:00 2001 From: Amlal Date: Sat, 18 Jan 2025 13:24:53 +0100 Subject: ADD: Export hal_check_stack as C symbol, and zka_pure_call should have the UserProcess* on first argument register to crash program. Signed-off-by: Amlal --- dev/Kernel/HALKit/AMD64/HalAP.cc | 51 --------------------- .../AMD64/HalSchedulerCorePrimitivesAMD64.cc | 52 ++++++++++++++++++++++ .../ARM64/HalSchedulerCorePrimitivesARM64.cc | 7 +-- dev/Kernel/src/HardwareThreadScheduler.cc | 2 +- 4 files changed, 57 insertions(+), 55 deletions(-) delete mode 100644 dev/Kernel/HALKit/AMD64/HalAP.cc create mode 100644 dev/Kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc (limited to 'dev') diff --git a/dev/Kernel/HALKit/AMD64/HalAP.cc b/dev/Kernel/HALKit/AMD64/HalAP.cc deleted file mode 100644 index e217b24f..00000000 --- a/dev/Kernel/HALKit/AMD64/HalAP.cc +++ /dev/null @@ -1,51 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, MediaSwirl, all rights reserved. - -------------------------------------------- */ - -#include -#include - -namespace Kernel -{ - /***********************************************************************************/ - /// @brief Unimplemented function (crashes by default) - /// @param - /***********************************************************************************/ - - EXTERN_C Void __zka_pure_call(void) - { - UserProcessScheduler::The().GetCurrentProcess().Leak().Crash(); - } - - /***********************************************************************************/ - /// @brief Validate user stack. - /// @param stack_ptr the frame pointer. - /***********************************************************************************/ - - Bool hal_check_stack(HAL::StackFramePtr stack_ptr) - { - if (!stack_ptr) - return No; - - return stack_ptr->SP != 0 && stack_ptr->BP != 0; - } - - /// @brief Wakes up thread. - /// Wakes up thread from the hang state. - Void mp_wakeup_thread(HAL::StackFrame* stack) - { - Kernel::UserProcessHelper::StartScheduling(); - } - - /// @brief makes the thread sleep on a loop. - /// hooks and hangs thread to prevent code from executing. - Void mp_hang_thread(HAL::StackFrame* stack) - { - while (Yes) - { - /* Nothing to do, code is spinning */ - } - } -} // namespace Kernel diff --git a/dev/Kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc b/dev/Kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc new file mode 100644 index 00000000..5eee0245 --- /dev/null +++ b/dev/Kernel/HALKit/AMD64/HalSchedulerCorePrimitivesAMD64.cc @@ -0,0 +1,52 @@ +/* ------------------------------------------- + + Copyright (C) 2024, MediaSwirl, all rights reserved. + +------------------------------------------- */ + +#include +#include + +namespace Kernel +{ + /***********************************************************************************/ + /// @brief Unimplemented function (crashes by default) + /// @param + /***********************************************************************************/ + + EXTERN_C Void __zka_pure_call(UserProcess* process) + { + if (process) + process->Crash(); + } + + /***********************************************************************************/ + /// @brief Validate user stack. + /// @param stack_ptr the frame pointer. + /***********************************************************************************/ + + EXTERN_C Bool hal_check_stack(HAL::StackFramePtr stack_ptr) + { + if (!stack_ptr) + return No; + + return stack_ptr->SP != 0 && stack_ptr->BP != 0; + } + + /// @brief Wakes up thread. + /// Wakes up thread from the hang state. + Void mp_wakeup_thread(HAL::StackFrame* stack) + { + Kernel::UserProcessHelper::StartScheduling(); + } + + /// @brief makes the thread sleep on a loop. + /// hooks and hangs thread to prevent code from executing. + Void mp_hang_thread(HAL::StackFrame* stack) + { + while (Yes) + { + /* Nothing to do, code is spinning */ + } + } +} // namespace Kernel diff --git a/dev/Kernel/HALKit/ARM64/HalSchedulerCorePrimitivesARM64.cc b/dev/Kernel/HALKit/ARM64/HalSchedulerCorePrimitivesARM64.cc index e6254fb7..e46c4b66 100644 --- a/dev/Kernel/HALKit/ARM64/HalSchedulerCorePrimitivesARM64.cc +++ b/dev/Kernel/HALKit/ARM64/HalSchedulerCorePrimitivesARM64.cc @@ -14,9 +14,10 @@ namespace Kernel /// @param void /***********************************************************************************/ - EXTERN_C Void __zka_pure_call(void) + EXTERN_C Void __zka_pure_call(UserProcess* process) { - UserProcessScheduler::The().GetCurrentProcess().Leak().Crash(); + if (process) + process->Crash(); } /***********************************************************************************/ @@ -24,7 +25,7 @@ namespace Kernel /// @param stack_ptr the frame pointer. /***********************************************************************************/ - Bool hal_check_stack(HAL::StackFramePtr stack_ptr) + EXTERN_C Bool hal_check_stack(HAL::StackFramePtr stack_ptr) { if (!stack_ptr) return No; diff --git a/dev/Kernel/src/HardwareThreadScheduler.cc b/dev/Kernel/src/HardwareThreadScheduler.cc index a1312b34..2121a911 100644 --- a/dev/Kernel/src/HardwareThreadScheduler.cc +++ b/dev/Kernel/src/HardwareThreadScheduler.cc @@ -21,7 +21,7 @@ namespace Kernel /// @note Those symbols are needed in order to switch and validate the stack. /***********************************************************************************/ - EXTERN Bool hal_check_stack(HAL::StackFramePtr frame_ptr); + EXTERN_C Bool hal_check_stack(HAL::StackFramePtr frame_ptr); EXTERN_C Bool mp_register_process(HAL::StackFramePtr frame, ProcessID pid); STATIC HardwareThreadScheduler kHardwareThreadScheduler; -- cgit v1.2.3