Mailing List Archive

[PATCH v2] toolchain-funcs.eclass: new function tc-ld-force-bfd()
Hello, please see v2 of the tc-ld-force-bfd() patch below.

v2 changes: only calls tc-ld-force-bfd from tc-ld-disable-gold if
the gold linker is active.

With this change ebuilds that require both ld.gold & ld.lld to be
disabled will need to be updated to use tc-ld-force-bfd.

From 761078671a7c31b1e3dc9c5c21f14941b70443ac Mon Sep 17 00:00:00 2001
From: Theo Anderson <telans@posteo.de>
Date: Thu, 21 Jan 2021 23:51:03 +1300
Subject: [PATCH] toolchain-funcs.eclass: new function tc-ld-force-bfd()

No functions currently force ld.bfd usage when ld.lld is active.
This function forces ld.bfd when either ld.gold or ld.lld is active.
tc-ld-disable-gold() now calls this new function
only if ld.gold is active.

Package-Manager: Portage-3.0.14, Repoman-3.0.2
Signed-off-by: Theo Anderson <telans@posteo.de>
---
eclass/toolchain-funcs.eclass | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/eclass/toolchain-funcs.eclass
b/eclass/toolchain-funcs.eclass index 4a4bb27fc08..267cf5cfce3 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
@@ -505,12 +505,21 @@ tc-ld-is-lld() {
# 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-is-gold "$@" && 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 +529,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 +557,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
Re: [PATCH v2] toolchain-funcs.eclass: new function tc-ld-force-bfd() [ In reply to ]
On Thu, Jan 21, 2021 at 3:00 AM Theo Anderson <telans@posteo.de> wrote:

> Hello, please see v2 of the tc-ld-force-bfd() patch below.
>
> v2 changes: only calls tc-ld-force-bfd from tc-ld-disable-gold if
> the gold linker is active.
>
> With this change ebuilds that require both ld.gold & ld.lld to be
> disabled will need to be updated to use tc-ld-force-bfd.
>
> Thanks, this patch is exactly the behavior I preferred :)


> From 761078671a7c31b1e3dc9c5c21f14941b70443ac Mon Sep 17 00:00:00 2001
> From: Theo Anderson <telans@posteo.de>
> Date: Thu, 21 Jan 2021 23:51:03 +1300
> Subject: [PATCH] toolchain-funcs.eclass: new function tc-ld-force-bfd()
>
> No functions currently force ld.bfd usage when ld.lld is active.
> This function forces ld.bfd when either ld.gold or ld.lld is active.
> tc-ld-disable-gold() now calls this new function
> only if ld.gold is active.
>
> Package-Manager: Portage-3.0.14, Repoman-3.0.2
> Signed-off-by: Theo Anderson <telans@posteo.de>
> ---
> eclass/toolchain-funcs.eclass | 21 +++++++++++++++------
> 1 file changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/eclass/toolchain-funcs.eclass
> b/eclass/toolchain-funcs.eclass index 4a4bb27fc08..267cf5cfce3 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
> @@ -505,12 +505,21 @@ tc-ld-is-lld() {
> # 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-is-gold "$@" && 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 +529,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 +557,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
>
>
>