Skip to main content

linux_syscalls/inline/
s390x.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: usize;
9    asm!(
10        "svc 0",
11        in("r1") sysno as usize,
12        lateout("r2") 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: usize;
24    asm!(
25        "svc 0",
26        in("r1") sysno as usize,
27        inlateout("r2") 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: usize;
37    asm!(
38        "svc 0",
39        in("r1") sysno as usize,
40        inlateout("r2") 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        "trap2",
52        in("r1") sysno as usize,
53        in("r2") 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: usize;
62    asm!(
63        "svc 0",
64        in("r1") sysno as usize,
65        inlateout("r2") arg0 => ret,
66        in("r3") 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: usize;
76    asm!(
77        "svc 0",
78        in("r1") sysno as usize,
79        inlateout("r2") arg0 => ret,
80        in("r3") 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: usize;
90    asm!(
91        "svc 0",
92        in("r1") sysno as usize,
93        inlateout("r2") arg0 => ret,
94        in("r3") arg1,
95        in("r4") 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: usize;
105    asm!(
106        "svc 0",
107        in("r1") sysno as usize,
108        inlateout("r2") arg0 => ret,
109        in("r3") arg1,
110        in("r4") 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: usize;
126    asm!(
127        "svc 0",
128        in("r1") sysno as usize,
129        inlateout("r2") arg0 => ret,
130        in("r3") arg1,
131        in("r4") arg2,
132        in("r5") 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: usize;
148    asm!(
149        "svc 0",
150        in("r1") sysno as usize,
151        inlateout("r2") arg0 => ret,
152        in("r3") arg1,
153        in("r4") arg2,
154        in("r5") 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: usize;
171    asm!(
172        "svc 0",
173        in("r1") sysno as usize,
174        inlateout("r2") arg0 => ret,
175        in("r3") arg1,
176        in("r4") arg2,
177        in("r5") arg3,
178        in("r6") arg4,
179        options(preserves_flags)
180    );
181    ret
182}
183
184pub use raw_syscall5 as raw_syscall5_readonly;
185
186#[allow(clippy::missing_safety_doc)]
187#[inline(always)]
188pub unsafe fn raw_syscall6(
189    sysno: Sysno,
190    arg0: usize,
191    arg1: usize,
192    arg2: usize,
193    arg3: usize,
194    arg4: usize,
195    arg5: usize,
196) -> usize {
197    let ret: usize;
198    asm!(
199        "svc 0",
200        in("r1") sysno as usize,
201        inlateout("r2") arg0 => ret,
202        in("r3") arg1,
203        in("r4") arg2,
204        in("r5") arg3,
205        in("r6") arg4,
206        in("r7") arg5,
207        options(nostack, preserves_flags, readonly)
208    );
209    ret
210}
211
212pub use raw_syscall6 as raw_syscall6_readonly;
213
214include!("_syscalls.rs");
215
216#[inline(always)]
217pub(crate) unsafe fn init() {}