polkavm_linux_raw/
syscall.rs

1// These macros are based on the ones from `rustix`: https://github.com/bytecodealliance/rustix/blob/2064196e201a574ffa5bc214a065cf6faffbe97c/src/backend/linux_raw/arch/mod.rs
2
3#[macro_export]
4macro_rules! syscall {
5    ($nr:expr) => {
6        $crate::syscall_impl::syscall0($nr.into())
7    };
8
9    ($nr:expr, $a0:expr) => {
10        $crate::syscall_impl::syscall1($nr.into(), $a0.into())
11    };
12
13    ($nr:expr, $a0:expr, $a1:expr) => {
14        $crate::syscall_impl::syscall2($nr.into(), $a0.into(), $a1.into())
15    };
16
17    ($nr:expr, $a0:expr, $a1:expr, $a2:expr) => {
18        $crate::syscall_impl::syscall3($nr.into(), $a0.into(), $a1.into(), $a2.into())
19    };
20
21    ($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr) => {
22        $crate::syscall_impl::syscall4($nr.into(), $a0.into(), $a1.into(), $a2.into(), $a3.into())
23    };
24
25    ($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr) => {
26        $crate::syscall_impl::syscall5($nr.into(), $a0.into(), $a1.into(), $a2.into(), $a3.into(), $a4.into())
27    };
28
29    ($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) => {
30        $crate::syscall_impl::syscall6($nr.into(), $a0.into(), $a1.into(), $a2.into(), $a3.into(), $a4.into(), $a5.into())
31    };
32
33    ($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) => {
34        $crate::syscall_impl::syscall7(
35            $nr.into(),
36            $a0.into(),
37            $a1.into(),
38            $a2.into(),
39            $a3.into(),
40            $a4.into(),
41            $a5.into(),
42            $a6.into(),
43        )
44    };
45}
46
47#[macro_export]
48macro_rules! syscall_readonly {
49    ($nr:expr) => {
50        $crate::syscall_impl::syscall0_readonly($nr.into())
51    };
52
53    ($nr:expr, $a0:expr) => {
54        $crate::syscall_impl::syscall1_readonly($nr.into(), $a0.into())
55    };
56
57    ($nr:expr, $a0:expr, $a1:expr) => {
58        $crate::syscall_impl::syscall2_readonly($nr.into(), $a0.into(), $a1.into())
59    };
60
61    ($nr:expr, $a0:expr, $a1:expr, $a2:expr) => {
62        $crate::syscall_impl::syscall3_readonly($nr.into(), $a0.into(), $a1.into(), $a2.into())
63    };
64
65    ($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr) => {
66        $crate::syscall_impl::syscall4_readonly($nr.into(), $a0.into(), $a1.into(), $a2.into(), $a3.into())
67    };
68
69    ($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr) => {
70        $crate::syscall_impl::syscall5_readonly($nr.into(), $a0.into(), $a1.into(), $a2.into(), $a3.into(), $a4.into())
71    };
72
73    ($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) => {
74        $crate::syscall_impl::syscall6_readonly($nr.into(), $a0.into(), $a1.into(), $a2.into(), $a3.into(), $a4.into(), $a5.into())
75    };
76
77    ($nr:expr, $a0:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) => {
78        $crate::syscall_impl::syscall7_readonly(
79            $nr.into(),
80            $a0.into(),
81            $a1.into(),
82            $a2.into(),
83            $a3.into(),
84            $a4.into(),
85            $a5.into(),
86            $a6.into(),
87        )
88    };
89}