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 +
