@@ -4,12 +4,60 @@ use c_types::*;
44use errno:: set_errno;
55
66// from musl/src/internal/syscall_ret.c
7- pub unsafe fn syscall_return ( code : usize ) -> isize {
7+ pub unsafe fn syscall_return ( code : usize ) -> usize {
88 let max_err: usize = transmute ( -4096i64 ) ;
99 if code > max_err {
1010 set_errno ( -( code as c_int ) ) ;
11- - 1
11+ ( - 1isize ) as usize
1212 } else {
1313 transmute ( code)
1414 }
1515}
16+
17+ // from the syscall.rs crate, just added the return handling
18+ #[ macro_export]
19+ macro_rules! syscall {
20+ ( $nr: ident)
21+ => ( :: syscall_mgt:: syscall_return( :: syscall:: syscall0(
22+ :: syscall:: nr:: $nr) ) ) ;
23+
24+ ( $nr: ident, $a1: expr)
25+ => ( :: syscall_mgt:: syscall_return( :: syscall:: syscall1(
26+ :: syscall:: nr:: $nr,
27+ $a1 as usize ) ) ) ;
28+
29+ ( $nr: ident, $a1: expr, $a2: expr)
30+ => ( :: syscall_mgt:: syscall_return( :: syscall:: syscall2(
31+ :: syscall:: nr:: $nr,
32+ $a1 as usize , $a2 as usize ) ) ) ;
33+
34+ ( $nr: ident, $a1: expr, $a2: expr, $a3: expr)
35+ => ( :: syscall_mgt:: syscall_return( :: syscall:: syscall3(
36+ :: syscall:: nr:: $nr,
37+ $a1 as usize , $a2 as usize , $a3 as usize ) ) ) ;
38+
39+ ( $nr: ident, $a1: expr, $a2: expr, $a3: expr, $a4: expr)
40+ => ( :: syscall_mgt:: syscall_return( :: syscall:: syscall4(
41+ :: syscall:: nr:: $nr,
42+ $a1 as usize , $a2 as usize , $a3 as usize ,
43+ $a4 as usize ) ) ) ;
44+
45+ ( $nr: ident, $a1: expr, $a2: expr, $a3: expr, $a4: expr, $a5: expr)
46+ => ( :: syscall_mgt:: syscall_return( :: syscall:: syscall5(
47+ :: syscall:: nr:: $nr,
48+ $a1 as usize , $a2 as usize , $a3 as usize ,
49+ $a4 as usize , $a5 as usize ) ) ) ;
50+
51+ ( $nr: ident, $a1: expr, $a2: expr, $a3: expr, $a4: expr, $a5: expr, $a6: expr)
52+ => ( :: syscall_mgt:: syscall_return( :: syscall:: syscall6(
53+ :: syscall:: nr:: $nr,
54+ $a1 as usize , $a2 as usize , $a3 as usize ,
55+ $a4 as usize , $a5 as usize , $a6 as usize ) ) ) ;
56+
57+ ( $nr: ident, $a1: expr, $a2: expr, $a3: expr, $a4: expr, $a5: expr, $a6: expr, $a7: expr)
58+ => ( :: syscall_mgt:: syscall_return( :: syscall:: syscall7(
59+ :: syscall:: nr:: $nr,
60+ $a1 as usize , $a2 as usize , $a3 as usize ,
61+ $a4 as usize , $a5 as usize , $a6 as usize ,
62+ $a7 as usize ) ) ) ;
63+ }
0 commit comments