This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
The attached testcase illustrates a bug in ld/pe-dll.c caused by the
generation of relocs for undefined weak symbols in dll's. Normal
undefined symbols will cause build of a dll to fail with "undefined
reference" error since windows shared libraries are execultables
requiring all symbols to be resolved. Undefined weak symbols howver are
resolved via a [linker-generated] alias.
The executable created by the testcase fails to initialize with system
error STATUS_ACCESS_VIOLATION (0xC0000005L). If the dlls are built with
non-conflicting image bases, relocation is not necessary, so the executable
succeeds.
The following patch, extracted from a patch submitted to the mingw users
list by Takashi Ono, fixes.
2008-07-30 Takashi Ono <t_ono@hkfreak.net>
* pe-dll.c (generate_relocs): Don't generate relocs for undefined weak
symbols.
Index: pe-dll.c
===================================================================
RCS file: /cvs/src/src/ld/pe-dll.c,v
retrieving revision 1.106
diff -c -3 -p -r1.106 pe-dll.c
*** pe-dll.c 9 Jul 2008 03:18:15 -0000 1.106
--- pe-dll.c 30 Jul 2008 08:10:00 -0000
*************** generate_reloc (bfd *abfd, struct bfd_li
*** 1256,1261 ****
--- 1256,1271 ----
bfd_vma sym_vma;
struct bfd_symbol *sym = *relocs[i]->sym_ptr_ptr;
+ /* Don't create reloc for undefined weak symbols. */
+ if (sym->flags == BSF_WEAK)
+ {
+ struct bfd_link_hash_entry *blhe
+ = bfd_link_hash_lookup (info->hash, sym->name,
+ FALSE, FALSE, FALSE);
+ if (!blhe || blhe->type != bfd_link_hash_defined)
+ continue;
+ }
+
sym_vma = (relocs[i]->addend
+ sym->value
+ sym->section->vma
Attachment:
weak_reloc.tar.gz
Description: GNU Zip compressed data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |