aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>1999-07-08 16:50:53 +0000
committerRichard Henderson <rth@redhat.com>1999-07-08 16:50:53 +0000
commit99f8f232c6b14a5842615b9ef0e824eb58f6f717 (patch)
treee6d0dc8c081f57f173fdcd57654301f5b562794d /ld
parent9df31319e84a3cb3999930a846f8a98e66bc1632 (diff)
downloadfsf-binutils-gdb-99f8f232c6b14a5842615b9ef0e824eb58f6f717.zip
fsf-binutils-gdb-99f8f232c6b14a5842615b9ef0e824eb58f6f717.tar.gz
fsf-binutils-gdb-99f8f232c6b14a5842615b9ef0e824eb58f6f717.tar.bz2
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.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/ldfile.c31
2 files changed, 35 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index a964c22..3f3d8d6 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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.
diff --git a/ld/ldfile.c b/ld/ldfile.c
index 1dfa31f..7946dda 100644
--- a/ld/ldfile.c
+++ b/ld/ldfile.c
@@ -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);