These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / x86 / um / stub_32.S
1 #include <as-layout.h>
2
3 .section .__syscall_stub, "ax"
4
5         .globl batch_syscall_stub
6 batch_syscall_stub:
7         /* load pointer to first operation */
8         mov     $(STUB_DATA+8), %esp
9
10 again:
11         /* load length of additional data */
12         mov     0x0(%esp), %eax
13
14         /* if(length == 0) : end of list */
15         /* write possible 0 to header */
16         mov     %eax, STUB_DATA+4
17         cmpl    $0, %eax
18         jz      done
19
20         /* save current pointer */
21         mov     %esp, STUB_DATA+4
22
23         /* skip additional data */
24         add     %eax, %esp
25
26         /* load syscall-# */
27         pop     %eax
28
29         /* load syscall params */
30         pop     %ebx
31         pop     %ecx
32         pop     %edx
33         pop     %esi
34         pop     %edi
35         pop     %ebp
36
37         /* execute syscall */
38         int     $0x80
39
40         /* check return value */
41         pop     %ebx
42         cmp     %ebx, %eax
43         je      again
44
45 done:
46         /* save return value */
47         mov     %eax, STUB_DATA
48
49         /* stop */
50         int3