diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go index e0bd3cdcc2..2e15247d6e 100644 --- a/src/cmd/dist/test.go +++ b/src/cmd/dist/test.go @@ -616,7 +616,9 @@ func (t *tester) supportedBuildmode(mode string) bool { return false case "c-shared": switch pair { - case "linux-386", "linux-amd64", "darwin-amd64", "android-arm", "linux-arm", "linux-arm64": + case "linux-386", "linux-amd64", "linux-arm", "linux-arm64", + "darwin-amd64", + "android-arm", "android-386": return true } return false diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go index 11ad561c46..57ca28dd08 100644 --- a/src/cmd/go/build.go +++ b/src/cmd/go/build.go @@ -351,7 +351,7 @@ func buildModeInit() { } else { switch platform { case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", - "android/amd64", "android/arm": + "android/amd64", "android/arm", "android/386": codegenArg = "-shared" case "darwin/amd64": default: diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 40c784851a..acbb2ac883 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -325,7 +325,14 @@ func (mode *BuildMode) Set(s string) error { } *mode = BuildmodeCShared case "shared": - if goos != "linux" || (goarch != "386" && goarch != "amd64" && goarch != "arm" && goarch != "arm64" && goarch != "ppc64le") { + switch goos { + case "linux": + switch goarch { + case "386", "amd64", "arm", "arm64", "ppc64le": + default: + return badmode() + } + default: return badmode() } *mode = BuildmodeShared