runtime: let stack copier update Panic structs for us

It already is updating parts of them; we're just getting lucky
retraversing them and not finding much to do.
Change argp to a pointer so that it will be updated too.
Existing tests break if you apply the change to adjustpanics
without also updating the type of argp.

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/139380043
This commit is contained in:
Russ Cox 2014-09-08 21:02:36 -04:00
parent c93f74d34b
commit 0f99a91bb5
3 changed files with 13 additions and 15 deletions

View file

@ -287,9 +287,9 @@ func gopanic(e interface{}) {
gp._defer = (*_defer)(noescape(unsafe.Pointer(&dabort)))
p._defer = d
p.argp = getargp(0)
p.argp = unsafe.Pointer(getargp(0))
reflectcall(unsafe.Pointer(d.fn), unsafe.Pointer(&d.args), uint32(d.siz), uint32(d.siz))
p.argp = 0
p.argp = nil
// reflectcall did not panic. Remove dabort.
if gp._defer != &dabort {
@ -362,7 +362,7 @@ func gorecover(argp uintptr) interface{} {
// If they match, the caller is the one who can recover.
gp := getg()
p := gp._panic
if p != nil && !p.recovered && argp == p.argp {
if p != nil && !p.recovered && argp == uintptr(p.argp) {
p.recovered = true
return p.arg
}