]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: mark windows/arm as all PIE
authorJason A. Donenfeld <Jason@zx2c4.com>
Thu, 26 Nov 2020 21:38:45 +0000 (22:38 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 27 Nov 2020 23:29:38 +0000 (23:29 +0000)
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>

src/cmd/link/internal/ld/config.go

index 0cb3cc25c06408b96ee3acbddda80e11553623e7..d1e06239a566f656ed67e69597b99bd4c790122e 100644 (file)
@@ -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":