18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#include <as-layout.h>
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci.section .__syscall_stub, "ax"
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci	.globl batch_syscall_stub
78c2ecf20Sopenharmony_cibatch_syscall_stub:
88c2ecf20Sopenharmony_ci	/* load pointer to first operation */
98c2ecf20Sopenharmony_ci	mov	$(STUB_DATA+8), %esp
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ciagain:
128c2ecf20Sopenharmony_ci	/* load length of additional data */
138c2ecf20Sopenharmony_ci	mov	0x0(%esp), %eax
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci	/* if(length == 0) : end of list */
168c2ecf20Sopenharmony_ci	/* write possible 0 to header */
178c2ecf20Sopenharmony_ci	mov	%eax, STUB_DATA+4
188c2ecf20Sopenharmony_ci	cmpl	$0, %eax
198c2ecf20Sopenharmony_ci	jz	done
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci	/* save current pointer */
228c2ecf20Sopenharmony_ci	mov	%esp, STUB_DATA+4
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	/* skip additional data */
258c2ecf20Sopenharmony_ci	add	%eax, %esp
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	/* load syscall-# */
288c2ecf20Sopenharmony_ci	pop	%eax
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci	/* load syscall params */
318c2ecf20Sopenharmony_ci	pop	%ebx
328c2ecf20Sopenharmony_ci	pop	%ecx
338c2ecf20Sopenharmony_ci	pop	%edx
348c2ecf20Sopenharmony_ci	pop	%esi
358c2ecf20Sopenharmony_ci 	pop	%edi
368c2ecf20Sopenharmony_ci	pop	%ebp
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	/* execute syscall */
398c2ecf20Sopenharmony_ci	int	$0x80
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci	/* check return value */
428c2ecf20Sopenharmony_ci	pop	%ebx
438c2ecf20Sopenharmony_ci	cmp	%ebx, %eax
448c2ecf20Sopenharmony_ci	je	again
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_cidone:
478c2ecf20Sopenharmony_ci	/* save return value */
488c2ecf20Sopenharmony_ci	mov	%eax, STUB_DATA
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci	/* stop */
518c2ecf20Sopenharmony_ci	int3
52