Skip to main content

linux_syscalls/inline/
aarch64.rs

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