mirror of
https://github.com/golang/go
synced 2024-11-11 19:51:37 -07:00
cmd/link: mark windows/arm as all PIE
If the linker thinks that it's in exe mode instead of pie mode, it won't emit relocations when generating the pcln table, and we wind up with crashes like this on windows/arm, where all binaries are in fact relocated: Building Go toolchain2 using go_bootstrap and Go toolchain1. fatal error: minpc or maxpc invalid runtime: panic before malloc heap initialized This problem was already solved by darwin/arm64, so solve it the same way here for windows/arm. Fixes CL 228478. Fixes #42786. Change-Id: I6d1db6907c131183649fc263ccca06783188f344 Reviewed-on: https://go-review.googlesource.com/c/go/+/273566 Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Trust: Alex Brainman <alex.brainman@gmail.com> Trust: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
0252cfd84d
commit
cb84d831c9
@ -35,11 +35,12 @@ func (mode *BuildMode) Set(s string) error {
|
||||
default:
|
||||
return fmt.Errorf("invalid buildmode: %q", s)
|
||||
case "exe":
|
||||
if objabi.GOOS == "darwin" && objabi.GOARCH == "arm64" {
|
||||
*mode = BuildModePIE // On darwin/arm64 everything is PIE.
|
||||
break
|
||||
switch objabi.GOOS + "/" + objabi.GOARCH {
|
||||
case "darwin/arm64", "windows/arm": // On these platforms, everything is PIE
|
||||
*mode = BuildModePIE
|
||||
default:
|
||||
*mode = BuildModeExe
|
||||
}
|
||||
*mode = BuildModeExe
|
||||
case "pie":
|
||||
switch objabi.GOOS {
|
||||
case "aix", "android", "linux", "windows", "darwin", "ios":
|
||||
|
Loading…
Reference in New Issue
Block a user