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:
parent
decc363800
commit
8ceb7a1b8e
3 changed files with 30 additions and 3 deletions
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
16
bfd/linker.c
16
bfd/linker.c
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue