x86_64_linux_nolibc/syscall/x86_64/linux/
mod.rs1pub mod macros;
6pub mod nr;
7
8use core::arch::asm;
9
10#[inline(always)]
11pub unsafe fn syscall0(nr: isize) -> isize {
12 let ret: isize;
13
14 asm!(
15 "syscall",
16 inlateout("rax") nr => ret,
17 lateout("rcx") _, lateout("r11") _, );
20
21 ret
22}
23
24pub unsafe fn syscall1(nr: isize, a1: usize) -> isize {
25 let ret: isize;
26
27 asm!(
28 "syscall",
29 inlateout("rax") nr => ret,
30 in("rdi") a1,
31 lateout("rcx") _, lateout("r11") _, );
34
35 ret
36}
37
38pub unsafe fn syscall2(nr: isize, a1: usize, a2: usize) -> isize {
39 let ret: isize;
40
41 asm!(
42 "syscall",
43 inlateout("rax") nr => ret,
44 in("rdi") a1,
45 in("rsi") a2,
46 lateout("rcx") _, lateout("r11") _, );
49
50 ret
51}
52
53pub unsafe fn syscall3(nr: isize, a1: usize, a2: usize, a3: usize) -> isize {
54 let ret: isize;
55
56 asm!(
57 "syscall",
58 inlateout("rax") nr => ret,
59 in("rdi") a1,
60 in("rsi") a2,
61 in("rdx") a3,
62 lateout("rcx") _, lateout("r11") _, );
65
66 ret
67}
68
69pub unsafe fn syscall4(nr: isize, a1: usize, a2: usize, a3: usize, a4: usize) -> isize {
70 let ret: isize;
71
72 asm!(
73 "syscall",
74 inlateout("rax") nr => ret,
75 in("rdi") a1,
76 in("rsi") a2,
77 in("rdx") a3,
78 in("r10") a4,
79 lateout("rcx") _, lateout("r11") _, );
82
83 ret
84}
85
86pub unsafe fn syscall5(nr: isize, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) -> isize {
87 let ret: isize;
88
89 asm!(
90 "syscall",
91 inlateout("rax") nr => ret,
92 in("rdi") a1,
93 in("rsi") a2,
94 in("rdx") a3,
95 in("r10") a4,
96 in("r8") a5,
97 lateout("rcx") _, lateout("r11") _, );
100
101 ret
102}
103
104pub unsafe fn syscall6(
105 nr: isize,
106 a1: usize,
107 a2: usize,
108 a3: usize,
109 a4: usize,
110 a5: usize,
111 a6: usize,
112) -> isize {
113 let ret: isize;
114
115 asm!(
116 "syscall",
117 inlateout("rax") nr => ret,
118 in("rdi") a1,
119 in("rsi") a2,
120 in("rdx") a3,
121 in("r10") a4,
122 in("r8") a5,
123 in("r9") a6,
124 lateout("rcx") _, lateout("r11") _, );
127
128 ret
129}