return true
}
return false
+ case "pie":
+ switch pair {
+ case "linux-386", "linux-amd64", "linux-arm", "linux-arm64", "linux-ppc64le", "linux-s390x",
+ "android-amd64", "android-arm", "android-arm64", "android-386":
+ return true
+ case "darwin-amd64":
+ return true
+ }
+ return false
+
default:
log.Fatalf("internal error: unknown buildmode %s", mode)
return false
// static linking on FreeBSD/ARM with clang. (cgo depends on
// -fPIC fundamentally.)
default:
- cmd := t.dirCmd("misc/cgo/test",
- defaultcc, "-xc", "-o", "/dev/null", "-static", "-")
- cmd.Stdin = strings.NewReader("int main() {}")
- if err := cmd.Run(); err != nil {
- fmt.Println("No support for static linking found (lacks libc.a?), skip cgo static linking test.")
- } else {
- if goos != "android" {
- t.addCmd(dt, "misc/cgo/testtls", "go", "test", "-ldflags", `-linkmode=external -extldflags "-static -pthread"`)
- }
- t.addCmd(dt, "misc/cgo/nocgo", "go", "test")
- t.addCmd(dt, "misc/cgo/nocgo", "go", "test", "-ldflags", `-linkmode=external`)
- if goos != "android" {
- t.addCmd(dt, "misc/cgo/nocgo", "go", "test", "-ldflags", `-linkmode=external -extldflags "-static -pthread"`)
- }
- }
-
- if pair != "freebsd-amd64" { // clang -pie fails to link misc/cgo/test
- cmd := t.dirCmd("misc/cgo/test",
- defaultcc, "-xc", "-o", "/dev/null", "-pie", "-")
- cmd.Stdin = strings.NewReader("int main() {}")
- if err := cmd.Run(); err != nil {
- fmt.Println("No support for -pie found, skip cgo PIE test.")
- } else {
- t.addCmd(dt, "misc/cgo/test", "go", "test", "-ldflags", `-linkmode=external -extldflags "-pie"`)
- t.addCmd(dt, "misc/cgo/testtls", "go", "test", "-ldflags", `-linkmode=external -extldflags "-pie"`)
- t.addCmd(dt, "misc/cgo/nocgo", "go", "test", "-ldflags", `-linkmode=external -extldflags "-pie"`)
- }
+ if t.supportedBuildmode("pie") {
+ t.addCmd(dt, "misc/cgo/test", "go", "test", "-buildmode=pie")
+ t.addCmd(dt, "misc/cgo/testtls", "go", "test", "-buildmode=pie")
+ t.addCmd(dt, "misc/cgo/nocgo", "go", "test", "-buildmode=pie")
}
}
}