diff options
author | Richard Henderson <rth@redhat.com> | 1999-07-08 16:50:53 +0000 |
---|---|---|
committer | Richard Henderson <rth@redhat.com> | 1999-07-08 16:50:53 +0000 |
commit | 99f8f232c6b14a5842615b9ef0e824eb58f6f717 (patch) | |
tree | e6d0dc8c081f57f173fdcd57654301f5b562794d /ld | |
parent | 9df31319e84a3cb3999930a846f8a98e66bc1632 (diff) | |
download | fsf-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/ChangeLog | 6 | ||||
-rw-r--r-- | ld/ldfile.c | 31 |
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); |