diff options
| author | Russ Cox <rsc@golang.org> | 2021-04-15 23:05:49 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2021-04-16 19:20:53 +0000 |
| commit | 95ed5c3800a87ddf9b0ec3958eaaa1a969306293 (patch) | |
| tree | cb0c555f10ab706a5c491cbe48dd36da16658a1e /src/cmd/link | |
| parent | 2fc0ebb623e2859094ad3f41e61325df0c2163f8 (diff) | |
| download | go-95ed5c3800a87ddf9b0ec3958eaaa1a969306293.tar.xz | |
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 <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'src/cmd/link')
| -rw-r--r-- | src/cmd/link/internal/ld/ar.go | 4 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/config.go | 50 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/data_test.go | 7 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/deadcode.go | 5 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/dwarf.go | 3 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/elf.go | 11 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/lib.go | 43 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/macho.go | 5 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/main.go | 11 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/pcln.go | 3 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/pe.go | 11 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/sym.go | 5 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/symtab.go | 3 | ||||
| -rw-r--r-- | src/cmd/link/internal/mips/obj.go | 3 | ||||
| -rw-r--r-- | src/cmd/link/internal/mips64/obj.go | 3 | ||||
| -rw-r--r-- | src/cmd/link/internal/ppc64/obj.go | 3 | ||||
| -rw-r--r-- | src/cmd/link/internal/wasm/asm.go | 11 | ||||
| -rw-r--r-- | src/cmd/link/linkbig_test.go | 8 | ||||
| -rw-r--r-- | src/cmd/link/main.go | 7 |
19 files changed, 106 insertions, 90 deletions
diff --git a/src/cmd/link/internal/ld/ar.go b/src/cmd/link/internal/ld/ar.go index e4fd591676..22f53a4df2 100644 --- a/src/cmd/link/internal/ld/ar.go +++ b/src/cmd/link/internal/ld/ar.go @@ -32,10 +32,10 @@ package ld import ( "cmd/internal/bio" - "cmd/internal/objabi" "cmd/link/internal/sym" "encoding/binary" "fmt" + "internal/buildcfg" "io" "os" ) @@ -170,7 +170,7 @@ func readArmap(filename string, f *bio.Reader, arhdr ArHdr) archiveMap { // For Mach-O and PE/386 files we strip a leading // underscore from the symbol name. - if objabi.GOOS == "darwin" || objabi.GOOS == "ios" || (objabi.GOOS == "windows" && objabi.GOARCH == "386") { + if buildcfg.GOOS == "darwin" || buildcfg.GOOS == "ios" || (buildcfg.GOOS == "windows" && buildcfg.GOARCH == "386") { if name[0] == '_' && len(name) > 1 { name = name[1:] } diff --git a/src/cmd/link/internal/ld/config.go b/src/cmd/link/internal/ld/config.go index 9228962fb3..75fddc6a38 100644 --- a/src/cmd/link/internal/ld/config.go +++ b/src/cmd/link/internal/ld/config.go @@ -5,9 +5,9 @@ package ld import ( - "cmd/internal/objabi" "cmd/internal/sys" "fmt" + "internal/buildcfg" ) // A BuildMode indicates the sort of object we are building. @@ -28,23 +28,23 @@ const ( func (mode *BuildMode) Set(s string) error { badmode := func() error { - return fmt.Errorf("buildmode %s not supported on %s/%s", s, objabi.GOOS, objabi.GOARCH) + return fmt.Errorf("buildmode %s not supported on %s/%s", s, buildcfg.GOOS, buildcfg.GOARCH) } switch s { default: return fmt.Errorf("invalid buildmode: %q", s) case "exe": - switch objabi.GOOS + "/" + objabi.GOARCH { + switch buildcfg.GOOS + "/" + buildcfg.GOARCH { case "darwin/arm64", "windows/arm", "windows/arm64": // On these platforms, everything is PIE *mode = BuildModePIE default: *mode = BuildModeExe } case "pie": - switch objabi.GOOS { + switch buildcfg.GOOS { case "aix", "android", "linux", "windows", "darwin", "ios": case "freebsd": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "amd64": default: return badmode() @@ -54,16 +54,16 @@ func (mode *BuildMode) Set(s string) error { } *mode = BuildModePIE case "c-archive": - switch objabi.GOOS { + switch buildcfg.GOOS { case "aix", "darwin", "ios", "linux": case "freebsd": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "amd64": default: return badmode() } case "windows": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "amd64", "386", "arm", "arm64": default: return badmode() @@ -73,16 +73,16 @@ func (mode *BuildMode) Set(s string) error { } *mode = BuildModeCArchive case "c-shared": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "386", "amd64", "arm", "arm64", "ppc64le", "s390x": default: return badmode() } *mode = BuildModeCShared case "shared": - switch objabi.GOOS { + switch buildcfg.GOOS { case "linux": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "386", "amd64", "arm", "arm64", "ppc64le", "s390x": default: return badmode() @@ -92,21 +92,21 @@ func (mode *BuildMode) Set(s string) error { } *mode = BuildModeShared case "plugin": - switch objabi.GOOS { + switch buildcfg.GOOS { case "linux": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "386", "amd64", "arm", "arm64", "s390x", "ppc64le": default: return badmode() } case "darwin": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "amd64", "arm64": default: return badmode() } case "freebsd": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "amd64": default: return badmode() @@ -185,8 +185,8 @@ func mustLinkExternal(ctxt *Link) (res bool, reason string) { }() } - if sys.MustLinkExternal(objabi.GOOS, objabi.GOARCH) { - return true, fmt.Sprintf("%s/%s requires external linking", objabi.GOOS, objabi.GOARCH) + if sys.MustLinkExternal(buildcfg.GOOS, buildcfg.GOARCH) { + return true, fmt.Sprintf("%s/%s requires external linking", buildcfg.GOOS, buildcfg.GOARCH) } if *flagMsan { @@ -197,20 +197,20 @@ func mustLinkExternal(ctxt *Link) (res bool, reason string) { // https://golang.org/issue/14449 // https://golang.org/issue/21961 if iscgo && ctxt.Arch.InFamily(sys.MIPS64, sys.MIPS, sys.PPC64, sys.RISCV64) { - return true, objabi.GOARCH + " does not support internal cgo" + return true, buildcfg.GOARCH + " does not support internal cgo" } - if iscgo && (objabi.GOOS == "android" || objabi.GOOS == "dragonfly") { + if iscgo && (buildcfg.GOOS == "android" || buildcfg.GOOS == "dragonfly") { // It seems that on Dragonfly thread local storage is // set up by the dynamic linker, so internal cgo linking // doesn't work. Test case is "go test runtime/cgo". - return true, objabi.GOOS + " does not support internal cgo" + return true, buildcfg.GOOS + " 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 " + objabi.GOARCH + return true, "race on " + buildcfg.GOARCH } // Some build modes require work the internal linker cannot do (yet). @@ -220,7 +220,7 @@ func mustLinkExternal(ctxt *Link) (res bool, reason string) { case BuildModeCShared: return true, "buildmode=c-shared" case BuildModePIE: - switch objabi.GOOS + "/" + objabi.GOARCH { + switch buildcfg.GOOS + "/" + buildcfg.GOARCH { case "linux/amd64", "linux/arm64", "android/arm64": case "windows/386", "windows/amd64", "windows/arm", "windows/arm64": case "darwin/amd64", "darwin/arm64": @@ -254,7 +254,7 @@ func determineLinkMode(ctxt *Link) { // default value of -linkmode. If it is not set when the // linker is called we take the value it was set to when // cmd/link was compiled. (See make.bash.) - switch objabi.Getgoextlinkenabled() { + switch buildcfg.Getgoextlinkenabled() { case "0": ctxt.LinkMode = LinkInternal via = "via GO_EXTLINK_ENABLED " @@ -277,8 +277,8 @@ func determineLinkMode(ctxt *Link) { } case LinkExternal: switch { - case objabi.GOARCH == "ppc64" && objabi.GOOS != "aix": - Exitf("external linking not supported for %s/ppc64", objabi.GOOS) + case buildcfg.GOARCH == "ppc64" && buildcfg.GOOS != "aix": + Exitf("external linking not supported for %s/ppc64", buildcfg.GOOS) } } } diff --git a/src/cmd/link/internal/ld/data_test.go b/src/cmd/link/internal/ld/data_test.go index 7c46307bd8..f91493bc41 100644 --- a/src/cmd/link/internal/ld/data_test.go +++ b/src/cmd/link/internal/ld/data_test.go @@ -8,6 +8,7 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/loader" + "internal/buildcfg" "testing" ) @@ -63,14 +64,14 @@ func TestAddGotSym(t *testing.T) { } // Save the architecture as we're going to set it on each test run. - origArch := objabi.GOARCH + origArch := buildcfg.GOARCH defer func() { - objabi.GOARCH = origArch + buildcfg.GOARCH = origArch }() for i, test := range tests { iself := len(test.rel) != 0 - objabi.GOARCH = test.arch.Name + buildcfg.GOARCH = test.arch.Name ctxt := setUpContext(test.arch, iself, test.ht, test.bm, test.lm) foo := ctxt.loader.CreateSymForUpdate("foo", 0) ctxt.loader.CreateExtSym("bar", 0) diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go index 741a72cad8..1ed5598c99 100644 --- a/src/cmd/link/internal/ld/deadcode.go +++ b/src/cmd/link/internal/ld/deadcode.go @@ -11,6 +11,7 @@ import ( "cmd/link/internal/loader" "cmd/link/internal/sym" "fmt" + "internal/buildcfg" "unicode" ) @@ -32,7 +33,7 @@ type deadcodePass struct { func (d *deadcodePass) init() { d.ldr.InitReachable() d.ifaceMethod = make(map[methodsig]bool) - if objabi.Experiment.FieldTrack { + if buildcfg.Experiment.FieldTrack { d.ldr.Reachparent = make([]loader.Sym, d.ldr.NSym()) } d.dynlink = d.ctxt.DynlinkingGo() @@ -258,7 +259,7 @@ func (d *deadcodePass) mark(symIdx, parent loader.Sym) { if symIdx != 0 && !d.ldr.AttrReachable(symIdx) { d.wq.push(symIdx) d.ldr.SetAttrReachable(symIdx, true) - if objabi.Experiment.FieldTrack && d.ldr.Reachparent[symIdx] == 0 { + if buildcfg.Experiment.FieldTrack && d.ldr.Reachparent[symIdx] == 0 { d.ldr.Reachparent[symIdx] = parent } if *flagDumpDep { diff --git a/src/cmd/link/internal/ld/dwarf.go b/src/cmd/link/internal/ld/dwarf.go index 2f19c3eaa2..c53d2408cb 100644 --- a/src/cmd/link/internal/ld/dwarf.go +++ b/src/cmd/link/internal/ld/dwarf.go @@ -22,6 +22,7 @@ import ( "cmd/link/internal/loader" "cmd/link/internal/sym" "fmt" + "internal/buildcfg" "log" "path" "runtime" @@ -1843,7 +1844,7 @@ func dwarfGenerateDebugInfo(ctxt *Link) { if producerExtra := d.ldr.Lookup(dwarf.CUInfoPrefix+"producer."+unit.Lib.Pkg, 0); producerExtra != 0 { peData = d.ldr.Data(producerExtra) } - producer := "Go cmd/compile " + objabi.Version + producer := "Go cmd/compile " + buildcfg.Version if len(peData) > 0 { // We put a semicolon before the flags to clearly // separate them from the version, which can be long diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go index 3ba9f329ee..87d88dd957 100644 --- a/src/cmd/link/internal/ld/elf.go +++ b/src/cmd/link/internal/ld/elf.go @@ -14,6 +14,7 @@ import ( "encoding/binary" "encoding/hex" "fmt" + "internal/buildcfg" "path/filepath" "sort" "strings" @@ -584,7 +585,7 @@ func elfWriteMipsAbiFlags(ctxt *Link) int { ctxt.Out.Write8(1) // gprSize ctxt.Out.Write8(1) // cpr1Size ctxt.Out.Write8(0) // cpr2Size - if objabi.GOMIPS == "softfloat" { + if buildcfg.GOMIPS == "softfloat" { ctxt.Out.Write8(MIPS_FPABI_SOFT) // fpAbi } else { // Go cannot make sure non odd-number-fpr is used (ie, in load a double from memory). @@ -1557,7 +1558,7 @@ func (ctxt *Link) doelf() { gnuattributes.AddUint8(1) // 1:file, 2: section, 3: symbol, 1 here gnuattributes.AddUint32(ctxt.Arch, 7) // tag length, including tag, 7 here gnuattributes.AddUint8(4) // 4 for FP, 8 for MSA - if objabi.GOMIPS == "softfloat" { + if buildcfg.GOMIPS == "softfloat" { gnuattributes.AddUint8(MIPS_FPABI_SOFT) } else { // Note: MIPS_FPABI_ANY is bad naming: in fact it is MIPS I style FPR usage. @@ -1743,14 +1744,14 @@ func asmbElf(ctxt *Link) { sh.Flags = uint64(elf.SHF_ALLOC) sh.Addralign = 1 - if interpreter == "" && objabi.GO_LDSO != "" { - interpreter = objabi.GO_LDSO + if interpreter == "" && buildcfg.GO_LDSO != "" { + interpreter = buildcfg.GO_LDSO } if interpreter == "" { switch ctxt.HeadType { case objabi.Hlinux: - if objabi.GOOS == "android" { + if buildcfg.GOOS == "android" { interpreter = thearch.Androiddynld if interpreter == "" { Exitf("ELF interpreter not set") diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index b709569103..b814a277e6 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -49,6 +49,7 @@ import ( "encoding/base64" "encoding/binary" "fmt" + "internal/buildcfg" exec "internal/execabs" "io" "io/ioutil" @@ -379,7 +380,7 @@ func libinit(ctxt *Link) { suffix = "msan" } - Lflag(ctxt, filepath.Join(objabi.GOROOT, "pkg", fmt.Sprintf("%s_%s%s%s", objabi.GOOS, objabi.GOARCH, suffixsep, suffix))) + Lflag(ctxt, filepath.Join(buildcfg.GOROOT, "pkg", fmt.Sprintf("%s_%s%s%s", buildcfg.GOOS, buildcfg.GOARCH, suffixsep, suffix))) mayberemoveoutfile() @@ -390,9 +391,9 @@ func libinit(ctxt *Link) { if *flagEntrySymbol == "" { switch ctxt.BuildMode { case BuildModeCShared, BuildModeCArchive: - *flagEntrySymbol = fmt.Sprintf("_rt0_%s_%s_lib", objabi.GOARCH, objabi.GOOS) + *flagEntrySymbol = fmt.Sprintf("_rt0_%s_%s_lib", buildcfg.GOARCH, buildcfg.GOOS) case BuildModeExe, BuildModePIE: - *flagEntrySymbol = fmt.Sprintf("_rt0_%s_%s", objabi.GOARCH, objabi.GOOS) + *flagEntrySymbol = fmt.Sprintf("_rt0_%s_%s", buildcfg.GOARCH, buildcfg.GOOS) case BuildModeShared, BuildModePlugin: // No *flagEntrySymbol for -buildmode=shared and plugin default: @@ -495,7 +496,7 @@ func (ctxt *Link) loadlib() { default: log.Fatalf("invalid -strictdups flag value %d", *FlagStrictDups) } - if !objabi.Experiment.RegabiWrappers || ctxt.linkShared { + if !buildcfg.Experiment.RegabiWrappers || ctxt.linkShared { // Use ABI aliases if ABI wrappers are not used. // TODO: for now we still use ABI aliases in shared linkage, even if // the wrapper is enabled. @@ -543,7 +544,7 @@ func (ctxt *Link) loadlib() { // We now have enough information to determine the link mode. determineLinkMode(ctxt) - if ctxt.LinkMode == LinkExternal && !iscgo && !(objabi.GOOS == "darwin" && ctxt.BuildMode != BuildModePlugin && ctxt.Arch.Family == sys.AMD64) { + if ctxt.LinkMode == LinkExternal && !iscgo && !(buildcfg.GOOS == "darwin" && ctxt.BuildMode != BuildModePlugin && ctxt.Arch.Family == sys.AMD64) { // This indicates a user requested -linkmode=external. // The startup code uses an import of runtime/cgo to decide // whether to initialize the TLS. So give it one. This could @@ -705,7 +706,7 @@ func (ctxt *Link) linksetup() { } } - if ctxt.LinkMode == LinkExternal && ctxt.Arch.Family == sys.PPC64 && objabi.GOOS != "aix" { + if ctxt.LinkMode == LinkExternal && ctxt.Arch.Family == sys.PPC64 && buildcfg.GOOS != "aix" { toc := ctxt.loader.LookupOrCreateSym(".TOC.", 0) sb := ctxt.loader.MakeSymbolUpdater(toc) sb.SetType(sym.SDYNIMPORT) @@ -714,7 +715,7 @@ func (ctxt *Link) linksetup() { // The Android Q linker started to complain about underalignment of the our TLS // section. We don't actually use the section on android, so don't // generate it. - if objabi.GOOS != "android" { + if buildcfg.GOOS != "android" { tlsg := ctxt.loader.LookupOrCreateSym("runtime.tlsg", 0) sb := ctxt.loader.MakeSymbolUpdater(tlsg) @@ -755,7 +756,7 @@ func (ctxt *Link) linksetup() { sb := ctxt.loader.MakeSymbolUpdater(goarm) sb.SetType(sym.SDATA) sb.SetSize(0) - sb.AddUint8(uint8(objabi.GOARM)) + sb.AddUint8(uint8(buildcfg.GOARM)) } // Set runtime.disableMemoryProfiling bool if @@ -1248,7 +1249,7 @@ func (ctxt *Link) hostlink() { // -headerpad is incompatible with -fembed-bitcode. argv = append(argv, "-Wl,-headerpad,1144") } - if ctxt.DynlinkingGo() && objabi.GOOS != "ios" { + if ctxt.DynlinkingGo() && buildcfg.GOOS != "ios" { // -flat_namespace is deprecated on iOS. // It is useful for supporting plugins. We don't support plugins on iOS. argv = append(argv, "-Wl,-flat_namespace") @@ -1366,12 +1367,12 @@ func (ctxt *Link) hostlink() { // from the beginning of the section (like sym.STYPE). argv = append(argv, "-Wl,-znocopyreloc") - if objabi.GOOS == "android" { + if buildcfg.GOOS == "android" { // Use lld to avoid errors from default linker (issue #38838) altLinker = "lld" } - if ctxt.Arch.InFamily(sys.ARM, sys.ARM64) && objabi.GOOS == "linux" { + if ctxt.Arch.InFamily(sys.ARM, sys.ARM64) && buildcfg.GOOS == "linux" { // On ARM, the GNU linker will generate COPY relocations // even with -znocopyreloc set. // https://sourceware.org/bugzilla/show_bug.cgi?id=19962 @@ -1393,7 +1394,7 @@ func (ctxt *Link) hostlink() { } } } - if ctxt.Arch.Family == sys.ARM64 && objabi.GOOS == "freebsd" { + if ctxt.Arch.Family == sys.ARM64 && buildcfg.GOOS == "freebsd" { // Switch to ld.bfd on freebsd/arm64. altLinker = "bfd" @@ -1420,7 +1421,7 @@ func (ctxt *Link) hostlink() { // only want to do this when producing a Windows output file // on a Windows host. outopt := *flagOutfile - if objabi.GOOS == "windows" && runtime.GOOS == "windows" && filepath.Ext(outopt) == "" { + if buildcfg.GOOS == "windows" && runtime.GOOS == "windows" && filepath.Ext(outopt) == "" { outopt += "." } argv = append(argv, "-o") @@ -1737,7 +1738,7 @@ func hostlinkArchArgs(arch *sys.Arch) []string { case sys.I386: return []string{"-m32"} case sys.AMD64: - if objabi.GOOS == "darwin" { + if buildcfg.GOOS == "darwin" { return []string{"-arch", "x86_64", "-m64"} } return []string{"-m64"} @@ -1746,7 +1747,7 @@ func hostlinkArchArgs(arch *sys.Arch) []string { case sys.ARM: return []string{"-marm"} case sys.ARM64: - if objabi.GOOS == "darwin" { + if buildcfg.GOOS == "darwin" { return []string{"-arch", "arm64"} } case sys.MIPS64: @@ -1754,7 +1755,7 @@ func hostlinkArchArgs(arch *sys.Arch) []string { case sys.MIPS: return []string{"-mabi=32"} case sys.PPC64: - if objabi.GOOS == "aix" { + if buildcfg.GOOS == "aix" { return []string{"-maix64"} } else { return []string{"-m64"} @@ -1862,7 +1863,7 @@ func ldobj(ctxt *Link, f *bio.Reader, lib *sym.Library, length int64, pn string, } // First, check that the basic GOOS, GOARCH, and Version match. - t := fmt.Sprintf("%s %s %s ", objabi.GOOS, objabi.GOARCH, objabi.Version) + t := fmt.Sprintf("%s %s %s ", buildcfg.GOOS, buildcfg.GOARCH, buildcfg.Version) line = strings.TrimRight(line, "\n") if !strings.HasPrefix(line[10:]+" ", t) && !*flagF { @@ -2084,7 +2085,7 @@ func ldshlibsyms(ctxt *Link, shlib string) { // collect text symbol ABI versions. symabi := make(map[string]int) // map (unmangled) symbol name to version - if objabi.Experiment.RegabiWrappers { + if buildcfg.Experiment.RegabiWrappers { for _, elfsym := range syms { if elf.ST_TYPE(elfsym.Info) != elf.STT_FUNC { continue @@ -2112,7 +2113,7 @@ func ldshlibsyms(ctxt *Link, shlib string) { symname := elfsym.Name // (unmangled) symbol name if elf.ST_TYPE(elfsym.Info) == elf.STT_FUNC && strings.HasPrefix(elfsym.Name, "type.") { ver = sym.SymVerABIInternal - } else if objabi.Experiment.RegabiWrappers && elf.ST_TYPE(elfsym.Info) == elf.STT_FUNC { + } else if buildcfg.Experiment.RegabiWrappers && elf.ST_TYPE(elfsym.Info) == elf.STT_FUNC { if strings.HasSuffix(elfsym.Name, ".abiinternal") { ver = sym.SymVerABIInternal symname = strings.TrimSuffix(elfsym.Name, ".abiinternal") @@ -2162,7 +2163,7 @@ func ldshlibsyms(ctxt *Link, shlib string) { // mangle Go function names in the .so to include the // ABI. if elf.ST_TYPE(elfsym.Info) == elf.STT_FUNC && ver == 0 { - if objabi.Experiment.RegabiWrappers { + if buildcfg.Experiment.RegabiWrappers { if _, ok := symabi[symname]; ok { continue // only use alias for functions w/o ABI wrappers } @@ -2234,7 +2235,7 @@ func (ctxt *Link) dostkcheck() { // of non-splitting functions. var ch chain ch.limit = objabi.StackLimit - callsize(ctxt) - if objabi.GOARCH == "arm64" { + if buildcfg.GOARCH == "arm64" { // need extra 8 bytes below SP to save FP ch.limit -= 8 } diff --git a/src/cmd/link/internal/ld/macho.go b/src/cmd/link/internal/ld/macho.go index 4c55c5761f..98c9a32f4d 100644 --- a/src/cmd/link/internal/ld/macho.go +++ b/src/cmd/link/internal/ld/macho.go @@ -15,6 +15,7 @@ import ( "debug/macho" "encoding/binary" "fmt" + "internal/buildcfg" "io" "os" "sort" @@ -945,12 +946,12 @@ func collectmachosyms(ctxt *Link) { if machoPlatform == PLATFORM_MACOS { switch n := ldr.SymExtname(s); n { case "fdopendir": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "amd64": ldr.SetSymExtname(s, n+"$INODE64") } case "readdir_r", "getfsstat": - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "amd64": ldr.SetSymExtname(s, n+"$INODE64") } diff --git a/src/cmd/link/internal/ld/main.go b/src/cmd/link/internal/ld/main.go index 1e3c3bdff7..7ab9ca7d10 100644 --- a/src/cmd/link/internal/ld/main.go +++ b/src/cmd/link/internal/ld/main.go @@ -37,6 +37,7 @@ import ( "cmd/internal/sys" "cmd/link/internal/benchmark" "flag" + "internal/buildcfg" "log" "os" "runtime" @@ -118,14 +119,14 @@ func Main(arch *sys.Arch, theArch Arch) { addstrdata1(ctxt, "runtime.defaultGOROOT="+final) addstrdata1(ctxt, "cmd/internal/objabi.defaultGOROOT="+final) - buildVersion := objabi.Version - if goexperiment := objabi.GOEXPERIMENT(); goexperiment != "" { + buildVersion := buildcfg.Version + if goexperiment := buildcfg.GOEXPERIMENT(); goexperiment != "" { buildVersion += " X:" + goexperiment } addstrdata1(ctxt, "runtime.buildVersion="+buildVersion) // TODO(matloob): define these above and then check flag values here - if ctxt.Arch.Family == sys.AMD64 && objabi.GOOS == "plan9" { + if ctxt.Arch.Family == sys.AMD64 && buildcfg.GOOS == "plan9" { flag.BoolVar(&flag8, "8", false, "use 64-bit addresses in symbol table") } flagHeadType := flag.String("H", "", "set header `type`") @@ -159,7 +160,7 @@ func Main(arch *sys.Arch, theArch Arch) { } } if ctxt.HeadType == objabi.Hunknown { - ctxt.HeadType.Set(objabi.GOOS) + ctxt.HeadType.Set(buildcfg.GOOS) } if !*flagAslr && ctxt.BuildMode != BuildModeCShared { @@ -255,7 +256,7 @@ func Main(arch *sys.Arch, theArch Arch) { bench.Start("dostrdata") ctxt.dostrdata() - if objabi.Experiment.FieldTrack { + if buildcfg.Experiment.FieldTrack { bench.Start("fieldtrack") fieldtrack(ctxt.Arch, ctxt.loader) } diff --git a/src/cmd/link/internal/ld/pcln.go b/src/cmd/link/internal/ld/pcln.go index 61b64f4f5a..79ad9d73e9 100644 --- a/src/cmd/link/internal/ld/pcln.go +++ b/src/cmd/link/internal/ld/pcln.go @@ -11,6 +11,7 @@ import ( "cmd/link/internal/loader" "cmd/link/internal/sym" "fmt" + "internal/buildcfg" "os" "path/filepath" ) @@ -879,7 +880,7 @@ func (ctxt *Link) pclntab(container loader.Bitmap) *pclntab { } func gorootFinal() string { - root := objabi.GOROOT + root := buildcfg.GOROOT if final := os.Getenv("GOROOT_FINAL"); final != "" { root = final } diff --git a/src/cmd/link/internal/ld/pe.go b/src/cmd/link/internal/ld/pe.go index 3ed8943828..729b6b2443 100644 --- a/src/cmd/link/internal/ld/pe.go +++ b/src/cmd/link/internal/ld/pe.go @@ -15,6 +15,7 @@ import ( "debug/pe" "encoding/binary" "fmt" + "internal/buildcfg" "sort" "strconv" "strings" @@ -481,9 +482,9 @@ func (f *peFile) addInitArray(ctxt *Link) *peSection { // that this will need to grow in the future. var size int var alignment uint32 - switch objabi.GOARCH { + switch buildcfg.GOARCH { default: - Exitf("peFile.addInitArray: unsupported GOARCH=%q\n", objabi.GOARCH) + Exitf("peFile.addInitArray: unsupported GOARCH=%q\n", buildcfg.GOARCH) case "386", "arm": size = 4 alignment = IMAGE_SCN_ALIGN_4BYTES @@ -499,7 +500,7 @@ func (f *peFile) addInitArray(ctxt *Link) *peSection { init_entry := ctxt.loader.Lookup(*flagEntrySymbol, 0) addr := uint64(ctxt.loader.SymValue(init_entry)) - ctxt.loader.SymSect(init_entry).Vaddr - switch objabi.GOARCH { + switch buildcfg.GOARCH { case "386", "arm": ctxt.Out.Write32(uint32(addr)) case "amd64", "arm64": @@ -610,9 +611,9 @@ dwarfLoop: dottext := ldr.Lookup(".text", 0) ctxt.Out.Write32(0) ctxt.Out.Write32(uint32(ldr.SymDynid(dottext))) - switch objabi.GOARCH { + switch buildcfg.GOARCH { default: - ctxt.Errorf(dottext, "unknown architecture for PE: %q\n", objabi.GOARCH) + ctxt.Errorf(dottext, "unknown architecture for PE: %q\n", buildcfg.GOARCH) case "386": ctxt.Out.Write16(IMAGE_REL_I386_DIR32) case "amd64": diff --git a/src/cmd/link/internal/ld/sym.go b/src/cmd/link/internal/ld/sym.go index 75489720cc..72639962e2 100644 --- a/src/cmd/link/internal/ld/sym.go +++ b/src/cmd/link/internal/ld/sym.go @@ -36,6 +36,7 @@ import ( "cmd/internal/sys" "cmd/link/internal/loader" "cmd/link/internal/sym" + "internal/buildcfg" "log" "runtime" ) @@ -53,8 +54,8 @@ func linknew(arch *sys.Arch) *Link { generatorSyms: make(map[loader.Sym]generatorFunc), } - if objabi.GOARCH != arch.Name { - log.Fatalf("invalid objabi.GOARCH %s (want %s)", objabi.GOARCH, arch.Name) + if buildcfg.GOARCH != arch.Name { + log.Fatalf("invalid buildcfg.GOARCH %s (want %s)", buildcfg.GOARCH, arch.Name) } AtExit(func() { diff --git a/src/cmd/link/internal/ld/symtab.go b/src/cmd/link/internal/ld/symtab.go index dcb9d7eb48..013f7b55b6 100644 --- a/src/cmd/link/internal/ld/symtab.go +++ b/src/cmd/link/internal/ld/symtab.go @@ -37,6 +37,7 @@ import ( "cmd/link/internal/sym" "debug/elf" "fmt" + "internal/buildcfg" "path/filepath" "strings" ) @@ -844,7 +845,7 @@ func mangleABIName(ldr *loader.Loader, x loader.Sym, name string) string { // TODO: avoid the ldr.Lookup calls below by instead using an aux // sym or marker relocation to associate the wrapper with the // wrapped function. - if !objabi.Experiment.RegabiWrappers { + if !buildcfg.Experiment.RegabiWrappers { return name } diff --git a/src/cmd/link/internal/mips/obj.go b/src/cmd/link/internal/mips/obj.go index f20597c0f5..5ca7582529 100644 --- a/src/cmd/link/internal/mips/obj.go +++ b/src/cmd/link/internal/mips/obj.go @@ -34,11 +34,12 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" + "internal/buildcfg" ) func Init() (*sys.Arch, ld.Arch) { arch := sys.ArchMIPS - if objabi.GOARCH == "mipsle" { + if buildcfg.GOARCH == "mipsle" { arch = sys.ArchMIPSLE } diff --git a/src/cmd/link/internal/mips64/obj.go b/src/cmd/link/internal/mips64/obj.go index 01d89a209c..544e1ef7be 100644 --- a/src/cmd/link/internal/mips64/obj.go +++ b/src/cmd/link/internal/mips64/obj.go @@ -34,11 +34,12 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" + "internal/buildcfg" ) func Init() (*sys.Arch, ld.Arch) { arch := sys.ArchMIPS64 - if objabi.GOARCH == "mips64le" { + if buildcfg.GOARCH == "mips64le" { arch = sys.ArchMIPS64LE } diff --git a/src/cmd/link/internal/ppc64/obj.go b/src/cmd/link/internal/ppc64/obj.go index ef4393f489..54d4606487 100644 --- a/src/cmd/link/internal/ppc64/obj.go +++ b/src/cmd/link/internal/ppc64/obj.go @@ -34,11 +34,12 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" + "internal/buildcfg" ) func Init() (*sys.Arch, ld.Arch) { arch := sys.ArchPPC64 - if objabi.GOARCH == "ppc64le" { + if buildcfg.GOARCH == "ppc64le" { arch = sys.ArchPPC64LE } diff --git a/src/cmd/link/internal/wasm/asm.go b/src/cmd/link/internal/wasm/asm.go index 31851fbb56..5bdfdbaee6 100644 --- a/src/cmd/link/internal/wasm/asm.go +++ b/src/cmd/link/internal/wasm/asm.go @@ -10,6 +10,7 @@ import ( "cmd/link/internal/ld" "cmd/link/internal/loader" "cmd/link/internal/sym" + "internal/buildcfg" "io" "regexp" ) @@ -506,15 +507,15 @@ func writeProducerSec(ctxt *ld.Link) { writeUleb128(ctxt.Out, 2) // number of fields - writeName(ctxt.Out, "language") // field name - writeUleb128(ctxt.Out, 1) // number of values - writeName(ctxt.Out, "Go") // value: name - writeName(ctxt.Out, objabi.Version) // value: version + writeName(ctxt.Out, "language") // field name + writeUleb128(ctxt.Out, 1) // number of values + writeName(ctxt.Out, "Go") // value: name + writeName(ctxt.Out, buildcfg.Version) // value: version writeName(ctxt.Out, "processed-by") // field name writeUleb128(ctxt.Out, 1) // number of values writeName(ctxt.Out, "Go cmd/compile") // value: name - writeName(ctxt.Out, objabi.Version) // value: version + writeName(ctxt.Out, buildcfg.Version) // value: version writeSecSize(ctxt, sizeOffset) } diff --git a/src/cmd/link/linkbig_test.go b/src/cmd/link/linkbig_test.go index 917bd9e8a3..9a4430c162 100644 --- a/src/cmd/link/linkbig_test.go +++ b/src/cmd/link/linkbig_test.go @@ -10,8 +10,8 @@ package main import ( "bytes" - "cmd/internal/objabi" "fmt" + "internal/buildcfg" "internal/testenv" "io/ioutil" "os/exec" @@ -19,8 +19,8 @@ import ( ) func TestLargeText(t *testing.T) { - if testing.Short() || (objabi.GOARCH != "ppc64le" && objabi.GOARCH != "ppc64" && objabi.GOARCH != "arm") { - t.Skipf("Skipping large text section test in short mode or on %s", objabi.GOARCH) + if testing.Short() || (buildcfg.GOARCH != "ppc64le" && buildcfg.GOARCH != "ppc64" && buildcfg.GOARCH != "arm") { + t.Skipf("Skipping large text section test in short mode or on %s", buildcfg.GOARCH) } testenv.MustHaveGoBuild(t) @@ -42,7 +42,7 @@ func TestLargeText(t *testing.T) { "ppc64le": "\tMOVD\tR0,R3\n", "arm": "\tMOVW\tR0,R1\n", } - inst := instOnArch[objabi.GOARCH] + inst := instOnArch[buildcfg.GOARCH] for j := 0; j < FN; j++ { testname := fmt.Sprintf("bigfn%d", j) fmt.Fprintf(&w, "TEXT ยท%s(SB),$0\n", testname) diff --git a/src/cmd/link/main.go b/src/cmd/link/main.go index 6b4ca9706d..d92478e61e 100644 --- a/src/cmd/link/main.go +++ b/src/cmd/link/main.go @@ -5,7 +5,6 @@ package main import ( - "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/amd64" "cmd/link/internal/arm" @@ -19,6 +18,7 @@ import ( "cmd/link/internal/wasm" "cmd/link/internal/x86" "fmt" + "internal/buildcfg" "os" ) @@ -40,9 +40,10 @@ func main() { var arch *sys.Arch var theArch ld.Arch - switch objabi.GOARCH { + buildcfg.Check() + switch buildcfg.GOARCH { default: - fmt.Fprintf(os.Stderr, "link: unknown architecture %q\n", objabi.GOARCH) + fmt.Fprintf(os.Stderr, "link: unknown architecture %q\n", buildcfg.GOARCH) os.Exit(2) case "386": arch, theArch = x86.Init() |
