This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
2006-05-11 change to pe-dll.c breaks Windows DLLs
- From: Christopher Faylor <cgf-use-the-mailinglist-please at sourceware dot org>
- To: binutils at sourceware dot org
- Cc: pedro_alves at portugalmail dot pt
- Date: Thu, 17 Aug 2006 01:00:36 -0400
- Subject: 2006-05-11 change to pe-dll.c breaks Windows DLLs
The change following the "Huh?" below causes problems for x86 Windows DLLs.
Index: pe-dll.c
===================================================================
RCS file: /cvs/src/src/ld/pe-dll.c,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -r1.83 -r1.84
--- pe-dll.c 31 Jan 2006 22:08:14 -0000 1.83
+++ pe-dll.c 11 May 2006 08:48:58 -0000 1.84
@@ -1131,8 +1137,13 @@
int nsyms, symsize;
/* If it's not loaded, we don't need to relocate it this way. */
+#if 0 /* Some toolchains can generate .data sections without a SEC_LOAD flag but with relocs. */
if (!(s->output_section->flags & SEC_LOAD))
continue;
+#endif
+ /* Huh ? */
+ if (strncmp (bfd_get_section_name (abfd, s), ".idata",6) == 0)
+ continue;
/* I don't know why there would be a reloc for these, but I've
seen it happen - DJ */
I don't understand the rationale for the change. How can we skip idata$6 sections?
And, as a meta-issue the "#if 0" and /* Huh ? */ comment don't provide
a lot of information into what is going on here. Shouldn't there be
some more informative comments there?
This is the ChangeLog from this change:
2006-05-11 Pedro Alves <pedro_alves...>
* pe-dll.c (autofilter_symbollist): Add Dllmain,
DllMainCRTStartup, _DllMainCRTStartup and .text.
(autofilter_liblist): Add libcegcc.
(autofilter_symbolprefixlist): Add __imp_ and .idata$.
(generate_reloc): Do not skip sections without a SEC_LOAD flag,
they can still contain relocs that need processing.
Skip the .idata$6 section.
(jmp_arm_bytes): New array: Contains byte codes for an ARM jump.
(make_one): Use the new array.
(make_import_fixup_entry): Use .idata$2 instead of .idata$3.
* emultempl/pe.em (MajorSubsystemVersion): Set to 3 for armpe.
Pedro can you explain why this is needed? Should it possibly be
conditionalized only for your ARM target?
cgf