@@ -53,6 +53,7 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream {
5353 let f = parse_macro_input ! ( input as ItemFn ) ;
5454
5555 // check the function arguments
56+ #[ cfg( not( feature = "u-boot" ) ) ]
5657 if f. sig . inputs . len ( ) > 3 {
5758 return parse:: Error :: new (
5859 f. sig . inputs . last ( ) . unwrap ( ) . span ( ) ,
@@ -61,6 +62,17 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream {
6162 . to_compile_error ( )
6263 . into ( ) ;
6364 }
65+ #[ cfg( feature = "u-boot" ) ]
66+ if f. sig . inputs . len ( ) != 2 {
67+ return parse:: Error :: new (
68+ f. sig . inputs . last ( ) . unwrap ( ) . span ( ) ,
69+ "`#[entry]` function must have exactly two arguments" ,
70+ )
71+ . to_compile_error ( )
72+ . into ( ) ;
73+ }
74+
75+ #[ cfg( not( feature = "u-boot" ) ) ]
6476 for arg in & f. sig . inputs {
6577 match arg {
6678 FnArg :: Receiver ( _) => {
@@ -77,6 +89,40 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream {
7789 }
7890 }
7991 }
92+ #[ cfg( feature = "u-boot" ) ]
93+ {
94+ // We have checked that there are two arguments above.
95+ let ( a1, a2) = ( & f. sig . inputs [ 0 ] , & f. sig . inputs [ 1 ] ) ;
96+
97+ match a1 {
98+ FnArg :: Receiver ( _) => {
99+ return parse:: Error :: new ( a1. span ( ) , "invalid argument" )
100+ . to_compile_error ( )
101+ . into ( ) ;
102+ }
103+ FnArg :: Typed ( t) => {
104+ if !is_simple_type ( & t. ty , "c_int" ) {
105+ return parse:: Error :: new ( t. ty . span ( ) , "argument type must be c_int" )
106+ . to_compile_error ( )
107+ . into ( ) ;
108+ }
109+ }
110+ }
111+ match a2 {
112+ FnArg :: Receiver ( _) => {
113+ return parse:: Error :: new ( a2. span ( ) , "invalid argument" )
114+ . to_compile_error ( )
115+ . into ( ) ;
116+ }
117+ FnArg :: Typed ( t) => {
118+ if !is_simple_type ( & t. ty , "usize" ) {
119+ return parse:: Error :: new ( t. ty . span ( ) , "argument type must be usize" )
120+ . to_compile_error ( )
121+ . into ( ) ;
122+ }
123+ }
124+ }
125+ }
80126
81127 // check the function signature
82128 let valid_signature = f. sig . constness . is_none ( )
0 commit comments