1
0
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:
Russ Cox 2012-01-11 18:45:32 -08:00
parent 524fb81c41
commit 610757b155
2 changed files with 13 additions and 43 deletions

View File

@ -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

View File

@ -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)
{