* emultempl/elf-generic.em (map_segments): Reorganise loop so that
authorAlan Modra <amodra@gmail.com>
Wed, 26 Jul 2006 12:27:12 +0000 (12:27 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 26 Jul 2006 12:27:12 +0000 (12:27 +0000)
layout happens before segment map.  Don't do segment map on
relocatable link.

ld/ChangeLog
ld/emultempl/elf-generic.em

index ea78a46..cc3c2cf 100644 (file)
@@ -1,5 +1,11 @@
 2006-07-26  Alan Modra  <amodra@bigpond.net.au>
 
+       * emultempl/elf-generic.em (map_segments): Reorganise loop so that
+       layout happens before segment map.  Don't do segment map on
+       relocatable link.
+
+2006-07-26  Alan Modra  <amodra@bigpond.net.au>
+
        * ldexp.c (fold_name <LOADADDR>): Use the lma.
        * ldlang.h (lang_memory_region_type): Delete old_length.  Add
        last_os.
index 5d65cdc..dd0907c 100644 (file)
@@ -28,9 +28,26 @@ gld${EMULATION_NAME}_map_segments (bfd_boolean need_layout)
 {
   int tries = 10;
 
-  while (tries)
+  do
     {
-      if (output_bfd->xvec->flavour == bfd_target_elf_flavour)
+      if (need_layout)
+       {
+         lang_reset_memory_regions ();
+
+         /* Resize the sections.  */
+         lang_size_sections (NULL, TRUE);
+
+         /* Redo special stuff.  */
+         ldemul_after_allocation ();
+
+         /* Do the assignments again.  */
+         lang_do_assignments ();
+
+         need_layout = FALSE;
+       }
+
+      if (output_bfd->xvec->flavour == bfd_target_elf_flavour
+         && !link_info.relocatable)
        {
          bfd_size_type phdr_size;
 
@@ -45,24 +62,8 @@ gld${EMULATION_NAME}_map_segments (bfd_boolean need_layout)
          if (phdr_size != elf_tdata (output_bfd)->program_header_size)
            need_layout = TRUE;
        }
-
-      if (!need_layout)
-       break;
-
-      lang_reset_memory_regions ();
-
-      /* Resize the sections.  */
-      lang_size_sections (NULL, TRUE);
-
-      /* Redo special stuff.  */
-      ldemul_after_allocation ();
-
-      /* Do the assignments again.  */
-      lang_do_assignments ();
-
-      need_layout = FALSE;
-      --tries;
     }
+  while (need_layout && --tries);
 
   if (tries == 0)
     einfo (_("%P%F: looping in map_segments"));