Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Fiona Klute via buildroot <buildroot@buildroot.org>
To: Arnout Vandecappelle <arnout@mind.be>, buildroot@buildroot.org
Cc: 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: Mon, 3 Feb 2025 14:04:47 +0100	[thread overview]
Message-ID: <434ed0ef-17b5-48af-9c93-1c7bb75c857f@gmx.de> (raw)
In-Reply-To: <3dfa6faa-9307-4091-9a8b-f327a0be19be@mind.be>

Hi Arnout!

Am 03.02.25 um 13:48 schrieb Arnout Vandecappelle:
>   Hi Fiona,
>
> On 03/02/2025 13:01, Fiona Klute wrote:
>> 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.
>>
>> Import the patch to stop forcing GOLD.
>
>   This fixes the issue for go-src, but not for go-bin unfortunately...
> And go-bin is the default...

I'm afraid I can't patch the Go binaries, at least not with reasonable
effort.

>   On the other hand, we don't have any autobuilder failures yet, so
> maybe it's a corner case problem and we can live with it until go-bin
> gets bumped to 1.23.6 (assuming upstream applies the fix to their stable
> branch of course).

As I understand the code, the forced option is only applied when
building a dynamically linked library, which is probably not very common
with Go. I haven't looked more deeply into it, but my current assumption
is that containerd started doing that with the 2.0 release, because
there haven't been any recent changes to package/binutils (and
definitely none disabling Gold). Otherwise the error should've shown up
earlier.

Best regards,
Fiona

>   Regards,
>   Arnout
>
>>
>> [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.'
>


--
Dipl.-Ing. Fiona Klute
Mollwitzer Str. 2
44141 Dortmund
Germany

USt.-ID/VAT number: DE363488944
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  reply	other threads:[~2025-02-03 13:04 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 [this message]
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
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=434ed0ef-17b5-48af-9c93-1c7bb75c857f@gmx.de \
    --to=buildroot@buildroot.org \
    --cc=arnout@mind.be \
    --cc=christian@aperture.us \
    --cc=fiona.klute@gmx.de \
    --cc=thomas.perale@mind.be \
    /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