From: Alex Brainman Date: Tue, 4 Dec 2018 01:05:11 +0000 (+1100) Subject: runtime: correct isAbortPC check in isgoexception X-Git-Tag: go1.12beta1~168 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9be01c2eab928f9899c67eb7bcdb164728f85a2c;p=gostls13.git 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 --- diff --git a/src/runtime/signal_windows.go b/src/runtime/signal_windows.go index e6a75a160f..3fc1ec5886 100644 --- a/src/runtime/signal_windows.go +++ b/src/runtime/signal_windows.go @@ -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 }