/* opencoreC - Fast Syscall Entry Trampoline (x86_64) */ .global syscall_entry .extern kernel_syscall_dispatcher .section .bss .align 16 user_scratch_rsp: .quad 0 kernel_temp_stack: .skip 4096 kernel_temp_stack_top: .section .text syscall_entry: /* Save user stack pointer */ mov [rip + user_scratch_rsp], rsp lea rsp, [rip + kernel_temp_stack_top] /* Save user RIP (in RCX) and user RFLAGS (in R11) */ push rcx push r11 /* Save argument and volatile registers to construct SyscallRegisters */ push rax push rdi push rsi push rdx push r8 push r9 push r10 /* Pass pointer to SyscallRegisters struct in RDI */ mov rdi, rsp call kernel_syscall_dispatcher /* Restore registers (rax, rdx, r8 may have return values from dispatcher) */ pop r10 pop r9 pop r8 pop rdx pop rsi pop rdi pop rax /* Restore user RIP and RFLAGS */ pop r11 pop rcx /* Restore user stack */ mov rsp, [rip + user_scratch_rsp] /* Return to Ring 3 */ sysretq