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