Handle out of memory situations.
authorAlan Modra <amodra@gmail.com>
Wed, 20 Sep 2000 04:20:26 +0000 (04:20 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 20 Sep 2000 04:20:26 +0000 (04:20 +0000)
bfd/ChangeLog
bfd/section.c
ld/ChangeLog
ld/emultempl/elf32.em
ld/ldwrite.c

index b3dc5cf3ecd70b7b29db6aaa896f364923dc8fec..f5bc32fffdd2378506b42a2788bb25f7d48937c9 100644 (file)
@@ -1,3 +1,8 @@
+2000-09-20  Alan Modra  <alan@linuxcare.com.au>
+
+       * section.c (bfd_get_unique_section_name): Return NULL if
+       bfd_malloc fails.
+
 2000-09-19  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
 
        * elf32-m68k.c (elf_cpu32_plt0_entry): Change the PLT entry 0
index e70cdaae8f9ddeaedc6055fd17651fcdc252364e..4c858f686d8a8aee80f587ea96de3a4a840d5cf8 100644 (file)
@@ -672,6 +672,8 @@ bfd_get_unique_section_name (abfd, templat, count)
 
   len = strlen (templat);
   sname = bfd_malloc (len + 8);
+  if (sname == NULL)
+    return NULL;
   strcpy (sname, templat);
   num = 1;
   if (count != NULL)
index 5c5b0a6533c6082e8449460d0be0e02a60d0a77d..c6fef1830c3a25307242a852753624ca3b0e44ad 100644 (file)
@@ -1,3 +1,12 @@
+2000-09-20  Alan Modra  <alan@linuxcare.com.au>
+
+       * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Handle
+       out of memory failure.
+
+       * ldwrite.c (ldwrite): Remove unnecessary einfo arg.
+       (clone_section): Handle out of memory failures.  Rename var to
+       avoid c++ reserved word.
+
 2000-09-18  Alan Modra  <alan@linuxcare.com.au>
 
        * emultempl/hppaelf.em (hppaelf_add_stub_section): Rename
index c7ba49727302b859ac68007086e725da474cdc1a..fe4966dc99c2db6aec5a5c16ac6a5500ec7c4920 100644 (file)
@@ -1092,9 +1092,13 @@ gld${EMULATION_NAME}_place_orphan (file, s)
      loadable or allocateable characteristics.  */
   outsecname = secname;
   if (bfd_get_section_by_name (output_bfd, outsecname) != NULL)
-    outsecname = bfd_get_unique_section_name (output_bfd,
-                                             outsecname,
-                                             &count);
+    {
+      outsecname = bfd_get_unique_section_name (output_bfd,
+                                               outsecname,
+                                               &count);
+      if (outsecname == NULL)
+       einfo ("%F%P: place_orphan failed: %E\n");
+    }
 
   /* Start building a list of statements for this section.
      First save the current statement pointer.  */
index 37e258030a526ec73145259bffe95cce4a181d17..233f2388eb74bfea726d659145007fb526da9cc0 100644 (file)
@@ -306,23 +306,22 @@ clone_section (abfd, s, name, count)
      const char *name;
      int *count;
 {
-  char template[6];
+  char templ[6];
   char *sname;
   asection *n;
   struct bfd_link_hash_entry *h;
 
   /* Invent a section name from the first five chars of the base
      section name and a digit suffix.  */
-  strncpy (template, name, sizeof (template) - 1);
-  template[sizeof (template) - 1] = '\0';
-  sname = bfd_get_unique_section_name (abfd, template, count);
-
-  n = bfd_make_section_anyway (abfd, sname);
-
-  /* Create a symbol of the same name.  */
-
-  h = bfd_link_hash_lookup (link_info.hash,
-                           sname, true, true, false);
+  strncpy (templ, name, sizeof (templ) - 1);
+  templ[sizeof (templ) - 1] = '\0';
+  if ((sname = bfd_get_unique_section_name (abfd, templ, count)) == NULL
+      || (n = bfd_make_section_anyway (abfd, sname)) == NULL
+      || (h = bfd_link_hash_lookup (link_info.hash,
+                                   sname, true, true, false)) == NULL)
+    einfo (_("%F%P: clone section failed: %E\n"));
+
+  /* Set up section symbol.  */
   h->type = bfd_link_hash_defined;
   h->u.def.value = 0;
   h->u.def.section = n;
@@ -536,7 +535,7 @@ ldwrite ()
         out.  */
 
       if (bfd_get_error () != bfd_error_no_error)
-       einfo (_("%F%P: final link failed: %E\n"), output_bfd);
+       einfo (_("%F%P: final link failed: %E\n"));
       else
        xexit(1);
     }