aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul E. Murphy <murp@ibm.com>2021-03-23 16:17:00 -0500
committerLynn Boger <laboger@linux.vnet.ibm.com>2021-09-09 19:43:39 +0000
commit2c4f389c0298a37f1f3c000ad8b87e65d46c757f (patch)
treed4b5cfa02faefde3625f3f6383234b1d40855807
parentfb84e99eb76615f63fc2d6bc93c244a84d6e9c22 (diff)
downloadgo-2c4f389c0298a37f1f3c000ad8b87e65d46c757f.tar.gz
go-2c4f389c0298a37f1f3c000ad8b87e65d46c757f.zip
cmd/link: enable internal linker in more cases for ppc64le
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>
-rw-r--r--src/cmd/dist/test.go5
-rw-r--r--src/cmd/link/internal/ld/config.go12
2 files changed, 4 insertions, 13 deletions
diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go
index a104b5c8f3..dd4e96ec21 100644
--- a/src/cmd/dist/test.go
+++ b/src/cmd/dist/test.go
@@ -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
}
diff --git a/src/cmd/link/internal/ld/config.go b/src/cmd/link/internal/ld/config.go
index 20f1d0b8c1..4045c97dd7 100644
--- a/src/cmd/link/internal/ld/config.go
+++ b/src/cmd/link/internal/ld/config.go
@@ -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).