mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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 <Jason@zx2c4.com>
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
dbbc5ec7e8
commit
ff614b13d9
1 changed files with 3 additions and 2 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue