Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Fiona Klute via buildroot <buildroot@buildroot.org>
To: yann.morin@orange.com
Cc: buildroot@buildroot.org, Thomas Perale <thomas.perale@mind.be>,
	Christian Stewart <christian@aperture.us>
Subject: Re: [Buildroot] [PATCH 1/1] package/go/go-src: stop forcing binutils-gold dependency on aarch64
Date: Tue, 4 Feb 2025 11:52:16 +0100	[thread overview]
Message-ID: <c3a16cbe-ae5b-4b68-9713-0fe3bf5888d4@gmx.de> (raw)
In-Reply-To: <Z6GzCbcs9k0Rul1a@yd-6wlzhs3>

Hi Yann!

Am 04.02.25 um 07:26 schrieb yann.morin@orange.com:
> Fiona, All,
>
> On 2025-02-03 13:01 +0100, Fiona Klute via buildroot spake thusly:
>> From: "Fiona Klute (WIWA)" <fiona.klute@gmx.de>
>>
>> Go forces the GOLD linker when dynamically linking Go code, because
>> old versions of BFD caused errors. The issue has been fixed in
>> Binutils since at least 2.41 according to the upstream description of
>> the patch added with this commit [1], and now forcing GOLD causes
>> linking failure if ld.gold is not available. The associated Golang
>> issue [2] is still open.
>
> I have send a patch back a while ago, that allowed to at least work
> around the issue for affected packages:
>
> https://patchwork.ozlabs.org/project/buildroot/patch/876f3a7bb6a2375193fc8f06ab856d2449f83727.1699547993.git.yann.morin@orange.com/
>
> This would work for both go-src and go-bin.
>
> I needed that for filebeat, but as we no longer use filebeat, I withdrew
> the patch:
>
>      https://patchwork.ozlabs.org/project/buildroot/patch/46f20e86fa6c17ada33ede672ffe4229d8bf26a3.1699547993.git.yann.morin@orange.com/

I think that approach should work, I'm just running a test build to verify.

One question though: Is there an existing way to check the Binutils
version of an external toolchain? For people with Binutils < 2.41 with
ld.gold forcing BFD might actually break things, so ideally I'd want to
make the flag conditional on Binutils >= 2.41 (all Buildroot-built
toolchains meet that anyway). Or would it be acceptable to simply say
that people with old external toolchains are on their own?

Best regards,
Fiona

> Regards,
> Yann E. MORIN.
>
>> Import the patch to stop forcing GOLD.
>>
>> [1] https://go-review.googlesource.com/c/go/+/391115
>> [2] https://github.com/golang/go/issues/22040
>>
>> Signed-off-by: Fiona Klute (WIWA) <fiona.klute@gmx.de>
>> ---
>>   ...-binutils-gold-dependency-on-aarch64.patch | 70 +++++++++++++++++++
>>   1 file changed, 70 insertions(+)
>>   create mode 100644 package/go/go-src/0003-cmd-link-stop-forcing-binutils-gold-dependency-on-aarch64.patch
>>
>> diff --git a/package/go/go-src/0003-cmd-link-stop-forcing-binutils-gold-dependency-on-aarch64.patch b/package/go/go-src/0003-cmd-link-stop-forcing-binutils-gold-dependency-on-aarch64.patch
>> new file mode 100644
>> index 0000000000..1ba31b6577
>> --- /dev/null
>> +++ b/package/go/go-src/0003-cmd-link-stop-forcing-binutils-gold-dependency-on-aarch64.patch
>> @@ -0,0 +1,70 @@
>> +From 6d265b008e3d106b2706645e5a88cd8e2fb98953 Mon Sep 17 00:00:00 2001
>> +From: Dirk Müller <dirk@dmllr.de>
>> +Date: Wed, 09 Mar 2022 17:47:23 +0100
>> +Subject: [PATCH] cmd/link: stop forcing binutils-gold dependency on aarch64
>> +
>> +The bfd linker appears to be working just fine at least in version
>> +2.41 or above. Reject the known broken one instead, which
>> +avoids an architecture specific linker dependency that
>> +is cumbersome for distributions.
>> +
>> +Fixes #22040.
>> +
>> +Change-Id: I9f377e47c22ef20497479c0978c053ed5de46a38
>> +Upstream: https://go-review.googlesource.com/c/go/+/391115
>> +Signed-off-by: Fiona Klute (WIWA) <fiona.klute@gmx.de>
>> +---
>> +
>> +diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
>> +index 2d8f964..fcf0bc7 100644
>> +--- a/src/cmd/link/internal/ld/lib.go
>> ++++ b/src/cmd/link/internal/ld/lib.go
>> +@@ -1670,27 +1670,6 @@
>> + 			// Use lld to avoid errors from default linker (issue #38838)
>> + 			altLinker = "lld"
>> + 		}
>> +-
>> +-		if ctxt.Arch.InFamily(sys.ARM64) && buildcfg.GOOS == "linux" {
>> +-			// On ARM64, the GNU linker will fail with
>> +-			// -znocopyreloc if it thinks a COPY relocation is
>> +-			// required. Switch to gold.
>> +-			// https://sourceware.org/bugzilla/show_bug.cgi?id=19962
>> +-			// https://go.dev/issue/22040
>> +-			altLinker = "gold"
>> +-
>> +-			// If gold is not installed, gcc will silently switch
>> +-			// back to ld.bfd. So we parse the version information
>> +-			// and provide a useful error if gold is missing.
>> +-			name, args := flagExtld[0], flagExtld[1:]
>> +-			args = append(args, "-fuse-ld=gold", "-Wl,--version")
>> +-			cmd := exec.Command(name, args...)
>> +-			if out, err := cmd.CombinedOutput(); err == nil {
>> +-				if !bytes.Contains(out, []byte("GNU gold")) {
>> +-					log.Fatalf("ARM64 external linker must be gold (issue #15696, 22040), but is not: %s", out)
>> +-				}
>> +-			}
>> +-		}
>> + 	}
>> + 	if ctxt.Arch.Family == sys.ARM64 && buildcfg.GOOS == "freebsd" {
>> + 		// Switch to ld.bfd on freebsd/arm64.
>> +diff --git a/src/make.bash b/src/make.bash
>> +index b67ae15..7df4910 100755
>> +--- a/src/make.bash
>> ++++ b/src/make.bash
>> +@@ -94,6 +94,16 @@
>> + 	;;
>> + esac
>> +
>> ++# Test for bad bfd.ld
>> ++if test "$(uname -m)" = "aarch64" && ld -v | grep -E "GNU ld.* 2\.([0-3]|40)"; then
>> ++	echo 'ERROR: Your system uses bfd.LD 2.40 or older which has issues with dynamic linking on aarch64'
>> ++	echo 'Consider upgrading or switching to binutils-gold.'
>> ++	echo
>> ++	echo 'See https://sourceware.org/bugzilla/show_bug.cgi?id=30437'
>> ++
>> ++	exit 1
>> ++fi
>> ++
>> + # Test for bad ld.
>> + if ld --version 2>&1 | grep 'gold.* 2\.20' >/dev/null; then
>> + 	echo 'ERROR: Your system has gold 2.20 installed.'
>> --
>> 2.47.2
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot@buildroot.org
>> https://lists.buildroot.org/mailman/listinfo/buildroot
>

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  reply	other threads:[~2025-02-04 10:52 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-03 12:01 [Buildroot] [PATCH 1/1] package/go/go-src: stop forcing binutils-gold dependency on aarch64 Fiona Klute via buildroot
2025-02-03 12:48 ` Arnout Vandecappelle via buildroot
2025-02-03 13:04   ` Fiona Klute via buildroot
2025-02-03 14:13     ` Arnout Vandecappelle via buildroot
2025-02-03 15:17       ` Fiona Klute via buildroot
2025-02-03 20:08         ` Christian Stewart via buildroot
2025-02-04  3:41           ` Christian Stewart via buildroot
2025-02-04  6:27             ` yann.morin
2025-02-04 14:50             ` Fiona Klute via buildroot
2025-02-04  6:26 ` yann.morin
2025-02-04 10:52   ` Fiona Klute via buildroot [this message]
2025-02-04 11:13     ` yann.morin
2025-02-04 11:37       ` Fiona Klute via buildroot
2025-02-04 12:13         ` yann.morin
2025-02-04 14:37           ` Fiona Klute via buildroot
2025-02-04 11:27     ` Arnout Vandecappelle via buildroot
2025-02-04 14:46       ` Fiona Klute via buildroot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c3a16cbe-ae5b-4b68-9713-0fe3bf5888d4@gmx.de \
    --to=buildroot@buildroot.org \
    --cc=christian@aperture.us \
    --cc=fiona.klute@gmx.de \
    --cc=thomas.perale@mind.be \
    --cc=yann.morin@orange.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox