mirror of
https://git.busybox.net/buildroot.git
synced 2024-11-27 07:23:30 +08:00
package/gcc: 11.3.0: fix glibc crash on G4 ppc cpus
gcc 11.3.0 contains a backported patch [1] that introduce a regression for old powerpc cpus like the powerpc 7400 (G4). The glibc crash the init process due to a wrong asm machine directive (.machine). Run /sbin/init as init process init[1]: segfault (11) at 7369693e nip 6f6e08 lr 6f6a68 code 1 in libc.so.6[690000+18f000] init[1]: code: 280a000c 41c1ffe0 811edb80 554a103a 7d48502e 7d4a4214 7d4903a6 4e800420 init[1]: code: 2c08007a 4bffffbc 89290000 5529103a <7d2a482e> 2c090000 41c2ff78 7fe4fb78 Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b Backport two patches from the gcc-11 stable branch (the upcoming gcc 11.4.0). [1] https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3cb53c10831be59d967d9dce8e7980fee4703500 Fixes: https://gitlab.com/kubu93/buildroot/-/jobs/2976071284 Signed-off-by: Romain Naour <romain.naour@gmail.com> Cc: Joel Stanley <joel@jms.id.au> Reviewed-by: Joel Stanley <joel@jms.id.au> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
This commit is contained in:
parent
1891419db3
commit
b42c6b2475
120
package/gcc/11.3.0/0005-rs6000-Improve-.machine.patch
Normal file
120
package/gcc/11.3.0/0005-rs6000-Improve-.machine.patch
Normal file
@ -0,0 +1,120 @@
|
||||
From ca2c3a7d3db7a699c358d3408f820396dd536fc8 Mon Sep 17 00:00:00 2001
|
||||
From: Segher Boessenkool <segher@kernel.crashing.org>
|
||||
Date: Tue, 1 Mar 2022 17:04:29 +0000
|
||||
Subject: [PATCH 5/6] rs6000: Improve .machine
|
||||
|
||||
This adds more correct .machine for most older CPUs. It should be
|
||||
conservative in the sense that everything we handled before we handle at
|
||||
least as well now. This does not yet revamp the server CPU handling, it
|
||||
is too risky at this point in time.
|
||||
|
||||
Tested on powerpc64-linux {-m32,-m64}. Also manually tested with all
|
||||
-mcpu=, and the output of that passed through the GNU assembler.
|
||||
|
||||
2022-03-04 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_machine_from_flags): Restructure a
|
||||
bit. Handle most older CPUs.
|
||||
|
||||
(cherry picked from commit 77eccbf39ed55297802bb66dff5f62507a7239e3)
|
||||
(cherry picked from commit fc7e603edc67c66a14f893f3b5a0a34e7d26f77c)
|
||||
Signed-off-by: Romain Naour <romain.naour@gmail.com>
|
||||
---
|
||||
gcc/config/rs6000/rs6000.c | 81 +++++++++++++++++++++++++-------------
|
||||
1 file changed, 54 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
|
||||
index 0421dc7adb3..0a55c979c36 100644
|
||||
--- a/gcc/config/rs6000/rs6000.c
|
||||
+++ b/gcc/config/rs6000/rs6000.c
|
||||
@@ -5742,33 +5742,60 @@ const char *rs6000_machine;
|
||||
const char *
|
||||
rs6000_machine_from_flags (void)
|
||||
{
|
||||
- /* For some CPUs, the machine cannot be determined by ISA flags. We have to
|
||||
- check them first. */
|
||||
- switch (rs6000_cpu)
|
||||
- {
|
||||
- case PROCESSOR_PPC8540:
|
||||
- case PROCESSOR_PPC8548:
|
||||
- return "e500";
|
||||
-
|
||||
- case PROCESSOR_PPCE300C2:
|
||||
- case PROCESSOR_PPCE300C3:
|
||||
- return "e300";
|
||||
-
|
||||
- case PROCESSOR_PPCE500MC:
|
||||
- return "e500mc";
|
||||
-
|
||||
- case PROCESSOR_PPCE500MC64:
|
||||
- return "e500mc64";
|
||||
-
|
||||
- case PROCESSOR_PPCE5500:
|
||||
- return "e5500";
|
||||
-
|
||||
- case PROCESSOR_PPCE6500:
|
||||
- return "e6500";
|
||||
-
|
||||
- default:
|
||||
- break;
|
||||
- }
|
||||
+ /* e300 and e500 */
|
||||
+ if (rs6000_cpu == PROCESSOR_PPCE300C2 || rs6000_cpu == PROCESSOR_PPCE300C3)
|
||||
+ return "e300";
|
||||
+ if (rs6000_cpu == PROCESSOR_PPC8540 || rs6000_cpu == PROCESSOR_PPC8548)
|
||||
+ return "e500";
|
||||
+ if (rs6000_cpu == PROCESSOR_PPCE500MC)
|
||||
+ return "e500mc";
|
||||
+ if (rs6000_cpu == PROCESSOR_PPCE500MC64)
|
||||
+ return "e500mc64";
|
||||
+ if (rs6000_cpu == PROCESSOR_PPCE5500)
|
||||
+ return "e5500";
|
||||
+ if (rs6000_cpu == PROCESSOR_PPCE6500)
|
||||
+ return "e6500";
|
||||
+
|
||||
+ /* 400 series */
|
||||
+ if (rs6000_cpu == PROCESSOR_PPC403)
|
||||
+ return "\"403\"";
|
||||
+ if (rs6000_cpu == PROCESSOR_PPC405)
|
||||
+ return "\"405\"";
|
||||
+ if (rs6000_cpu == PROCESSOR_PPC440)
|
||||
+ return "\"440\"";
|
||||
+ if (rs6000_cpu == PROCESSOR_PPC476)
|
||||
+ return "\"476\"";
|
||||
+
|
||||
+ /* A2 */
|
||||
+ if (rs6000_cpu == PROCESSOR_PPCA2)
|
||||
+ return "a2";
|
||||
+
|
||||
+ /* Cell BE */
|
||||
+ if (rs6000_cpu == PROCESSOR_CELL)
|
||||
+ return "cell";
|
||||
+
|
||||
+ /* Titan */
|
||||
+ if (rs6000_cpu == PROCESSOR_TITAN)
|
||||
+ return "titan";
|
||||
+
|
||||
+ /* 500 series and 800 series */
|
||||
+ if (rs6000_cpu == PROCESSOR_MPCCORE)
|
||||
+ return "\"821\"";
|
||||
+
|
||||
+ /* 600 series and 700 series, "classic" */
|
||||
+ if (rs6000_cpu == PROCESSOR_PPC601 || rs6000_cpu == PROCESSOR_PPC603
|
||||
+ || rs6000_cpu == PROCESSOR_PPC604 || rs6000_cpu == PROCESSOR_PPC604e
|
||||
+ || rs6000_cpu == PROCESSOR_PPC750 || rs6000_cpu == PROCESSOR_POWERPC)
|
||||
+ return "ppc";
|
||||
+
|
||||
+ /* Classic with AltiVec, "G4" */
|
||||
+ if (rs6000_cpu == PROCESSOR_PPC7400 || rs6000_cpu == PROCESSOR_PPC7450)
|
||||
+ return "\"7450\"";
|
||||
+
|
||||
+ /* The older 64-bit CPUs */
|
||||
+ if (rs6000_cpu == PROCESSOR_PPC620 || rs6000_cpu == PROCESSOR_PPC630
|
||||
+ || rs6000_cpu == PROCESSOR_RS64A || rs6000_cpu == PROCESSOR_POWERPC64)
|
||||
+ return "ppc64";
|
||||
|
||||
HOST_WIDE_INT flags = rs6000_isa_flags;
|
||||
|
||||
--
|
||||
2.34.3
|
||||
|
@ -0,0 +1,68 @@
|
||||
From 6de33ed642f119f1e2543095dd56e4a94f97c27f Mon Sep 17 00:00:00 2001
|
||||
From: Segher Boessenkool <segher@kernel.crashing.org>
|
||||
Date: Fri, 11 Mar 2022 21:15:18 +0000
|
||||
Subject: [PATCH 6/6] rs6000: Do not use rs6000_cpu for .machine ppc and ppc64
|
||||
(PR104829)
|
||||
|
||||
Fixes: 77eccbf39ed5
|
||||
|
||||
rs6000.h has
|
||||
#define PROCESSOR_POWERPC PROCESSOR_PPC604
|
||||
#define PROCESSOR_POWERPC64 PROCESSOR_RS64A
|
||||
which means that if you use things like -mcpu=powerpc -mvsx it will no
|
||||
longer work after my latest .machine patch. This causes GCC build errors
|
||||
in some cases, not a good idea (even if the errors are actually
|
||||
pre-existing: using -mvsx with a machine that does not have VSX cannot
|
||||
work properly).
|
||||
|
||||
2022-03-11 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
PR target/104829
|
||||
* config/rs6000/rs6000.c (rs6000_machine_from_flags): Don't output
|
||||
"ppc" and "ppc64" based on rs6000_cpu.
|
||||
|
||||
(cherry picked from commit 80fcc4b6afee72443bef551064826b3b4b6785e6)
|
||||
(cherry picked from commit d87e0e297b1cba73a0c055d2a3e9267d288f435a)
|
||||
Signed-off-by: Romain Naour <romain.naour@gmail.com>
|
||||
---
|
||||
gcc/config/rs6000/rs6000.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
|
||||
index 0a55c979c36..7e5cdd34840 100644
|
||||
--- a/gcc/config/rs6000/rs6000.c
|
||||
+++ b/gcc/config/rs6000/rs6000.c
|
||||
@@ -5782,20 +5782,28 @@ rs6000_machine_from_flags (void)
|
||||
if (rs6000_cpu == PROCESSOR_MPCCORE)
|
||||
return "\"821\"";
|
||||
|
||||
+#if 0
|
||||
+ /* This (and ppc64 below) are disabled here (for now at least) because
|
||||
+ PROCESSOR_POWERPC, PROCESSOR_POWERPC64, and PROCESSOR_COMMON
|
||||
+ are #define'd as some of these. Untangling that is a job for later. */
|
||||
+
|
||||
/* 600 series and 700 series, "classic" */
|
||||
if (rs6000_cpu == PROCESSOR_PPC601 || rs6000_cpu == PROCESSOR_PPC603
|
||||
|| rs6000_cpu == PROCESSOR_PPC604 || rs6000_cpu == PROCESSOR_PPC604e
|
||||
- || rs6000_cpu == PROCESSOR_PPC750 || rs6000_cpu == PROCESSOR_POWERPC)
|
||||
+ || rs6000_cpu == PROCESSOR_PPC750)
|
||||
return "ppc";
|
||||
+#endif
|
||||
|
||||
/* Classic with AltiVec, "G4" */
|
||||
if (rs6000_cpu == PROCESSOR_PPC7400 || rs6000_cpu == PROCESSOR_PPC7450)
|
||||
return "\"7450\"";
|
||||
|
||||
+#if 0
|
||||
/* The older 64-bit CPUs */
|
||||
if (rs6000_cpu == PROCESSOR_PPC620 || rs6000_cpu == PROCESSOR_PPC630
|
||||
- || rs6000_cpu == PROCESSOR_RS64A || rs6000_cpu == PROCESSOR_POWERPC64)
|
||||
+ || rs6000_cpu == PROCESSOR_RS64A)
|
||||
return "ppc64";
|
||||
+#endif
|
||||
|
||||
HOST_WIDE_INT flags = rs6000_isa_flags;
|
||||
|
||||
--
|
||||
2.34.3
|
||||
|
Loading…
Reference in New Issue
Block a user