blob: ba914b3b8cc4d960203ba3a038afbeb00cab0d1d [file] [log] [blame]
Al Viro37185b32012-10-08 03:27:32 +01001#include <as-layout.h>
Jeff Diked67b5692005-07-07 17:56:49 -07002
Amerigo Wang276c9742009-06-16 15:33:30 -07003.section .__syscall_stub, "ax"
Jeff Dikec5600492005-09-03 15:57:36 -07004 .globl batch_syscall_stub
5batch_syscall_stub:
Richard Weinberger1b2411c2015-10-26 10:38:27 +01006 mov $(STUB_DATA), %rbx
Bodo Stroesser07bf7312005-09-03 15:57:50 -07007 /* load pointer to first operation */
8 mov %rbx, %rsp
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 */
Jeff Dikec5600492005-09-03 15:57:36 -070030 pop %rdi
31 pop %rsi
32 pop %rdx
33 pop %r10
34 pop %r8
35 pop %r9
Bodo Stroesser07bf7312005-09-03 15:57:50 -070036
37 /* execute syscall */
Jeff Dikec5600492005-09-03 15:57:36 -070038 syscall
Bodo Stroesser07bf7312005-09-03 15:57:50 -070039
40 /* check return value */
41 pop %rcx
42 cmp %rcx, %rax
43 je again
44
45done:
46 /* save return value */
Jeff Dikec5600492005-09-03 15:57:36 -070047 mov %rax, (%rbx)
Bodo Stroesser07bf7312005-09-03 15:57:50 -070048
49 /* stop */
50 int3