mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-07-11 23:39:20 +00:00
QoL improvements
This commit is contained in:
@ -287,24 +287,37 @@ static void *NativeSyscallsTable[] = {
|
||||
uintptr_t HandleNativeSyscalls(SyscallsFrame *Frame)
|
||||
{
|
||||
#if defined(a64)
|
||||
// debug("rax: %#llx, rbx: %#llx, rcx: %#llx, rdx: %#llx, rsi: %#llx, rdi: %#llx, rbp: %#llx, r8: %#llx, r9: %#llx, r10: %#llx, r11: %#llx, r12: %#llx, r13: %#llx, r14: %#llx, r15: %#llx", Frame->rax, Frame->rbx, Frame->rcx, Frame->rdx, Frame->rsi, Frame->rdi, Frame->rbp, Frame->r8, Frame->r9, Frame->r10, Frame->r11, Frame->r12, Frame->r13, Frame->r14, Frame->r15);
|
||||
if (Frame->rax > sizeof(NativeSyscallsTable))
|
||||
{
|
||||
fixme("Syscall %lld not implemented", Frame->rax);
|
||||
fixme("Syscall %ld not implemented", Frame->rax);
|
||||
return SYSCALL_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
uintptr_t (*call)(uintptr_t, ...) = reinterpret_cast<uintptr_t (*)(uintptr_t, ...)>(NativeSyscallsTable[Frame->rax]);
|
||||
if (!call)
|
||||
{
|
||||
error("Syscall %#llx failed.", Frame->rax);
|
||||
error("Syscall %#lx failed.", Frame->rax);
|
||||
return SYSCALL_INTERNAL_ERROR;
|
||||
}
|
||||
debug("[%#lx]->( %#lx %#lx %#lx %#lx %#lx %#lx )", Frame->rax, Frame->rdi, Frame->rsi, Frame->rdx, Frame->rcx, Frame->r8, Frame->r9);
|
||||
|
||||
debug("[%#lx]->( %#lx %#lx %#lx %#lx %#lx %#lx )",
|
||||
Frame->rax,
|
||||
Frame->rdi, Frame->rsi, Frame->rdx, Frame->rcx, Frame->r8, Frame->r9);
|
||||
|
||||
uintptr_t ret = call((uintptr_t)Frame, Frame->rdi, Frame->rsi, Frame->rdx, Frame->r10, Frame->r8, Frame->r9);
|
||||
Frame->rax = ret;
|
||||
return ret;
|
||||
#elif defined(a32)
|
||||
if (Frame->eax > sizeof(NativeSyscallsTable))
|
||||
{
|
||||
fixme("Syscall %ld not implemented", Frame->eax);
|
||||
return SYSCALL_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/* ... */
|
||||
|
||||
return SYSCALL_INTERNAL_ERROR;
|
||||
#elif defined(aa64)
|
||||
return SYSCALL_INTERNAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
Reference in New Issue
Block a user