From: Bill O'Farrell Date: Fri, 24 Feb 2017 22:03:06 +0000 (-0500) Subject: cmd/go: implement -buildmode=plugin for s390x X-Git-Tag: go1.9beta1~1428 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a6b480bc07e400cee109eda90caddb20c2cc7e82;p=gostls13.git cmd/go: implement -buildmode=plugin for s390x Simple change to allow plugins for linux on s390x Change-Id: I5c262ab81aac10d1dcb03381a48e5b9694b7a87a Reviewed-on: https://go-review.googlesource.com/37451 Run-TryBot: Michael Munday TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go index fd011e1193..ef884625a6 100644 --- a/src/cmd/dist/test.go +++ b/src/cmd/dist/test.go @@ -785,7 +785,7 @@ func (t *tester) supportedBuildmode(mode string) bool { // linux-arm64 is missing because it causes the external linker // to crash, see https://golang.org/issue/17138 switch pair { - case "linux-386", "linux-amd64", "linux-arm": + case "linux-386", "linux-amd64", "linux-arm", "linux-s390x": return true } return false diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go index e02b5f9025..060fbd419d 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -347,7 +347,7 @@ func BuildModeInit() { codegenArg = "-fPIC" } else { switch platform { - case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", + case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/s390x", "android/amd64", "android/arm", "android/arm64", "android/386": default: base.Fatalf("-buildmode=plugin not supported on %s\n", platform) diff --git a/src/cmd/link/internal/ld/config.go b/src/cmd/link/internal/ld/config.go index 2656c24317..fd9119bcaa 100644 --- a/src/cmd/link/internal/ld/config.go +++ b/src/cmd/link/internal/ld/config.go @@ -84,7 +84,7 @@ func (mode *BuildMode) Set(s string) error { switch obj.GOOS { case "linux": switch obj.GOARCH { - case "386", "amd64", "arm", "arm64": + case "386", "amd64", "arm", "arm64", "s390x": default: return badmode() } diff --git a/src/cmd/link/internal/s390x/asm.go b/src/cmd/link/internal/s390x/asm.go index 4a5f48c6f0..a9bb26145b 100644 --- a/src/cmd/link/internal/s390x/asm.go +++ b/src/cmd/link/internal/s390x/asm.go @@ -52,7 +52,7 @@ func gentext(ctxt *ld.Link) { return } addmoduledata := ctxt.Syms.Lookup("runtime.addmoduledata", 0) - if addmoduledata.Type == obj.STEXT { + if addmoduledata.Type == obj.STEXT && ld.Buildmode != ld.BuildmodePlugin { // we're linking a module containing the runtime -> no need for // an init function return @@ -89,7 +89,9 @@ func gentext(ctxt *ld.Link) { // undef (for debugging) ld.Adduint32(ctxt, initfunc, 0) - + if ld.Buildmode == ld.BuildmodePlugin { + ctxt.Textp = append(ctxt.Textp, addmoduledata) + } ctxt.Textp = append(ctxt.Textp, initfunc) initarray_entry := ctxt.Syms.Lookup("go.link.addmoduledatainit", 0) initarray_entry.Attr |= ld.AttrLocal