This is the mail archive of the 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]

Re: 2006-05-11 change to pe-dll.c breaks Windows DLLs

On Thu, Aug 17, 2006 at 01:00:36AM -0400, Christopher Faylor wrote:
>The change following the "Huh?" below causes problems for x86 Windows DLLs.

Btw, the problem that I'm seeing is that Windows DLLs produced by ld can
no longer be relocated -- which sort of makes sense given this change.


>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;
>+	  /* 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?

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]