6 changed files with 232 additions and 1341 deletions
@ -1,114 +0,0 @@
|
||||
From 20ea3acc727f3be6322dfbd881e506873535231d Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Fri, 11 Feb 2022 15:13:19 -0800
|
||||
Subject: [PATCH] ld: Keep indirect symbol from IR if referenced from shared
|
||||
object
|
||||
|
||||
Don't change indirect symbol defined in IR to undefined if it is
|
||||
referenced from shared object.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/28879
|
||||
* elflink.c (_bfd_elf_merge_symbol): Don't change indirect
|
||||
symbol defined in IR to undefined if it is referenced from
|
||||
shared object.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/28879
|
||||
* testsuite/ld-plugin/lto.exp: Run PR ld/28879 tests.
|
||||
* testsuite/ld-plugin/pr28879a.cc: New file.
|
||||
* testsuite/ld-plugin/pr28879b.cc: Likewise.
|
||||
---
|
||||
bfd/elflink.c | 5 ++---
|
||||
ld/testsuite/ld-plugin/lto.exp | 26 ++++++++++++++++++++++++++
|
||||
ld/testsuite/ld-plugin/pr28879a.cc | 7 +++++++
|
||||
ld/testsuite/ld-plugin/pr28879b.cc | 8 ++++++++
|
||||
4 files changed, 43 insertions(+), 3 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-plugin/pr28879a.cc
|
||||
create mode 100644 ld/testsuite/ld-plugin/pr28879b.cc
|
||||
|
||||
diff --git a/bfd/elflink.c b/bfd/elflink.c
|
||||
index 6fa18d92007..f8521426cad 100644
|
||||
--- a/bfd/elflink.c
|
||||
+++ b/bfd/elflink.c
|
||||
@@ -1294,9 +1294,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
|
||||
h->root.non_ir_ref_dynamic = true;
|
||||
hi->root.non_ir_ref_dynamic = true;
|
||||
}
|
||||
-
|
||||
- if ((oldbfd->flags & BFD_PLUGIN) != 0
|
||||
- && hi->root.type == bfd_link_hash_indirect)
|
||||
+ else if ((oldbfd->flags & BFD_PLUGIN) != 0
|
||||
+ && hi->root.type == bfd_link_hash_indirect)
|
||||
{
|
||||
/* Change indirect symbol from IR to undefined. */
|
||||
hi->root.type = bfd_link_hash_undefined;
|
||||
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
|
||||
index a70a84562b8..64b880265ee 100644
|
||||
--- a/ld/testsuite/ld-plugin/lto.exp
|
||||
+++ b/ld/testsuite/ld-plugin/lto.exp
|
||||
@@ -471,6 +471,32 @@ set lto_link_elf_tests [list \
|
||||
[list {pr27441c.so} \
|
||||
{-shared -fPIC -Wl,--as-needed tmpdir/pr27441c.o tmpdir/pr27441b.so tmpdir/pr27441a.so} {-fPIC} \
|
||||
{dummy.c} {{readelf {-dW} pr27441c.d}} {pr27441c.so}] \
|
||||
+ [list \
|
||||
+ "Build libpr28879a.so" \
|
||||
+ "-shared" \
|
||||
+ "-O0 -fpic" \
|
||||
+ {pr28879a.cc} \
|
||||
+ {} \
|
||||
+ "libpr28879a.so" \
|
||||
+ "c++" \
|
||||
+ ] \
|
||||
+ [list \
|
||||
+ "Build libpr28879b.so" \
|
||||
+ "-shared -Wl,--no-as-needed tmpdir/libpr28879a.so" \
|
||||
+ "-O2 -fpic" \
|
||||
+ {dummy.c} \
|
||||
+ {} \
|
||||
+ "libpr28879b.so" \
|
||||
+ ] \
|
||||
+ [list \
|
||||
+ "Build pr28879" \
|
||||
+ "-Wl,--no-as-needed tmpdir/libpr28879b.so -Wl,-rpath-link,." \
|
||||
+ "-O0 -flto -D_GLIBCXX_ASSERTIONS" \
|
||||
+ {pr28879b.cc} \
|
||||
+ {} \
|
||||
+ "pr28879" \
|
||||
+ "c++" \
|
||||
+ ] \
|
||||
]
|
||||
|
||||
# PR 14918 checks that libgcc is not spuriously included in a shared link of
|
||||
diff --git a/ld/testsuite/ld-plugin/pr28879a.cc b/ld/testsuite/ld-plugin/pr28879a.cc
|
||||
new file mode 100644
|
||||
index 00000000000..8307a42e2fb
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-plugin/pr28879a.cc
|
||||
@@ -0,0 +1,7 @@
|
||||
+#include <string>
|
||||
+
|
||||
+void
|
||||
+func (std::string *s)
|
||||
+{
|
||||
+ delete s;
|
||||
+}
|
||||
diff --git a/ld/testsuite/ld-plugin/pr28879b.cc b/ld/testsuite/ld-plugin/pr28879b.cc
|
||||
new file mode 100644
|
||||
index 00000000000..02fc351366c
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-plugin/pr28879b.cc
|
||||
@@ -0,0 +1,8 @@
|
||||
+#include <string>
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ std::string header;
|
||||
+ return 0;
|
||||
+}
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,112 @@
|
||||
# Maintainer: artoo <artoo@artixlinux.org> |
||||
# Maintainer: Frederik Schwan <freswa at archlinux dot org> |
||||
# Contributor: Bartłomiej Piotrowski <bpiotrowski@archlinux.org> |
||||
# Contributor: Allan McRae <allan@archlinux.org> |
||||
|
||||
# toolchain build order: linux-api-headers->glibc->binutils->gcc->glibc->binutils->gcc |
||||
|
||||
pkgname=binutils |
||||
pkgver=2.39 |
||||
_commit=b51c2fec1da205ea3e7354cbb3e253018d64873c |
||||
pkgrel=1 |
||||
pkgdesc='A set of programs to assemble and manipulate binary and object files' |
||||
arch=(x86_64) |
||||
url='https://www.gnu.org/software/binutils/' |
||||
license=('GPL3' 'GPL' 'FDL1.3' 'custom:FSFAP') |
||||
groups=(base-devel) |
||||
depends=(glibc zlib libelf) |
||||
makedepends=(git) |
||||
checkdepends=(dejagnu debuginfod bc) |
||||
optdepends=('debuginfod: for debuginfod server/client functionality') |
||||
conflicts=(binutils-multilib) |
||||
replaces=(binutils-multilib) |
||||
options=(staticlibs !distcc !ccache debug) |
||||
source=(git+https://sourceware.org/git/binutils-gdb.git#commit=${_commit} |
||||
gold-warn-unsupported.patch) |
||||
sha256sums=('SKIP' |
||||
'2d430b66f84a19c154725ec535280c493be1d34f1a90f95208dce02fecd0e4e4') |
||||
validpgpkeys=(3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F) |
||||
|
||||
prepare() { |
||||
[[ ! -d binutils-gdb ]] && ln -s binutils-$pkgver binutils-gdb |
||||
mkdir -p binutils-build |
||||
|
||||
cd binutils-gdb |
||||
|
||||
# Turn off development mode (-Werror, gas run-time checks, date in sonames) |
||||
sed -i '/^development=/s/true/false/' bfd/development.sh |
||||
|
||||
# Creds @Fedora |
||||
# Change the gold configuration script to only warn about |
||||
# unsupported targets. This allows the binutils to be built with |
||||
# BPF support enabled. |
||||
patch -Np1 -i "${srcdir}"/gold-warn-unsupported.patch |
||||
} |
||||
|
||||
build() { |
||||
cd binutils-build |
||||
|
||||
"$srcdir/binutils-gdb/configure" \ |
||||
--prefix=/usr \ |
||||
--with-lib-path=/usr/lib:/usr/local/lib \ |
||||
--with-bugurl=https://bugs.archlinux.org/ \ |
||||
--enable-cet \ |
||||
--enable-deterministic-archives \ |
||||
--enable-gold \ |
||||
--enable-install-libiberty \ |
||||
--enable-ld=default \ |
||||
--enable-pgo-build=lto \ |
||||
--enable-plugins \ |
||||
--enable-relro \ |
||||
--enable-shared \ |
||||
--enable-targets=x86_64-pep,bpf-unknown-none \ |
||||
--enable-threads \ |
||||
--disable-gdb \ |
||||
--disable-gdbserver \ |
||||
--disable-libdecnumber \ |
||||
--disable-readline \ |
||||
--disable-sim \ |
||||
--disable-werror \ |
||||
--with-debuginfod \ |
||||
--with-pic \ |
||||
--with-system-zlib |
||||
|
||||
make -O tooldir=/usr |
||||
|
||||
# Extract the FSF All Permissive License |
||||
# <https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html> |
||||
# used for some linker scripts. |
||||
tail -n 5 "${srcdir}"/binutils-gdb/ld/scripttempl/README > FSFAP |
||||
} |
||||
|
||||
check() { |
||||
cd binutils-build |
||||
|
||||
# Use minimal flags for testsuite |
||||
# ld testsuite uses CFLAGS_FOR_TARGET and requires -g |
||||
# gold testsuite requires CXXFLAGS/CFLAGS with default PIE/PIC disabled |
||||
make -O CFLAGS_FOR_TARGET="-O2 -g" \ |
||||
CXXFLAGS="-O2 -no-pie -fno-PIC" \ |
||||
CFLAGS="-O2 -no-pie" \ |
||||
LDFLAGS="" \ |
||||
check || true |
||||
} |
||||
|
||||
package() { |
||||
cd binutils-build |
||||
make prefix="$pkgdir/usr" tooldir="$pkgdir/usr" install |
||||
|
||||
# install PIC version of libiberty |
||||
install -m644 libiberty/pic/libiberty.a "$pkgdir/usr/lib" |
||||
|
||||
# Remove unwanted files |
||||
rm -f "$pkgdir"/usr/share/man/man1/{dlltool,windres,windmc}* |
||||
|
||||
# No shared linking to these files outside binutils |
||||
rm -f "$pkgdir"/usr/lib/lib{bfd,opcodes}.so |
||||
echo 'INPUT( /usr/lib/libbfd.a -liberty -lz -ldl )' > "$pkgdir/usr/lib/libbfd.so" |
||||
echo 'INPUT( /usr/lib/libopcodes.a -lbfd )' > "$pkgdir/usr/lib/libopcodes.so" |
||||
|
||||
# install FSF All Permissive License |
||||
install -Dm644 -t "${pkgdir}"/usr/share/licenses/${pkgname}/ FSFAP |
||||
} |
@ -0,0 +1,66 @@
|
||||
Only in binutils-2.34/gold: autom4te.cache
|
||||
diff -rup binutils.orig/gold/configure binutils-2.34/gold/configure
|
||||
--- binutils.orig/gold/configure 2020-04-20 12:35:13.048297305 +0100
|
||||
+++ binutils-2.34/gold/configure 2020-04-20 14:02:06.743725696 +0100
|
||||
@@ -5180,7 +5180,8 @@ for targ in $target $canon_targets; do
|
||||
. ${srcdir}/configure.tgt
|
||||
|
||||
if test "$targ_obj" = "UNKNOWN"; then
|
||||
- as_fn_error $? "\"unsupported target $targ\"" "$LINENO" 5
|
||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"unsupported target $targ\"" >&5
|
||||
+$as_echo "$as_me: WARNING: \"unsupported target $targ\"" >&2;}
|
||||
else
|
||||
targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
|
||||
if test "$targ_extra_obj" != ""; then
|
||||
diff -rup binutils.orig/gold/configure.ac binutils-2.34/gold/configure.ac
|
||||
--- binutils.orig/gold/configure.ac 2020-04-20 12:35:13.050297291 +0100
|
||||
+++ binutils-2.34/gold/configure.ac 2020-04-20 14:01:46.435868770 +0100
|
||||
@@ -181,7 +181,7 @@ for targ in $target $canon_targets; do
|
||||
. ${srcdir}/configure.tgt
|
||||
|
||||
if test "$targ_obj" = "UNKNOWN"; then
|
||||
- AC_MSG_ERROR("unsupported target $targ")
|
||||
+ AC_MSG_WARN("unsupported target $targ")
|
||||
else
|
||||
targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
|
||||
if test "$targ_extra_obj" != ""; then
|
||||
--- binutils.orig/ld/configure.tgt 2020-04-20 12:35:12.465301359 +0100
|
||||
+++ binutils-2.34/ld/configure.tgt 2020-04-20 14:17:52.123066333 +0100
|
||||
@@ -220,7 +220,7 @@ bfin-*-linux-uclibc*) targ_emul=elf32bfi
|
||||
targ_extra_emuls="elf32bfin"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
-bpf-*-*) targ_emul=elf64bpf
|
||||
+bpf-* | bpf-*-*) targ_emul=elf64bpf
|
||||
;;
|
||||
cr16-*-elf*) targ_emul=elf32cr16
|
||||
;;
|
||||
@@ -1026,7 +1026,7 @@ z8k-*-coff) targ_emul=z8002
|
||||
targ_extra_ofiles=
|
||||
;;
|
||||
*)
|
||||
- echo 2>&1 "*** ld does not support target ${targ}"
|
||||
+ echo 2>&1 "*** ld does not support target '${targ}' NO REALLY"
|
||||
echo 2>&1 "*** see ld/configure.tgt for supported targets"
|
||||
exit 1
|
||||
|
||||
--- binutils.orig/bfd/config.bfd 2020-04-20 12:35:13.038297375 +0100
|
||||
+++ binutils-2.34/bfd/config.bfd 2020-04-20 14:25:26.452869193 +0100
|
||||
@@ -473,7 +473,7 @@ case "${targ}" in
|
||||
;;
|
||||
|
||||
#ifdef BFD64
|
||||
- bpf-*-none)
|
||||
+ bpf-*-none | bpf-*)
|
||||
targ_defvec=bpf_elf64_le_vec
|
||||
targ_selvecs=bpf_elf64_be_vec
|
||||
targ_underscore=yes
|
||||
@@ -1427,7 +1427,7 @@ case "${targ}" in
|
||||
;;
|
||||
|
||||
*)
|
||||
- echo 1>&2 "*** BFD does not support target ${targ}."
|
||||
+ echo 1>&2 "*** BFD does not support target '${targ}'. Honest."
|
||||
echo 1>&2 "*** Look in bfd/config.bfd for supported targets."
|
||||
exit 1
|
||||
;;
|
@ -0,0 +1,51 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK----- |
||||
|
||||
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 |
||||
8Ko5T/h16susi2ReUyNJEJaSnjO5z13TQ1U= |
||||
=93P0 |
||||
-----END PGP PUBLIC KEY BLOCK----- |
Loading…
Reference in new issue