[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