]> Cypherpunks repositories - gostls13.git/commitdiff
internal/platform: pass race mode to DefaultPIE
authorIan Lance Taylor <iant@golang.org>
Mon, 20 Mar 2023 21:08:59 +0000 (14:08 -0700)
committerGopher Robot <gobot@golang.org>
Mon, 20 Mar 2023 23:32:34 +0000 (23:32 +0000)
On Windows we default to PIE, except in race mode.
Pass isRace to platform.DefaultPIE to centralize that decision.
This is in preparation for adding another call to DefaultPIE.

Change-Id: I91b75d307e7d4d260246a934f98734ddcbca372a
Reviewed-on: https://go-review.googlesource.com/c/go/+/477916
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@golang.org>

src/cmd/go/internal/work/init.go
src/cmd/link/internal/ld/dwarf_test.go
src/cmd/nm/nm_test.go
src/internal/platform/supported.go

index 35ea2311c706c1c70547030e4e4d95e27f5bebd3..88a63282855abd93246af1b6c037c953972452c0 100644 (file)
@@ -230,14 +230,10 @@ func buildModeInit() {
                ldBuildmode = "c-shared"
        case "default":
                ldBuildmode = "exe"
-               if platform.DefaultPIE(cfg.Goos, cfg.Goarch) {
-                       if cfg.Goos == "windows" && cfg.BuildRace {
-                               // PIE is not supported with -race on windows; see https://go.dev/cl/416174.
-                       } else {
-                               ldBuildmode = "pie"
-                               if cfg.Goos != "windows" && !gccgo {
-                                       codegenArg = "-shared"
-                               }
+               if platform.DefaultPIE(cfg.Goos, cfg.Goarch, cfg.BuildRace) {
+                       ldBuildmode = "pie"
+                       if cfg.Goos != "windows" && !gccgo {
+                               codegenArg = "-shared"
                        }
                }
        case "exe":
index 103ca5a4ab6641b40d16d3a08f8604340bc97eae..5e9b74f7d691fc72078f674cbe5cdbb95051b794 100644 (file)
@@ -976,7 +976,7 @@ func main() {
                t.Fatalf("*main.X DIE had no runtime type attr. DIE: %v", dies[0])
        }
 
-       if platform.DefaultPIE(runtime.GOOS, runtime.GOARCH) {
+       if platform.DefaultPIE(runtime.GOOS, runtime.GOARCH, false) {
                return // everything is PIE, addresses are relocated
        }
        if rtAttr.(uint64)+types.Addr != addr {
index 8c23d73d6daa2107caf70843ecd59b12ead970c7..530a720f2b9eb70fee4ca1b980d3bb6bf4366adc 100644 (file)
@@ -166,7 +166,7 @@ func testGoExec(t *testing.T, iscgo, isexternallinker bool) {
                                return true
                        }
                }
-               if platform.DefaultPIE(runtime.GOOS, runtime.GOARCH) {
+               if platform.DefaultPIE(runtime.GOOS, runtime.GOARCH, false) {
                        // Code is always relocated if the default buildmode is PIE.
                        return true
                }
index ea89ff19e37b4875687f53cb5b036b8430c30b28..896f0b5273764e36eb11cf5fe3ebe63025c1b96d 100644 (file)
@@ -219,13 +219,19 @@ func InternalLinkPIESupported(goos, goarch string) bool {
 }
 
 // DefaultPIE reports whether goos/goarch produces a PIE binary when using the
-// "default" buildmode.
-func DefaultPIE(goos, goarch string) bool {
+// "default" buildmode. On Windows this is affected by -race,
+// so force the caller to pass that in to centralize that choice.
+func DefaultPIE(goos, goarch string, isRace bool) bool {
        switch goos {
        case "android", "ios":
                return true
        case "windows":
-               return true // but switches back to "exe" if -race is enabled
+               if isRace {
+                       // PIE is not supported with -race on windows;
+                       // see https://go.dev/cl/416174.
+                       return false
+               }
+               return true
        case "darwin":
                return goarch == "arm64"
        }