Browse Source

* ldfile.c: Revert patch of 1999-07-08.

(ldfile_try_open_bfd): If we are searching for the file, skip
	files with an incompatible architecture.
gdb-premipsmulti-2000-06-06-branch
Ian Lance Taylor 27 years ago
parent
commit
b90d114661
  1. 6
      ld/ChangeLog
  2. 63
      ld/ldfile.c

6
ld/ChangeLog

@ -1,3 +1,9 @@
1999-07-10 Ian Lance Taylor <ian@zembu.com>
* ldfile.c: Revert patch of 1999-07-08.
(ldfile_try_open_bfd): If we are searching for the file, skip
files with an incompatible architecture.
1999-07-09 Nick Clifton <nickc@cygnus.com>
* scripttempl/armcoff.sc (OUTPUT_FORMAT): Include big endian and

63
ld/ldfile.c

@ -111,14 +111,40 @@ ldfile_try_open_bfd (attempt, entry)
info_msg (_("attempt to open %s succeeded\n"), attempt);
}
if (entry->the_bfd != NULL)
return true;
else
if (entry->the_bfd == NULL)
{
if (bfd_get_error () == bfd_error_invalid_target)
einfo (_("%F%P: invalid BFD target `%s'\n"), entry->target);
return false;
}
/* If we are searching for this file, see if the architecture is
compatible with the output file. If it isn't, keep searching.
If we can't open the file as an object file, stop the search
here. */
if (entry->search_dirs_flag)
{
bfd *check;
if (bfd_check_format (entry->the_bfd, bfd_archive))
check = bfd_openr_next_archived_file (entry->the_bfd, NULL);
else
check = entry->the_bfd;
if (! bfd_check_format (check, bfd_object))
return true;
if (bfd_arch_get_compatible (check, output_bfd) == NULL)
{
einfo (_("%P: skipping incompatible %s when searching for %s"),
attempt, entry->local_sym_name);
bfd_close (entry->the_bfd);
entry->the_bfd = NULL;
return false;
}
}
return true;
}
/* Search for and open the file specified by ENTRY. If it is an
@ -177,35 +203,8 @@ ldfile_open_file_search (arch, entry, lib, suffix)
if (ldfile_try_open_bfd (string, entry))
{
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;
entry->filename = string;
return true;
}
free (string);

Loading…
Cancel
Save