diff options
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/section.c | 2 | ||||
-rw-r--r-- | ld/ChangeLog | 9 | ||||
-rw-r--r-- | ld/emultempl/elf32.em | 10 | ||||
-rw-r--r-- | ld/ldwrite.c | 23 |
5 files changed, 34 insertions, 15 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b3dc5cf..f5bc32f 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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 diff --git a/bfd/section.c b/bfd/section.c index e70cdaa..4c858f6 100644 --- a/bfd/section.c +++ b/bfd/section.c @@ -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) diff --git a/ld/ChangeLog b/ld/ChangeLog index 5c5b0a6..c6fef18 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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 diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index c7ba497..fe4966d 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -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. */ diff --git a/ld/ldwrite.c b/ld/ldwrite.c index 37e2580..233f238 100644 --- a/ld/ldwrite.c +++ b/ld/ldwrite.c @@ -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); } |