+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>
* elf.c (elf_sort_sections): Return zero only as the last step.
return false;
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
undefined. If a symbol is currently known to be common,
COFF linkers do not bring in an object file which defines
arh = archive_hash_lookup (&arsym_hash, h->root.string, false, false);
if (arh == (struct archive_hash_entry *) NULL)
{
- pundef = &(*pundef)->next;
- continue;
+ /* If we haven't found the exact symbol we're looking for,
+ 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. */
for (l = arh->defs; l != (struct archive_list *) NULL; l = l->next)
{