From f998903041dd48584defd9c3b0fb6b30b1daf3bc Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 6 Sep 2000 15:28:25 +0000 Subject: [PATCH] Fix place_orphan crash. --- ld/ChangeLog | 7 +++++++ ld/emultempl/elf32.em | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 8058b6ed68..574884b51c 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2000-09-06 Alan Modra + + * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Don't + try shuffling sections when the orphan happens to be the place + holder. Keep count of unique section names generated so we speed + the search for a new name. + 2000-09-06 Alexandre Oliva * configure: Rebuilt with new libtool.m4. diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index e8be9cfaa7..717f931114 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -1008,6 +1008,7 @@ gld${EMULATION_NAME}_place_orphan (file, s) static struct orphan_save hold_bss; static struct orphan_save hold_rel; static struct orphan_save hold_interp; + static int count = 1; struct orphan_save *place; lang_statement_list_type *old = NULL; lang_statement_list_type add; @@ -1092,7 +1093,9 @@ 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, NULL); + outsecname = bfd_get_unique_section_name (output_bfd, + outsecname, + &count); if (place != NULL) { @@ -1154,7 +1157,9 @@ gld${EMULATION_NAME}_place_orphan (file, s) stat_ptr = old; snew = os->bfd_section; - if (place->os->bfd_section != NULL || place->section != NULL) + if (place->section != NULL + || (place->os->bfd_section != NULL + && place->os->bfd_section != snew)) { /* Shuffle the section to make the output file look neater. */ if (place->section == NULL)