summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-28 17:48:25 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-28 17:49:13 +0100
commit1ab61e6bb20dd39f85fca30c1d0a83db12fea9d6 (patch)
tree3c3912c242e8dc822ce3cbe9871b4b5e7363f336 /Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp
parentf77a876e0ac2611079ee188933f0f3de222dd08a (diff)
HCoreKrnl: Fix IDT, will get the rt_handle_interrupts right, and not
corrupt the registers, see below. - New register layout in Stackframe. - Thinking about a way to wrap this handler into a valid win64 call. Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp')
-rw-r--r--Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp b/Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp
index 3a3b49b3..24eee910 100644
--- a/Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp
+++ b/Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp
@@ -16,8 +16,10 @@ typedef HCore::Void (*rt_syscall_proc)(HCore::Int32 id, HCore::HAL::StackFramePt
HCore::Array<rt_syscall_proc, kKernelMaxSystemCalls> kSyscalls;
/// @brief Interrupt system call handler.
-extern "C" void rt_syscall_handle(HCore::HAL::StackFramePtr stack) {
- if (stack->R15 < kKernelMaxSystemCalls && kSyscalls[stack->R15] != 0) {
- (kSyscalls[stack->R15].Leak().Leak())(stack->R15, stack);
+EXTERN_C void rt_syscall_handle(HCore::HAL::StackFramePtr stack) {
+ if (!stack) return;
+
+ if (stack->Rcx < kKernelMaxSystemCalls && kSyscalls[stack->Rcx] != 0) {
+ (kSyscalls[stack->Rcx].Leak().Leak())(stack->Rcx, stack);
}
}