diff options
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 9 |
2 files changed, 13 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 2f54729..4c73dee 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2011-02-15 Alan Modra <amodra@gmail.com> + + * elf64-ppc.c (ppc64_elf_edit_toc): Reinstate second read of + toc relocs. Fuss over free(NULL). + 2011-02-14 Mike Frysinger <vapier@gentoo.org> * elflink.c (bfd_elf_size_dynamic_sections): Add diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 25d0d2e..856c68a 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -8424,6 +8424,12 @@ ppc64_elf_edit_toc (struct bfd_link_info *info) bfd_size_type sz; /* Remove unused toc relocs, and adjust those we keep. */ + if (toc_relocs == NULL) + toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL, + info->keep_memory); + if (toc_relocs == NULL) + goto error_ret; + wrel = toc_relocs; for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel) if ((skip[rel->r_offset >> 3] @@ -8445,7 +8451,8 @@ ppc64_elf_edit_toc (struct bfd_link_info *info) rel_hdr->sh_size = toc->reloc_count * sz; } } - else if (elf_section_data (toc)->relocs != toc_relocs) + else if (toc_relocs != NULL + && elf_section_data (toc)->relocs != toc_relocs) free (toc_relocs); if (local_syms != NULL |