Jakub Jelinek <jj@ultra.linux.cz>
authorRichard Henderson <rth@redhat.com>
Thu, 8 Jul 1999 16:50:53 +0000 (16:50 +0000)
committerRichard Henderson <rth@redhat.com>
Thu, 8 Jul 1999 16:50:53 +0000 (16:50 +0000)
        * ldfile.c (ldfile_open_file_search): Skip libraries made for
        incompatible architectures in the search path. Let the user know
        about any such skips.

ld/ChangeLog
ld/ldfile.c

index a964c22114fc4fbd1d332ceed49aadafb33662a7..3f3d8d6bbce3ced2751bda22db918fdf087478f3 100644 (file)
@@ -1,3 +1,9 @@
+1999-07-08  Jakub Jelinek  <jj@ultra.linux.cz>
+
+       * ldfile.c (ldfile_open_file_search): Skip libraries made for
+       incompatible architectures in the search path. Let the user know
+       about any such skips.
+
 Thu Jul  8 12:32:23 1999  John David Anglin <dave@hiauly1.hia.nrc.ca>
 
         * configure.tgt (hppa*-linux-gnu*): New target.
index 1dfa31f219266e40035c9d6bed4805f8b51d4c90..7946dda818a243d3c98b24a71c5764700f35222f 100644 (file)
@@ -177,8 +177,35 @@ ldfile_open_file_search (arch, entry, lib, suffix)
 
       if (ldfile_try_open_bfd (string, entry))
        {
-         entry->filename = string;
-         return true;
+         bfd * arfile = NULL;
+
+         if (bfd_check_format (entry->the_bfd, bfd_archive))
+           {
+             /* We treat an archive as compatible if it empty
+                or has at least one compatible object.  */
+             arfile = bfd_openr_next_archived_file (entry->the_bfd, NULL);
+
+             if (!arfile)
+               arfile = output_bfd;
+             else
+               while (arfile
+                      && !(bfd_check_format (arfile, bfd_object)
+                           && bfd_arch_get_compatible (arfile, output_bfd)))
+                 arfile = bfd_openr_next_archived_file (entry->the_bfd, arfile);
+           }
+         else if (bfd_arch_get_compatible (entry->the_bfd, output_bfd))
+           arfile = output_bfd;
+           
+         if (arfile)
+           {
+             entry->filename = string;
+             return true;
+           }
+
+         info_msg (_("%s is for an incompatible architecture -- skipped\n"),
+                   string);
+         bfd_close(entry->the_bfd);
+         entry->the_bfd = NULL;
        }
 
       free (string);