From: Alan Modra Date: Tue, 6 Sep 2011 07:41:24 +0000 (+0000) Subject: PR ld/13131 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b140b0101b2641e96c39ce022cd79fe7db3b7322;p=binutils-gdb.git PR ld/13131 * elf64-ppc.c (adjust_toc_syms): Delete redundant code. (ppc64_elf_edit_toc): Fix style nit. Report some details on linker failure due to reference in debug or non-alloc sections to optimized away toc entry, and don't abort. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7f97fa4f60e..0052fe51b95 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2011-09-06 Alan Modra + + PR ld/13131 + * elf64-ppc.c (adjust_toc_syms): Delete redundant code. + (ppc64_elf_edit_toc): Fix style nit. Report some details + on linker failure due to reference in debug or non-alloc + sections to optimized away toc entry, and don't abort. + 2011-09-01 Christophe Lyon * elf32-arm.c (elf32_arm_output_arch_local_syms): Skip excluded diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index b71a11b231a..8c14c0cd6ba 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -7881,9 +7881,6 @@ adjust_toc_syms (struct elf_link_hash_entry *h, void *inf) struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf; unsigned long i; - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - if (h->root.type != bfd_link_hash_defined && h->root.type != bfd_link_hash_defweak) return TRUE; @@ -8267,7 +8264,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info) some_unused = 1; last = 0; } - else if (*drop & ref_from_discarded) + else if ((*drop & ref_from_discarded) != 0) { some_unused = 1; last = ref_from_discarded; @@ -8385,7 +8382,13 @@ ppc64_elf_edit_toc (struct bfd_link_info *info) break; default: - abort (); + info->callbacks->einfo + (_("%P: %H: %s relocation references " + "optimized away TOC entry\n"), + ibfd, sec, rel->r_offset, + ppc64_elf_howto_table[r_type]->name); + bfd_set_error (bfd_error_bad_value); + goto error_ret; } rel->r_addend = tocrel->r_addend; elf_section_data (sec)->relocs = relstart;