blob: 17977978b9efce573462e7169cb7a728be540d6f [file] [log] [blame]
/*
* arch/x86-64/syscall.S
*
* Common tail-handling code for system calls.
*
* The arguments are in the standard argument registers; the system
* call number in %eax.
*/
.text
.align 4
.globl __syscall_common
.type __syscall_common,@function
__syscall_common:
movq %rcx,%r10 # The kernel uses %r10 istf %rcx
syscall
cmpq $-4095,%rax
jnb 1f
ret
# Error return, must set errno
1:
negl %eax
movl %eax,errno(%rip) # errno is type int, so 32 bits
orq $-1,%rax # orq $-1 smaller than movq $-1
ret
.size __syscall_common,.-__syscall_common