aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/panic.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/panic.go')
-rw-r--r--src/runtime/panic.go25
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
+ }
}
}
}