Fix place_orphan crash.
authorAlan Modra <amodra@gmail.com>
Wed, 6 Sep 2000 15:28:25 +0000 (15:28 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 6 Sep 2000 15:28:25 +0000 (15:28 +0000)
ld/ChangeLog
ld/emultempl/elf32.em

index 8058b6ed68286f38f32cda8d5523981be7903016..574884b51c9b358f9150e2d5aba62eac1b6edd00 100644 (file)
@@ -1,3 +1,10 @@
+2000-09-06  Alan Modra  <alan@linuxcare.com.au>
+
+       * 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  <aoliva@redhat.com>
 
        * configure: Rebuilt with new libtool.m4.
index e8be9cfaa7cda407783a0fd835874b74b102dddf..717f931114ceca81213e6a6001378fcad8d3f7a1 100644 (file)
@@ -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)