| /* |
| * 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 |