Skip to content

Commit

Permalink
cmd/link: mark windows/arm as all PIE
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Alex Brainman <[email protected]>
Trust: Alex Brainman <[email protected]>
Trust: Jason A. Donenfeld <[email protected]>
  • Loading branch information
zx2c4 committed Nov 27, 2020
1 parent 0252cfd commit cb84d83
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions src/cmd/link/internal/ld/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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":
Expand Down

0 comments on commit cb84d83

Please sign in to comment.