Commit aac0d52d authored by Russ Cox's avatar Russ Cox

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 <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
parent 97d17fcf
...@@ -131,7 +131,7 @@ func isGOROOT(path string) bool { ...@@ -131,7 +131,7 @@ func isGOROOT(path string) bool {
// ExternalLinkingForced reports whether external linking is being // ExternalLinkingForced reports whether external linking is being
// forced even for programs that do not use cgo. // 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. // Some targets must use external linking even inside GOROOT.
switch BuildContext.GOOS { switch BuildContext.GOOS {
case "android": case "android":
...@@ -143,12 +143,6 @@ func ExternalLinkingForced(inGoroot bool) bool { ...@@ -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 { if !BuildContext.CgoEnabled {
return false return false
} }
......
...@@ -1124,16 +1124,7 @@ func LinkerDeps(p *Package) []string { ...@@ -1124,16 +1124,7 @@ func LinkerDeps(p *Package) []string {
var deps []string var deps []string
// External linking mode forces an import of runtime/cgo. // External linking mode forces an import of runtime/cgo.
// TODO(rsc): The GOROOT exception here is mainly to avoid a circular if cfg.ExternalLinkingForced() {
// 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) {
deps = append(deps, "runtime/cgo") deps = append(deps, "runtime/cgo")
} }
// On ARM with GOARM=5, it forces an import of math, for soft floating point. // On ARM with GOARM=5, it forces an import of math, for soft floating point.
......
...@@ -2541,20 +2541,6 @@ func (gcToolchain) ld(b *Builder, root *Action, out, importcfg string, allaction ...@@ -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, "-buildid="+root.Package.Internal.BuildID)
} }
ldflags = append(ldflags, cfg.BuildLdflags...) 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) ldflags = setextld(ldflags, compiler)
// On OS X when using external linking to build a shared library, // 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 ...@@ -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) 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 { func (gcToolchain) ldShared(b *Builder, toplevelactions []*Action, out, importcfg string, allactions []*Action) error {
ldflags := []string{"-installsuffix", cfg.BuildContext.InstallSuffix} ldflags := []string{"-installsuffix", cfg.BuildContext.InstallSuffix}
ldflags = append(ldflags, "-buildmode=shared") ldflags = append(ldflags, "-buildmode=shared")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment