| Index: binutils/ld/pe-dll.c
|
| diff --git a/binutils/ld/pe-dll.c b/binutils/ld/pe-dll.c
|
| index f615b2d2bfccc209346fefbcef8d20e9f2856516..54021b64546e6d200f79320b76f36fa4ad8d2e3f 100644
|
| --- a/binutils/ld/pe-dll.c
|
| +++ b/binutils/ld/pe-dll.c
|
| @@ -1348,10 +1348,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
|
|
|