diff options
| author | Austin Clements <aclements@csail.mit.edu> | 2009-08-14 14:36:49 -0700 |
|---|---|---|
| committer | Austin Clements <aclements@csail.mit.edu> | 2009-08-14 14:36:49 -0700 |
| commit | 397f78ec1e719c279d23ca81ae48061632c7c414 (patch) | |
| tree | 49cb2f0cf83ba3f5ce6feec01b5abbb522da3b63 /src/libmach/sym.c | |
| parent | 763b631b78e15a95e90d4350b0e291540fbfc5bf (diff) | |
| download | golang-397f78ec1e719c279d23ca81ae48061632c7c414.tar.gz | |
Make the runtime correctly decode the symbol table history
stacks produced by whole-package compilation.
Fix some off-by-ones in PC/line table parsing. Hopefully.
R=rsc
APPROVED=rsc
DELTA=42 (24 added, 6 deleted, 12 changed)
OCL=33250
CL=33293
Diffstat (limited to 'src/libmach/sym.c')
| -rw-r--r-- | src/libmach/sym.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/libmach/sym.c b/src/libmach/sym.c index 997cc0633..ad983041a 100644 --- a/src/libmach/sym.c +++ b/src/libmach/sym.c @@ -1316,9 +1316,7 @@ pc2line(uvlong pc) if(pc<currpc || pc>txtend) return ~0; - for(c = pcline; c < pclineend; c++) { - if(currpc >= pc) - return currline; + for(c = pcline; c < pclineend && pc <= currpc; c++) { u = *c; if(u == 0) { currline += (c[1]<<24)|(c[2]<<16)|(c[3]<<8)|c[4]; @@ -1332,7 +1330,7 @@ pc2line(uvlong pc) currpc += mach->pcquant*(u-129); currpc += mach->pcquant; } - return ~0; + return currline; } /* |
