[Skiboot] [PATCH] sparse: fix OPAL API function argument test

Cédric Le Goater clg at fr.ibm.com
Thu Jun 13 18:12:28 AEST 2019


On 13/06/2019 06:58, Stewart Smith wrote:
> This is based on a patch from Cédric from way back in 2015 (probably
> around the time we split opal.h into opal-api.h and opal-internal.h)
> that for some reason never got merged.

That was on 24/02/2015 ! :)

Thanks

C. 

> 
> It means that false warnings spat out of sparse due to our crazy-ass
> macro usage get silenced.
> 
> It fixes warnings such as
> 
>     "Using plain integer as NULL pointer"
> 
> when the prototype of the function is tested with the __test_args#
> defines.
> 
> Suggested-by: Cédric Le Goater <clg at fr.ibm.com>
> Signed-off-by: Stewart Smith <stewart at linux.ibm.com>
> ---
>  include/opal-internal.h | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/include/opal-internal.h b/include/opal-internal.h
> index 60d7f7b73181..448f4b5f1fcb 100644
> --- a/include/opal-internal.h
> +++ b/include/opal-internal.h
> @@ -28,10 +28,17 @@ struct opal_table_entry {
>  	u32	nargs;
>  };
> 
> +#ifdef __CHECKER__
> +#define __opal_func_test_arg(__func, __nargs) 0
> +#else
> +#define __opal_func_test_arg(__func, __nargs) 				\
> +	sizeof(__func( __test_args##__nargs ))
> +#endif
> +
>  #define opal_call(__tok, __func, __nargs)				\
>  static struct opal_table_entry __e_##__func __used __section(".opal_table") = \
>  { .func = __func, .token = __tok,					\
> -  .nargs = __nargs + 0 * sizeof(__func( __test_args##__nargs )) }
> +  .nargs = __nargs + 0 * __opal_func_test_arg(__func, __nargs) }
> 
>  /* Make sure function takes args they claim.  Look away now... */
>  #define __test_args0
> @@ -57,7 +64,7 @@ void opal_dynamic_event_free(__be64 event);
>  extern void add_opal_node(void);
> 
>  #define opal_register(token, func, nargs)				\
> -	__opal_register((token) + 0*sizeof(func(__test_args##nargs)),	\
> +	__opal_register((token) + 0*__opal_func_test_arg(func, nargs),	\
>  			(func), (nargs))
>  extern void __opal_register(uint64_t token, void *func, unsigned num_args);
> 



More information about the Skiboot mailing list