]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: correct isAbortPC check in isgoexception
authorAlex Brainman <alex.brainman@gmail.com>
Tue, 4 Dec 2018 01:05:11 +0000 (12:05 +1100)
committerAlex Brainman <alex.brainman@gmail.com>
Wed, 5 Dec 2018 02:56:47 +0000 (02:56 +0000)
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>
src/runtime/signal_windows.go

index e6a75a160f2a52552741a8e7dc9e4ab71a36a673..3fc1ec5886d8c12e67e82acb6bbb0d0508ff7f98 100644 (file)
@@ -38,6 +38,23 @@ func initExceptionHandler() {
        }
 }
 
+// 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 @@ func isgoexception(info *exceptionrecord, r *context) bool {
                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
        }