t.Skipf("skipping test because buildmode=pie is not supported on %s", platform)
}
t.Run("non-cgo", func(t *testing.T) {
- testBuildmodePIE(t, false)
+ testBuildmodePIE(t, false, true)
})
if canCgo {
switch runtime.GOOS {
case "darwin", "freebsd", "linux", "windows":
t.Run("cgo", func(t *testing.T) {
- testBuildmodePIE(t, true)
+ testBuildmodePIE(t, true, true)
})
}
}
}
-func testBuildmodePIE(t *testing.T, useCgo bool) {
+func TestWindowsDefaultBuildmodIsPIE(t *testing.T) {
+ if testing.Short() && testenv.Builder() == "" {
+ t.Skipf("skipping in -short mode on non-builder")
+ }
+
+ if runtime.GOOS != "windows" {
+ t.Skip("skipping windows only test")
+ }
+
+ t.Run("non-cgo", func(t *testing.T) {
+ testBuildmodePIE(t, false, false)
+ })
+ if canCgo {
+ t.Run("cgo", func(t *testing.T) {
+ testBuildmodePIE(t, true, false)
+ })
+ }
+}
+
+func testBuildmodePIE(t *testing.T, useCgo, setBuildmodeToPIE bool) {
tg := testgo(t)
defer tg.cleanup()
tg.parallel()
tg.tempFile("main.go", fmt.Sprintf(`package main;%s func main() { print("hello") }`, s))
src := tg.path("main.go")
obj := tg.path("main.exe")
- tg.run("build", "-buildmode=pie", "-o", obj, src)
+ args := []string{"build"}
+ if setBuildmodeToPIE {
+ args = append(args, "-buildmode=pie")
+ }
+ args = append(args, "-o", obj, src)
+ tg.run(args...)
switch runtime.GOOS {
case "linux", "android", "freebsd":
t.Skip("skipping on plan9; no DWARF symbol table in executables")
}
- if runtime.GOOS == "windows" && runtime.GOARCH == "arm" {
- t.Skip("skipping on windows/arm; test is incompatible with relocatable binaries")
+ if runtime.GOOS == "windows" {
+ t.Skip("skipping on windows; test is incompatible with relocatable binaries")
}
testRuntimeTypeAttr(t, "-ldflags=-linkmode=internal")
if runtime.GOARCH == "ppc64" {
t.Skip("-linkmode=external not supported on ppc64")
}
+
+ if runtime.GOOS == "windows" {
+ t.Skip("skipping on windows; test is incompatible with relocatable binaries")
+ }
+
testRuntimeTypeAttr(t, "-ldflags=-linkmode=external")
}