mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2025-03-19 00:21:40 +00:00
core/binutils to 2.30-3
This commit is contained in:
parent
708957ae6b
commit
b38da76bde
4 changed files with 257 additions and 54 deletions
|
@ -1,29 +0,0 @@
|
|||
From 7a7431ddc2332ddc3753330a8dd815bb5f7193c0 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Tue, 26 Sep 2017 14:41:22 -0700
|
||||
Subject: [PATCH] x86-64: Don't pass output_bfd to info->callbacks->minfo
|
||||
|
||||
Don't pass output_bfd to info->callbacks->minfo when dumping local IFUNC
|
||||
functions in the map file.
|
||||
|
||||
PR ld/22199
|
||||
* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Don't pass
|
||||
output_bfd to info->callbacks->minfo.
|
||||
|
||||
(cherry picked from commit ac69a0d75bf472a140e5405c8a90420d5f63a998)
|
||||
|
||||
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
|
||||
index d9225ad..1f6dfb8 100644
|
||||
--- a/bfd/elf64-x86-64.c
|
||||
+++ b/bfd/elf64-x86-64.c
|
||||
@@ -6133,7 +6133,6 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
|
||||
if (SYMBOL_REFERENCES_LOCAL (info, h))
|
||||
{
|
||||
info->callbacks->minfo (_("Local IFUNC function `%s' in %B\n"),
|
||||
- output_bfd,
|
||||
h->root.root.string,
|
||||
h->root.u.def.section->owner);
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
|
@ -0,0 +1,233 @@
|
|||
From d957f81cb38d7e82ae546cd03265ee3087ba8a85 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Modra <amodra@gmail.com>
|
||||
Date: Tue, 13 Feb 2018 14:09:48 +1030
|
||||
Subject: [PATCH] PR22836, "-r -s" doesn't work with -g3 using GCC 7
|
||||
|
||||
This fixes the case where all of a group is removed with ld -r, the
|
||||
situation in the PR, and failures where part of a group is removed
|
||||
that contain relocs.
|
||||
|
||||
bfd/
|
||||
PR 22836
|
||||
* elf.c (_bfd_elf_fixup_group_sections): Account for removed
|
||||
relocation sections. If size reduces to just the flag word,
|
||||
remove that too and mark with SEC_EXCLUDE.
|
||||
* elflink.c (bfd_elf_final_link): Strip empty group sections.
|
||||
binutils/
|
||||
* testsuite/binutils-all/group-7.s,
|
||||
* testsuite/binutils-all/group-7a.d,
|
||||
* testsuite/binutils-all/group-7b.d,
|
||||
* testsuite/binutils-all/group-7c.d: New tests.
|
||||
* testsuite/binutils-all/objcopy.exp: Run them.
|
||||
ld/
|
||||
* testsuite/ld-elf/pr22836-2.d,
|
||||
* testsuite/ld-elf/pr22836-2.s: New test.
|
||||
|
||||
(cherry picked from commit 6e5e9d58c1eeef5677c90886578a895cb8c164c5)
|
||||
---
|
||||
bfd/ChangeLog | 11 +++++++++++
|
||||
bfd/elf.c | 25 +++++++++++++++++++++----
|
||||
bfd/elflink.c | 7 +++++++
|
||||
binutils/ChangeLog | 12 ++++++++++++
|
||||
binutils/testsuite/binutils-all/group-7.s | 6 ++++++
|
||||
binutils/testsuite/binutils-all/group-7a.d | 16 ++++++++++++++++
|
||||
binutils/testsuite/binutils-all/group-7b.d | 19 +++++++++++++++++++
|
||||
binutils/testsuite/binutils-all/group-7c.d | 8 ++++++++
|
||||
binutils/testsuite/binutils-all/objcopy.exp | 3 +++
|
||||
ld/ChangeLog | 9 +++++++++
|
||||
ld/testsuite/ld-elf/pr22836-2.d | 7 +++++++
|
||||
ld/testsuite/ld-elf/pr22836-2.s | 7 +++++++
|
||||
12 files changed, 126 insertions(+), 4 deletions(-)
|
||||
create mode 100644 binutils/testsuite/binutils-all/group-7.s
|
||||
create mode 100644 binutils/testsuite/binutils-all/group-7a.d
|
||||
create mode 100644 binutils/testsuite/binutils-all/group-7b.d
|
||||
create mode 100644 binutils/testsuite/binutils-all/group-7c.d
|
||||
create mode 100644 ld/testsuite/ld-elf/pr22836-2.d
|
||||
create mode 100644 ld/testsuite/ld-elf/pr22836-2.s
|
||||
|
||||
diff --git a/bfd/elf.c b/bfd/elf.c
|
||||
index 325bdd5..e95c8a9 100644
|
||||
--- a/bfd/elf.c
|
||||
+++ b/bfd/elf.c
|
||||
@@ -7579,7 +7579,16 @@ _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
|
||||
but the SHT_GROUP section is, then adjust its size. */
|
||||
else if (s->output_section == discarded
|
||||
&& isec->output_section != discarded)
|
||||
- removed += 4;
|
||||
+ {
|
||||
+ struct bfd_elf_section_data *elf_sec = elf_section_data (s);
|
||||
+ removed += 4;
|
||||
+ if (elf_sec->rel.hdr != NULL
|
||||
+ && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
|
||||
+ removed += 4;
|
||||
+ if (elf_sec->rela.hdr != NULL
|
||||
+ && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
|
||||
+ removed += 4;
|
||||
+ }
|
||||
s = elf_next_in_group (s);
|
||||
if (s == first)
|
||||
break;
|
||||
@@ -7589,18 +7598,26 @@ _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
|
||||
if (discarded != NULL)
|
||||
{
|
||||
/* If we've been called for ld -r, then we need to
|
||||
- adjust the input section size. This function may
|
||||
- be called multiple times, so save the original
|
||||
- size. */
|
||||
+ adjust the input section size. */
|
||||
if (isec->rawsize == 0)
|
||||
isec->rawsize = isec->size;
|
||||
isec->size = isec->rawsize - removed;
|
||||
+ if (isec->size <= 4)
|
||||
+ {
|
||||
+ isec->size = 0;
|
||||
+ isec->flags |= SEC_EXCLUDE;
|
||||
+ }
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Adjust the output section size when called from
|
||||
objcopy. */
|
||||
isec->output_section->size -= removed;
|
||||
+ if (isec->output_section->size <= 4)
|
||||
+ {
|
||||
+ isec->output_section->size = 0;
|
||||
+ isec->output_section->flags |= SEC_EXCLUDE;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/bfd/elflink.c b/bfd/elflink.c
|
||||
index 72aa3ac..69cb5ab 100644
|
||||
--- a/bfd/elflink.c
|
||||
+++ b/bfd/elflink.c
|
||||
@@ -11618,6 +11618,13 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
|
||||
else
|
||||
o->flags |= SEC_EXCLUDE;
|
||||
}
|
||||
+ else if ((o->flags & SEC_GROUP) != 0 && o->size == 0)
|
||||
+ {
|
||||
+ /* Remove empty group section from linker output. */
|
||||
+ o->flags |= SEC_EXCLUDE;
|
||||
+ bfd_section_list_remove (abfd, o);
|
||||
+ abfd->section_count--;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Count up the number of relocations we will output for each output
|
||||
diff --git a/binutils/testsuite/binutils-all/group-7.s b/binutils/testsuite/binutils-all/group-7.s
|
||||
new file mode 100644
|
||||
index 0000000..5028afc
|
||||
--- /dev/null
|
||||
+++ b/binutils/testsuite/binutils-all/group-7.s
|
||||
@@ -0,0 +1,6 @@
|
||||
+ .section .data.foo,"awG",%progbits,foo,comdat
|
||||
+here:
|
||||
+ .dc.a here
|
||||
+
|
||||
+ .section .data2.foo,"awG",%progbits,foo,comdat
|
||||
+ .dc.a 0
|
||||
diff --git a/binutils/testsuite/binutils-all/group-7a.d b/binutils/testsuite/binutils-all/group-7a.d
|
||||
new file mode 100644
|
||||
index 0000000..fa8db60
|
||||
--- /dev/null
|
||||
+++ b/binutils/testsuite/binutils-all/group-7a.d
|
||||
@@ -0,0 +1,16 @@
|
||||
+#name: copy removing reloc group member
|
||||
+#source: group-7.s
|
||||
+#PROG: objcopy
|
||||
+#DUMPPROG: readelf
|
||||
+#objcopy: --remove-section .data.foo
|
||||
+#readelf: -Sg --wide
|
||||
+
|
||||
+#...
|
||||
+ \[[ 0-9]+\] \.group[ \t]+GROUP[ \t]+.*
|
||||
+#...
|
||||
+ \[[ 0-9]+\] \.data2\.foo[ \t]+PROGBITS[ \t0-9a-f]+WAG.*
|
||||
+#...
|
||||
+COMDAT group section \[[ 0-9]+\] `\.group' \[foo\] contains 1 section.*
|
||||
+ \[Index\] Name
|
||||
+ \[[ 0-9]+\] \.data2\.foo
|
||||
+#pass
|
||||
diff --git a/binutils/testsuite/binutils-all/group-7b.d b/binutils/testsuite/binutils-all/group-7b.d
|
||||
new file mode 100644
|
||||
index 0000000..b674545
|
||||
--- /dev/null
|
||||
+++ b/binutils/testsuite/binutils-all/group-7b.d
|
||||
@@ -0,0 +1,19 @@
|
||||
+#name: copy removing non-reloc group member
|
||||
+#source: group-7.s
|
||||
+#PROG: objcopy
|
||||
+#DUMPPROG: readelf
|
||||
+#objcopy: --remove-section .data2.foo
|
||||
+#readelf: -Sg --wide
|
||||
+
|
||||
+#...
|
||||
+ \[[ 0-9]+\] \.group[ \t]+GROUP[ \t]+.*
|
||||
+#...
|
||||
+ \[[ 0-9]+\] \.data\.foo[ \t]+PROGBITS[ \t0-9a-f]+WAG.*
|
||||
+#...
|
||||
+ \[[ 0-9]+\] \.rela?\.data\.foo[ \t]+RELA?[ \t0-9a-f]+IG.*
|
||||
+#...
|
||||
+COMDAT group section \[[ 0-9]+\] `\.group' \[foo\] contains 2 sections:
|
||||
+ \[Index\] Name
|
||||
+ \[[ 0-9]+\] \.data\.foo
|
||||
+ \[[ 0-9]+\] \.rela?\.data\.foo
|
||||
+#pass
|
||||
diff --git a/binutils/testsuite/binutils-all/group-7c.d b/binutils/testsuite/binutils-all/group-7c.d
|
||||
new file mode 100644
|
||||
index 0000000..83e9115
|
||||
--- /dev/null
|
||||
+++ b/binutils/testsuite/binutils-all/group-7c.d
|
||||
@@ -0,0 +1,8 @@
|
||||
+#name: copy removing reloc and non-reloc group member
|
||||
+#source: group-7.s
|
||||
+#PROG: objcopy
|
||||
+#DUMPPROG: readelf
|
||||
+#objcopy: -R .data.foo -R .data2.foo
|
||||
+#readelf: -g --wide
|
||||
+
|
||||
+There are no section groups in this file\.
|
||||
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
|
||||
index 377f88c..f4a7692 100644
|
||||
--- a/binutils/testsuite/binutils-all/objcopy.exp
|
||||
+++ b/binutils/testsuite/binutils-all/objcopy.exp
|
||||
@@ -1051,6 +1051,9 @@ if [is_elf_format] {
|
||||
objcopy_test_readelf "GNU_MBIND section" mbind1.s
|
||||
run_dump_test "group-5"
|
||||
run_dump_test "group-6"
|
||||
+ run_dump_test "group-7a"
|
||||
+ run_dump_test "group-7b"
|
||||
+ run_dump_test "group-7c"
|
||||
run_dump_test "copy-1"
|
||||
run_dump_test "note-1"
|
||||
if [is_elf64 tmpdir/bintest.o] {
|
||||
diff --git a/ld/testsuite/ld-elf/pr22836-2.d b/ld/testsuite/ld-elf/pr22836-2.d
|
||||
new file mode 100644
|
||||
index 0000000..10133e4
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/pr22836-2.d
|
||||
@@ -0,0 +1,7 @@
|
||||
+#source: pr22836-2.s
|
||||
+#ld: -r -S
|
||||
+#readelf: -g --wide
|
||||
+
|
||||
+group section \[[ 0-9]+\] `\.group' \[foo\] contains 1 section.*
|
||||
+ \[Index\] Name
|
||||
+ \[[ 0-9]+\] \.comment
|
||||
diff --git a/ld/testsuite/ld-elf/pr22836-2.s b/ld/testsuite/ld-elf/pr22836-2.s
|
||||
new file mode 100644
|
||||
index 0000000..77cd83a
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/pr22836-2.s
|
||||
@@ -0,0 +1,7 @@
|
||||
+ .section .debug_macro,"G",%progbits,foo
|
||||
+ .long .LASF0
|
||||
+.LASF0:
|
||||
+ .string "__STDC__ 1"
|
||||
+
|
||||
+ .section .comment,"G",%progbits,foo
|
||||
+ .asciz "hi"
|
||||
--
|
||||
2.9.3
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
# $Id$
|
||||
# Maintainer: Allan McRae <allan@archlinux.org>
|
||||
# Maintainer: Bartłomiej Piotrowski <bpiotrowski@archlinux.org>
|
||||
# Contributor: Allan McRae <allan@archlinux.org>
|
||||
|
||||
# toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc
|
||||
|
||||
|
@ -11,29 +12,26 @@
|
|||
noautobuild=1
|
||||
|
||||
pkgname=binutils
|
||||
pkgver=2.29.1
|
||||
pkgver=2.30
|
||||
pkgrel=3
|
||||
pkgdesc='A set of programs to assemble and manipulate binary and object files'
|
||||
arch=(x86_64)
|
||||
url='http://www.gnu.org/software/binutils/'
|
||||
license=(GPL)
|
||||
groups=('base-devel')
|
||||
depends=('glibc>=2.26' zlib)
|
||||
makedepends=(git)
|
||||
groups=(base-devel)
|
||||
depends=(glibc zlib)
|
||||
checkdepends=(dejagnu bc)
|
||||
options=(staticlibs !distcc !ccache)
|
||||
#_commit=d1a6e7195b9bb0255fa77588985b969ad8aaacf5
|
||||
#source=(git+https://sourceware.org/git/binutils-gdb.git#commit=${_commit}
|
||||
source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz{,.sig}
|
||||
0001-x86-64_Dont_pass_output_bfd_to_info-callbacks-minfo.patch
|
||||
0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch
|
||||
0001-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch)
|
||||
0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch
|
||||
0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch)
|
||||
validpgpkeys=(3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F)
|
||||
md5sums=('acc9cd826edb9954ac7cecb81c727793'
|
||||
md5sums=('ffc476dd46c96f932875d1b2e27e929f'
|
||||
'SKIP'
|
||||
'e4be936139ef46122cb3841881c432b2'
|
||||
'469164f3c93a0e92a697537b60c9806c'
|
||||
'0c679b37e90fb23de60a4d28329b956a')
|
||||
'0c679b37e90fb23de60a4d28329b956a'
|
||||
'53b5682e09c0a27e9994c3efdfe01d29')
|
||||
|
||||
prepare() {
|
||||
mkdir -p binutils-build
|
||||
|
@ -44,14 +42,14 @@ prepare() {
|
|||
# hack! - libiberty configure tests for header files using "$CPP $CPPFLAGS"
|
||||
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure
|
||||
|
||||
# https://bugs.archlinux.org/task/55741
|
||||
git apply ../0001-x86-64_Dont_pass_output_bfd_to_info-callbacks-minfo.patch
|
||||
|
||||
# https://sourceware.org/bugzilla/show_bug.cgi?id=22741
|
||||
git apply ../0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch
|
||||
patch -p1 -i "$srcdir/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch"
|
||||
|
||||
# https://sourceware.org/bugzilla/show_bug.cgi?id=22829
|
||||
git apply ../0001-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch
|
||||
patch -p1 -i "$srcdir/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch"
|
||||
|
||||
# https://sourceware.org/bugzilla/show_bug.cgi?id=22836
|
||||
patch -p1 -i "$srcdir/0003-PR22836-r-s-doesnt-work-with-g3-using-GCC-7.patch"
|
||||
}
|
||||
|
||||
build() {
|
||||
|
@ -67,16 +65,17 @@ build() {
|
|||
--prefix=/usr \
|
||||
--with-lib-path=/usr/lib:/usr/local/lib \
|
||||
--with-bugurl=https://github.com/archlinuxarm/PKGBUILDs/issues \
|
||||
--enable-threads \
|
||||
--enable-shared \
|
||||
--enable-ld=default \
|
||||
--enable-deterministic-archives \
|
||||
--enable-gold \
|
||||
--enable-ld=default \
|
||||
--enable-lto \
|
||||
--enable-plugins \
|
||||
--enable-relro \
|
||||
--enable-deterministic-archives \
|
||||
--with-pic \
|
||||
--disable-werror \
|
||||
--enable-shared \
|
||||
--enable-threads \
|
||||
--disable-gdb \
|
||||
--disable-werror \
|
||||
--with-pic \
|
||||
--with-system-zlib \
|
||||
--disable-sim \
|
||||
$CONFIGFLAG
|
||||
|
@ -102,6 +101,6 @@ package() {
|
|||
|
||||
# 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"
|
||||
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"
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue