mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
debug/gosym: skip non-real functions in LineToPC lookup
The code iterates through the func table to find a function with a given file and line number. The code panics if it sees a non- real function (e.g. go.buildid), because its CU offset is -1, which causes an index-out-of-bounds error. The debug/gosym package recovers the panic and returns "not found", without looping through the rest of the entries. Skip the non-real functions. They cannot be looked up by line number anyway. Fixes #51890. Change-Id: I96f64c17b4a53ffdce047c8244b35a402a0d39ac Reviewed-on: https://go-review.googlesource.com/c/go/+/395074 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
parent
909a7a3213
commit
dd211cf039
|
@ -627,6 +627,10 @@ func (t *LineTable) go12LineToPC(file string, line int) (pc uint64) {
|
|||
filetab := f.pcfile()
|
||||
linetab := f.pcln()
|
||||
if t.version == ver116 || t.version == ver118 {
|
||||
if f.cuOffset() == ^uint32(0) {
|
||||
// skip functions without compilation unit (not real function, or linker generated)
|
||||
continue
|
||||
}
|
||||
cutab = t.cutab[f.cuOffset()*4:]
|
||||
}
|
||||
pc := t.findFileLine(entry, filetab, linetab, int32(filenum), int32(line), cutab)
|
||||
|
|
Loading…
Reference in a new issue