aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2021-04-15 23:05:49 -0400
committerRuss Cox <rsc@golang.org>2021-04-16 19:20:53 +0000
commit95ed5c3800a87ddf9b0ec3958eaaa1a969306293 (patch)
treecb0c555f10ab706a5c491cbe48dd36da16658a1e /src/cmd/link
parent2fc0ebb623e2859094ad3f41e61325df0c2163f8 (diff)
downloadgo-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.go4
-rw-r--r--src/cmd/link/internal/ld/config.go50
-rw-r--r--src/cmd/link/internal/ld/data_test.go7
-rw-r--r--src/cmd/link/internal/ld/deadcode.go5
-rw-r--r--src/cmd/link/internal/ld/dwarf.go3
-rw-r--r--src/cmd/link/internal/ld/elf.go11
-rw-r--r--src/cmd/link/internal/ld/lib.go43
-rw-r--r--src/cmd/link/internal/ld/macho.go5
-rw-r--r--src/cmd/link/internal/ld/main.go11
-rw-r--r--src/cmd/link/internal/ld/pcln.go3
-rw-r--r--src/cmd/link/internal/ld/pe.go11
-rw-r--r--src/cmd/link/internal/ld/sym.go5
-rw-r--r--src/cmd/link/internal/ld/symtab.go3
-rw-r--r--src/cmd/link/internal/mips/obj.go3
-rw-r--r--src/cmd/link/internal/mips64/obj.go3
-rw-r--r--src/cmd/link/internal/ppc64/obj.go3
-rw-r--r--src/cmd/link/internal/wasm/asm.go11
-rw-r--r--src/cmd/link/linkbig_test.go8
-rw-r--r--src/cmd/link/main.go7
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()