runtime: correct isAbortPC check in isgoexception

The expression passed into isAbortPC call was written specifically
for windows/amd64 and windows/386 runtime.abort implementation.
Adjust the code, so it also works for windows/arm.

Fixes #29050

Change-Id: I3dc8ddd08031f34115396429eff512827264826f
Reviewed-on: https://go-review.googlesource.com/c/152357
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/src/runtime/signal_windows.go b/src/runtime/signal_windows.go
index e6a75a16..3fc1ec5 100644
--- a/src/runtime/signal_windows.go
+++ b/src/runtime/signal_windows.go
@@ -38,6 +38,23 @@
 	}
 }
 
+// isAbort returns true, if context r describes exception raised
+// by calling runtime.abort function.
+//
+//go:nosplit
+func isAbort(r *context) bool {
+	switch GOARCH {
+	case "386", "amd64":
+		// In the case of an abort, the exception IP is one byte after
+		// the INT3 (this differs from UNIX OSes).
+		return isAbortPC(r.ip() - 1)
+	case "arm":
+		return isAbortPC(r.ip())
+	default:
+		return false
+	}
+}
+
 // isgoexception reports whether this exception should be translated
 // into a Go panic.
 //
@@ -53,9 +70,7 @@
 		return false
 	}
 
-	// In the case of an abort, the exception IP is one byte after
-	// the INT3 (this differs from UNIX OSes).
-	if isAbortPC(r.ip() - 1) {
+	if isAbort(r) {
 		// Never turn abort into a panic.
 		return false
 	}