tanya/arch/x64/linux/syscall.S

53 lines
818 B
ArmAsm

/*
The kernel uses the following registers:
%rdi, %rsi, %rdx, %r8, %r9, %r10
The number of the syscall is passed in %rax.
A syscall clobbers:
%rax, %rcx, %r11
The returned value is placed in %rax.
*/
.text
.globl syscall1
.type syscall1, @function
syscall1:
movq %rsi, %rax // Syscall number.
syscall
ret
// 2 parameters.
.globl _D5tanya3sys5linux7syscall7syscallFNbNilllZl
.type _D5tanya3sys5linux7syscall7syscallFNbNilllZl, @function
_D5tanya3sys5linux7syscall7syscallFNbNilllZl:
movq %rdx, %rax
syscall
ret
// 6 parameters.
.globl _D5tanya3sys5linux7syscall7syscallFNbNilllllllZl
.type _D5tanya3sys5linux7syscall7syscallFNbNilllllllZl, @function
_D5tanya3sys5linux7syscall7syscallFNbNilllllllZl:
pushq %rbp
movq %rsp, %rbp
movq 16(%rbp), %rax
mov %rcx, %r10
syscall
leave
ret