cmd/go: allow buildmode c-archive for gccgo on ppc64

In buildmodeinit, the c-archive buildmode is flagged as invalid
    on linux/ppc64 for gccgo when it should be valid. This happens
    because the check against the gccgo flag is done after the checks
    for valid GOOS/GOARCH pairs instead of before as is done for all
    other buildmode cases in this switch. This corrects the problem and
    allows several of the gccgo gotools testcases to pass on linux/ppc64.
    
    Updates #29046
    
    Reviewed-on: https://go-review.googlesource.com/c/152137

From-SVN: r266764
This commit is contained in:
Ian Lance Taylor 2018-12-03 20:25:11 +00:00
parent d89057777e
commit ab25c42d05
2 changed files with 17 additions and 16 deletions

View file

@ -1,4 +1,4 @@
a8f768d68760768da5e86a8e63ef1ad5691c3ae8
9e016dfe198152f870005ac844fe22c02e5349e3
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View file

@ -85,23 +85,24 @@ func buildModeInit() {
pkgsFilter = pkgsNotMain
case "c-archive":
pkgsFilter = oneMainPkg
switch platform {
case "darwin/arm", "darwin/arm64":
codegenArg = "-shared"
default:
switch cfg.Goos {
case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris":
if platform == "linux/ppc64" {
base.Fatalf("-buildmode=c-archive not supported on %s\n", platform)
}
// Use -shared so that the result is
// suitable for inclusion in a PIE or
// shared library.
codegenArg = "-shared"
}
}
if gccgo {
codegenArg = "-fPIC"
} else {
switch platform {
case "darwin/arm", "darwin/arm64":
codegenArg = "-shared"
default:
switch cfg.Goos {
case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris":
if platform == "linux/ppc64" {
base.Fatalf("-buildmode=c-archive not supported on %s\n", platform)
}
// Use -shared so that the result is
// suitable for inclusion in a PIE or
// shared library.
codegenArg = "-shared"
}
}
}
cfg.ExeSuffix = ".a"
ldBuildmode = "c-archive"