mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: make FuncForPC return the innermost inlined frame
Returning the innermost frame instead of the outermost
makes code that walks the results of runtime.Caller{,s}
still work correctly in the presence of mid-stack inlining.
Fixes #29582
Change-Id: I2392e3dd5636eb8c6f58620a61cef2194fe660a7
Reviewed-on: https://go-review.googlesource.com/c/156364
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
033b650181
commit
956879dd0b
5 changed files with 57 additions and 12 deletions
|
|
@ -663,6 +663,17 @@ type _func struct {
|
|||
nfuncdata uint8 // must be last
|
||||
}
|
||||
|
||||
// Pseudo-Func that is returned for PCs that occur in inlined code.
|
||||
// A *Func can be either a *_func or a *funcinl, and they are distinguished
|
||||
// by the first uintptr.
|
||||
type funcinl struct {
|
||||
zero uintptr // set to 0 to distinguish from _func
|
||||
entry uintptr // entry of the real (the "outermost") frame.
|
||||
name string
|
||||
file string
|
||||
line int
|
||||
}
|
||||
|
||||
// layout of Itab known to compilers
|
||||
// allocated in non-garbage-collected memory
|
||||
// Needs to be in sync with
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue