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:
parent
b98c1b22bd
commit
c7ea9969f8
@ -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":
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user