diff options
Diffstat (limited to 'src/runtime/panic.go')
| -rw-r--r-- | src/runtime/panic.go | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/runtime/panic.go b/src/runtime/panic.go index 1e61c90aef..bf79b6518e 100644 --- a/src/runtime/panic.go +++ b/src/runtime/panic.go @@ -1142,18 +1142,21 @@ func gorecover(_ uintptr) any { nonWrapperFrames := 0 loop: for ; u.valid(); u.next() { - switch u.frame.fn.funcID { - case abi.FuncIDWrapper: - continue - case abi.FuncID_gopanic: - if u.frame.fp == uintptr(p.gopanicFP) && nonWrapperFrames > 0 { - canRecover = true - } - break loop - default: - nonWrapperFrames++ - if nonWrapperFrames > 1 { + for iu, f := newInlineUnwinder(u.frame.fn, u.symPC()); f.valid(); f = iu.next(f) { + sf := iu.srcFunc(f) + switch sf.funcID { + case abi.FuncIDWrapper: + continue + case abi.FuncID_gopanic: + if u.frame.fp == uintptr(p.gopanicFP) && nonWrapperFrames > 0 { + canRecover = true + } break loop + default: + nonWrapperFrames++ + if nonWrapperFrames > 1 { + break loop + } } } } |
