From 838a269b8701f59695d200826a65909e09045a9b Mon Sep 17 00:00:00 2001 From: "Fiona Klute (WIWA)" Date: Wed, 5 Feb 2025 14:58:24 +0100 Subject: [PATCH] package/pkg-golang: use ld.bfd instead of ld.gold on aarch64 Go forces use of the Gold linker on aarch64 due to a bug in BFD that is fixed in Binutils >= 2.41 (that includes all versions provided by Buildroot). Forcing Gold will break with toolchains that don't provide it (like the Buildroot toolchains), so override the flag and use BFD. This override should be removed if Go stops forcing Gold, and may have to be adapted if the set of available linkers changes (e.g. with a future Binutils update). See: https://github.com/golang/go/issues/22040 Fixes: http://autobuild.buildroot.org/results/a59/a59bc999e9620ff6b9d97138a2de898aadc07529 Signed-off-by: Fiona Klute (WIWA) Reviewed-by: Yann E. MORIN [Romain: add autobuild reference] Signed-off-by: Romain Naour --- package/pkg-golang.mk | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/package/pkg-golang.mk b/package/pkg-golang.mk index a3421af288..bdf8de4d66 100644 --- a/package/pkg-golang.mk +++ b/package/pkg-golang.mk @@ -118,6 +118,16 @@ $(2)_EXTLDFLAGS += -static $(2)_TAGS += osusergo netgo endif +ifeq ($(BR2_aarch64),y) +# Go forces use of the Gold linker on aarch64 due to a bug in BFD that +# is fixed in Binutils >= 2.41 (that includes all versions provided by +# Buildroot). Forcing Gold will break with toolchains that don't +# provide it (like the Buildroot toolchains), so override the flag and +# use BFD. +# See: https://github.com/golang/go/issues/22040 +$(2)_EXTLDFLAGS += -fuse-ld=bfd +endif + ifneq ($$($(2)_EXTLDFLAGS),) $(2)_LDFLAGS += -extldflags '$$($(2)_EXTLDFLAGS)' endif