cmd/link: rewrite (*BuildMode).Set to use platform.BuildModeSupported
Change-Id: I7aa2bb4560198a7d9d9e4321f60dec38f6834bdc
Reviewed-on: https://go-review.googlesource.com/c/go/+/463745
Reviewed-by: Than McIntosh <thanm@google.com>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
diff --git a/src/cmd/link/internal/ld/config.go b/src/cmd/link/internal/ld/config.go
index b1774f8..f2dfa1c 100644
--- a/src/cmd/link/internal/ld/config.go
+++ b/src/cmd/link/internal/ld/config.go
@@ -30,9 +30,6 @@
// Set implements flag.Value to set the build mode based on the argument
// to the -buildmode flag.
func (mode *BuildMode) Set(s string) error {
- badmode := func() error {
- return fmt.Errorf("buildmode %s not supported on %s/%s", s, buildcfg.GOOS, buildcfg.GOARCH)
- }
switch s {
default:
return fmt.Errorf("invalid buildmode: %q", s)
@@ -44,81 +41,21 @@
*mode = BuildModeExe
}
case "pie":
- switch buildcfg.GOOS {
- case "aix", "android", "linux", "windows", "darwin", "ios":
- case "freebsd":
- switch buildcfg.GOARCH {
- case "amd64":
- default:
- return badmode()
- }
- default:
- return badmode()
- }
*mode = BuildModePIE
case "c-archive":
- switch buildcfg.GOOS {
- case "aix", "darwin", "ios", "linux":
- case "freebsd":
- switch buildcfg.GOARCH {
- case "amd64":
- default:
- return badmode()
- }
- case "windows":
- switch buildcfg.GOARCH {
- case "amd64", "386", "arm", "arm64":
- default:
- return badmode()
- }
- default:
- return badmode()
- }
*mode = BuildModeCArchive
case "c-shared":
- switch buildcfg.GOARCH {
- case "386", "amd64", "arm", "arm64", "ppc64le", "riscv64", "s390x":
- default:
- return badmode()
- }
*mode = BuildModeCShared
case "shared":
- switch buildcfg.GOOS {
- case "linux":
- switch buildcfg.GOARCH {
- case "386", "amd64", "arm", "arm64", "ppc64le", "s390x":
- default:
- return badmode()
- }
- default:
- return badmode()
- }
*mode = BuildModeShared
case "plugin":
- switch buildcfg.GOOS {
- case "linux":
- switch buildcfg.GOARCH {
- case "386", "amd64", "arm", "arm64", "s390x", "ppc64le":
- default:
- return badmode()
- }
- case "darwin":
- switch buildcfg.GOARCH {
- case "amd64", "arm64":
- default:
- return badmode()
- }
- case "freebsd":
- switch buildcfg.GOARCH {
- case "amd64":
- default:
- return badmode()
- }
- default:
- return badmode()
- }
*mode = BuildModePlugin
}
+
+ if !platform.BuildModeSupported("gc", s, buildcfg.GOOS, buildcfg.GOARCH) {
+ return fmt.Errorf("buildmode %s not supported on %s/%s", s, buildcfg.GOOS, buildcfg.GOARCH)
+ }
+
return nil
}