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

Pedro Alves pedro_alves@portugalmail.pt
Thu Aug 17 08:15:00 GMT 2006


Christopher Faylor wrote:
> 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.
> 
> 

Outch!


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

I can't say I understand it myself. It was part of some pending patches
I had that I found somewhere else when I started hacking binutils (as 
explained on the mail where I posted that patch), for which I don't know
the author (I think it was Mamaich).
That part has been making me nervous too, and I have it removed in my
local tree for a while, in the hope I would see the reason for it.
I don't.
I am *very* sorry that it caused trouble. Proposed patch attached that 
reverts the offending parts.
Please review and commit.

ld/Changelog

  2006-08-17  Pedro Alves  <pedro_alves@portugalmail.pt>

	* pe-dll.c (autofilter_symbolprefixlist): Remove .idata$.
	(generate_reloc): Revert to skipping sections without a
	SEC_LOAD flag, and to not skipping .idata* sections.

Cheers,
Pedro Alves
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: pe-dll.c.diff
URL: <https://sourceware.org/pipermail/binutils/attachments/20060817/e525b63c/attachment.ksh>


More information about the Binutils mailing list