aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/objabi/exp.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/internal/objabi/exp.go')
-rw-r--r--src/cmd/internal/objabi/exp.go151
1 files changed, 0 insertions, 151 deletions
diff --git a/src/cmd/internal/objabi/exp.go b/src/cmd/internal/objabi/exp.go
deleted file mode 100644
index 3371c6c8f8..0000000000
--- a/src/cmd/internal/objabi/exp.go
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package objabi
-
-import (
- "fmt"
- "os"
- "reflect"
- "strings"
-
- "internal/goexperiment"
-)
-
-// Experiment contains the toolchain experiments enabled for the
-// current build.
-//
-// (This is not necessarily the set of experiments the compiler itself
-// was built with.)
-var Experiment goexperiment.Flags = parseExperiments()
-
-// experimentBaseline specifies the experiment flags that are enabled by
-// default in the current toolchain. This is, in effect, the "control"
-// configuration and any variation from this is an experiment.
-var experimentBaseline goexperiment.Flags
-
-// FramePointerEnabled enables the use of platform conventions for
-// saving frame pointers.
-//
-// This used to be an experiment, but now it's always enabled on
-// platforms that support it.
-//
-// Note: must agree with runtime.framepointer_enabled.
-var FramePointerEnabled = GOARCH == "amd64" || GOARCH == "arm64"
-
-func parseExperiments() goexperiment.Flags {
- // Start with the statically enabled set of experiments.
- flags := experimentBaseline
-
- // Pick up any changes to the baseline configuration from the
- // GOEXPERIMENT environment. This can be set at make.bash time
- // and overridden at build time.
- env := envOr("GOEXPERIMENT", defaultGOEXPERIMENT)
-
- if env != "" {
- // Create a map of known experiment names.
- names := make(map[string]reflect.Value)
- rv := reflect.ValueOf(&flags).Elem()
- rt := rv.Type()
- for i := 0; i < rt.NumField(); i++ {
- field := rv.Field(i)
- names[strings.ToLower(rt.Field(i).Name)] = field
- }
-
- // Parse names.
- for _, f := range strings.Split(env, ",") {
- if f == "" {
- continue
- }
- if f == "none" {
- // GOEXPERIMENT=none disables all experiment flags.
- // This is used by cmd/dist, which doesn't know how
- // to build with any experiment flags.
- flags = goexperiment.Flags{}
- continue
- }
- val := true
- if strings.HasPrefix(f, "no") {
- f, val = f[2:], false
- }
- field, ok := names[f]
- if !ok {
- fmt.Printf("unknown experiment %s\n", f)
- os.Exit(2)
- }
- field.SetBool(val)
- }
- }
-
- // regabi is only supported on amd64.
- if GOARCH != "amd64" {
- flags.Regabi = false
- flags.RegabiWrappers = false
- flags.RegabiG = false
- flags.RegabiReflect = false
- flags.RegabiDefer = false
- flags.RegabiArgs = false
- }
- // Setting regabi sets working sub-experiments.
- if flags.Regabi {
- flags.RegabiWrappers = true
- flags.RegabiG = true
- flags.RegabiReflect = true
- flags.RegabiDefer = true
- // Not ready yet:
- //flags.RegabiArgs = true
- }
- // Check regabi dependencies.
- if flags.RegabiG && !flags.RegabiWrappers {
- panic("GOEXPERIMENT regabig requires regabiwrappers")
- }
- if flags.RegabiArgs && !(flags.RegabiWrappers && flags.RegabiG && flags.RegabiReflect && flags.RegabiDefer) {
- panic("GOEXPERIMENT regabiargs requires regabiwrappers,regabig,regabireflect,regabidefer")
- }
- return flags
-}
-
-// expList returns the list of lower-cased experiment names for
-// experiments that differ from base. base may be nil to indicate no
-// experiments. If all is true, then include all experiment flags,
-// regardless of base.
-func expList(exp, base *goexperiment.Flags, all bool) []string {
- var list []string
- rv := reflect.ValueOf(exp).Elem()
- var rBase reflect.Value
- if base != nil {
- rBase = reflect.ValueOf(base).Elem()
- }
- rt := rv.Type()
- for i := 0; i < rt.NumField(); i++ {
- name := strings.ToLower(rt.Field(i).Name)
- val := rv.Field(i).Bool()
- baseVal := false
- if base != nil {
- baseVal = rBase.Field(i).Bool()
- }
- if all || val != baseVal {
- if val {
- list = append(list, name)
- } else {
- list = append(list, "no"+name)
- }
- }
- }
- return list
-}
-
-// GOEXPERIMENT is a comma-separated list of enabled or disabled
-// experiments that differ from the baseline experiment configuration.
-// GOEXPERIMENT is exactly what a user would set on the command line
-// to get the set of enabled experiments.
-func GOEXPERIMENT() string {
- return strings.Join(expList(&Experiment, &experimentBaseline, false), ",")
-}
-
-// EnabledExperiments returns a list of enabled experiments, as
-// lower-cased experiment names.
-func EnabledExperiments() []string {
- return expList(&Experiment, nil, false)
-}