[Skiboot] [PATCH] fix: Fix compile errors with GCC 15

Dan Horák dan at danny.cz
Sat Mar 29 04:28:11 AEDT 2025


On Fri, 28 Mar 2025 22:43:54 +0530
Aditya Gupta <adityag at linux.ibm.com> wrote:

> GCC 15 has introduced errors for "unterminated-string-initialization"
> Which treat any character array initialised with a string with a larger
> size such that the null-character is not getting included in the
> character array, GCC 15 gives a warning (and warnings are treated as
> errors in skiboot compile).
> 
> This causes following errors on compiling skiboot with GCC 15:
> 
>     core/init.c:79:27: error: initializer-string for array of ‘unsigned char’ truncates NUL terminator but destination lacks ‘nonstring’ attribute (9 chars into 8 available) [-Werror=unterminated
>     -string-initialization]
>        79 |         .eye_catcher    = "OPALdbug",
>           |                           ^~~~~~~~~~
>     cc1: all warnings being treated as errors
>     ...
> 
>     In file included from hdata/hdata.h:8,
>                      from hdata/spira.c:17:
>     hdata/spira.c:35:32: error: initializer-string for array of ‘char’ truncates NUL terminator but destination lacks ‘nonstring’ attribute (7 chars into 6 available) [-Werror=unterminated-string
>     -initialization]
>        35 |         .hdr = HDIF_SIMPLE_HDR("PROCIN", 1, struct proc_init_data),
>           |                                ^~~~~~~~
>     hdata/hdif.h:45:68: note: in definition of macro ‘HDIF_ID’
>        45 | #define HDIF_ID(_id)            .d1f0 = CPU_TO_BE16(0xd1f0), .id = _id
>           |                                                                    ^~~
>     hdata/spira.c:35:16: note: in expansion of macro ‘HDIF_SIMPLE_HDR’
>        35 |         .hdr = HDIF_SIMPLE_HDR("PROCIN", 1, struct proc_init_data),
>           |                ^~~~~~~~~~~~~~~
>     ...
>      (similar errors few more times with hdata)
>     ...
>     cc1: all warnings being treated as errors```
> 
> Fix the errors by marking character arrays which are not supposed to be
> "null-terminated strings" with "nonstring" attribute, such as
> eye-catchers in skiboot debug descriptor and hdif header

do you know since what version GCC supports the "nostring" attribute?


		Dan
 
> Signed-off-by: Aditya Gupta <adityag at linux.ibm.com>
> ---
>  hdata/hdif.h               | 2 +-
>  include/compiler.h         | 7 +++++++
>  include/debug_descriptor.h | 2 +-
>  3 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/hdata/hdif.h b/hdata/hdif.h
> index 38df6c271b55..f31d91428274 100644
> --- a/hdata/hdif.h
> +++ b/hdata/hdif.h
> @@ -10,7 +10,7 @@
>  
>  struct HDIF_common_hdr {
>  	__be16	d1f0;		/* 0xd1f0 */
> -	char	id[6];		/* eye catcher string */
> +	char	id[6] __nonstring;	/* eye catcher string */
>  	__be16	instnum;	/* instance number */
>  	__be16	version;	/* version */
>  	__be32	total_len;	/* total structure length */
> diff --git a/include/compiler.h b/include/compiler.h
> index 77821ec098e6..74ca80993cd9 100644
> --- a/include/compiler.h
> +++ b/include/compiler.h
> @@ -20,6 +20,13 @@
>  #define __warn_unused_result	__attribute__((warn_unused_result))
>  #define __noinline		__attribute__((noinline))
>  
> +/*
> + * GCC 15 introduces errors for "unterminated-string-initialization", mark
> + * character arrays that are not intended to be null-terminated as
> + * 'nonstring', such as eye-catchers
> + */
> +#define __nonstring		__attribute((nonstring))
> +
>  #if 0 /* Provided by gcc stddef.h */
>  #define offsetof(type,m)	__builtin_offsetof(type,m)
>  #endif
> diff --git a/include/debug_descriptor.h b/include/debug_descriptor.h
> index 3ac487b00187..99c7b0b5c47b 100644
> --- a/include/debug_descriptor.h
> +++ b/include/debug_descriptor.h
> @@ -9,7 +9,7 @@
>   * 0x80 in the sapphire binary
>   */
>  struct debug_descriptor {
> -	u8	eye_catcher[8];	/* "OPALdbug" */
> +	u8	eye_catcher[8] __nonstring;	/* "OPALdbug" */
>  #define DEBUG_DESC_VERSION	1
>  	__be32	version;
>  	u8	console_log_levels;	/* high 4 bits in memory,
> -- 
> 2.49.0
> 
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot


More information about the Skiboot mailing list