Linux 4.6-rc6
[linux/fpc-iii.git] / arch / x86 / um / stub_64.S
blobba914b3b8cc4d960203ba3a038afbeb00cab0d1d
1 #include <as-layout.h>
3 .section .__syscall_stub, "ax"
4         .globl batch_syscall_stub
5 batch_syscall_stub:
6         mov     $(STUB_DATA), %rbx
7         /* load pointer to first operation */
8         mov     %rbx, %rsp
9         add     $0x10, %rsp
10 again:
11         /* load length of additional data */
12         mov     0x0(%rsp), %rax
14         /* if(length == 0) : end of list */
15         /* write possible 0 to header */
16         mov     %rax, 8(%rbx)
17         cmp     $0, %rax
18         jz      done
20         /* save current pointer */
21         mov     %rsp, 8(%rbx)
23         /* skip additional data */
24         add     %rax, %rsp
26         /* load syscall-# */
27         pop     %rax
29         /* load syscall params */
30         pop     %rdi
31         pop     %rsi
32         pop     %rdx
33         pop     %r10
34         pop     %r8
35         pop     %r9
37         /* execute syscall */
38         syscall
40         /* check return value */
41         pop     %rcx
42         cmp     %rcx, %rax
43         je      again
45 done:
46         /* save return value */
47         mov     %rax, (%rbx)
49         /* stop */
50         int3