* pe-dll.c (generate_reloc): Take account of wrapper options when

testing if a weak symbol is defined or not, and when it is not,
	consider whether the default value requires a base reloc anyway.
This commit is contained in:
Dave Korn 2009-12-17 19:51:35 +00:00
parent b41d91a7bc
commit 9dda37c1b4
2 changed files with 28 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2009-12-17 Dave Korn <dave.korn.cygwin@gmail.com>
* pe-dll.c (generate_reloc): Take account of wrapper options when
testing if a weak symbol is defined or not, and when it is not,
consider whether the default value requires a base reloc anyway.
2009-12-17 Dave Korn <dave.korn.cygwin@gmail.com>
* deffilep.y (def_file_free): Add missing shadow parameter renaming.

View File

@ -1361,10 +1361,29 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info)
if (sym->flags == BSF_WEAK)
{
struct bfd_link_hash_entry *blhe
= bfd_link_hash_lookup (info->hash, sym->name,
= bfd_wrapped_link_hash_lookup (abfd, info, sym->name,
FALSE, FALSE, FALSE);
if (!blhe || blhe->type != bfd_link_hash_defined)
continue;
if (blhe && blhe->type == bfd_link_hash_undefweak)
{
/* Check aux sym and see if it is defined or not. */
struct coff_link_hash_entry *h, *h2;
h = (struct coff_link_hash_entry *)blhe;
if (h->symbol_class != C_NT_WEAK || h->numaux != 1)
continue;
h2 = h->auxbfd->tdata.coff_obj_data->sym_hashes
[h->aux->x_sym.x_tagndx.l];
/* We don't want a base reloc if the aux sym is not
found, undefined, or if it is the constant ABS
zero default value. (We broaden that slightly by
not testing the value, just the section; there's
no reason we'd want a reference to any absolute
address to get relocated during rebasing). */
if (!h2 || h2->root.type == bfd_link_hash_undefined
|| h2->root.u.def.section == &bfd_abs_section)
continue;
}
else if (!blhe || blhe->type != bfd_link_hash_defined)
continue;
}
sym_vma = (relocs[i]->addend