Ian Lance Taylor uploaded cmd/go: -ldflags=-linkmode=external requires runtime/cgo for review.
cmd/go: -ldflags=-linkmode=external requires runtime/cgo We add runtime/cgo to the list of import paths for various cases that imply external linking mode, but before this change we did not add for an explicit request of external linking mode. This fixes the case where you are using a non-default buildmode that implies a different compilation option (for example, -buildmode=pie implies -shared) and the runtime/cgo package for that option is stale. No test, as I'm not sure how to write one. It would require forcing a stale runtime/cgo. Change-Id: Id0409c7274ce67fe15d910baf587d3220cb53d83 --- M src/cmd/go/pkg.go 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/cmd/go/pkg.go b/src/cmd/go/pkg.go
index 079412c..0c251dd 100644
--- a/src/cmd/go/pkg.go
+++ b/src/cmd/go/pkg.go
@@ -914,10 +914,19 @@
}
// Currently build modes c-shared, pie, plugin, and -linkshared force
- // external linking mode, and external linking mode forces an
- // import of runtime/cgo.
+ // external linking mode, as of course does -ldflags=-linkmode=external,
+ // and external linking mode forces an import of runtime/cgo.
pieCgo := buildBuildmode == "pie" && (buildContext.GOOS != "linux" || buildContext.GOARCH != "amd64")
- if p.Name == "main" && !p.Goroot && (buildBuildmode == "c-shared" || buildBuildmode == "plugin" || pieCgo || buildLinkshared) {
+ linkmodeExternal := false
+ for i, a := range buildLdflags {
+ if a == "-linkmode=external" {
+ linkmodeExternal = true
+ }
+ if a == "-linkmode" && i+1 < len(buildLdflags) && buildLdflags[i+1] == "external" {
+ linkmodeExternal = true
+ }
+ }
+ if p.Name == "main" && !p.Goroot && (buildBuildmode == "c-shared" || buildBuildmode == "plugin" || pieCgo || buildLinkshared || linkmodeExternal) {
importPaths = append(importPaths, "runtime/cgo")
}
To view, visit this change. To unsubscribe, visit settings.
Gobot Gobot posted comments on cmd/go: -ldflags=-linkmode=external requires runtime/cgo.
To view, visit this change. To unsubscribe, visit settings.
Gobot Gobot posted comments on cmd/go: -ldflags=-linkmode=external requires runtime/cgo.
To view, visit this change. To unsubscribe, visit settings.
Michael Hudson-Doyle posted comments on cmd/go: -ldflags=-linkmode=external requires runtime/cgo.
I guess you could change this to "pie (except on linux/amd64)"? Or maybe change the comment to be less of a hostage to the future.
To view, visit this change. To unsubscribe, visit settings.
Ian Lance Taylor uploaded patch set #2 to cmd/go: -ldflags=-linkmode=external requires runtime/cgo.
cmd/go: -ldflags=-linkmode=external requires runtime/cgo We add runtime/cgo to the list of import paths for various cases that imply external linking mode, but before this change we did not add for an explicit request of external linking mode. This fixes the case where you are using a non-default buildmode that implies a different compilation option (for example, -buildmode=pie implies -shared) and the runtime/cgo package for that option is stale. No test, as I'm not sure how to write one. It would require forcing a stale runtime/cgo. Change-Id: Id0409c7274ce67fe15d910baf587d3220cb53d83 --- M src/cmd/go/pkg.go 1 file changed, 15 insertions(+), 4 deletions(-)
To view, visit this change. To unsubscribe, visit settings.
Ian Lance Taylor posted comments on cmd/go: -ldflags=-linkmode=external requires runtime/cgo.
Patch Set #1, Line 916: // Currently build modes c-shared, pie (on systems that do not
I guess you could change this to "pie (except on linux/amd64)"? Or maybe ch
Done
To view, visit this change. To unsubscribe, visit settings.
Ian Lance Taylor merged cmd/go: -ldflags=-linkmode=external requires runtime/cgo.
cmd/go: -ldflags=-linkmode=external requires runtime/cgo We add runtime/cgo to the list of import paths for various cases that imply external linking mode, but before this change we did not add for an explicit request of external linking mode. This fixes the case where you are using a non-default buildmode that implies a different compilation option (for example, -buildmode=pie implies -shared) and the runtime/cgo package for that option is stale. No test, as I'm not sure how to write one. It would require forcing a stale runtime/cgo. Change-Id: Id0409c7274ce67fe15d910baf587d3220cb53d83 Reviewed-on: https://go-review.googlesource.com/33070 Reviewed-by: Michael Hudson-Doyle <michael...@canonical.com> --- M src/cmd/go/pkg.go 1 file changed, 15 insertions(+), 4 deletions(-)
Approvals: Michael Hudson-Doyle: Looks good to me, approved
diff --git a/src/cmd/go/pkg.go b/src/cmd/go/pkg.go
index 079412c..23d3114 100644
--- a/src/cmd/go/pkg.go
+++ b/src/cmd/go/pkg.go
@@ -913,11 +913,22 @@
importPaths = append(importPaths, "syscall")
}
- // Currently build modes c-shared, pie, plugin, and -linkshared force
- // external linking mode, and external linking mode forces an
- // import of runtime/cgo.
+ // Currently build modes c-shared, pie (on systems that do not
+ // support PIE with internal linking mode), plugin, and
+ // -linkshared force external linking mode, as of course does
+ // -ldflags=-linkmode=external. External linking mode forces
+ // an import of runtime/cgo.
pieCgo := buildBuildmode == "pie" && (buildContext.GOOS != "linux" || buildContext.GOARCH != "amd64")
- if p.Name == "main" && !p.Goroot && (buildBuildmode == "c-shared" || buildBuildmode == "plugin" || pieCgo || buildLinkshared) {
+ linkmodeExternal := false
+ for i, a := range buildLdflags {
+ if a == "-linkmode=external" {
+ linkmodeExternal = true
+ }
+ if a == "-linkmode" && i+1 < len(buildLdflags) && buildLdflags[i+1] == "external" {
+ linkmodeExternal = true
+ }
+ }
+ if p.Name == "main" && !p.Goroot && (buildBuildmode == "c-shared" || buildBuildmode == "plugin" || pieCgo || buildLinkshared || linkmodeExternal) {
importPaths = append(importPaths, "runtime/cgo")
}
To view, visit this change. To unsubscribe, visit settings.
Brad Fitzpatrick posted comments on cmd/go: -ldflags=-linkmode=external requires runtime/cgo.
To view, visit this change. To unsubscribe, visit settings.
Ian Lance Taylor posted comments on cmd/go: -ldflags=-linkmode=external requires runtime/cgo.
To view, visit this change. To unsubscribe, visit settings.