@@ -467,10 +467,11 @@ pub enum SysCall {
467
467
///
468
468
/// ## Errors
469
469
/// * **BadAddress**: The mapping does not exist
470
- #[ cfg( feature="v2p" ) ]
471
- VirtToPhys (
472
- usize , /* virtual address */
473
- ) ,
470
+ #[ cfg( feature = "v2p" ) ]
471
+ VirtToPhys ( usize /* virtual address */ ) ,
472
+
473
+ /// Return five scalars to the sender
474
+ ReturnScalar5 ( MessageSender , usize , usize , usize , usize , usize ) ,
474
475
475
476
/// This syscall does not exist. It captures all possible
476
477
/// arguments so detailed analysis can be performed.
@@ -516,8 +517,9 @@ pub enum SysCallNumber {
516
517
JoinThread = 36 ,
517
518
SetExceptionHandler = 37 ,
518
519
AdjustProcessLimit = 38 ,
519
- #[ cfg( feature= "v2p" ) ]
520
+ #[ cfg( feature = "v2p" ) ]
520
521
VirtToPhys = 39 ,
522
+ ReturnScalar5 = 40 ,
521
523
Invalid ,
522
524
}
523
525
@@ -562,8 +564,9 @@ impl SysCallNumber {
562
564
36 => JoinThread ,
563
565
37 => SetExceptionHandler ,
564
566
38 => AdjustProcessLimit ,
565
- #[ cfg( feature= "v2p" ) ]
567
+ #[ cfg( feature = "v2p" ) ]
566
568
39 => VirtToPhys ,
569
+ 40 => ReturnScalar5 ,
567
570
_ => Invalid ,
568
571
}
569
572
}
@@ -928,15 +931,18 @@ impl SysCall {
928
931
0 ,
929
932
0 ,
930
933
] ,
931
- #[ cfg( feature="v2p" ) ]
932
- SysCall :: VirtToPhys ( vaddr) => [
933
- SysCallNumber :: VirtToPhys as usize ,
934
- * vaddr,
935
- 0 ,
936
- 0 ,
937
- 0 ,
938
- 0 ,
939
- 0 ,
934
+ #[ cfg( feature = "v2p" ) ]
935
+ SysCall :: VirtToPhys ( vaddr) => {
936
+ [ SysCallNumber :: VirtToPhys as usize , * vaddr, 0 , 0 , 0 , 0 , 0 , 0 ]
937
+ }
938
+ SysCall :: ReturnScalar5 ( sender, arg1, arg2, arg3, arg4, arg5) => [
939
+ SysCallNumber :: ReturnScalar5 as usize ,
940
+ sender. to_usize ( ) ,
941
+ * arg1,
942
+ * arg2,
943
+ * arg3,
944
+ * arg4,
945
+ * arg5,
940
946
0 ,
941
947
] ,
942
948
SysCall :: Invalid ( a1, a2, a3, a4, a5, a6, a7) => [
@@ -1103,8 +1109,11 @@ impl SysCall {
1103
1109
SysCallNumber :: JoinThread => SysCall :: JoinThread ( a1 as _ ) ,
1104
1110
SysCallNumber :: SetExceptionHandler => SysCall :: SetExceptionHandler ( a1 as _ , a2 as _ ) ,
1105
1111
SysCallNumber :: AdjustProcessLimit => SysCall :: AdjustProcessLimit ( a1, a2, a3) ,
1106
- #[ cfg( feature= "v2p" ) ]
1112
+ #[ cfg( feature = "v2p" ) ]
1107
1113
SysCallNumber :: VirtToPhys => SysCall :: VirtToPhys ( a1 as _ ) ,
1114
+ SysCallNumber :: ReturnScalar5 => {
1115
+ SysCall :: ReturnScalar5 ( MessageSender :: from_usize ( a1) , a2, a3, a4, a5, a6)
1116
+ }
1108
1117
SysCallNumber :: Invalid => SysCall :: Invalid ( a1, a2, a3, a4, a5, a6, a7) ,
1109
1118
} )
1110
1119
}
@@ -1872,7 +1881,7 @@ pub fn set_exception_handler(
1872
1881
*/
1873
1882
1874
1883
/// Translate a virtual address to a physical address
1875
- #[ cfg( feature= "v2p" ) ]
1884
+ #[ cfg( feature = "v2p" ) ]
1876
1885
pub fn virt_to_phys ( va : usize ) -> core:: result:: Result < usize , Error > {
1877
1886
rsyscall ( SysCall :: VirtToPhys ( va) ) . and_then ( |result| {
1878
1887
if let Result :: Scalar1 ( pa) = result {
0 commit comments