commit: f55732a438fb996fc8e4fdc8e6576f5d9946532d Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Thu Apr 10 00:38:44 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Thu Apr 10 00:39:16 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f55732a4
dev-lang/go: don't default to -fuse-ld=gold on arm64 Don't default to -fuse-ld=gold on arm64. The gold linker is deprecated in GNU Binutils and the referenced bfd bug which led to this default being added is long-fixed. Closes: https://bugs.gentoo.org/893956 Closes: https://bugs.gentoo.org/953459 Signed-off-by: Sam James <sam <AT> gentoo.org> .../go/files/go-1.24-dont-force-gold-arm.patch | 55 ++++++++++++++++++++++ .../go/{go-9999.ebuild => go-1.24.2-r1.ebuild} | 7 ++- dev-lang/go/go-9999.ebuild | 4 +- 3 files changed, 59 insertions(+), 7 deletions(-) diff --git a/dev-lang/go/files/go-1.24-dont-force-gold-arm.patch b/dev-lang/go/files/go-1.24-dont-force-gold-arm.patch new file mode 100644 index 000000000000..4869b38593c4 --- /dev/null +++ b/dev-lang/go/files/go-1.24-dont-force-gold-arm.patch @@ -0,0 +1,55 @@ +Don't default to -fuse-ld=gold on arm64. The gold linker is deprecated in +GNU Binutils and the referenced bfd bug which led to this default being +added is long-fixed. + +https://src.fedoraproject.org/rpms/golang/raw/rawhide/f/0006-Default-to-ld.bfd-on-ARM64.patch +https://bugs.gentoo.org/893956 +https://github.com/golang/go/issues/22040 +https://github.com/golang/go/pull/49748 +https://sourceware.org/PR19962 + +From 46ec67413008607e2150e3395668e54e538c5b6b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alejandro=20S=C3=A1ez?= <[email protected]> +Date: Wed, 19 Jun 2024 10:18:58 +0200 +Subject: [PATCH] Default to ld.bfd on ARM64 + +--- + src/cmd/link/internal/ld/lib.go | 20 +++++++------------- + 1 file changed, 7 insertions(+), 13 deletions(-) + +diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go +index eab74dc328..b401f58727 100644 +--- a/src/cmd/link/internal/ld/lib.go ++++ b/src/cmd/link/internal/ld/lib.go +@@ -1620,22 +1620,16 @@ func (ctxt *Link) hostlink() { + } + + 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. ++ // Use ld.bfd as the default linker ++ altLinker = "bfd" ++ ++ // Provide a useful error if ld.bfd is missing + name, args := flagExtld[0], flagExtld[1:] +- args = append(args, "-fuse-ld=gold", "-Wl,--version") ++ args = append(args, "-fuse-ld=bfd", "-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 !bytes.Contains(out, []byte("GNU ld")) { ++ log.Fatalf("ARM64 external linker must be ld.bfd, but is not: %s", out) + } + } + } +-- +2.45.1 diff --git a/dev-lang/go/go-9999.ebuild b/dev-lang/go/go-1.24.2-r1.ebuild similarity index 93% copy from dev-lang/go/go-9999.ebuild copy to dev-lang/go/go-1.24.2-r1.ebuild index f371daa2831b..2be24178ea79 100644 --- a/dev-lang/go/go-9999.ebuild +++ b/dev-lang/go/go-1.24.2-r1.ebuild @@ -20,7 +20,7 @@ case ${PV} in *) SRC_URI="https://storage.googleapis.com/golang/go${MY_PV}.src.tar.gz " S="${WORKDIR}"/go -# KEYWORDS="-* ~amd64 ~arm ~arm64 ~loong ~mips ~ppc64 ~riscv ~s390 ~x86 ~amd64-linux ~x86-linux ~x64-macos ~x64-solaris" + KEYWORDS="-* ~amd64 ~arm ~arm64 ~loong ~mips ~ppc64 ~riscv ~s390 ~x86 ~amd64-linux ~x86-linux ~x64-macos ~x64-solaris" ;; esac @@ -31,9 +31,6 @@ LICENSE="BSD" SLOT="0/${PV}" IUSE="cpu_flags_x86_sse2" -RDEPEND=" -arm? ( sys-devel/binutils[gold(-)] ) -arm64? ( sys-devel/binutils[gold(-)] )" BDEPEND="|| ( >=dev-lang/go-${GO_BOOTSTRAP_MIN} >=dev-lang/go-bootstrap-${GO_BOOTSTRAP_MIN} )" @@ -71,6 +68,8 @@ go_cross_compile() { } PATCHES=( + "${FILESDIR}"/go-1.24-skip-gdb-tests.patch + "${FILESDIR}"/go-1.24-dont-force-gold-arm.patch "${FILESDIR}"/go-never-download-newer-toolchains.patch ) diff --git a/dev-lang/go/go-9999.ebuild b/dev-lang/go/go-9999.ebuild index f371daa2831b..923732906b23 100644 --- a/dev-lang/go/go-9999.ebuild +++ b/dev-lang/go/go-9999.ebuild @@ -31,9 +31,6 @@ LICENSE="BSD" SLOT="0/${PV}" IUSE="cpu_flags_x86_sse2" -RDEPEND=" -arm? ( sys-devel/binutils[gold(-)] ) -arm64? ( sys-devel/binutils[gold(-)] )" BDEPEND="|| ( >=dev-lang/go-${GO_BOOTSTRAP_MIN} >=dev-lang/go-bootstrap-${GO_BOOTSTRAP_MIN} )" @@ -71,6 +68,7 @@ go_cross_compile() { } PATCHES=( + "${FILESDIR}"/go-1.24-dont-force-gold-arm.patch "${FILESDIR}"/go-never-download-newer-toolchains.patch )
