* elf64-ppc.c (ppc64_elf_edit_toc): Reinstate second read of
authorAlan Modra <amodra@gmail.com>
Tue, 15 Feb 2011 04:07:43 +0000 (04:07 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 15 Feb 2011 04:07:43 +0000 (04:07 +0000)
toc relocs.  Fuss over free(NULL).

bfd/ChangeLog
bfd/elf64-ppc.c

index 2f54729bf4386890af4e9f5055abb7bb65dde57a..4c73deea2d324ac82fd9dd3f1c782ac9d0f38c5b 100644 (file)
@@ -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
index 25d0d2efee6bb202cf2e0b6a85215814ccca4e80..856c68ac626241f516cff3d48983dc53bb59544a 100644 (file)
@@ -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