1
0
mirror of https://github.com/golang/go synced 2024-11-23 06:20:07 -07:00

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>
This commit is contained in:
Alex Brainman 2018-12-04 12:05:11 +11:00
parent a7af474359
commit 9be01c2eab

View 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
}