aboutsummaryrefslogtreecommitdiffstats
path: root/main/binutils
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2018-05-18 09:04:37 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2018-05-30 22:30:12 +0200
commitcb56f87d3a50fb6ef7d3b95bf6167f95fab881a2 (patch)
treee5ed578fed85924d79bf8ec95c435ce24155d49f /main/binutils
parent1bbd727b16f144e132af8f3c4a41f6b754aff086 (diff)
downloadaports-cb56f87d3a50fb6ef7d3b95bf6167f95fab881a2.tar.bz2
aports-cb56f87d3a50fb6ef7d3b95bf6167f95fab881a2.tar.xz
main/binutils: backport fix for ppc64le
This fixes clang testsuite. Patch was taken from upstream binutils-2_30-branch https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=shortlog;h=refs/heads/binutils-2_30-branch Upstream report: https://sourceware.org/ml/binutils/2018-03/msg00183.html
Diffstat (limited to 'main/binutils')
-rw-r--r--main/binutils/APKBUILD4
-rw-r--r--main/binutils/fix-powerpc64-out-ot-line-save-restore.patch93
2 files changed, 96 insertions, 1 deletions
diff --git a/main/binutils/APKBUILD b/main/binutils/APKBUILD
index 1a300f251f..10a410b7bd 100644
--- a/main/binutils/APKBUILD
+++ b/main/binutils/APKBUILD
@@ -1,7 +1,7 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=binutils
pkgver=2.30
-pkgrel=0
+pkgrel=1
pkgdesc="Tools necessary to build programs"
url="https://www.gnu.org/software/binutils/"
depends=""
@@ -12,6 +12,7 @@ arch="all"
license="GPL2 GPL3+ LGPL2 BSD"
subpackages="$pkgname-dev $pkgname-doc $pkgname-libs $pkgname-gold"
source="http://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.bz2
+ fix-powerpc64-out-ot-line-save-restore.patch
binutils-ld-fix-static-linking.patch
gold-mips.patch
"
@@ -108,5 +109,6 @@ gold() {
}
sha512sums="c3ce91aa20f058ec589bf18c722bf651331b394db6378900cc813cc0eea3a331a96584d5ae090630b627369510397dccc9edfcd43d4aeefc99579f277a05c72c binutils-2.30.tar.bz2
+29791af5a09387d16fc4272dc7a10f71aed5a13187187af533bbe365506d6e6b581030d3f9bb4b7d8e300fb29b8b37b5f48027d86e33a8395b1a6d2dfb2d895a fix-powerpc64-out-ot-line-save-restore.patch
ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49 binutils-ld-fix-static-linking.patch
f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch"
diff --git a/main/binutils/fix-powerpc64-out-ot-line-save-restore.patch b/main/binutils/fix-powerpc64-out-ot-line-save-restore.patch
new file mode 100644
index 0000000000..56ec7ede40
--- /dev/null
+++ b/main/binutils/fix-powerpc64-out-ot-line-save-restore.patch
@@ -0,0 +1,93 @@
+From d66deb71f1537e2e30dccdfda22eed5d46ec47eb Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Wed, 14 Mar 2018 22:09:33 +1030
+Subject: [PATCH] PowerPC64 debian bug 886264, out-of-line save/restore
+ functions
+
+This calculation in relocate_section
+
+ if (stub_entry->stub_type == ppc_stub_save_res)
+ relocation += (stub_sec->output_offset
+ + stub_sec->output_section->vma
+ + stub_sec->size - htab->sfpr->size
+ - htab->sfpr->output_offset
+ - htab->sfpr->output_section->vma);
+
+to adjust from the original out-of-line save/restore function address
+in sfpr to a copy at the end of stub_sec goes wrong when stub_sec is
+padded, because the copy is no longer at the end of stub_sec. The
+solution is to pad before copying sfpr, so the copy is always at the
+end of stub_sec.
+
+ * elf64-ppc.c (sfpr_define): Adjust for stub_sec size having
+ sfpr size added before defining alias symbols.
+ (ppc64_elf_build_stubs): Add stub section padding before
+ copying sfpr contents and defining save/restore alias symbols.
+
+(cherry picked from commit 7dda8d3cf3b089bb7e03c4cdbec827fc6a188c88)
+---
+ bfd/ChangeLog | 9 +++++++++
+ bfd/elf64-ppc.c | 33 ++++++++++++++++++---------------
+ 2 files changed, 27 insertions(+), 15 deletions(-)
+
+diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
+index 6fcdff0..039294f 100644
+--- a/bfd/elf64-ppc.c
++++ b/bfd/elf64-ppc.c
+@@ -6645,7 +6645,7 @@ sfpr_define (struct bfd_link_info *info,
+ {
+ s->root.type = bfd_link_hash_defined;
+ s->root.u.def.section = stub_sec;
+- s->root.u.def.value = (stub_sec->size
++ s->root.u.def.value = (stub_sec->size - htab->sfpr->size
+ + h->elf.root.u.def.value);
+ s->ref_regular = 1;
+ s->def_regular = 1;
+@@ -13232,20 +13232,7 @@ ppc64_elf_build_stubs (struct bfd_link_info *info,
+
+ for (group = htab->group; group != NULL; group = group->next)
+ if (group->needs_save_res)
+- {
+- stub_sec = group->stub_sec;
+- memcpy (stub_sec->contents + stub_sec->size, htab->sfpr->contents,
+- htab->sfpr->size);
+- if (htab->params->emit_stub_syms)
+- {
+- unsigned int i;
+-
+- for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
+- if (!sfpr_define (info, &save_res_funcs[i], stub_sec))
+- return FALSE;
+- }
+- stub_sec->size += htab->sfpr->size;
+- }
++ group->stub_sec->size += htab->sfpr->size;
+
+ if (htab->relbrlt != NULL)
+ htab->relbrlt->reloc_count = 0;
+@@ -13259,6 +13246,22 @@ ppc64_elf_build_stubs (struct bfd_link_info *info,
+ }
+
+ for (group = htab->group; group != NULL; group = group->next)
++ if (group->needs_save_res)
++ {
++ stub_sec = group->stub_sec;
++ memcpy (stub_sec->contents + stub_sec->size - htab->sfpr->size,
++ htab->sfpr->contents, htab->sfpr->size);
++ if (htab->params->emit_stub_syms)
++ {
++ unsigned int i;
++
++ for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
++ if (!sfpr_define (info, &save_res_funcs[i], stub_sec))
++ return FALSE;
++ }
++ }
++
++ for (group = htab->group; group != NULL; group = group->next)
+ if ((stub_sec = group->stub_sec) != NULL)
+ {
+ stub_sec_count += 1;
+--
+2.9.3
+