When choosing the target for a particular endianness, do nothing if the target
authorNick Clifton <nickc@redhat.com>
Fri, 25 Aug 2000 20:44:09 +0000 (20:44 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 25 Aug 2000 20:44:09 +0000 (20:44 +0000)
is not supported.

ld/ChangeLog
ld/ldlang.c

index 89e1c348505bf865f8992a2b81b060c4a3bbf6c3..e9d239b1dbcf0372891bd9a767932452bfa6a9fa 100644 (file)
@@ -1,3 +1,9 @@
+2000-08-25  Nick Clifton  <nickc@redhat.com>
+
+       * ldlang.c (open_output): When choosing the target for a
+       particular endianness, do nothing if the target is not
+       supported.
+
 2000-08-25  H.J. Lu  <hjl@gnu.org>
 
        * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Don't
index c3420c5434c4ebf7ca624235571ee388227a2d90..baaf7ed55d9c1145f5897e2d039a8cd0866b90eb 100644 (file)
@@ -1728,32 +1728,37 @@ open_output (name)
       /* Get the chosen target.  */
       target = bfd_search_for_target (get_target, (void *) output_target);
 
-      if (command_line.endian == ENDIAN_BIG)
-       desired_endian = BFD_ENDIAN_BIG;
-      else
-       desired_endian = BFD_ENDIAN_LITTLE;
-      
-      /* See if the target has the wrong endianness.  This should not happen
-        if the linker script has provided big and little endian alternatives,
-        but some scrips don't do this.  */
-      if (target->byteorder != desired_endian)
+      /* If the target is not supported, we cannot do anything.  */
+      if (target != NULL)
        {
-         /* If it does, then see if the target provides
-            an alternative with the correct endianness.  */
-         if (target->alternative_target != NULL
-             && (target->alternative_target->byteorder == desired_endian))
-           output_target = target->alternative_target->name;
+         if (command_line.endian == ENDIAN_BIG)
+           desired_endian = BFD_ENDIAN_BIG;
          else
+           desired_endian = BFD_ENDIAN_LITTLE;
+         
+         /* See if the target has the wrong endianness.  This should not happen
+            if the linker script has provided big and little endian alternatives,
+            but some scrips don't do this.  */
+         if (target->byteorder != desired_endian)
            {
-             /* Try to find a target as similar as possible to the default
-                target, but which has the desired endian characteristic.  */
-             (void) bfd_search_for_target (closest_target_match, (void *) target);
-             
-             /* Oh dear - we could not find any targets that satisfy our requirements.  */
-             if (winner == NULL)
-               einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
+             /* If it does, then see if the target provides
+                an alternative with the correct endianness.  */
+             if (target->alternative_target != NULL
+                 && (target->alternative_target->byteorder == desired_endian))
+               output_target = target->alternative_target->name;
              else
-               output_target = winner->name;
+               {
+                 /* Try to find a target as similar as possible to the default
+                    target, but which has the desired endian characteristic.  */
+                 (void) bfd_search_for_target (closest_target_match, (void *) target);
+                 
+                 /* Oh dear - we could not find any targets that satisfy our
+                    requirements.  */
+                 if (winner == NULL)
+                   einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
+                 else
+                   output_target = winner->name;
+               }
            }
        }
     }
@@ -3155,14 +3160,15 @@ lang_do_assignments (s, output_section_statement, fill, dot)
                dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
 
              }
-           if (os->load_base) 
+           if (os->load_base)
              {
                /* If nothing has been placed into the output section then
                   it won't have a bfd_section. */
                if (os->bfd_section) 
                  {
                    os->bfd_section->lma 
-                     = exp_get_abs_int(os->load_base, 0,"load base", lang_final_phase_enum);
+                     = exp_get_abs_int(os->load_base, 0,"load base",
+                                       lang_final_phase_enum);
                  }
              }
          }
@@ -3873,7 +3879,6 @@ lang_enter_output_section_statement (output_section_statement_name,
   return os;
 }
 
-
 void
 lang_final ()
 {