User: Password:
Subscribe / Log in / New account

Link-time optimization for the kernel

Link-time optimization for the kernel

Posted Aug 22, 2012 18:19 UTC (Wed) by stevenb (guest, #11536)
In reply to: Link-time optimization for the kernel by jwakely
Parent article: Link-time optimization for the kernel

GCC doesn't do this, but AFAIU the gold linker's does this. From binutils-2.22:src/gold/

// Identical Code Folding Algorithm
// ----------------------------------
// Detecting identical functions is done here and the basic algorithm
// is as follows. A checksum is computed on each foldable section using
// its contents and relocations. If the symbol name corresponding to
// a relocation is known it is used to compute the checksum. If the
// symbol name is not known the stringified name of the object and the
// section number pointed to by the relocation is used. The checksums
// are stored as keys in a hash map and a section is identical to some
// other section if its checksum is already present in the hash map.
// Checksum collisions are handled by using a multimap and explicitly
// checking the contents when two sections have the same checksum.
// However, two functions A and B with identical text but with
// relocations pointing to different foldable sections can be identical if
// the corresponding foldable sections to which their relocations point to
// turn out to be identical. Hence, this checksumming process must be
// done repeatedly until convergence is obtained.

Whether this works with LTO, I don't know. And I suppose it requires -ffunction-sections but I'm not sure about that either.

Not a very helpful post, sorry ;-)

(Log in to post comments)

Link-time optimization for the kernel

Posted Aug 22, 2012 22:43 UTC (Wed) by andikleen (guest, #39006) [Link]

gold unfortunately does not work with LTO kernel builds at the moment.
You could only use it without.

Link-time optimization for the kernel

Posted Aug 23, 2012 10:05 UTC (Thu) by jwakely (guest, #60262) [Link]

No need to apologise, I'd somehow missed that gold did ICF and thought Microsoft's was the only mainstream linker to support it. Thanks, Steven!

Link-time optimization for the kernel

Posted Sep 11, 2014 4:34 UTC (Thu) by alison (subscriber, #63752) [Link]

I was just reading about Open Mirage

and thinking about the security advantages of the "sealed" unikernel with its Write XOR Execute policy. The paper comments about linking:

"Unikernels link li-
braries that would normally be provided by the host OS, allowing
the Unikernel tools to produce highly compact binaries via the nor-
mal linking mechanism. **Features that are not used in a particular
compilation are not included** and whole-system optimization tech-
niques can be used. In the most specialised mode, all configuration
files are statically evaluated, enabling extensive dead-code elimi-
nation at the cost of having to recompile to reconfigure the service."

Reading that paragraph motivated me to revisit this LTO dicussion. I can't figure out whether LTO commonly includes "dead-code elimination," meaning that functions from a statically linked library that are not anywhere used are not included in the final binary. In other words, are functions either include in-line, or not included at all? Thanks to any experts who wander by and know the answer.

Link-time optimization for the kernel

Posted Sep 17, 2014 21:39 UTC (Wed) by nix (subscriber, #2304) [Link]

Functions that are used nowhere (and, if this is a shared library or a binary compiled with -Wl,--export-dynamic, are not in the external symbol table) are eliminated, but that doesn't mean all the rest are inlined. Most will not be inlined (indeed, some may be cloned without being inlined).

Copyright © 2018, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds