* ldlang.c (lang_check): Do relocatable link checks first, so that
authorAlan Modra <amodra@gmail.com>
Wed, 13 Mar 2002 02:56:36 +0000 (02:56 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 13 Mar 2002 02:56:36 +0000 (02:56 +0000)
warn_mismatch can't override.  Check compatible and word size too.

ld/ChangeLog
ld/ldlang.c

index 78ae53e93ec54dd6acb0c52520a1ee440acdc209..db8002abb150b6801447a9560ccc70f181cf9a1f 100644 (file)
@@ -1,3 +1,8 @@
+2002-03-13  Alan Modra  <amodra@bigpond.net.au>
+
+       * ldlang.c (lang_check): Do relocatable link checks first, so that
+       warn_mismatch can't override.  Check compatible and word size too.
+
 2002-03-07  Daniel Jacobowitz  <drow@mvista.com>
 
        * ld.texinfo: Wrap @menu in @ifnottex, not @ifinfo.
index 413ccf818d39de3009b143706a8603d84fbdbe28..9858fff4a3a72bea8cb6572343e202a78658b860 100644 (file)
@@ -3569,8 +3569,27 @@ lang_check ()
        file = file->input_statement.next)
     {
       input_bfd = file->input_statement.the_bfd;
-      compatible = bfd_arch_get_compatible (input_bfd,
-                                           output_bfd);
+      compatible = bfd_arch_get_compatible (input_bfd, output_bfd);
+
+      /* In general it is not possible to perform a relocatable
+        link between differing object formats when the input
+        file has relocations, because the relocations in the
+        input format may not have equivalent representations in
+        the output format (and besides BFD does not translate
+        relocs for other link purposes than a final link).  */
+      if (link_info.relocateable
+         && (compatible == NULL
+             || bfd_get_flavour (input_bfd) != bfd_get_flavour (output_bfd)
+             || (input_bfd->arch_info->bits_per_word
+                 != output_bfd->arch_info->bits_per_word))
+         && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
+       {
+         einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
+                bfd_get_target (input_bfd), input_bfd,
+                bfd_get_target (output_bfd), output_bfd);
+         /* einfo with %F exits.  */
+       }
+
       if (compatible == NULL)
        {
          if (command_line.warn_mismatch)
@@ -3578,18 +3597,6 @@ lang_check ()
                   bfd_printable_name (input_bfd), input_bfd,
                   bfd_printable_name (output_bfd));
        }
-      else if (link_info.relocateable
-              /* In general it is not possible to perform a relocatable
-                 link between differing object formats when the input
-                 file has relocations, because the relocations in the
-                 input format may not have equivalent representations in
-                 the output format (and besides BFD does not translate
-                 relocs for other link purposes than a final link).  */
-              && bfd_get_flavour (input_bfd) != bfd_get_flavour (output_bfd)
-              && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
-       einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
-              bfd_get_target (input_bfd), input_bfd,
-              bfd_get_target (output_bfd), output_bfd);
       else if (bfd_count_sections (input_bfd))
        {
          /* If the input bfd has no contents, it shouldn't set the