aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2014-10-21 20:44:38 +1030
committerAlan Modra <amodra@gmail.com>2014-10-21 21:05:15 +1030
commit73242275062071346a7c377aca5e704679f25f82 (patch)
treead2a019f8fcbdfb88f19605117337aa3df9f2ce3 /bfd
parente74211b660791d29be21e11766c5b375f5df59b1 (diff)
downloadgdb-73242275062071346a7c377aca5e704679f25f82.zip
gdb-73242275062071346a7c377aca5e704679f25f82.tar.gz
gdb-73242275062071346a7c377aca5e704679f25f82.tar.bz2
Relax ppc64_elf_tls_optimize assertion
The code in ppc64_elf_tls_optimize looking at the .toc is only interested in .toc entries that are addresses. .toc can contain more than just an array of addresses, so if we have items that aren't 8-byte aligned, ignore them. * elf64-ppc.c (ppc64_elf_tls_optimize): Ignore relocs against toc entries that aren't a multiple of 8 rather than failing assertion.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf64-ppc.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 04e60a8..73605d7 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,10 @@
2014-10-21 Alan Modra <amodra@gmail.com>
+ * elf64-ppc.c (ppc64_elf_tls_optimize): Ignore relocs against toc
+ entries that aren't a multiple of 8 rather than failing assertion.
+
+2014-10-21 Alan Modra <amodra@gmail.com>
+
* elf64-ppc.c (ppc64_elf_size_stubs): Add gcc-4.9 libgomp functions
to thread_starter.
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index e3c06eb..0b65ab1 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -8343,7 +8343,10 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info)
else
value = sym->st_value;
value += rel->r_addend;
- BFD_ASSERT (value < toc->size && value % 8 == 0);
+ if (value % 8 != 0)
+ continue;
+ BFD_ASSERT (value < toc->size
+ && toc->output_offset % 8 == 0);
toc_ref_index = (value + toc->output_offset) / 8;
if (r_type == R_PPC64_TLS
|| r_type == R_PPC64_TLSGD