diff options
author | Jordan Rhee <jordanrh@microsoft.com> | 2018-11-21 14:04:29 -0800 |
---|---|---|
committer | Austin Clements <austin@google.com> | 2018-11-26 19:24:54 +0000 |
commit | 9ab2ffe8e92f9660cbde1a18921ae864c64f280b (patch) | |
tree | 9a2ea5369f179ed20deb01c77689abe12da692d4 /src/runtime/defs_windows_386.go | |
parent | 9fe9853ae5641eda4cfa58015bd0bcedb99c12cb (diff) | |
download | go-9ab2ffe8e92f9660cbde1a18921ae864c64f280b.tar.gz go-9ab2ffe8e92f9660cbde1a18921ae864c64f280b.zip |
runtime: windows/arm fix tracebacks printed from sigpanic
The exception handler modifies the stack and continuation context so
it looks like the faulting code calls sigpanic() directly. The call was
not set up correctly on ARM, because it did not handle the link register
correctly. This change handles the link register correctly for ARM.
Updates #28854
Change-Id: I7ccf838adfc05cd968a5edd7d19ebba6a2478360
Reviewed-on: https://go-review.googlesource.com/c/150957
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/defs_windows_386.go')
-rw-r--r-- | src/runtime/defs_windows_386.go | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/runtime/defs_windows_386.go b/src/runtime/defs_windows_386.go index 38b30b70e3..8c0d6d8b98 100644 --- a/src/runtime/defs_windows_386.go +++ b/src/runtime/defs_windows_386.go @@ -105,10 +105,11 @@ func (c *context) ip() uintptr { return uintptr(c.eip) } func (c *context) sp() uintptr { return uintptr(c.esp) } // 386 does not have link register, so this returns 0. -func (c *context) lr() uintptr { return 0 } +func (c *context) lr() uintptr { return 0 } +func (c *context) set_lr(x uintptr) {} -func (c *context) setip(x uintptr) { c.eip = uint32(x) } -func (c *context) setsp(x uintptr) { c.esp = uint32(x) } +func (c *context) set_ip(x uintptr) { c.eip = uint32(x) } +func (c *context) set_sp(x uintptr) { c.esp = uint32(x) } func dumpregs(r *context) { print("eax ", hex(r.eax), "\n") |