From: Jason A. Donenfeld Date: Thu, 25 Feb 2021 00:29:58 +0000 (+0100) Subject: runtime: subtract one from ip when determining abort X-Git-Tag: go1.17beta1~1378 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ff614b13d9;p=gostls13.git runtime: subtract one from ip when determining abort On windows/arm, the abort is given from one byte off of the function address, perhaps because Windows wants to simulate x86/amd64 modes, or because it's jumping from thumb mode. This is not the case with windows/arm64, though. This prevents a failure in the builders with the TestAbort test: crash_test.go:727: output contains BAD: panic: runtime error: invalid memory address or nil pointer dereference [recovered] panic: BAD: recovered from abort [signal 0xc0000005 code=0x0 addr=0x0 pc=0x6a5721] Change-Id: I8939c60611863cc0c325e179a772601acea9fd4a Reviewed-on: https://go-review.googlesource.com/c/go/+/296153 Trust: Jason A. Donenfeld Run-TryBot: Jason A. Donenfeld TryBot-Result: Go Bot Reviewed-by: Cherry Zhang --- diff --git a/src/runtime/signal_windows.go b/src/runtime/signal_windows.go index 6215d0ba2d..63158f0bc4 100644 --- a/src/runtime/signal_windows.go +++ b/src/runtime/signal_windows.go @@ -45,9 +45,10 @@ func initExceptionHandler() { //go:nosplit func isAbort(r *context) bool { pc := r.ip() - if GOARCH == "386" || GOARCH == "amd64" { + if GOARCH == "386" || GOARCH == "amd64" || GOARCH == "arm" { // In the case of an abort, the exception IP is one byte after - // the INT3 (this differs from UNIX OSes). + // the INT3 (this differs from UNIX OSes). Note that on ARM, + // this means that the exception IP is no longer aligned. pc-- } return isAbortPC(pc)