Skip to content

Commit 95ed5c3

Browse files
committed
internal/buildcfg: move build configuration out of cmd/internal/objabi
The go/build package needs access to this configuration, so move it into a new package available to the standard library. Change-Id: I868a94148b52350c76116451f4ad9191246adcff Reviewed-on: https://go-review.googlesource.com/c/go/+/310731 Trust: Russ Cox <[email protected]> Run-TryBot: Russ Cox <[email protected]> Reviewed-by: Austin Clements <[email protected]> Reviewed-by: Jay Conrod <[email protected]>
1 parent 2fc0ebb commit 95ed5c3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+674
-549
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ _testmain.go
3737
/src/cmd/internal/objabi/zbootstrap.go
3838
/src/go/build/zcgo.go
3939
/src/go/doc/headscan
40+
/src/internal/buildcfg/zbootstrap.go
4041
/src/runtime/internal/sys/zversion.go
4142
/src/unicode/maketables
4243
/test.out

src/cmd/asm/internal/asm/endtoend_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"bufio"
99
"bytes"
1010
"fmt"
11+
"internal/buildcfg"
1112
"io/ioutil"
1213
"os"
1314
"path/filepath"
@@ -19,7 +20,6 @@ import (
1920

2021
"cmd/asm/internal/lex"
2122
"cmd/internal/obj"
22-
"cmd/internal/objabi"
2323
)
2424

2525
// An end-to-end test for the assembler: Do we print what we parse?
@@ -368,10 +368,10 @@ func Test386EndToEnd(t *testing.T) {
368368
}
369369

370370
func TestARMEndToEnd(t *testing.T) {
371-
defer func(old int) { objabi.GOARM = old }(objabi.GOARM)
371+
defer func(old int) { buildcfg.GOARM = old }(buildcfg.GOARM)
372372
for _, goarm := range []int{5, 6, 7} {
373373
t.Logf("GOARM=%d", goarm)
374-
objabi.GOARM = goarm
374+
buildcfg.GOARM = goarm
375375
testEndToEnd(t, "arm", "arm")
376376
if goarm == 6 {
377377
testEndToEnd(t, "arm", "armv6")

src/cmd/asm/internal/asm/operand_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
package asm
66

77
import (
8+
"internal/buildcfg"
89
"strings"
910
"testing"
1011

1112
"cmd/asm/internal/arch"
1213
"cmd/asm/internal/lex"
1314
"cmd/internal/obj"
14-
"cmd/internal/objabi"
1515
)
1616

1717
// A simple in-out test: Do we print what we parse?
1818

1919
func setArch(goarch string) (*arch.Arch, *obj.Link) {
20-
objabi.GOOS = "linux" // obj can handle this OS for all architectures.
21-
objabi.GOARCH = goarch
20+
buildcfg.GOOS = "linux" // obj can handle this OS for all architectures.
21+
buildcfg.GOARCH = goarch
2222
architecture := arch.Set(goarch)
2323
if architecture == nil {
2424
panic("asm: unrecognized architecture " + goarch)

src/cmd/asm/internal/lex/input.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package lex
66

77
import (
88
"fmt"
9+
"internal/buildcfg"
910
"os"
1011
"path/filepath"
1112
"strconv"
@@ -49,7 +50,7 @@ func predefine(defines flags.MultiFlag) map[string]*Macro {
4950
// Set macros for GOEXPERIMENTs so we can easily switch
5051
// runtime assembly code based on them.
5152
if *flags.CompilingRuntime {
52-
for _, exp := range objabi.EnabledExperiments() {
53+
for _, exp := range buildcfg.EnabledExperiments() {
5354
// Define macro.
5455
name := "GOEXPERIMENT_" + exp
5556
macros[name] = &Macro{

src/cmd/asm/main.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"bufio"
99
"flag"
1010
"fmt"
11+
"internal/buildcfg"
1112
"log"
1213
"os"
1314

@@ -18,14 +19,14 @@ import (
1819

1920
"cmd/internal/bio"
2021
"cmd/internal/obj"
21-
"cmd/internal/objabi"
2222
)
2323

2424
func main() {
2525
log.SetFlags(0)
2626
log.SetPrefix("asm: ")
2727

28-
GOARCH := objabi.GOARCH
28+
buildcfg.Check()
29+
GOARCH := buildcfg.GOARCH
2930

3031
architecture := arch.Set(GOARCH)
3132
if architecture == nil {
@@ -68,7 +69,7 @@ func main() {
6869
defer buf.Close()
6970

7071
if !*flags.SymABIs {
71-
fmt.Fprintf(buf, "go object %s %s %s\n", objabi.GOOS, objabi.GOARCH, objabi.Version)
72+
fmt.Fprintf(buf, "go object %s %s %s\n", buildcfg.GOOS, buildcfg.GOARCH, buildcfg.Version)
7273
fmt.Fprintf(buf, "!\n")
7374
}
7475

src/cmd/cgo/main.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"go/ast"
1818
"go/printer"
1919
"go/token"
20+
"internal/buildcfg"
2021
"io"
2122
"io/ioutil"
2223
"os"
@@ -414,8 +415,9 @@ func newPackage(args []string) *Package {
414415
if s := os.Getenv("GOOS"); s != "" {
415416
goos = s
416417
}
417-
gomips = objabi.GOMIPS
418-
gomips64 = objabi.GOMIPS64
418+
buildcfg.Check()
419+
gomips = buildcfg.GOMIPS
420+
gomips64 = buildcfg.GOMIPS64
419421
ptrSize := ptrSizeMap[goarch]
420422
if ptrSize == 0 {
421423
fatalf("unknown ptrSize for $GOARCH %q", goarch)

src/cmd/compile/internal/amd64/ggen.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import (
1111
"cmd/compile/internal/types"
1212
"cmd/internal/obj"
1313
"cmd/internal/obj/x86"
14-
"cmd/internal/objabi"
14+
"internal/buildcfg"
1515
)
1616

1717
// no floating point in note handlers on Plan 9
18-
var isPlan9 = objabi.GOOS == "plan9"
18+
var isPlan9 = buildcfg.GOOS == "plan9"
1919

2020
// DUFFZERO consists of repeated blocks of 4 MOVUPSs + LEAQ,
2121
// See runtime/mkduff.go.
@@ -85,7 +85,7 @@ func zerorange(pp *objw.Progs, p *obj.Prog, off, cnt int64, state *uint32) *obj.
8585
}
8686
p = pp.Append(p, x86.AMOVQ, obj.TYPE_REG, x86.REG_R13, 0, obj.TYPE_MEM, x86.REG_SP, off)
8787
} else if !isPlan9 && cnt <= int64(8*types.RegSize) {
88-
if !objabi.Experiment.RegabiG && *state&x15 == 0 {
88+
if !buildcfg.Experiment.RegabiG && *state&x15 == 0 {
8989
p = pp.Append(p, x86.AXORPS, obj.TYPE_REG, x86.REG_X15, 0, obj.TYPE_REG, x86.REG_X15, 0)
9090
*state |= x15
9191
}
@@ -98,7 +98,7 @@ func zerorange(pp *objw.Progs, p *obj.Prog, off, cnt int64, state *uint32) *obj.
9898
p = pp.Append(p, x86.AMOVUPS, obj.TYPE_REG, x86.REG_X15, 0, obj.TYPE_MEM, x86.REG_SP, off+cnt-int64(16))
9999
}
100100
} else if !isPlan9 && (cnt <= int64(128*types.RegSize)) {
101-
if !objabi.Experiment.RegabiG && *state&x15 == 0 {
101+
if !buildcfg.Experiment.RegabiG && *state&x15 == 0 {
102102
p = pp.Append(p, x86.AXORPS, obj.TYPE_REG, x86.REG_X15, 0, obj.TYPE_REG, x86.REG_X15, 0)
103103
*state |= x15
104104
}

src/cmd/compile/internal/amd64/ssa.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package amd64
66

77
import (
88
"fmt"
9+
"internal/buildcfg"
910
"math"
1011

1112
"cmd/compile/internal/base"
@@ -17,7 +18,6 @@ import (
1718
"cmd/compile/internal/types"
1819
"cmd/internal/obj"
1920
"cmd/internal/obj/x86"
20-
"cmd/internal/objabi"
2121
)
2222

2323
// markMoves marks any MOVXconst ops that need to avoid clobbering flags.
@@ -825,7 +825,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
825825
p.To.Reg = v.Args[0].Reg()
826826
ssagen.AddAux2(&p.To, v, sc.Off64())
827827
case ssa.OpAMD64MOVOstorezero:
828-
if !objabi.Experiment.RegabiG || s.ABI != obj.ABIInternal {
828+
if !buildcfg.Experiment.RegabiG || s.ABI != obj.ABIInternal {
829829
// zero X15 manually
830830
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
831831
}
@@ -916,7 +916,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
916916
p.To.Type = obj.TYPE_REG
917917
p.To.Reg = v.Reg()
918918
case ssa.OpAMD64DUFFZERO:
919-
if !objabi.Experiment.RegabiG || s.ABI != obj.ABIInternal {
919+
if !buildcfg.Experiment.RegabiG || s.ABI != obj.ABIInternal {
920920
// zero X15 manually
921921
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
922922
}
@@ -999,20 +999,20 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
999999
// Closure pointer is DX.
10001000
ssagen.CheckLoweredGetClosurePtr(v)
10011001
case ssa.OpAMD64LoweredGetG:
1002-
if objabi.Experiment.RegabiG && s.ABI == obj.ABIInternal {
1002+
if buildcfg.Experiment.RegabiG && s.ABI == obj.ABIInternal {
10031003
v.Fatalf("LoweredGetG should not appear in ABIInternal")
10041004
}
10051005
r := v.Reg()
10061006
getgFromTLS(s, r)
10071007
case ssa.OpAMD64CALLstatic:
1008-
if objabi.Experiment.RegabiG && s.ABI == obj.ABI0 && v.Aux.(*ssa.AuxCall).Fn.ABI() == obj.ABIInternal {
1008+
if buildcfg.Experiment.RegabiG && s.ABI == obj.ABI0 && v.Aux.(*ssa.AuxCall).Fn.ABI() == obj.ABIInternal {
10091009
// zeroing X15 when entering ABIInternal from ABI0
10101010
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
10111011
// set G register from TLS
10121012
getgFromTLS(s, x86.REG_R14)
10131013
}
10141014
s.Call(v)
1015-
if objabi.Experiment.RegabiG && s.ABI == obj.ABIInternal && v.Aux.(*ssa.AuxCall).Fn.ABI() == obj.ABI0 {
1015+
if buildcfg.Experiment.RegabiG && s.ABI == obj.ABIInternal && v.Aux.(*ssa.AuxCall).Fn.ABI() == obj.ABI0 {
10161016
// zeroing X15 when entering ABIInternal from ABI0
10171017
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
10181018
// set G register from TLS
@@ -1306,7 +1306,7 @@ func ssaGenBlock(s *ssagen.State, b, next *ssa.Block) {
13061306
case ssa.BlockRet:
13071307
s.Prog(obj.ARET)
13081308
case ssa.BlockRetJmp:
1309-
if objabi.Experiment.RegabiG && s.ABI == obj.ABI0 && b.Aux.(*obj.LSym).ABI() == obj.ABIInternal {
1309+
if buildcfg.Experiment.RegabiG && s.ABI == obj.ABI0 && b.Aux.(*obj.LSym).ABI() == obj.ABIInternal {
13101310
// zeroing X15 when entering ABIInternal from ABI0
13111311
opregreg(s, x86.AXORPS, x86.REG_X15, x86.REG_X15)
13121312
// set G register from TLS

src/cmd/compile/internal/arm/galign.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import (
88
"cmd/compile/internal/ssa"
99
"cmd/compile/internal/ssagen"
1010
"cmd/internal/obj/arm"
11-
"cmd/internal/objabi"
11+
"internal/buildcfg"
1212
)
1313

1414
func Init(arch *ssagen.ArchInfo) {
1515
arch.LinkArch = &arm.Linkarm
1616
arch.REGSP = arm.REGSP
1717
arch.MAXWIDTH = (1 << 32) - 1
18-
arch.SoftFloat = objabi.GOARM == 5
18+
arch.SoftFloat = buildcfg.GOARM == 5
1919
arch.ZeroRange = zerorange
2020
arch.Ginsnop = ginsnop
2121
arch.Ginsnopdefer = ginsnop

src/cmd/compile/internal/arm/ssa.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package arm
66

77
import (
88
"fmt"
9+
"internal/buildcfg"
910
"math"
1011
"math/bits"
1112

@@ -17,7 +18,6 @@ import (
1718
"cmd/compile/internal/types"
1819
"cmd/internal/obj"
1920
"cmd/internal/obj/arm"
20-
"cmd/internal/objabi"
2121
)
2222

2323
// loadByType returns the load instruction of the given type.
@@ -286,7 +286,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
286286
case ssa.OpARMANDconst, ssa.OpARMBICconst:
287287
// try to optimize ANDconst and BICconst to BFC, which saves bytes and ticks
288288
// BFC is only available on ARMv7, and its result and source are in the same register
289-
if objabi.GOARM == 7 && v.Reg() == v.Args[0].Reg() {
289+
if buildcfg.GOARM == 7 && v.Reg() == v.Args[0].Reg() {
290290
var val uint32
291291
if v.Op == ssa.OpARMANDconst {
292292
val = ^uint32(v.AuxInt)
@@ -643,7 +643,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
643643
default:
644644
}
645645
}
646-
if objabi.GOARM >= 6 {
646+
if buildcfg.GOARM >= 6 {
647647
// generate more efficient "MOVB/MOVBU/MOVH/MOVHU Reg@>0, Reg" on ARMv6 & ARMv7
648648
genshift(s, v.Op.Asm(), 0, v.Args[0].Reg(), v.Reg(), arm.SHIFT_RR, 0)
649649
return

src/cmd/compile/internal/arm64/ggen.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import (
1010
"cmd/compile/internal/types"
1111
"cmd/internal/obj"
1212
"cmd/internal/obj/arm64"
13-
"cmd/internal/objabi"
13+
"internal/buildcfg"
1414
)
1515

16-
var darwin = objabi.GOOS == "darwin" || objabi.GOOS == "ios"
16+
var darwin = buildcfg.GOOS == "darwin" || buildcfg.GOOS == "ios"
1717

1818
func padframe(frame int64) int64 {
1919
// arm64 requires that the frame size (not counting saved FP&LR)

src/cmd/compile/internal/base/flag.go

+10-9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"encoding/json"
99
"flag"
1010
"fmt"
11+
"internal/buildcfg"
1112
"io/ioutil"
1213
"log"
1314
"os"
@@ -146,7 +147,7 @@ func ParseFlags() {
146147
Flag.LowerP = &Ctxt.Pkgpath
147148
Flag.LowerV = &Ctxt.Debugvlog
148149

149-
Flag.Dwarf = objabi.GOARCH != "wasm"
150+
Flag.Dwarf = buildcfg.GOARCH != "wasm"
150151
Flag.DwarfBASEntries = &Ctxt.UseBASEntries
151152
Flag.DwarfLocationLists = &Ctxt.Flag_locationlists
152153
*Flag.DwarfLocationLists = true
@@ -168,14 +169,14 @@ func ParseFlags() {
168169
registerFlags()
169170
objabi.Flagparse(usage)
170171

171-
if Flag.MSan && !sys.MSanSupported(objabi.GOOS, objabi.GOARCH) {
172-
log.Fatalf("%s/%s does not support -msan", objabi.GOOS, objabi.GOARCH)
172+
if Flag.MSan && !sys.MSanSupported(buildcfg.GOOS, buildcfg.GOARCH) {
173+
log.Fatalf("%s/%s does not support -msan", buildcfg.GOOS, buildcfg.GOARCH)
173174
}
174-
if Flag.Race && !sys.RaceDetectorSupported(objabi.GOOS, objabi.GOARCH) {
175-
log.Fatalf("%s/%s does not support -race", objabi.GOOS, objabi.GOARCH)
175+
if Flag.Race && !sys.RaceDetectorSupported(buildcfg.GOOS, buildcfg.GOARCH) {
176+
log.Fatalf("%s/%s does not support -race", buildcfg.GOOS, buildcfg.GOARCH)
176177
}
177178
if (*Flag.Shared || *Flag.Dynlink || *Flag.LinkShared) && !Ctxt.Arch.InFamily(sys.AMD64, sys.ARM, sys.ARM64, sys.I386, sys.PPC64, sys.RISCV64, sys.S390X) {
178-
log.Fatalf("%s/%s does not support -shared", objabi.GOOS, objabi.GOARCH)
179+
log.Fatalf("%s/%s does not support -shared", buildcfg.GOOS, buildcfg.GOARCH)
179180
}
180181
parseSpectre(Flag.Spectre) // left as string for RecordFlags
181182

@@ -347,7 +348,7 @@ func concurrentBackendAllowed() bool {
347348
return false
348349
}
349350
// TODO: Test and delete this condition.
350-
if objabi.Experiment.FieldTrack {
351+
if buildcfg.Experiment.FieldTrack {
351352
return false
352353
}
353354
// TODO: fix races and enable the following flags
@@ -458,11 +459,11 @@ func parseSpectre(s string) {
458459
}
459460

460461
if Flag.Cfg.SpectreIndex {
461-
switch objabi.GOARCH {
462+
switch buildcfg.GOARCH {
462463
case "amd64":
463464
// ok
464465
default:
465-
log.Fatalf("GOARCH=%s does not support -spectre=index", objabi.GOARCH)
466+
log.Fatalf("GOARCH=%s does not support -spectre=index", buildcfg.GOARCH)
466467
}
467468
}
468469
}

src/cmd/compile/internal/base/print.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ package base
66

77
import (
88
"fmt"
9+
"internal/buildcfg"
910
"os"
1011
"runtime/debug"
1112
"sort"
1213
"strings"
1314

14-
"cmd/internal/objabi"
1515
"cmd/internal/src"
1616
)
1717

@@ -217,7 +217,7 @@ func FatalfAt(pos src.XPos, format string, args ...interface{}) {
217217
fmt.Printf("\n")
218218

219219
// If this is a released compiler version, ask for a bug report.
220-
if strings.HasPrefix(objabi.Version, "go") {
220+
if strings.HasPrefix(buildcfg.Version, "go") {
221221
fmt.Printf("\n")
222222
fmt.Printf("Please file a bug report including a short program that triggers the error.\n")
223223
fmt.Printf("https://golang.org/issue/new\n")

src/cmd/compile/internal/dwarfgen/dwarf.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"bytes"
99
"flag"
1010
"fmt"
11+
"internal/buildcfg"
1112
"sort"
1213

1314
"cmd/compile/internal/base"
@@ -278,7 +279,7 @@ func createSimpleVar(fnsym *obj.LSym, n *ir.Name) *dwarf.Var {
278279
if base.Ctxt.FixedFrameSize() == 0 {
279280
offs -= int64(types.PtrSize)
280281
}
281-
if objabi.FramePointerEnabled {
282+
if buildcfg.FramePointerEnabled {
282283
offs -= int64(types.PtrSize)
283284
}
284285

0 commit comments

Comments
 (0)