1/* SPDX-License-Identifier: GPL-2.0 */ 2#include <as-layout.h> 3 4.section .__syscall_stub, "ax" 5 .globl batch_syscall_stub 6batch_syscall_stub: 7 /* %rsp has the pointer to first operation */ 8 mov %rsp, %rbx 9 add $0x10, %rsp 10again: 11 /* load length of additional data */ 12 mov 0x0(%rsp), %rax 13 14 /* if(length == 0) : end of list */ 15 /* write possible 0 to header */ 16 mov %rax, 8(%rbx) 17 cmp $0, %rax 18 jz done 19 20 /* save current pointer */ 21 mov %rsp, 8(%rbx) 22 23 /* skip additional data */ 24 add %rax, %rsp 25 26 /* load syscall-# */ 27 pop %rax 28 29 /* load syscall params */ 30 pop %rdi 31 pop %rsi 32 pop %rdx 33 pop %r10 34 pop %r8 35 pop %r9 36 37 /* execute syscall */ 38 syscall 39 40 /* check return value */ 41 pop %rcx 42 cmp %rcx, %rax 43 je again 44 45done: 46 /* save return value */ 47 mov %rax, (%rbx) 48 49 /* stop */ 50 int3 51