mirror of https://github.com/golang/go.git
Merge 7f5f1787ef into 49cdf0c42e
This commit is contained in:
commit
61256fb98f
|
|
@ -305,6 +305,9 @@ func (t *LineTable) go12Funcs() []Func {
|
|||
}()
|
||||
}
|
||||
|
||||
// The start line only exists in pclntab starting at version 1.20.
|
||||
readStartLine := t.version >= ver120
|
||||
|
||||
ft := t.funcTab()
|
||||
funcs := make([]Func, ft.Count())
|
||||
syms := make([]Sym, len(funcs))
|
||||
|
|
@ -313,6 +316,9 @@ func (t *LineTable) go12Funcs() []Func {
|
|||
f.Entry = ft.pc(i)
|
||||
f.End = ft.pc(i + 1)
|
||||
info := t.funcData(uint32(i))
|
||||
if readStartLine {
|
||||
f.StartLine = int(info.startLine())
|
||||
}
|
||||
f.LineTable = t
|
||||
f.FrameSize = int(info.deferreturn())
|
||||
syms[i] = Sym{
|
||||
|
|
@ -465,6 +471,7 @@ func (f funcData) deferreturn() uint32 { return f.field(3) }
|
|||
func (f funcData) pcfile() uint32 { return f.field(5) }
|
||||
func (f funcData) pcln() uint32 { return f.field(6) }
|
||||
func (f funcData) cuOffset() uint32 { return f.field(8) }
|
||||
func (f funcData) startLine() uint32 { return f.field(9) }
|
||||
|
||||
// field returns the nth field of the _func struct.
|
||||
// It panics if n == 0 or n > 9; for n == 0, call f.entryPC.
|
||||
|
|
|
|||
|
|
@ -201,6 +201,24 @@ func TestLineAline(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestStartLine(t *testing.T) {
|
||||
dotest(t)
|
||||
defer endtest()
|
||||
|
||||
f, tab := crack(pclinetestBinary, t)
|
||||
defer f.Close()
|
||||
|
||||
sym := tab.LookupFunc("main.main")
|
||||
wantLine := 6
|
||||
if sym == nil {
|
||||
t.Fatal("no main.main")
|
||||
}
|
||||
|
||||
if sym.StartLine != wantLine {
|
||||
t.Fatalf("StartLine = %d, want %d", sym.StartLine, wantLine)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPCLine(t *testing.T) {
|
||||
dotest(t)
|
||||
defer endtest()
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@ type Func struct {
|
|||
FrameSize int
|
||||
LineTable *LineTable
|
||||
Obj *Obj
|
||||
StartLine int
|
||||
}
|
||||
|
||||
// An Obj represents a collection of functions in a symbol table.
|
||||
|
|
|
|||
Loading…
Reference in New Issue