--gc-sections and GDC

Iain Buclaw via D.gnu d.gnu at puremagic.com
Wed Jul 16 07:35:09 PDT 2014


On 16 July 2014 15:12, Mike via D.gnu <d.gnu at puremagic.com> wrote:
> On Wednesday, 16 July 2014 at 13:52:57 UTC, Mike wrote:
>>
>> I received a question from Dicebot in at the end of my presentation.  He
>> asked about the --gc-sections linker flag breaking code from GDC.
>>
>> I recently discovered how one can see why this is occurring, and I hope
>> this will help identify the problem and lead to a solution.
>>
>> Compile any simple hello world program with the following gcc command:
>> gcc --verbose -Wl,--verbose test.c.
>>
>> Part of the output is GCC's internal linker script as shown below.  I
>> believe this is the source of the problem.  Here's my theory.
>>
>> D is not C, and is likely generating code that the GCC internal linker
>> script doesn't know about.  This code may be incorrectly identified as dead
>> code because there is no 'link' to it and, therefore, appears unused.  If D
>> or GDC is generating any code like this, it needs to be marked as KEEP in
>> the linker script.  You can see examples of this in GCC's internal linker
>> script below.
>>
>> If my theory is correct, GDC may have to make an internal linker script
>> specifically for D's code generation that marks such code as KEEP.
>>
>> I hope I'm not just blowing smoke.
>>
>> Mike
>
>
> And I just checked with GDC...
> gdc --verbose -Wl,--verbose test.d
>
> ... and the internal linker script is exactly the same as the C version.
> That doesn't seem right to me.  I would expect them to be at least a little
> different.
>
> Mike

Using a D-specific linker script in is outside the scope of GDC
itself.  I'd have to make a patch to Binutils.

And yes, a bespoke linker script would solve many problems that are
currently managed by the compiler.

Regards
Iain


More information about the D.gnu mailing list