On Wed, Jan 20, 2021 at 1:01 PM Theo Anderson <tel...@posteo.de> wrote:

> Hello, please see the below patch to support disabling ld.lld like
> ld.gold. This has not been split into a separate function
> such as tc-ld-disable-lld(), as I do not believe there is a use case
> where ld.gold is supported and ld.lld is not.
>
> Thanks.
>
> Pull-request: https://github.com/gentoo/gentoo/pull/19116
>
>
I am not a Gentoo maintainer but this forces bfd linker for the ebuilds
when gold is not even used e.g. lld is default linker. I am curious how
many places where gold is disabled do not work with lld.
In my experience, LLD is far more compatible with bfd than gold e.g. it can
link Linux kernels. So, imo we should not disable lld as a side effect when
the compatibility problem is with gold only.
i.e. It is ok to add a function to force bfd but disabling gold needs to
have a check if gold is the current linker.

My preference us to add 2 functions:
tc-ld-force-bfd
tc-ld-disable-lld

And tc-ld-disable-gold should check if gold is the current linker. If not,
only then force bfd.

What do the maintainers think?

Thanks,
Manoj




> From c0894e304cbd209ab2cf6b3754f75d9bfd93634a Mon Sep 17 00:00:00 2001
> From: Theo Anderson <tel...@posteo.de>
> Date: Thu, 21 Jan 2021 09:59:09 +1300
> Subject: [PATCH] toolchain-funcs.eclass: new function tc-ld-force-bfd()
>
> No functions currently force bfd usage when lld is active.
> This function takes over tc-ld-disable-gold so that any current
>  calls to tc-ld-disable-gold will also disable lld. With ld.ldd
>  this fixes configure for packages like sys-libs/db where
>  --default-symver is added to ldflags.
> tc-ld-disable-gold has been marked as deprecated and should be
>  replaced by tc-ld-force-bfd within ebuilds.
>
> Package-Manager: Portage-3.0.14, Repoman-3.0.2
> Signed-off-by: Theo Anderson <tel...@posteo.de>
> ---
>  eclass/toolchain-funcs.eclass | 23 +++++++++++++++++------
>  1 file changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/eclass/toolchain-funcs.eclass
> b/eclass/toolchain-funcs.eclass index 4a4bb27fc08..2cf7ddfb790 100644
> --- a/eclass/toolchain-funcs.eclass
> +++ b/eclass/toolchain-funcs.eclass
> @@ -1,4 +1,4 @@
> -# Copyright 2002-2019 Gentoo Authors
> +# Copyright 2002-2021 Gentoo Authors
>  # Distributed under the terms of the GNU General Public License v2
>
>  # @ECLASS: toolchain-funcs.eclass
> @@ -502,15 +502,26 @@ tc-ld-is-lld() {
>  # @FUNCTION: tc-ld-disable-gold
>  # @USAGE: [toolchain prefix]
>  # @DESCRIPTION:
> +# Deprecated in favor of tc-ld-force-bfd.
> +#
>  # If the gold linker is currently selected, configure the compilation
>  # settings so that we use the older bfd linker instead.
>  tc-ld-disable-gold() {
> -       if ! tc-ld-is-gold "$@" ; then
> -               # They aren't using gold, so nothing to do!
> +       tc-ld-force-bfd "$@"
> +}
> +
> +# @FUNCTION: tc-ld-force-bfd
> +# @USAGE: [toolchain prefix]
> +# @DESCRIPTION:
> +# If the gold or lld linker is currently selected, configure the
> compilation +# settings so that we use the bfd linker instead.
> +tc-ld-force-bfd() {
> +       if ! tc-ld-is-gold "$@" && ! tc-ld-is-lld "$@" ; then
> +               # They aren't using gold or lld, so nothing to do!
>                 return
>         fi
>
> -       ewarn "Forcing usage of the BFD linker instead of GOLD"
> +       ewarn "Forcing usage of the BFD linker"
>
>         # Set up LD to point directly to bfd if it's available.
>         # We need to extract the first word in case there are flags
> appended @@ -520,7 +531,7 @@ tc-ld-disable-gold() {
>         local path_ld=$(which "${bfd_ld}" 2>/dev/null)
>         [[ -e ${path_ld} ]] && export LD=${bfd_ld}
>
> -       # Set up LDFLAGS to select gold based on the gcc / clang
> version.
> +       # Set up LDFLAGS to select bfd based on the gcc / clang
> version. local fallback="true"
>         if tc-is-gcc; then
>                 local major=$(gcc-major-version "$@")
> @@ -548,7 +559,7 @@ tc-ld-disable-gold() {
>                         ln -sf "${path_ld}" "${d}"/ld
>                         export LDFLAGS="${LDFLAGS} -B${d}"
>                 else
> -                       die "unable to locate a BFD linker to bypass
> gold"
> +                       die "unable to locate a BFD linker"
>                 fi
>         fi
>  }
> --
> 2.30.0
>
>
>

Reply via email to