mirror of
				https://github.com/openwrt/openwrt.git
				synced 2025-10-30 07:49:23 +08:00 
			
		
		
		
	toolchain: binutils: fix compilation with GCC15
GCC15 has switched the C language default from GNU17 to GNU23[1] and this
causes builds to fail with:
In file included from mips-opc.c:29:
mips-opc.c: In function 'decode_mips_operand':
mips-formats.h:86:7: error: expected identifier or '(' before 'static_assert'
   86 |       static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \
      |       ^~~~~~~~~~~~~
mips-opc.c:214:15: note: in expansion of macro 'MAPPED_REG'
  214 |     case 'z': MAPPED_REG (0, 0, GP, reg_0_map);
      |               ^~~~~~~~~~
So, backport upstream fix for this[2] to fix compilation with GCC15.
Patch for 2.40 was manually refreshed as part of the S390 code does not
exist in 2.40 as it was added after it.
[1] https://gcc.gnu.org/gcc-15/porting_to.html#c23
[2] https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=8ebe62f3f0d27806b1bf69f301f5e188b4acd2b4
Fixes: #18678
Link: https://github.com/openwrt/openwrt/pull/18681
Signed-off-by: Robert Marko <robimarko@gmail.com>
			
			
This commit is contained in:
		| @ -0,0 +1,66 @@ | ||||
| From 8ebe62f3f0d27806b1bf69f301f5e188b4acd2b4 Mon Sep 17 00:00:00 2001 | ||||
| From: Sam James <sam@gentoo.org> | ||||
| Date: Sat, 16 Nov 2024 05:03:52 +0000 | ||||
| Subject: [PATCH] opcodes: fix -std=gnu23 compatibility wrt static_assert | ||||
|  | ||||
| static_assert is declared in C23 so we can't reuse that identifier: | ||||
| * Define our own static_assert conditionally; | ||||
|  | ||||
| * Rename "static assert" hacks to _N as we do already in some places | ||||
|   to avoid a conflict. | ||||
|  | ||||
| ChangeLog: | ||||
| 	PR ld/32372 | ||||
|  | ||||
|         * i386-gen.c (static_assert): Define conditionally. | ||||
|         * mips-formats.h (MAPPED_INT): Rename identifier. | ||||
|         (MAPPED_REG): Rename identifier. | ||||
|         (OPTIONAL_MAPPED_REG): Rename identifier. | ||||
|         * s390-opc.c (static_assert): Define conditionally. | ||||
| --- | ||||
|  opcodes/i386-gen.c     | 2 ++ | ||||
|  opcodes/mips-formats.h | 6 +++--- | ||||
|  opcodes/s390-opc.c     | 2 ++ | ||||
|  3 files changed, 7 insertions(+), 3 deletions(-) | ||||
|  | ||||
| --- a/opcodes/i386-gen.c | ||||
| +++ b/opcodes/i386-gen.c | ||||
| @@ -33,7 +33,9 @@ | ||||
|   | ||||
|  /* Build-time checks are preferrable over runtime ones.  Use this construct | ||||
|     in preference where possible.  */ | ||||
| +#ifndef static_assert | ||||
|  #define static_assert(e) ((void)sizeof (struct { int _:1 - 2 * !(e); })) | ||||
| +#endif | ||||
|   | ||||
|  static const char *program_name = NULL; | ||||
|  static int debug = 0; | ||||
| --- a/opcodes/mips-formats.h | ||||
| +++ b/opcodes/mips-formats.h | ||||
| @@ -49,7 +49,7 @@ | ||||
|  #define MAPPED_INT(SIZE, LSB, MAP, PRINT_HEX) \ | ||||
|    { \ | ||||
|      typedef char ATTRIBUTE_UNUSED \ | ||||
| -      static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
| +      static_assert_3[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
|      static const struct mips_mapped_int_operand op = { \ | ||||
|        { OP_MAPPED_INT, SIZE, LSB }, MAP, PRINT_HEX \ | ||||
|      }; \ | ||||
| @@ -83,7 +83,7 @@ | ||||
|  #define MAPPED_REG(SIZE, LSB, BANK, MAP) \ | ||||
|    { \ | ||||
|      typedef char ATTRIBUTE_UNUSED \ | ||||
| -      static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
| +      static_assert_4[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
|      static const struct mips_reg_operand op = { \ | ||||
|        { OP_REG, SIZE, LSB }, OP_REG_##BANK, MAP \ | ||||
|      }; \ | ||||
| @@ -93,7 +93,7 @@ | ||||
|  #define OPTIONAL_MAPPED_REG(SIZE, LSB, BANK, MAP) \ | ||||
|    { \ | ||||
|      typedef char ATTRIBUTE_UNUSED \ | ||||
| -      static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
| +      static_assert_5[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
|      static const struct mips_reg_operand op = { \ | ||||
|        { OP_OPTIONAL_REG, SIZE, LSB }, OP_REG_##BANK, MAP \ | ||||
|      }; \ | ||||
| @ -0,0 +1,78 @@ | ||||
| From 8ebe62f3f0d27806b1bf69f301f5e188b4acd2b4 Mon Sep 17 00:00:00 2001 | ||||
| From: Sam James <sam@gentoo.org> | ||||
| Date: Sat, 16 Nov 2024 05:03:52 +0000 | ||||
| Subject: [PATCH] opcodes: fix -std=gnu23 compatibility wrt static_assert | ||||
|  | ||||
| static_assert is declared in C23 so we can't reuse that identifier: | ||||
| * Define our own static_assert conditionally; | ||||
|  | ||||
| * Rename "static assert" hacks to _N as we do already in some places | ||||
|   to avoid a conflict. | ||||
|  | ||||
| ChangeLog: | ||||
| 	PR ld/32372 | ||||
|  | ||||
|         * i386-gen.c (static_assert): Define conditionally. | ||||
|         * mips-formats.h (MAPPED_INT): Rename identifier. | ||||
|         (MAPPED_REG): Rename identifier. | ||||
|         (OPTIONAL_MAPPED_REG): Rename identifier. | ||||
|         * s390-opc.c (static_assert): Define conditionally. | ||||
| --- | ||||
|  opcodes/i386-gen.c     | 2 ++ | ||||
|  opcodes/mips-formats.h | 6 +++--- | ||||
|  opcodes/s390-opc.c     | 2 ++ | ||||
|  3 files changed, 7 insertions(+), 3 deletions(-) | ||||
|  | ||||
| --- a/opcodes/i386-gen.c | ||||
| +++ b/opcodes/i386-gen.c | ||||
| @@ -30,7 +30,9 @@ | ||||
|   | ||||
|  /* Build-time checks are preferrable over runtime ones.  Use this construct | ||||
|     in preference where possible.  */ | ||||
| +#ifndef static_assert | ||||
|  #define static_assert(e) ((void)sizeof (struct { int _:1 - 2 * !(e); })) | ||||
| +#endif | ||||
|   | ||||
|  static const char *program_name = NULL; | ||||
|  static int debug = 0; | ||||
| --- a/opcodes/mips-formats.h | ||||
| +++ b/opcodes/mips-formats.h | ||||
| @@ -49,7 +49,7 @@ | ||||
|  #define MAPPED_INT(SIZE, LSB, MAP, PRINT_HEX) \ | ||||
|    { \ | ||||
|      typedef char ATTRIBUTE_UNUSED \ | ||||
| -      static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
| +      static_assert_3[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
|      static const struct mips_mapped_int_operand op = { \ | ||||
|        { OP_MAPPED_INT, SIZE, LSB }, MAP, PRINT_HEX \ | ||||
|      }; \ | ||||
| @@ -83,7 +83,7 @@ | ||||
|  #define MAPPED_REG(SIZE, LSB, BANK, MAP) \ | ||||
|    { \ | ||||
|      typedef char ATTRIBUTE_UNUSED \ | ||||
| -      static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
| +      static_assert_4[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
|      static const struct mips_reg_operand op = { \ | ||||
|        { OP_REG, SIZE, LSB }, OP_REG_##BANK, MAP \ | ||||
|      }; \ | ||||
| @@ -93,7 +93,7 @@ | ||||
|  #define OPTIONAL_MAPPED_REG(SIZE, LSB, BANK, MAP) \ | ||||
|    { \ | ||||
|      typedef char ATTRIBUTE_UNUSED \ | ||||
| -      static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
| +      static_assert_5[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
|      static const struct mips_reg_operand op = { \ | ||||
|        { OP_OPTIONAL_REG, SIZE, LSB }, OP_REG_##BANK, MAP \ | ||||
|      }; \ | ||||
| --- a/opcodes/s390-opc.c | ||||
| +++ b/opcodes/s390-opc.c | ||||
| @@ -36,7 +36,9 @@ | ||||
|   | ||||
|  /* Build-time checks are preferrable over runtime ones.  Use this construct | ||||
|     in preference where possible.  */ | ||||
| +#ifndef static_assert | ||||
|  #define static_assert(e) ((void)sizeof (struct { int _:1 - 2 * !(e); })) | ||||
| +#endif | ||||
|   | ||||
|  #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) | ||||
|   | ||||
| @ -0,0 +1,78 @@ | ||||
| From 8ebe62f3f0d27806b1bf69f301f5e188b4acd2b4 Mon Sep 17 00:00:00 2001 | ||||
| From: Sam James <sam@gentoo.org> | ||||
| Date: Sat, 16 Nov 2024 05:03:52 +0000 | ||||
| Subject: [PATCH] opcodes: fix -std=gnu23 compatibility wrt static_assert | ||||
|  | ||||
| static_assert is declared in C23 so we can't reuse that identifier: | ||||
| * Define our own static_assert conditionally; | ||||
|  | ||||
| * Rename "static assert" hacks to _N as we do already in some places | ||||
|   to avoid a conflict. | ||||
|  | ||||
| ChangeLog: | ||||
| 	PR ld/32372 | ||||
|  | ||||
|         * i386-gen.c (static_assert): Define conditionally. | ||||
|         * mips-formats.h (MAPPED_INT): Rename identifier. | ||||
|         (MAPPED_REG): Rename identifier. | ||||
|         (OPTIONAL_MAPPED_REG): Rename identifier. | ||||
|         * s390-opc.c (static_assert): Define conditionally. | ||||
| --- | ||||
|  opcodes/i386-gen.c     | 2 ++ | ||||
|  opcodes/mips-formats.h | 6 +++--- | ||||
|  opcodes/s390-opc.c     | 2 ++ | ||||
|  3 files changed, 7 insertions(+), 3 deletions(-) | ||||
|  | ||||
| --- a/opcodes/i386-gen.c | ||||
| +++ b/opcodes/i386-gen.c | ||||
| @@ -30,7 +30,9 @@ | ||||
|   | ||||
|  /* Build-time checks are preferrable over runtime ones.  Use this construct | ||||
|     in preference where possible.  */ | ||||
| +#ifndef static_assert | ||||
|  #define static_assert(e) ((void)sizeof (struct { int _:1 - 2 * !(e); })) | ||||
| +#endif | ||||
|   | ||||
|  static const char *program_name = NULL; | ||||
|  static int debug = 0; | ||||
| --- a/opcodes/mips-formats.h | ||||
| +++ b/opcodes/mips-formats.h | ||||
| @@ -49,7 +49,7 @@ | ||||
|  #define MAPPED_INT(SIZE, LSB, MAP, PRINT_HEX) \ | ||||
|    { \ | ||||
|      typedef char ATTRIBUTE_UNUSED \ | ||||
| -      static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
| +      static_assert_3[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
|      static const struct mips_mapped_int_operand op = { \ | ||||
|        { OP_MAPPED_INT, SIZE, LSB }, MAP, PRINT_HEX \ | ||||
|      }; \ | ||||
| @@ -83,7 +83,7 @@ | ||||
|  #define MAPPED_REG(SIZE, LSB, BANK, MAP) \ | ||||
|    { \ | ||||
|      typedef char ATTRIBUTE_UNUSED \ | ||||
| -      static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
| +      static_assert_4[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
|      static const struct mips_reg_operand op = { \ | ||||
|        { OP_REG, SIZE, LSB }, OP_REG_##BANK, MAP \ | ||||
|      }; \ | ||||
| @@ -93,7 +93,7 @@ | ||||
|  #define OPTIONAL_MAPPED_REG(SIZE, LSB, BANK, MAP) \ | ||||
|    { \ | ||||
|      typedef char ATTRIBUTE_UNUSED \ | ||||
| -      static_assert[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
| +      static_assert_5[(1 << (SIZE)) == ARRAY_SIZE (MAP)]; \ | ||||
|      static const struct mips_reg_operand op = { \ | ||||
|        { OP_OPTIONAL_REG, SIZE, LSB }, OP_REG_##BANK, MAP \ | ||||
|      }; \ | ||||
| --- a/opcodes/s390-opc.c | ||||
| +++ b/opcodes/s390-opc.c | ||||
| @@ -36,7 +36,9 @@ | ||||
|   | ||||
|  /* Build-time checks are preferrable over runtime ones.  Use this construct | ||||
|     in preference where possible.  */ | ||||
| +#ifndef static_assert | ||||
|  #define static_assert(e) ((void)sizeof (struct { int _:1 - 2 * !(e); })) | ||||
| +#endif | ||||
|   | ||||
|  #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Robert Marko
					Robert Marko