2001-08-02 Paul Sokolovsky <paul.sokolovsky@technologist.com>

* cofflink.c (coff_link_check_ar_symbols): also search for
        __imp__symbol as well as _symbol.
        * linker.c (_bfd_generic_link_add_archive_symbols): also
        search for __imp__symbol as well as _symbol.
This commit is contained in:
Charles Wilson 2001-08-02 23:05:54 +00:00
parent decc363800
commit 8ceb7a1b8e
3 changed files with 30 additions and 3 deletions

View file

@ -1,3 +1,10 @@
2001-08-02 Paul Sokolovsky <paul.sokolovsky@technologist.com>
* cofflink.c (coff_link_check_ar_symbols): also search for
__imp__symbol as well as _symbol.
* linker.c (_bfd_generic_link_add_archive_symbols): also
search for __imp__symbol as well as _symbol.
2001-08-01 Adam Nemet <anemet@lnxw.com> 2001-08-01 Adam Nemet <anemet@lnxw.com>
* elf.c (elf_sort_sections): Return zero only as the last step. * elf.c (elf_sort_sections): Return zero only as the last step.

View file

@ -277,6 +277,16 @@ coff_link_check_ar_symbols (abfd, info, pneeded)
return false; return false;
h = bfd_link_hash_lookup (info->hash, name, false, false, true); h = bfd_link_hash_lookup (info->hash, name, false, false, true);
/* auto import */
if (!h && info->pei386_auto_import)
{
if (!strncmp (name,"__imp_", 6))
{
h =
bfd_link_hash_lookup (info->hash, name + 6, false, false,
true);
}
}
/* We are only interested in symbols that are currently /* We are only interested in symbols that are currently
undefined. If a symbol is currently known to be common, undefined. If a symbol is currently known to be common,
COFF linkers do not bring in an object file which defines COFF linkers do not bring in an object file which defines

View file

@ -1003,10 +1003,20 @@ _bfd_generic_link_add_archive_symbols (abfd, info, checkfn)
arh = archive_hash_lookup (&arsym_hash, h->root.string, false, false); arh = archive_hash_lookup (&arsym_hash, h->root.string, false, false);
if (arh == (struct archive_hash_entry *) NULL) if (arh == (struct archive_hash_entry *) NULL)
{ {
pundef = &(*pundef)->next; /* If we haven't found the exact symbol we're looking for,
continue; let's look for its import thunk */
if (info->pei386_auto_import)
{
char *buf = alloca (strlen (h->root.string) + 10);
sprintf (buf, "__imp_%s", h->root.string);
arh = archive_hash_lookup (&arsym_hash, buf, false, false);
}
if (arh == (struct archive_hash_entry *) NULL)
{
pundef = &(*pundef)->next;
continue;
}
} }
/* Look at all the objects which define this symbol. */ /* Look at all the objects which define this symbol. */
for (l = arh->defs; l != (struct archive_list *) NULL; l = l->next) for (l = arh->defs; l != (struct archive_list *) NULL; l = l->next)
{ {