* elf64-ppc.c (ppc_stub_name): Return immediately on bfd_malloc fail.
authorAlan Modra <amodra@gmail.com>
Mon, 6 Jun 2005 13:16:15 +0000 (13:16 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 6 Jun 2005 13:16:15 +0000 (13:16 +0000)
(ppc64_elf_edit_opd): Ignore zero size .opd.  Check bfd_alloc
return value.

bfd/ChangeLog
bfd/elf64-ppc.c

index e5095904c55d0b1079ab8ba1824adfd5522d6095..85b883ca7a9496353cd6717520e127e036e1f208 100644 (file)
@@ -4,6 +4,8 @@
        case, include addend when indexing .opd section map.
        (ppc64_elf_edit_opd): Add no_opd_opt param.  Do nothing besides
        clear opd_adjust array if no_opd_opt set.  Tidy code.
+       Ignore zero size .opd.  Check bfd_alloc return value.
+       (ppc_stub_name): Return immediately on bfd_malloc fail.
        * elf64-ppc.h (ppc64_elf_edit_opd): Update prototype.
 
 2005-06-04  H.J. Lu  <hongjiu.lu@intel.com>
index 5c398b1a9f706e4130bb90c9df61c0188bfbcfd3..bd122cf5874cde9768ea4542405437fe5272ec11 100644 (file)
@@ -3581,26 +3581,26 @@ ppc_stub_name (const asection *input_section,
     {
       len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
       stub_name = bfd_malloc (len);
-      if (stub_name != NULL)
-       {
-         sprintf (stub_name, "%08x.%s+%x",
-                  input_section->id & 0xffffffff,
-                  h->elf.root.root.string,
-                  (int) rel->r_addend & 0xffffffff);
-       }
+      if (stub_name == NULL)
+       return stub_name;
+
+      sprintf (stub_name, "%08x.%s+%x",
+              input_section->id & 0xffffffff,
+              h->elf.root.root.string,
+              (int) rel->r_addend & 0xffffffff);
     }
   else
     {
       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
       stub_name = bfd_malloc (len);
-      if (stub_name != NULL)
-       {
-         sprintf (stub_name, "%08x.%x:%x+%x",
-                  input_section->id & 0xffffffff,
-                  sym_sec->id & 0xffffffff,
-                  (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
-                  (int) rel->r_addend & 0xffffffff);
-       }
+      if (stub_name == NULL)
+       return stub_name;
+
+      sprintf (stub_name, "%08x.%x:%x+%x",
+              input_section->id & 0xffffffff,
+              sym_sec->id & 0xffffffff,
+              (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
+              (int) rel->r_addend & 0xffffffff);
     }
   if (stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
     stub_name[len - 2] = 0;
@@ -6176,7 +6176,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info,
       bfd_size_type cnt_16b = 0;
 
       sec = bfd_get_section_by_name (ibfd, ".opd");
-      if (sec == NULL)
+      if (sec == NULL || sec->size == 0)
        continue;
 
       amt = sec->size * sizeof (long) / 8;
@@ -6186,6 +6186,8 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info,
          /* check_relocs hasn't been called.  Must be a ld -r link
             or --just-symbols object.   */
          opd_adjust = bfd_alloc (obfd, amt);
+         if (opd_adjust == NULL)
+           return FALSE;
          ppc64_elf_section_data (sec)->opd.adjust = opd_adjust;
        }
       memset (opd_adjust, 0, amt);