From: Alan Modra Date: Tue, 21 Oct 2014 10:14:38 +0000 (+1030) Subject: Relax ppc64_elf_tls_optimize assertion X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=73242275062071346a7c377aca5e704679f25f82;p=binutils-gdb.git 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 04e60a8cf9c..73605d7c5b8 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2014-10-21 Alan Modra + + * 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 * elf64-ppc.c (ppc64_elf_size_stubs): Add gcc-4.9 libgomp functions diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index e3c06eb00b4..0b65ab19cba 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