From 28be611cf8f68185d47271a242db07f87c7f17af Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 15 Feb 2011 04:07:43 +0000 Subject: [PATCH] * elf64-ppc.c (ppc64_elf_edit_toc): Reinstate second read of toc relocs. Fuss over free(NULL). --- bfd/ChangeLog | 5 +++++ bfd/elf64-ppc.c | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 2f54729bf43..4c73deea2d3 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2011-02-15 Alan Modra + + * elf64-ppc.c (ppc64_elf_edit_toc): Reinstate second read of + toc relocs. Fuss over free(NULL). + 2011-02-14 Mike Frysinger * elflink.c (bfd_elf_size_dynamic_sections): Add diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 25d0d2efee6..856c68ac626 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 -- 2.30.2