RFR: JDK-8217723 Switch ld from bfd to gold on gcc toolchain

Magnus Ihse Bursie magnus.ihse.bursie at oracle.com
Thu Jan 24 18:30:19 UTC 2019


On 2019-01-24 18:43, Erik Joelsson wrote:
>
> On 2019-01-24 06:04, Magnus Ihse Bursie wrote:
>> On 2019-01-24 14:45, Florian Weimer wrote:
>>> * Magnus Ihse Bursie:
>>>
>>>> The default binutils linker used by gcc, the bfd linker, is slow. The
>>>> new replacement, gold, has been distributed alongside gcc for several
>>>> years now, and is a well mature, and much faster, replacement.
>>> The gold linker is an optional component of binutils, not available in
>>> all builds.  For example, binutils in Red Hat Enterprise Linux 7.6 does
>>> not include gold on the ppc64le architecture.
>>>
>>> The gold linker also supports a different set of features compared to
>>> BFD ld, which may or may not be what you want.  But I think OpenJDK 
>>> does
>>> not use many tricky ELF features, so the differences probably do not
>>> matter.
>>>
>>> Is it possible to add -fuse-ld=gold to LDFLAGS externally, outside the
>>> build system, so that the build system can use the gold linker if 
>>> people
>>> prefer it over BFD ld?
>>>
>>> Or you could configure your binutils with --enable-gold=default, so 
>>> that
>>> it defaults to ld.gold, again not requiring any OpenJDK changes.
>> One of the driving forces behind this bug is the speed increase in 
>> gold by itself. You are correct that to achieve this, a solution 
>> outside the build system can be used.
>>
>> However, the other driving force is the ability to enable incremental 
>> linking. The build system must know if we use gold, so that it knows 
>> that those command line options are available. So to resort to the 
>> solution of changing the environment would not enable that second part.
>>
>> But I'm leaning more towards just enabling gold on x86_64 -- for 
>> other platforms, we might as well keep the good ol' bfd linker. Does 
>> that sound like a good solution to you?
>>
> I have been looking at this before (probably a couple of years ago 
> now) and my take then was that this should be handled with a configure 
> flag and be opt in (that jib would set for us). The default really 
> should be to accept what the toolchain/admin/distribution has as 
> default. If --enable-gold is given, configure needs to check for gold 
> availability. I had to explicitly enable it in the devkit builds, so 
> it's definitely not always present.
>
> We could also just make sure our internal devkit uses gold by default, 
> and leave explicit setting of this to simply adding a linker arg with 
> configure.
>
> By using an explicit configure argument to enable it, configure knows 
> about it and we can enable incremental linking using that information. 
> Incremental linking must be opt in though. We could also skip the 
> --enable-gold flag and just do the checks if 
> --enable-incremental-linking is set.
>
> Last I experimented with it, incremental did not have a positive 
> effect on the time to link hotspot, but gold did.
Ok. I'll retract my RFR for now, and come back with a way to set this 
conditionally using configure flags.

/Magnus
>
> /Magnus
>>
>>>
>>> Thanks,
>>> Florian
>>




More information about the build-dev mailing list