]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: enable internal linker in more cases for ppc64le
authorPaul E. Murphy <murp@ibm.com>
Tue, 23 Mar 2021 21:17:00 +0000 (16:17 -0500)
committerLynn Boger <laboger@linux.vnet.ibm.com>
Thu, 9 Sep 2021 19:43:39 +0000 (19:43 +0000)
The internal linker is capable of linking the ppc64le linux
race detector and approved cgo packages.

Likewise, ppc64/linux and ppc64/aix do not support the race
detector. Thus, extra code to enforce external linking when
using the race detector on ppc64/ppc64le can be removed
entirely.

Fixes #21961

Change-Id: I10db14f65ee616ee3291e17409e8333e3af7d4df
Reviewed-on: https://go-review.googlesource.com/c/go/+/304459
Run-TryBot: Paul Murphy <murp@ibm.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Lynn Boger <laboger@linux.vnet.ibm.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/cmd/dist/test.go
src/cmd/link/internal/ld/config.go

index a104b5c8f3185ff1214f8f96562b16254ca8f5ba..dd4e96ec21aa4e105510e046e6398c8b59680b16 100644 (file)
@@ -984,11 +984,6 @@ func (t *tester) internalLink() bool {
                // linkmode=internal fails on dragonfly since errno is a TLS relocation.
                return false
        }
-       if gohostarch == "ppc64le" {
-               // linkmode=internal fails on ppc64le because cmd/link doesn't
-               // handle the TOC correctly (issue 15409).
-               return false
-       }
        if goos == "android" {
                return false
        }
index 20f1d0b8c12c6848fd68f83a7e4b41cd1c9f2b7a..4045c97dd776019b5b4b9268a92a5bed1089beb0 100644 (file)
@@ -195,8 +195,7 @@ func mustLinkExternal(ctxt *Link) (res bool, reason string) {
 
        // Internally linking cgo is incomplete on some architectures.
        // https://golang.org/issue/14449
-       // https://golang.org/issue/21961
-       if iscgo && ctxt.Arch.InFamily(sys.MIPS64, sys.MIPS, sys.PPC64, sys.RISCV64) {
+       if iscgo && ctxt.Arch.InFamily(sys.MIPS64, sys.MIPS, sys.RISCV64) {
                return true, buildcfg.GOARCH + " does not support internal cgo"
        }
        if iscgo && (buildcfg.GOOS == "android" || buildcfg.GOOS == "dragonfly") {
@@ -209,12 +208,9 @@ func mustLinkExternal(ctxt *Link) (res bool, reason string) {
                // windows/arm64 internal linking is not implemented.
                return true, buildcfg.GOOS + "/" + buildcfg.GOARCH + " does not support internal cgo"
        }
-
-       // When the race flag is set, the LLVM tsan relocatable file is linked
-       // into the final binary, which means external linking is required because
-       // internal linking does not support it.
-       if *flagRace && ctxt.Arch.InFamily(sys.PPC64) {
-               return true, "race on " + buildcfg.GOARCH
+       if iscgo && ctxt.Arch == sys.ArchPPC64 {
+               // Big Endian PPC64 cgo internal linking is not implemented for aix or linux.
+               return true, buildcfg.GOOS + " does not support internal cgo"
        }
 
        // Some build modes require work the internal linker cannot do (yet).