1
0
mirror of https://github.com/golang/go synced 2024-11-17 08:14:48 -07:00

internal/platform: pass race mode to DefaultPIE

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>
This commit is contained in:
Ian Lance Taylor 2023-03-20 14:08:59 -07:00 committed by Gopher Robot
parent b98c1b22bd
commit c7ea9969f8
4 changed files with 15 additions and 13 deletions

View 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":

View 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 {

View 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
}

View 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"
}