#include "as-layout.h"12.globl syscall_stub3.section .__syscall_stub, "ax"4syscall_stub:5syscall6/* We don't have 64-bit constants, so this constructs the address7* we need.8*/9movq $(STUB_DATA >> 32), %rbx10salq $32, %rbx11movq $(STUB_DATA & 0xffffffff), %rcx12or %rcx, %rbx13movq %rax, (%rbx)14int31516.globl batch_syscall_stub17batch_syscall_stub:18mov $(STUB_DATA >> 32), %rbx19sal $32, %rbx20mov $(STUB_DATA & 0xffffffff), %rax21or %rax, %rbx22/* load pointer to first operation */23mov %rbx, %rsp24add $0x10, %rsp25again:26/* load length of additional data */27mov 0x0(%rsp), %rax2829/* if(length == 0) : end of list */30/* write possible 0 to header */31mov %rax, 8(%rbx)32cmp $0, %rax33jz done3435/* save current pointer */36mov %rsp, 8(%rbx)3738/* skip additional data */39add %rax, %rsp4041/* load syscall-# */42pop %rax4344/* load syscall params */45pop %rdi46pop %rsi47pop %rdx48pop %r1049pop %r850pop %r95152/* execute syscall */53syscall5455/* check return value */56pop %rcx57cmp %rcx, %rax58je again5960done:61/* save return value */62mov %rax, (%rbx)6364/* stop */65int3666768