commit:     cc91de760c1833ebe917f073e4837c7664b3939a
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Apr  8 00:36:31 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Apr  8 00:36:31 2025 +0000
URL:        
https://gitweb.gentoo.org/proj/toolchain/binutils-patches.git/commit/?id=cc91de76

9999: revert recent LTO patch

Bug: https://sourceware.org/PR32846
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...t-lto-Fix-symlookup-in-archives-vs-shared.patch | 168 +++++++++++++++++++++
 1 file changed, 168 insertions(+)

diff --git a/9999/0006-Revert-lto-Fix-symlookup-in-archives-vs-shared.patch 
b/9999/0006-Revert-lto-Fix-symlookup-in-archives-vs-shared.patch
new file mode 100644
index 0000000..d8386fc
--- /dev/null
+++ b/9999/0006-Revert-lto-Fix-symlookup-in-archives-vs-shared.patch
@@ -0,0 +1,168 @@
+From ba77d9675b2af359875bc5ef785616c18285060b Mon Sep 17 00:00:00 2001
+Message-ID: 
<ba77d9675b2af359875bc5ef785616c18285060b.1744072567.git....@gentoo.org>
+From: Sam James <[email protected]>
+Date: Tue, 8 Apr 2025 01:35:58 +0100
+Subject: [PATCH] Revert "[lto] Fix symlookup in archives vs shared"
+
+This reverts commit 2707d55e539ef323dd14a1293e762bf3d9739ee7.
+
+Bug: https://sourceware.org/PR32846
+---
+ bfd/elflink.c                     | 44 +++++++------------------------
+ ld/testsuite/ld-plugin/lto-20.ver |  1 -
+ ld/testsuite/ld-plugin/lto-20a.c  |  2 --
+ ld/testsuite/ld-plugin/lto-20b.c  | 11 --------
+ ld/testsuite/ld-plugin/lto.exp    | 10 -------
+ 5 files changed, 10 insertions(+), 58 deletions(-)
+ delete mode 100644 ld/testsuite/ld-plugin/lto-20.ver
+ delete mode 100644 ld/testsuite/ld-plugin/lto-20a.c
+ delete mode 100644 ld/testsuite/ld-plugin/lto-20b.c
+
+diff --git a/bfd/elflink.c b/bfd/elflink.c
+index a76e8e38da7..13993527e3e 100644
+--- a/bfd/elflink.c
++++ b/bfd/elflink.c
+@@ -4965,7 +4965,6 @@ elf_link_add_object_symbols (bfd *abfd, struct 
bfd_link_info *info)
+       asection *sec, *new_sec;
+       flagword flags;
+       const char *name;
+-      const char *defvername;
+       bool must_copy_name = false;
+       struct elf_link_hash_entry *h;
+       struct elf_link_hash_entry *hi;
+@@ -5142,7 +5141,6 @@ elf_link_add_object_symbols (bfd *abfd, struct 
bfd_link_info *info)
+       old_alignment = 0;
+       old_bfd = NULL;
+       new_sec = sec;
+-      defvername = NULL;
+ 
+       if (is_elf_hash_table (&htab->root))
+       {
+@@ -5261,7 +5259,7 @@ elf_link_add_object_symbols (bfd *abfd, struct 
bfd_link_info *info)
+                default version of the symbol.  */
+             if ((iver.vs_vers & VERSYM_HIDDEN) == 0
+                 && isym->st_shndx != SHN_UNDEF)
+-              *p++ = ELF_VER_CHR, defvername = name;
++              *p++ = ELF_VER_CHR;
+             memcpy (p, verstr, verlen + 1);
+ 
+             name = newname;
+@@ -5711,15 +5709,9 @@ elf_link_add_object_symbols (bfd *abfd, struct 
bfd_link_info *info)
+               }
+             else if (dynamic
+                      && h->root.u.def.section->owner == abfd)
+-              {
+-                /* Add this symbol to first hash if this shared
+-                   object has the first definition.  */
+-                elf_link_add_to_first_hash (abfd, info, name, must_copy_name);
+-                /* And if it was the default symbol version definition,
+-                   also add the short name.  */
+-                if (defvername)
+-                  elf_link_add_to_first_hash (abfd, info, defvername, false);
+-              }
++              /* Add this symbol to first hash if this shared
++                 object has the first definition.  */
++              elf_link_add_to_first_hash (abfd, info, name, must_copy_name);
+           }
+       }
+     }
+@@ -6281,28 +6273,12 @@ elf_link_add_archive_symbols (bfd *abfd, struct 
bfd_link_info *info)
+ 
+         if (h->type == bfd_link_hash_undefined)
+           {
+-            if (is_elf_hash_table (info->hash))
+-              {
+-                /* If the archive element has already been loaded then one
+-                   of the symbols defined by that element might have been
+-                   made undefined due to being in a discarded section.  */
+-                if (((struct elf_link_hash_entry *) h)->indx == -3)
+-                  continue;
+-
+-                /* In the pre-LTO-plugin pass we must not mistakenly
+-                   include this archive member if an earlier BFD
+-                   defined this symbol.  */
+-                struct elf_link_hash_table *htab = elf_hash_table (info);
+-                if (htab->first_hash)
+-                  {
+-                    struct elf_link_first_hash_entry *e
+-                        = ((struct elf_link_first_hash_entry *)
+-                           bfd_hash_lookup (htab->first_hash, symdef->name,
+-                                            false, false));
+-                    if (e && e->abfd != abfd)
+-                      continue;
+-                  }
+-              }
++            /* If the archive element has already been loaded then one
++               of the symbols defined by that element might have been
++               made undefined due to being in a discarded section.  */
++            if (is_elf_hash_table (info->hash)
++                && ((struct elf_link_hash_entry *) h)->indx == -3)
++              continue;
+           }
+         else if (h->type == bfd_link_hash_common)
+           {
+diff --git a/ld/testsuite/ld-plugin/lto-20.ver 
b/ld/testsuite/ld-plugin/lto-20.ver
+deleted file mode 100644
+index ac906ac4ad1..00000000000
+--- a/ld/testsuite/ld-plugin/lto-20.ver
++++ /dev/null
+@@ -1 +0,0 @@
+-FOO { global: foo; };
+diff --git a/ld/testsuite/ld-plugin/lto-20a.c 
b/ld/testsuite/ld-plugin/lto-20a.c
+deleted file mode 100644
+index 3d6dac96752..00000000000
+--- a/ld/testsuite/ld-plugin/lto-20a.c
++++ /dev/null
+@@ -1,2 +0,0 @@
+-extern int foo ();
+-int main () { return foo (); }
+diff --git a/ld/testsuite/ld-plugin/lto-20b.c 
b/ld/testsuite/ld-plugin/lto-20b.c
+deleted file mode 100644
+index ba123cbe38b..00000000000
+--- a/ld/testsuite/ld-plugin/lto-20b.c
++++ /dev/null
+@@ -1,11 +0,0 @@
+-extern int printf (const char *, ...);
+-int foo ()
+-{
+-#ifdef SHARED
+-    printf ("PASS\n");
+-    return 0;
+-#else
+-    printf ("FAIL\n");
+-    return 1;
+-#endif
+-}
+diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
+index 93491902674..556bbe9beea 100644
+--- a/ld/testsuite/ld-plugin/lto.exp
++++ b/ld/testsuite/ld-plugin/lto.exp
+@@ -477,12 +477,6 @@ set lto_link_elf_tests [list \
+   [list {liblto-19.so} \
+    {-shared tmpdir/lto-19b.o tmpdir/liblto-19.a} {-O2 -fPIC} \
+    {dummy.c} {} {liblto-19.so}] \
+-  [list {liblto-20_static.a} \
+-   {} {-fPIC} \
+-   {lto-20b.c} {} {liblto-20_static.a}] \
+-  [list {liblto-20.so} \
+-   {-shared -Wl,--version-script=lto-20.ver} {-DSHARED -fPIC} \
+-   {lto-20b.c} {} {liblto-20.so}] \
+   [list {pr26806.so} \
+    {-shared} {-fpic -O2 -flto} \
+    {pr26806.c} {{nm {-D} pr26806.d}} {pr26806.so}] \
+@@ -886,10 +880,6 @@ set lto_run_elf_shared_tests [list \
+    {-Wl,--as-needed,-R,tmpdir} {} \
+    {lto-19c.c} {lto-19.exe} {pass.out} {-flto -O2} {c} {} \
+    {tmpdir/liblto-19.so tmpdir/liblto-19.a}] \
+-  [list {lto-20} \
+-   {-Wl,--as-needed,-R,tmpdir} {} \
+-   {lto-20a.c} {lto-20.exe} {pass.out} {-flto} {c} {} \
+-   {tmpdir/liblto-20.so tmpdir/liblto-20_static.a -Wl,--no-as-needed}] \
+   [list {pr31482a} \
+    {-Wl,--no-as-needed,-R,tmpdir} {} \
+    {pr31482a.c} {pr31482a.exe} {pass.out} {-flto} {c} {} \
+
+base-commit: 2707d55e539ef323dd14a1293e762bf3d9739ee7
+-- 
+2.49.0
+

Reply via email to