Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/um/sys-x86_64/stub.S
10817 views
1
#include "as-layout.h"
2
3
.globl syscall_stub
4
.section .__syscall_stub, "ax"
5
syscall_stub:
6
syscall
7
/* We don't have 64-bit constants, so this constructs the address
8
* we need.
9
*/
10
movq $(STUB_DATA >> 32), %rbx
11
salq $32, %rbx
12
movq $(STUB_DATA & 0xffffffff), %rcx
13
or %rcx, %rbx
14
movq %rax, (%rbx)
15
int3
16
17
.globl batch_syscall_stub
18
batch_syscall_stub:
19
mov $(STUB_DATA >> 32), %rbx
20
sal $32, %rbx
21
mov $(STUB_DATA & 0xffffffff), %rax
22
or %rax, %rbx
23
/* load pointer to first operation */
24
mov %rbx, %rsp
25
add $0x10, %rsp
26
again:
27
/* load length of additional data */
28
mov 0x0(%rsp), %rax
29
30
/* if(length == 0) : end of list */
31
/* write possible 0 to header */
32
mov %rax, 8(%rbx)
33
cmp $0, %rax
34
jz done
35
36
/* save current pointer */
37
mov %rsp, 8(%rbx)
38
39
/* skip additional data */
40
add %rax, %rsp
41
42
/* load syscall-# */
43
pop %rax
44
45
/* load syscall params */
46
pop %rdi
47
pop %rsi
48
pop %rdx
49
pop %r10
50
pop %r8
51
pop %r9
52
53
/* execute syscall */
54
syscall
55
56
/* check return value */
57
pop %rcx
58
cmp %rcx, %rax
59
je again
60
61
done:
62
/* save return value */
63
mov %rax, (%rbx)
64
65
/* stop */
66
int3
67
68