From: Russ Cox Date: Thu, 12 Jan 2012 02:45:32 +0000 (-0800) Subject: runtime: delete duplicate implementation of pcln walker X-Git-Tag: weekly.2012-01-15~58 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=610757b1552d35d3e960b053ad2a5aedea85b8da;p=gostls13.git 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 --- diff --git a/src/pkg/runtime/extern.go b/src/pkg/runtime/extern.go index e86da01732..1860c5b896 100644 --- a/src/pkg/runtime/extern.go +++ b/src/pkg/runtime/extern.go @@ -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 diff --git a/src/pkg/runtime/symtab.c b/src/pkg/runtime/symtab.c index 6cd59136f4..0346a420b5 100644 --- a/src/pkg/runtime/symtab.c +++ b/src/pkg/runtime/symtab.c @@ -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) {