aboutsummaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2021-06-21 14:48:54 -0700
committerIan Lance Taylor <iant@golang.org>2021-06-22 16:59:10 +0000
commit0ebd5a8de05823109263bef31b38be8c29d2cd54 (patch)
tree622e3b567a603030b8b5606113f34c973eea5fd3 /src/internal
parent5bd09e5efccf0d3df89085c9f214f94017f6e969 (diff)
downloadgo-0ebd5a8de05823109263bef31b38be8c29d2cd54.tar.gz
go-0ebd5a8de05823109263bef31b38be8c29d2cd54.zip
cmd/go: update ToolTags based on GOARCH value
The build.Context ToolTags value is set based on the set of enabled experiments, which in turn depends on GOARCH. Before this CL the set of experiments was being set based on GOARCH in the environment. That is normally fine, but fails with cmd/go when somebody has run "go env -w GOARCH=val"; in that case cmd/go changes its GOARCH value after initialization. The new GOARCH value was affect the set of enabled experiments, which can affect the ToolTags value. With this CL, we update ToolTags in cmd/go based on the GOARCH value it is using. This is a pretty ugly fix. We should do something cleaner for 1.18. Fixes #46815 Change-Id: Ie9416781a168248813c3da8afdc257acdd3fef7e Reviewed-on: https://go-review.googlesource.com/c/go/+/329930 Trust: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/buildcfg/exp.go13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/internal/buildcfg/exp.go b/src/internal/buildcfg/exp.go
index 2435a79dce..640aa1934d 100644
--- a/src/internal/buildcfg/exp.go
+++ b/src/internal/buildcfg/exp.go
@@ -18,7 +18,7 @@ import (
//
// (This is not necessarily the set of experiments the compiler itself
// was built with.)
-var Experiment goexperiment.Flags = parseExperiments()
+var Experiment goexperiment.Flags = parseExperiments(GOARCH)
var regabiSupported = GOARCH == "amd64" && (GOOS == "android" || GOOS == "linux" || GOOS == "darwin" || GOOS == "windows")
@@ -42,7 +42,7 @@ var experimentBaseline = goexperiment.Flags{
// Note: must agree with runtime.framepointer_enabled.
var FramePointerEnabled = GOARCH == "amd64" || GOARCH == "arm64"
-func parseExperiments() goexperiment.Flags {
+func parseExperiments(goarch string) goexperiment.Flags {
// Start with the statically enabled set of experiments.
flags := experimentBaseline
@@ -99,7 +99,7 @@ func parseExperiments() goexperiment.Flags {
}
// regabi is only supported on amd64.
- if GOARCH != "amd64" {
+ if goarch != "amd64" {
flags.RegabiWrappers = false
flags.RegabiG = false
flags.RegabiReflect = false
@@ -165,3 +165,10 @@ func EnabledExperiments() []string {
func AllExperiments() []string {
return expList(&Experiment, nil, true)
}
+
+// UpdateExperiments updates the Experiment global based on a new GOARCH value.
+// This is only required for cmd/go, which can change GOARCH after
+// program startup due to use of "go env -w".
+func UpdateExperiments(goarch string) {
+ Experiment = parseExperiments(goarch)
+}