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) <fiona.klute@gmx.de>
Reviewed-by: Yann E. MORIN <yann.morin@orange.com>
[Romain: add autobuild reference]
Signed-off-by: Romain Naour <romain.naour@smile.fr>
This commit is contained in:
Fiona Klute (WIWA)
2025-02-05 14:58:24 +01:00
committed by Romain Naour
parent dcb5d1d918
commit 838a269b87

View File

@@ -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