-
Notifications
You must be signed in to change notification settings - Fork 96
Upstream: Gentoo GCC LTO Linker Plugin Support
Binutils needs a way to obtain the LTO plugin from GCC in order to properly perform LTO and other linking tasks. Currently ld
, ar
, nm
, and ranlib
are known to use this plugin in LTO builds.
There are two ways to do this: pass the path to the plugin manually to each of those utilities, or install a symlink to the plugin in binutils bfd_plugins
directory and have binutils automatically load it. Support for automatically loading the LTO plugin from this directory was added in 2014 (thanks @pchome!).
In this overlay, we choose the automatic approach because passing in the path manually (i.e., setting your AR
, NM
, and RANLIB
variables to point to GCC wrappers) causes problems in legitimate cases, such as building toolchains.
To facilitate this, Shane created a patch for gcc-config
that creates this symlink for you, which thankfully has been merged upstream as of December 17 2017. Therefore, no action is required on the user's part -- sys-config/ltoize
depends on a recent enough version of sys-devel/gcc-config
that is guaranteed to have LTO linker plugin support.
(Thanks @rx80!) If you're interested in seeing where the symlink points, you can check it as follows (on amd64
):
ls -l /usr/x86_64-pc-linux-gnu/binutils-bin/lib/bfd-plugins/liblto_plugin.so
This should point to your active GCC's liblto_plugin.so
. For example, for GCC 10.1.0, it should look something like:
> ls /usr/libexec/gcc/x86_64-pc-linux-gnu/10.1.0/liblto_plugin.so -la
> lrwxrwxrwx 1 root root 22 Oct 13 09:17 /usr/libexec/gcc/x86_64-pc-linux-gnu/10.1.0/liblto_plugin.so -> liblto_plugin.so.0.0.0*