diff --git a/binutils-plugin-as-needed.patch b/binutils-plugin-as-needed.patch new file mode 100644 index 0000000..91dbc79 --- /dev/null +++ b/binutils-plugin-as-needed.patch @@ -0,0 +1,83 @@ +diff -rup binutils.orig/ld/testsuite/ld-plugin/lto.exp binutils-2.35.1/ld/testsuite/ld-plugin/lto.exp +--- binutils.orig/ld/testsuite/ld-plugin/lto.exp 2020-10-09 11:46:13.571665439 +0100 ++++ binutils-2.35.1/ld/testsuite/ld-plugin/lto.exp 2020-10-09 11:47:59.113302758 +0100 +@@ -319,27 +319,6 @@ set lto_link_elf_tests [list \ + [list "PR ld/13244" \ + "-shared -O2 -fPIC -flto -fuse-linker-plugin -nostdlib" "-O2 -fno-early-inlining -flto" \ + {pr13244.c} {{"readelf" {-s --wide} "pr13244.d"}} "pr13244.so" "c"] \ +- [list "Build libpr15146a.a" \ +- "$plug_opt" "-flto -O2" \ +- {pr15146a.c} {} "lib15146a.a"] \ +- [list "Build pr15146b.so" \ +- "-shared" "-O2 -fpic" \ +- {pr15146b.c} {} "pr15146b.so" "c"] \ +- [list "Build pr15146c.so" \ +- "-shared -Wl,--no-as-needed tmpdir/pr15146b.so" "-O2 -fpic" \ +- {pr15146c.c} {} "pr15146c.so" "c"] \ +- [list "PR ld/15146 (1)" \ +- "-O2 -flto -fuse-linker-plugin -Wl,-rpath-link,. -Wl,--no-copy-dt-needed-entries -Wl,--no-as-needed tmpdir/pr15146a.o tmpdir/pr15146c.so" "" \ +- {dummy.c} {{"readelf" {-d} "pr15146.d"}} "pr15146a.exe"] \ +- [list "Build libpr15146d.a" \ +- "$plug_opt" "-flto -O2" \ +- {pr15146d.c} {} "lib15146d.a"] \ +- [list "Build libpr16746a.a" \ +- "" "" \ +- {pr16746a.c pr16746b.c} {} "lib15146a.a"] \ +- [list "Build libpr16746b.a" \ +- "$plug_opt" "-O2 -flto" \ +- {pr16746c.c pr16746d.c} {} "lib15146b.a"] \ + [list "PR ld/16746 (1)" \ + "-O2 -flto -fuse-linker-plugin tmpdir/pr16746a.o tmpdir/pr16746c.o" "-O2 -flto" \ + {dummy.c} {} "pr16746a.exe"] \ +@@ -602,13 +581,6 @@ run_cc_link_tests $lto_compile_elf_tests + # Restrict these to ELF targets that support shared libs and PIC. + if { [is_elf_format] && [check_lto_shared_available] } { + run_cc_link_tests $lto_link_elf_tests +- set testname "PR ld/15146 (2)" +- set exec_output [run_host_cmd "$CC" "-O2 -flto -fuse-linker-plugin -Wl,-rpath-link,. -Wl,--no-copy-dt-needed-entries -Wl,--no-as-needed tmpdir/pr15146d.o tmpdir/pr15146c.so"] +- if { [ regexp "undefined reference to symbol '\\.?xxx'" $exec_output ] } { +- pass $testname +- } { +- fail $testname +- } + set testname "PR ld/16746 (3)" + set exec_output [run_host_cmd "$CC" "-O2 -flto -fuse-linker-plugin tmpdir/pr16746b.o tmpdir/pr16746d.o"] + if { [ regexp "warning: \\.?foobar" $exec_output ] && ![ regexp "symbol from plugin" $exec_output ] } { + +diff -rup binutils.orig/bfd/elflink.c binutils-2.35.1/bfd/elflink.c +--- binutils.orig/bfd/elflink.c 2020-10-09 11:46:14.151663446 +0100 ++++ binutils-2.35.1/bfd/elflink.c 2020-10-09 11:46:27.222618528 +0100 +@@ -4970,11 +4970,7 @@ elf_link_add_object_symbols (bfd *abfd, + object and a shared object. */ + bfd_boolean dynsym = FALSE; + +- /* Plugin symbols aren't normal. Don't set def_regular or +- ref_regular for them, or make them dynamic. */ +- if ((abfd->flags & BFD_PLUGIN) != 0) +- ; +- else if (! dynamic) ++ if (! dynamic) + { + if (! definition) + { +@@ -5155,10 +5151,6 @@ elf_link_add_object_symbols (bfd *abfd, + && !bfd_link_relocatable (info)) + dynsym = FALSE; + +- /* Nor should we make plugin symbols dynamic. */ +- if ((abfd->flags & BFD_PLUGIN) != 0) +- dynsym = FALSE; +- + if (definition) + { + h->target_internal = isym->st_target_internal; +@@ -5185,7 +5177,7 @@ elf_link_add_object_symbols (bfd *abfd, + } + } + +- if (dynsym && h->dynindx == -1) ++ if (dynsym && (abfd->flags & BFD_PLUGIN) == 0 && h->dynindx == -1) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + goto error_free_vers; + diff --git a/binutils.spec b/binutils.spec index b4e4194..09b04bb 100644 --- a/binutils.spec +++ b/binutils.spec @@ -2,7 +2,7 @@ Summary: A GNU collection of binary utilities Name: %{?cross}binutils%{?_with_debug:-debug} Version: 2.35.1 -Release: 4%{?dist} +Release: 5%{?dist} License: GPLv3+ URL: https://sourceware.org/binutils @@ -246,6 +246,10 @@ Patch27: binutils-strip-merge.patch # Lifetime: Fixed in 2.36 Patch28: binutils-Power10-fixes.patch +# Purpose: Allow plugin syms to mark as-needed shared libs needed. +# Lifetime: Fixed in 2.36 +Patch29: binutils-plugin-as-needed.patch + #---------------------------------------------------------------------------- Provides: bundled(libiberty) @@ -819,6 +823,9 @@ exit 0 #---------------------------------------------------------------------------- %changelog +* Fri Oct 09 2020 Nick Clifton - 2.35.1-5 +- Allow plugin syms to mark as-needed shared libs needed + * Thu Oct 08 2020 Nick Clifton - 2.35.1-4 - Fix various problems with Power10 support.