From aac0d52d97351e0b2acaf5bb9b106eafc9e087cb Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 5 Oct 2017 14:02:54 -0400 Subject: [PATCH] cmd/go: stop treating GOROOT binaries specially This was for cmd/cgo, and cmd/cgo isn't special anymore. Change-Id: I71efaf553b24798b523c7102859428d36b470698 Reviewed-on: https://go-review.googlesource.com/68530 Run-TryBot: Russ Cox TryBot-Result: Gobot Gobot Reviewed-by: David Crawshaw --- src/cmd/go/internal/cfg/cfg.go | 8 +------ src/cmd/go/internal/load/pkg.go | 11 +--------- src/cmd/go/internal/work/build.go | 35 ------------------------------- 3 files changed, 2 insertions(+), 52 deletions(-) diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go index 0d8e264eb7..d45043e6dc 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -131,7 +131,7 @@ func isGOROOT(path string) bool { // ExternalLinkingForced reports whether external linking is being // forced even for programs that do not use cgo. -func ExternalLinkingForced(inGoroot bool) bool { +func ExternalLinkingForced() bool { // Some targets must use external linking even inside GOROOT. switch BuildContext.GOOS { case "android": @@ -143,12 +143,6 @@ func ExternalLinkingForced(inGoroot bool) bool { } } - // Otherwise we disable forcing of external linking for GOROOT binaries. - // This is primarily for cgo, so we will be able to relax this soon. - if inGoroot { - return false - } - if !BuildContext.CgoEnabled { return false } diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go index b902e29c50..526e5a6767 100644 --- a/src/cmd/go/internal/load/pkg.go +++ b/src/cmd/go/internal/load/pkg.go @@ -1124,16 +1124,7 @@ func LinkerDeps(p *Package) []string { var deps []string // External linking mode forces an import of runtime/cgo. - // TODO(rsc): The GOROOT exception here is mainly to avoid a circular - // dependency when building cmd/cgo, which the build of - // runtime/cgo needs, but as of CL 68338 we now build - // cmd/cgo during cmd/dist, so that exception is no longer - // needed. At some point it may be worthwhile to remove the - // GOROOT exception here. - // Note that the condition here should also match the condition - // in ../work/build.go's gcToolchain.ld that controls disabling - // external linking during the link step. - if cfg.ExternalLinkingForced(p.Goroot) { + if cfg.ExternalLinkingForced() { deps = append(deps, "runtime/cgo") } // On ARM with GOARM=5, it forces an import of math, for soft floating point. diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go index d28be759dc..be24082f05 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -2541,20 +2541,6 @@ func (gcToolchain) ld(b *Builder, root *Action, out, importcfg string, allaction ldflags = append(ldflags, "-buildid="+root.Package.Internal.BuildID) } ldflags = append(ldflags, cfg.BuildLdflags...) - if root.Package.Goroot { - // Cannot force -linkmode=external inside GOROOT. - // cmd/cgo cannot be linkmode=external, - // because that implies having runtime/cgo available, - // and runtime/cgo is built using cmd/cgo. - // It's possible the restriction can be limited to just cmd/cgo, - // but the whole-GOROOT prohibition matches the similar - // logic in ../load/pkg.go that decides whether to add an - // implicit runtime/cgo dependency. - // TODO(rsc): We may be able to remove this exception - // now that CL 68338 has made cmd/cgo not a special case. - // See the longer comment in ../load/pkg.go. - ldflags = removeLinkmodeExternal(ldflags) - } ldflags = setextld(ldflags, compiler) // On OS X when using external linking to build a shared library, @@ -2572,27 +2558,6 @@ func (gcToolchain) ld(b *Builder, root *Action, out, importcfg string, allaction return b.run(dir, root.Package.ImportPath, nil, cfg.BuildToolexec, base.Tool("link"), "-o", out, "-importcfg", importcfg, ldflags, mainpkg) } -// removeLinkmodeExternal removes any attempt to set linkmode=external -// from ldflags, modifies ldflags in place, and returns ldflags. -func removeLinkmodeExternal(ldflags []string) []string { - out := ldflags[:0] - for i := 0; i < len(ldflags); i++ { - flag := ldflags[i] - if strings.HasPrefix(flag, "--") { - flag = flag[1:] - } - if flag == "-linkmode" && i+1 < len(ldflags) && ldflags[i+1] == "external" { - i++ - continue - } - if flag == "-linkmode=external" { - continue - } - out = append(out, flag) - } - return out -} - func (gcToolchain) ldShared(b *Builder, toplevelactions []*Action, out, importcfg string, allactions []*Action) error { ldflags := []string{"-installsuffix", cfg.BuildContext.InstallSuffix} ldflags = append(ldflags, "-buildmode=shared") -- 2.48.1