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:
parent
a7af474359
commit
9be01c2eab
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user