All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Yann E. MORIN" <yann.morin.1998@free.fr>
To: Romain Naour <romain.naour@gmail.com>
Cc: Joel Stanley <joel@jms.id.au>, buildroot@buildroot.org
Subject: Re: [Buildroot] [PATCH for-master] package/gcc: 11.3.0: fix glibc crash on G4 ppc cpus
Date: Tue, 6 Sep 2022 11:42:47 +0200	[thread overview]
Message-ID: <20220906094247.GV1490660@scaer> (raw)
In-Reply-To: <20220904130501.1983806-1-romain.naour@gmail.com>

Romain, All,

On 2022-09-04 15:05 +0200, Romain Naour spake thusly:
> 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>

Applied to master, thanks.

Regards,
Yann E. MORIN.

> ---
>  .../11.3.0/0005-rs6000-Improve-.machine.patch | 120 ++++++++++++++++++
>  ...e-rs6000_cpu-for-.machine-ppc-and-pp.patch |  68 ++++++++++
>  2 files changed, 188 insertions(+)
>  create mode 100644 package/gcc/11.3.0/0005-rs6000-Improve-.machine.patch
>  create mode 100644 package/gcc/11.3.0/0006-rs6000-Do-not-use-rs6000_cpu-for-.machine-ppc-and-pp.patch
> 
> diff --git a/package/gcc/11.3.0/0005-rs6000-Improve-.machine.patch b/package/gcc/11.3.0/0005-rs6000-Improve-.machine.patch
> new file mode 100644
> index 0000000000..7a4564b59e
> --- /dev/null
> +++ b/package/gcc/11.3.0/0005-rs6000-Improve-.machine.patch
> @@ -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
> +
> diff --git a/package/gcc/11.3.0/0006-rs6000-Do-not-use-rs6000_cpu-for-.machine-ppc-and-pp.patch b/package/gcc/11.3.0/0006-rs6000-Do-not-use-rs6000_cpu-for-.machine-ppc-and-pp.patch
> new file mode 100644
> index 0000000000..8e31c8241c
> --- /dev/null
> +++ b/package/gcc/11.3.0/0006-rs6000-Do-not-use-rs6000_cpu-for-.machine-ppc-and-pp.patch
> @@ -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
> +
> -- 
> 2.34.3
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  parent reply	other threads:[~2022-09-06  9:42 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-04 13:05 [Buildroot] [PATCH for-master] package/gcc: 11.3.0: fix glibc crash on G4 ppc cpus Romain Naour
2022-09-06  4:14 ` Joel Stanley
2022-09-06  9:42 ` Yann E. MORIN [this message]
2022-09-18  8:55 ` Peter Korsgaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220906094247.GV1490660@scaer \
    --to=yann.morin.1998@free.fr \
    --cc=buildroot@buildroot.org \
    --cc=joel@jms.id.au \
    --cc=romain.naour@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.