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