On 9/19/19 2:33 AM, Martin Liška wrote:
> Hi.
> 
> Function reordering has been around for quite some time and a naive
> implementation was also part of my diploma thesis some time ago.
> Currently, the GCC can reorder function based on first execution, which
> happens with PGO and LTO of course. Known limitation is that the order
> is preserved only partially as various symbols go into different LTRANS 
> partitions.
> 
> There has been some research in the area and I would point out the Facebook 
> paper
> ([1]) and Sony presentation ([2]). Based on that, I decided to make a new 
> implementation
> in the GCC that does the same (in a proper way). First part of the enablement 
> are patches
> to ld.bfd and ld.gold that come up with a new section .text.sorted, that is 
> always sorted.
> There's a snippet from the modified default linker script:
Funny, I was doing this via linker scripts circa ~95, in fact that's why
we have -ffunction-sections :-)   We started with scripts which
post-processed profiling data to create linker scripts for ELF systems.
 We had something for HPUX/SOM as well, but I can't remember what
mechanism we used, it may have been a gross level sorting using the SOM
section sort key mechanism - it only had 128 or 256 keys with a notable
amount of them reserved.

We had also built a linker with a basic level of interposition circa
1993 and explored various approaches to reordering executables.  I'd
just joined the group at the time and was responsible for wiring up
stuff on the OS side, but eventually got the "pleasure" of owning the
linker server.  A lot of the C3 algorithmic stuff looks similar to what
we did.

Anyway...

I don't see anything objectionable in here.  It's noted as an RFC.  Are
you interested in pushing this forward for gcc-10?

jeff

Reply via email to