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>
diff --git a/src/cmd/link/internal/ld/config.go b/src/cmd/link/internal/ld/config.go
index 0cb3cc2..d1e06239 100644
--- a/src/cmd/link/internal/ld/config.go
+++ b/src/cmd/link/internal/ld/config.go
@@ -35,11 +35,12 @@
 	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":