1#include <as-layout.h>
2
3.section .__syscall_stub, "ax"
4
5	.globl batch_syscall_stub
6batch_syscall_stub:
7	/* load pointer to first operation */
8	mov	$(STUB_DATA+8), %esp
9
10again:
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
45done:
46	/* save return value */
47	mov	%eax, STUB_DATA
48
49	/* stop */
50	int3
51