From c787dc68a067412d013af0ec20e4ab9dc9f6d1f1 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 30 Jul 2024 20:43:12 +0100 Subject: [PATCH] Temporary workaround for ppc64 gcc compilation bug. Resolves: RHEL-49348 --- bin.ppc64.gcc.patch | 22 ++++++++++++++++++++++ binutils.spec | 15 +++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 bin.ppc64.gcc.patch diff --git a/bin.ppc64.gcc.patch b/bin.ppc64.gcc.patch new file mode 100644 index 0000000..a9aa80e --- /dev/null +++ b/bin.ppc64.gcc.patch @@ -0,0 +1,22 @@ +--- binutils.orig/ld/ldlang.c 2024-07-30 16:10:24.931862075 +0100 ++++ binutils-2.41/ld/ldlang.c 2024-07-30 19:11:58.741929934 +0100 +@@ -7940,6 +7940,19 @@ lang_list_remove_tail (lang_statement_li + { + union lang_statement_union **savetail; + /* Check that ORIGLIST really is an earlier state of DESTLIST. */ ++ ++ if (getenv ("LD_DEBUG_NEVER") != NULL) ++ { ++ /* FIXME: RHEL-49348: For some reason building this function for the ++ PowerPC architecture on RHEL-10 is resulting in a linker that ++ triggers the ASSERT below - because the origlist pointer is ++ corrupt. These fprintf statements, even if they will never be ++ used, are enough to cause the compiler to build the function ++ correctly, thus avoiding the problem. */ ++ fprintf (stderr, "origlist %p destlist %p\n", origlist, destlist); ++ fprintf (stderr, "heads: %p %p\n", origlist->head, destlist->head); ++ } ++ + ASSERT (origlist->head == destlist->head); + savetail = origlist->tail; + origlist->head = *(savetail); diff --git a/binutils.spec b/binutils.spec index d20d469..0a3fe20 100644 --- a/binutils.spec +++ b/binutils.spec @@ -2,7 +2,7 @@ Summary: A GNU collection of binary utilities Name: binutils%{?_with_debug:-debug} Version: 2.41 -Release: 46%{?dist} +Release: 47%{?dist} License: GPL-3.0-or-later AND (GPL-3.0-or-later WITH Bison-exception-2.2) AND (LGPL-2.0-or-later WITH GCC-exception-2.0) AND BSD-3-Clause AND GFDL-1.3-or-later AND GPL-2.0-or-later AND LGPL-2.1-or-later AND LGPL-2.0-or-later URL: https://sourceware.org/binutils @@ -43,7 +43,10 @@ URL: https://sourceware.org/binutils # Enable support for GCC LTO compilation. # Disable if it is necessary to work around bugs in LTO. -%define enable_lto 1 +# FIXME: Temporarily disabled because of RHEL-49348. The linker in the current +# RHEL-10 buildroot is suffering from the compilation bug. The workaround is +# to avoid using LTO... +%define enable_lto 0 # Enable support for generating new dtags in the linker # Disable if it is necessary to use RPATH instead. @@ -347,6 +350,11 @@ Patch41: binutils-aarch64-RELR.patch # Lifetime: Fixed in 2.43 Patch42: binutils-Intel-APX-part-1-supplimental.patch +# Purpose: Workaround for an unresolved bug in ppc gcc +# which generates bad code in the linker. cf RHEL-49348 +# Lifetime: TEMPORARY +Patch88: bin.ppc64.gcc.patch + # Purpose: Suppress the assembler's comment test as it fails - intermitantly - for RHEL-10 # Lifetime: TEMPORARY # Patch98: binutils-suppress-gas-comment-test.patch @@ -1384,6 +1392,9 @@ exit 0 #---------------------------------------------------------------------------- %changelog +* Tue Jul 30 2024 Nick Clifton - 2.41-47 +- Temporary workaround for ppc64 gcc compilation bug. (RHEL-49348) + * Mon Jul 08 2024 Nick Clifton - 2.41-46 - Import fix for AArch64 DT_RELR support (PR 31924). - More fixes for Intel's APX (part 1) extensions. (RHEL-44713)