]>
git.proxmox.com Git - rustc.git/blob - vendor/rustix/src/backend/linux_raw/arch/inline/thumb.rs
1 //! arm Linux system calls, using thumb-mode.
3 //! In thumb-mode, r7 is the frame pointer and is not permitted to be used in
4 //! an inline asm operand, so we have to use a different register and copy it
5 //! into r7 inside the inline asm.
7 use crate::backend
::reg
::{
8 ArgReg
, FromAsm
, RetReg
, SyscallNumber
, ToAsm
, A0
, A1
, A2
, A3
, A4
, A5
, R0
,
13 pub(in crate::backend
) unsafe fn syscall0_readonly(nr
: SyscallNumber
<'_
>) -> RetReg
<R0
> {
20 nr
= in(reg
) nr
.to_asm(),
23 options(nostack
, preserves_flags
, readonly
)
29 pub(in crate::backend
) unsafe fn syscall1(nr
: SyscallNumber
<'_
>, a0
: ArgReg
<'_
, A0
>) -> RetReg
<R0
> {
36 nr
= in(reg
) nr
.to_asm(),
38 inlateout("r0") a0
.to_asm() => r0
,
39 options(nostack
, preserves_flags
)
45 pub(in crate::backend
) unsafe fn syscall1_readonly(
46 nr
: SyscallNumber
<'_
>,
55 nr
= in(reg
) nr
.to_asm(),
57 inlateout("r0") a0
.to_asm() => r0
,
58 options(nostack
, preserves_flags
, readonly
)
64 pub(in crate::backend
) unsafe fn syscall1_noreturn(nr
: SyscallNumber
<'_
>, a0
: ArgReg
<'_
, A0
>) -> ! {
68 nr
= in(reg
) nr
.to_asm(),
75 pub(in crate::backend
) unsafe fn syscall2(
76 nr
: SyscallNumber
<'_
>,
86 nr
= in(reg
) nr
.to_asm(),
88 inlateout("r0") a0
.to_asm() => r0
,
90 options(nostack
, preserves_flags
)
96 pub(in crate::backend
) unsafe fn syscall2_readonly(
97 nr
: SyscallNumber
<'_
>,
107 nr
= in(reg
) nr
.to_asm(),
109 inlateout("r0") a0
.to_asm() => r0
,
110 in("r1") a1
.to_asm(),
111 options(nostack
, preserves_flags
, readonly
)
113 FromAsm
::from_asm(r0
)
117 pub(in crate::backend
) unsafe fn syscall3(
118 nr
: SyscallNumber
<'_
>,
129 nr
= in(reg
) nr
.to_asm(),
131 inlateout("r0") a0
.to_asm() => r0
,
132 in("r1") a1
.to_asm(),
133 in("r2") a2
.to_asm(),
134 options(nostack
, preserves_flags
)
136 FromAsm
::from_asm(r0
)
140 pub(in crate::backend
) unsafe fn syscall3_readonly(
141 nr
: SyscallNumber
<'_
>,
152 nr
= in(reg
) nr
.to_asm(),
154 inlateout("r0") a0
.to_asm() => r0
,
155 in("r1") a1
.to_asm(),
156 in("r2") a2
.to_asm(),
157 options(nostack
, preserves_flags
, readonly
)
159 FromAsm
::from_asm(r0
)
163 pub(in crate::backend
) unsafe fn syscall4(
164 nr
: SyscallNumber
<'_
>,
176 nr
= in(reg
) nr
.to_asm(),
178 inlateout("r0") a0
.to_asm() => r0
,
179 in("r1") a1
.to_asm(),
180 in("r2") a2
.to_asm(),
181 in("r3") a3
.to_asm(),
182 options(nostack
, preserves_flags
)
184 FromAsm
::from_asm(r0
)
188 pub(in crate::backend
) unsafe fn syscall4_readonly(
189 nr
: SyscallNumber
<'_
>,
201 nr
= in(reg
) nr
.to_asm(),
203 inlateout("r0") a0
.to_asm() => r0
,
204 in("r1") a1
.to_asm(),
205 in("r2") a2
.to_asm(),
206 in("r3") a3
.to_asm(),
207 options(nostack
, preserves_flags
, readonly
)
209 FromAsm
::from_asm(r0
)
213 pub(in crate::backend
) unsafe fn syscall5(
214 nr
: SyscallNumber
<'_
>,
227 nr
= in(reg
) nr
.to_asm(),
229 inlateout("r0") a0
.to_asm() => r0
,
230 in("r1") a1
.to_asm(),
231 in("r2") a2
.to_asm(),
232 in("r3") a3
.to_asm(),
233 in("r4") a4
.to_asm(),
234 options(nostack
, preserves_flags
)
236 FromAsm
::from_asm(r0
)
240 pub(in crate::backend
) unsafe fn syscall5_readonly(
241 nr
: SyscallNumber
<'_
>,
254 nr
= in(reg
) nr
.to_asm(),
256 inlateout("r0") a0
.to_asm() => r0
,
257 in("r1") a1
.to_asm(),
258 in("r2") a2
.to_asm(),
259 in("r3") a3
.to_asm(),
260 in("r4") a4
.to_asm(),
261 options(nostack
, preserves_flags
, readonly
)
263 FromAsm
::from_asm(r0
)
267 pub(in crate::backend
) unsafe fn syscall6(
268 nr
: SyscallNumber
<'_
>,
282 nr
= in(reg
) nr
.to_asm(),
284 inlateout("r0") a0
.to_asm() => r0
,
285 in("r1") a1
.to_asm(),
286 in("r2") a2
.to_asm(),
287 in("r3") a3
.to_asm(),
288 in("r4") a4
.to_asm(),
289 in("r5") a5
.to_asm(),
290 options(nostack
, preserves_flags
)
292 FromAsm
::from_asm(r0
)
296 pub(in crate::backend
) unsafe fn syscall6_readonly(
297 nr
: SyscallNumber
<'_
>,
311 nr
= in(reg
) nr
.to_asm(),
313 inlateout("r0") a0
.to_asm() => r0
,
314 in("r1") a1
.to_asm(),
315 in("r2") a2
.to_asm(),
316 in("r3") a3
.to_asm(),
317 in("r4") a4
.to_asm(),
318 in("r5") a5
.to_asm(),
319 options(nostack
, preserves_flags
, readonly
)
321 FromAsm
::from_asm(r0
)