From 0fdc3eeb3afed04f9ffd36b4b2760dac61d1b098 Mon Sep 17 00:00:00 2001 From: Amlal Date: Sun, 17 Aug 2025 08:16:29 +0200 Subject: feat: kernel: (HALKit/KernelKit): Scheduler, and dylib improvements. feat: ZXD: Define the ZXD format. TeX file for PEF and ZXD to be written soon. Signed-off-by: Amlal --- dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc | 18 +++++++++++------- dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc | 4 ++-- 2 files changed, 13 insertions(+), 9 deletions(-) (limited to 'dev/kernel/HALKit') diff --git a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc index 1dbce4ac..c8f53aa9 100644 --- a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc +++ b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc @@ -13,7 +13,7 @@ namespace Kernel { /// @param /***********************************************************************************/ -EXTERN_C Void __zka_pure_call(USER_PROCESS* process) { +EXTERN_C Void __ne_pure_call(USER_PROCESS* process) { if (process) process->Crash(); } @@ -25,23 +25,27 @@ EXTERN_C Void __zka_pure_call(USER_PROCESS* process) { EXTERN_C Bool hal_check_task(HAL::StackFramePtr stack_ptr) { if (!stack_ptr) return No; - return stack_ptr->SP != 0 && stack_ptr->IP != 0; + return stack_ptr->SP > 0 && stack_ptr->IP > 0; } /// @brief Wakes up thread. /// Wakes up thread from the hang state. Void mp_wakeup_thread(HAL::StackFrame* stack) { - NE_UNUSED(stack); + if (!hal_check_task(stack)) return; + + // RIP is always in R15. R15 is reserved for the RIP. + stack->IP = stack->R15; + 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) { - NE_UNUSED(stack); + if (!hal_check_task(stack)) return; - while (Yes) { - /* Nothing to do, code is spinning */ - } + // Store IP in R15 + stack->R15 = stack->IP; + stack->IP = 0UL; } } // namespace Kernel diff --git a/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc b/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc index 10f95e29..2d10fa89 100644 --- a/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc +++ b/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc @@ -10,10 +10,10 @@ namespace Kernel { /***********************************************************************************/ /// @brief Unimplemented function (crashes by default) -/// @param void +/// @param process The process handle. /***********************************************************************************/ -EXTERN_C Void __zka_pure_call(USER_PROCESS* process) { +EXTERN_C Void __ne_pure_call(USER_PROCESS* process) { if (process) process->Crash(); } -- cgit v1.2.3