// 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
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)
switch obj.GOOS {
case "linux":
switch obj.GOARCH {
- case "386", "amd64", "arm", "arm64":
+ case "386", "amd64", "arm", "arm64", "s390x":
default:
return badmode()
}
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
// 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