mirror of https://github.com/openwrt/openwrt.git
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>
(cherry picked from commit d3216173ab
)
This commit is contained in:
parent
cc1b909a6b
commit
069f988d9d
|
@ -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]))
|
||||||
|
|
Loading…
Reference in New Issue