1use crate::Sysno;
2
3use core::arch::asm;
4
5#[allow(clippy::missing_safety_doc)]
6#[inline(always)]
7pub unsafe fn raw_syscall0(sysno: Sysno) -> usize {
8 let ret;
9 asm!(
10 "syscall",
11 inlateout("rax") sysno as usize => ret,
12 lateout("rcx") _,
13 lateout("r11") _,
14 options(nostack, preserves_flags, readonly)
15 );
16 ret
17}
18
19pub use raw_syscall0 as raw_syscall0_readonly;
20
21#[allow(clippy::missing_safety_doc)]
22#[inline(always)]
23pub unsafe fn raw_syscall1(sysno: Sysno, arg0: usize) -> usize {
24 let ret;
25 asm!(
26 "syscall",
27 inlateout("rax") sysno as usize => ret,
28 in("rdi") arg0,
29 lateout("rcx") _,
30 lateout("r11") _,
31 options(nostack, preserves_flags)
32 );
33 ret
34}
35
36#[allow(clippy::missing_safety_doc)]
37#[inline(always)]
38pub unsafe fn raw_syscall1_readonly(sysno: Sysno, arg0: usize) -> usize {
39 let ret;
40 asm!(
41 "syscall",
42 inlateout("rax") sysno as usize => ret,
43 in("rdi") arg0,
44 lateout("rcx") _,
45 lateout("r11") _,
46 options(nostack, preserves_flags, readonly)
47 );
48 ret
49}
50
51#[allow(clippy::missing_safety_doc)]
52#[inline(always)]
53pub unsafe fn syscall1_noreturn(sysno: Sysno, arg0: usize) -> ! {
54 asm!(
55 "syscall",
56 "ud2",
57 in("rax") sysno as usize,
58 in("rdi") arg0,
59 options(noreturn)
60 )
61}
62
63#[allow(clippy::missing_safety_doc)]
64#[inline(always)]
65pub unsafe fn raw_syscall2(sysno: Sysno, arg0: usize, arg1: usize) -> usize {
66 let ret;
67 asm!(
68 "syscall",
69 inlateout("rax") sysno as usize => ret,
70 in("rdi") arg0,
71 in("rsi") arg1,
72 lateout("rcx") _,
73 lateout("r11") _,
74 options(nostack, preserves_flags)
75 );
76 ret
77}
78
79#[allow(clippy::missing_safety_doc)]
80#[inline(always)]
81pub unsafe fn raw_syscall2_readonly(sysno: Sysno, arg0: usize, arg1: usize) -> usize {
82 let ret;
83 asm!(
84 "syscall",
85 inlateout("rax") sysno as usize => ret,
86 in("rdi") arg0,
87 in("rsi") arg1,
88 lateout("rcx") _,
89 lateout("r11") _,
90 options(nostack, preserves_flags, readonly)
91 );
92 ret
93}
94
95#[allow(clippy::missing_safety_doc)]
96#[inline(always)]
97pub unsafe fn raw_syscall3(sysno: Sysno, arg0: usize, arg1: usize, arg2: usize) -> usize {
98 let ret;
99 asm!(
100 "syscall",
101 inlateout("rax") sysno as usize => ret,
102 in("rdi") arg0,
103 in("rsi") arg1,
104 in("rdx") arg2,
105 lateout("rcx") _,
106 lateout("r11") _,
107 options(nostack, preserves_flags)
108 );
109 ret
110}
111
112#[allow(clippy::missing_safety_doc)]
113#[inline(always)]
114pub unsafe fn raw_syscall3_readonly(sysno: Sysno, arg0: usize, arg1: usize, arg2: usize) -> usize {
115 let ret;
116 asm!(
117 "syscall",
118 inlateout("rax") sysno as usize => ret,
119 in("rdi") arg0,
120 in("rsi") arg1,
121 in("rdx") arg2,
122 lateout("rcx") _,
123 lateout("r11") _,
124 options(nostack, preserves_flags, readonly)
125 );
126 ret
127}
128
129#[allow(clippy::missing_safety_doc)]
130#[inline(always)]
131pub unsafe fn raw_syscall4(
132 sysno: Sysno,
133 arg0: usize,
134 arg1: usize,
135 arg2: usize,
136 arg3: usize,
137) -> usize {
138 let ret;
139 asm!(
140 "syscall",
141 inlateout("rax") sysno as usize => ret,
142 in("rdi") arg0,
143 in("rsi") arg1,
144 in("rdx") arg2,
145 in("r10") arg3,
146 lateout("rcx") _,
147 lateout("r11") _,
148 options(nostack, preserves_flags)
149 );
150 ret
151}
152
153#[allow(clippy::missing_safety_doc)]
154#[inline(always)]
155pub unsafe fn raw_syscall4_readonly(
156 sysno: Sysno,
157 arg0: usize,
158 arg1: usize,
159 arg2: usize,
160 arg3: usize,
161) -> usize {
162 let ret;
163 asm!(
164 "syscall",
165 inlateout("rax") sysno as usize => ret,
166 in("rdi") arg0,
167 in("rsi") arg1,
168 in("rdx") arg2,
169 in("r10") arg3,
170 lateout("rcx") _,
171 lateout("r11") _,
172 options(nostack, preserves_flags, readonly)
173 );
174 ret
175}
176
177#[allow(clippy::missing_safety_doc)]
178#[inline(always)]
179pub unsafe fn raw_syscall5(
180 sysno: Sysno,
181 arg0: usize,
182 arg1: usize,
183 arg2: usize,
184 arg3: usize,
185 arg4: usize,
186) -> usize {
187 let ret;
188 asm!(
189 "syscall",
190 inlateout("rax") sysno as usize => ret,
191 in("rdi") arg0,
192 in("rsi") arg1,
193 in("rdx") arg2,
194 in("r10") arg3,
195 in("r8") arg4,
196 lateout("rcx") _,
197 lateout("r11") _,
198 options(nostack, preserves_flags)
199 );
200 ret
201}
202
203#[allow(clippy::missing_safety_doc)]
204#[inline(always)]
205pub unsafe fn raw_syscall5_readonly(
206 sysno: Sysno,
207 arg0: usize,
208 arg1: usize,
209 arg2: usize,
210 arg3: usize,
211 arg4: usize,
212) -> usize {
213 let ret;
214 asm!(
215 "syscall",
216 inlateout("rax") sysno as usize => ret,
217 in("rdi") arg0,
218 in("rsi") arg1,
219 in("rdx") arg2,
220 in("r10") arg3,
221 in("r8") arg4,
222 lateout("rcx") _,
223 lateout("r11") _,
224 options(nostack, preserves_flags, readonly)
225 );
226 ret
227}
228
229#[allow(clippy::missing_safety_doc)]
230#[inline(always)]
231pub unsafe fn raw_syscall6(
232 sysno: Sysno,
233 arg0: usize,
234 arg1: usize,
235 arg2: usize,
236 arg3: usize,
237 arg4: usize,
238 arg5: usize,
239) -> usize {
240 let ret;
241 asm!(
242 "syscall",
243 inlateout("rax") sysno as usize => ret,
244 in("rdi") arg0,
245 in("rsi") arg1,
246 in("rdx") arg2,
247 in("r10") arg3,
248 in("r8") arg4,
249 in("r9") arg5,
250 lateout("rcx") _,
251 lateout("r11") _,
252 options(nostack, preserves_flags)
253 );
254 ret
255}
256
257#[allow(clippy::missing_safety_doc)]
258#[inline(always)]
259pub unsafe fn raw_syscall6_readonly(
260 sysno: Sysno,
261 arg0: usize,
262 arg1: usize,
263 arg2: usize,
264 arg3: usize,
265 arg4: usize,
266 arg5: usize,
267) -> usize {
268 let ret;
269 asm!(
270 "syscall",
271 inlateout("rax") sysno as usize => ret,
272 in("rdi") arg0,
273 in("rsi") arg1,
274 in("rdx") arg2,
275 in("r10") arg3,
276 in("r8") arg4,
277 in("r9") arg5,
278 lateout("rcx") _,
279 lateout("r11") _,
280 options(nostack, preserves_flags, readonly)
281 );
282 ret
283}
284
285include!("_syscalls.rs");
286
287#[inline(always)]
288pub(crate) fn init() {}