Skip to main content

rust_utee/syscalls/
macros.rs

1#[macro_export]
2macro_rules! define_utee_syscalls {
3
4    ( $( $id_name:ident = $id_val:expr => fn $func_name:ident() );* $(;)? ) => {
5        $(
6            pub const $id_name: usize = $id_val + 500;
7
8            #[inline]
9            pub unsafe extern "C" fn $func_name() -> usize {
10                unsafe {
11                    $crate::syscalls::arch::syscall0($id_name)
12                }
13            }
14        )*
15    };
16
17    ( $( $id_name:ident = $id_val:expr => fn $func_name:ident($a:ident : $at:ty) );* $(;)? ) => {
18        $(
19            pub const $id_name: usize = $id_val + 500;
20
21            #[inline]
22            pub unsafe extern "C" fn $func_name($a: $at) -> usize {
23                unsafe {
24                    $crate::syscalls::arch::syscall1($id_name, $a as usize)
25                }
26            }
27        )*
28    };
29
30    ( $( $id_name:ident = $id_val:expr => fn $func_name:ident($a:ident : $at:ty, $b:ident : $bt:ty) );* $(;)? ) => {
31        $(
32            pub const $id_name: usize = $id_val + 500;
33
34            #[inline]
35            pub unsafe extern "C" fn $func_name($a: $at, $b: $bt) -> usize {
36                unsafe {
37                    $crate::syscalls::arch::syscall2($id_name, $a as usize, $b as usize)
38                }
39            }
40        )*
41    };
42
43
44    ( $( $id_name:ident = $id_val:expr => fn $func_name:ident($a:ident : $at:ty, $b:ident : $bt:ty, $c:ident : $ct:ty) );* $(;)? ) => {
45        $(
46            pub const $id_name: usize = $id_val + 500;
47
48            #[inline]
49            pub unsafe extern "C" fn $func_name($a: $at, $b: $bt, $c: $ct) -> usize {
50                unsafe {
51                    $crate::syscalls::arch::syscall3($id_name, $a as usize, $b as usize, $c as usize)
52                }
53            }
54        )*
55    };
56
57    ( $( $id_name:ident = $id_val:expr => fn $func_name:ident($a:ident : $at:ty, $b:ident : $bt:ty, $c:ident : $ct:ty, $d:ident : $dt:ty) );* $(;)? ) => {
58        $(
59            pub const $id_name: usize = $id_val + 500;
60            #[inline]
61            pub unsafe extern "C" fn $func_name($a: $at, $b: $bt, $c: $ct, $d: $dt) -> usize {
62                unsafe {
63                    $crate::syscalls::arch::syscall4($id_name, $a as usize, $b as usize, $c as usize, $d as usize)
64                }
65            }
66        )*
67    };
68
69    ( $( $id_name:ident = $id_val:expr => fn $func_name:ident($a:ident : $at:ty, $b:ident : $bt:ty, $c:ident : $ct:ty, $d:ident : $dt:ty, $e:ident : $et:ty) );* $(;)? ) => {
70        $(
71            pub const $id_name: usize = $id_val + 500;
72            #[inline]
73            pub unsafe extern "C" fn $func_name($a: $at, $b: $bt, $c: $ct, $d: $dt, $e: $et) -> usize {
74                unsafe {
75                    $crate::syscalls::arch::syscall5($id_name, $a as usize, $b as usize, $c as usize, $d as usize, $e as usize)
76                }
77            }
78        )*
79    };
80
81    ( $( $id_name:ident = $id_val:expr => fn $func_name:ident($a:ident : $at:ty, $b:ident : $bt:ty, $c:ident : $ct:ty, $d:ident : $dt:ty, $e:ident : $et:ty, $f:ident : $ft:ty) );* $(;)? ) => {
82        $(
83            pub const $id_name: usize = $id_val + 500;
84            #[inline]
85            pub unsafe extern "C" fn $func_name($a: $at, $b: $bt, $c: $ct, $d: $dt, $e: $et, $f: $ft) -> usize {
86                unsafe {
87                    $crate::syscalls::arch::syscall6($id_name, $a as usize, $b as usize, $c as usize, $d as usize, $e as usize, $f as usize)
88                }
89            }
90        )*
91    };
92
93    ( $( $id_name:ident = $id_val:expr => fn $func_name:ident($a:ident : $at:ty, $b:ident : $bt:ty, $c:ident : $ct:ty, $d:ident : $dt:ty, $e:ident : $et:ty, $f:ident : $ft:ty, $g:ident : $gt:ty) );* $(;)? ) => {
94        $(
95            pub const $id_name: usize = $id_val + 500;
96            #[inline]
97            pub unsafe extern "C" fn $func_name($a: $at, $b: $bt, $c: $ct, $d: $dt, $e: $et, $f: $ft, $g: $gt) -> usize {
98                unsafe {
99                    $crate::syscalls::arch::syscall7($id_name, $a as usize, $b as usize, $c as usize, $d as usize, $e as usize, $f as usize, $g as usize)
100                }
101            }
102        )*
103    };
104
105    ( $( $id_name:ident = $id_val:expr => fn $func_name:ident($a:ident : $at:ty, $b:ident : $bt:ty, $c:ident : $ct:ty, $d:ident : $dt:ty, $e:ident : $et:ty, $f:ident : $ft:ty, $g:ident : $gt:ty, $h:ident : $ht:ty) );* $(;)? ) => {
106        $(
107            pub const $id_name: usize = $id_val + 500;
108            #[inline]
109            pub unsafe extern "C" fn $func_name($a: $at, $b: $bt, $c: $ct, $d: $dt, $e: $et, $f: $ft, $g: $gt, $h: $ht) -> usize {
110                unsafe {
111                    $crate::syscalls::arch::syscall8($id_name, $a as usize, $b as usize, $c as usize, $d as usize, $e as usize, $f as usize, $g as usize, $h as usize)
112                }
113            }
114        )*
115    };
116}