mirror of
https://github.com/golang/go
synced 2024-11-19 16:44:43 -07:00
runtime: delete duplicate implementation of pcln walker
It's hard enough to get right once. R=golang-dev, r CC=golang-dev https://golang.org/cl/5533073
This commit is contained in:
parent
524fb81c41
commit
610757b155
@ -59,51 +59,12 @@ func (f *Func) Entry() uintptr { return f.entry }
|
||||
// The result will not be accurate if pc is not a program
|
||||
// counter within f.
|
||||
func (f *Func) FileLine(pc uintptr) (file string, line int) {
|
||||
// NOTE(rsc): If you edit this function, also edit
|
||||
// symtab.c:/^funcline. That function also has the
|
||||
// comments explaining the logic.
|
||||
targetpc := pc
|
||||
|
||||
var pcQuant uintptr = 1
|
||||
if GOARCH == "arm" {
|
||||
pcQuant = 4
|
||||
}
|
||||
|
||||
p := f.pcln
|
||||
pc = f.pc0
|
||||
line = int(f.ln0)
|
||||
i := 0
|
||||
//print("FileLine start pc=", pc, " targetpc=", targetpc, " line=", line,
|
||||
// " tab=", p, " ", p[0], " quant=", pcQuant, " GOARCH=", GOARCH, "\n")
|
||||
for {
|
||||
for i < len(p) && p[i] > 128 {
|
||||
pc += pcQuant * uintptr(p[i]-128)
|
||||
i++
|
||||
}
|
||||
//print("pc<", pc, " targetpc=", targetpc, " line=", line, "\n")
|
||||
if pc > targetpc || i >= len(p) {
|
||||
break
|
||||
}
|
||||
if p[i] == 0 {
|
||||
if i+5 > len(p) {
|
||||
break
|
||||
}
|
||||
line += int(p[i+1]<<24) | int(p[i+2]<<16) | int(p[i+3]<<8) | int(p[i+4])
|
||||
i += 5
|
||||
} else if p[i] <= 64 {
|
||||
line += int(p[i])
|
||||
i++
|
||||
} else {
|
||||
line -= int(p[i] - 64)
|
||||
i++
|
||||
}
|
||||
//print("pc=", pc, " targetpc=", targetpc, " line=", line, "\n")
|
||||
pc += pcQuant
|
||||
}
|
||||
file = f.src
|
||||
return
|
||||
return funcline_go(f, pc)
|
||||
}
|
||||
|
||||
// implemented in symtab.c
|
||||
func funcline_go(*Func, uintptr) (string, int)
|
||||
|
||||
// mid returns the current os thread (m) id.
|
||||
func mid() uint32
|
||||
|
||||
|
@ -381,6 +381,15 @@ runtime·funcline(Func *f, uintptr targetpc)
|
||||
return line;
|
||||
}
|
||||
|
||||
void
|
||||
runtime·funcline_go(Func *f, uintptr targetpc, String retfile, int32 retline)
|
||||
{
|
||||
retfile = f->src;
|
||||
retline = runtime·funcline(f, targetpc);
|
||||
FLUSH(&retfile);
|
||||
FLUSH(&retline);
|
||||
}
|
||||
|
||||
static void
|
||||
buildfuncs(void)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user