Files
KirkOS/src/syscall/syscall_entry.S
T
2026-04-14 22:52:24 -04:00

30 lines
747 B
ArmAsm

.global syscall_entry
syscall_entry:
swapgs
push %rcx
push %r11
# Save original args before we clobber them
push %rdi # orig rdi (arg1)
push %rsi # orig rsi (arg2)
push %rdx # orig rdx (arg3)
# Handle r8/r9 before r8 gets clobbered
mov %r8, %r9 # r9 = orig r8 (6th param)
mov %r10, %r8 # r8 = orig r10 (5th param)
# Pop in reverse order to place into correct SysV registers
pop %rcx # rcx = orig rdx (4th param)
pop %rdx # rdx = orig rsi (3rd param)
pop %rsi # rsi = orig rdi (2nd param)
mov %rax, %rdi # rdi = rax (1st param = syscall number)
call syscall_handler
pop %r11
pop %rcx
swapgs
sysretq