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