aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAustin Clements <aclements@csail.mit.edu>2009-08-13 18:10:38 -0700
committerAustin Clements <aclements@csail.mit.edu>2009-08-13 18:10:38 -0700
commitdbecfbf86d9bc0290dcf90cea4139bfdb00bc4da (patch)
tree692efa9c7c514386259bd76b5e3e47e4307e017e /src
parent45ce825544e2aec385cafbc2a8c29dfb9dce487c (diff)
downloadgo-dbecfbf86d9bc0290dcf90cea4139bfdb00bc4da.tar.xz
Don't try to account for CALL instruction in 0th frame.
R=rsc APPROVED=rsc DELTA=9 (4 added, 3 deleted, 2 changed) OCL=33238 CL=33251
Diffstat (limited to 'src')
-rw-r--r--src/pkg/runtime/386/traceback.c5
-rw-r--r--src/pkg/runtime/amd64/traceback.c6
2 files changed, 6 insertions, 5 deletions
diff --git a/src/pkg/runtime/386/traceback.c b/src/pkg/runtime/386/traceback.c
index 22a1bee5d7..e4eb0c0841 100644
--- a/src/pkg/runtime/386/traceback.c
+++ b/src/pkg/runtime/386/traceback.c
@@ -60,7 +60,9 @@ traceback(byte *pc0, byte *sp, G *g)
printf("%S", f->name);
if(pc > f->entry)
printf("+%p", (uintptr)(pc - f->entry));
- printf(" %S:%d\n", f->src, funcline(f, pc-1)); // -1 to get to CALL instr.
+ if(n > 0)
+ pc--; // get to CALL instruction
+ printf(" %S:%d\n", f->src, funcline(f, pc));
printf("\t%S(", f->name);
for(i = 0; i < f->args; i++) {
if(i != 0)
@@ -144,4 +146,3 @@ runtime·Caller(int32 n, uintptr retpc, String retfile, int32 retline, bool retb
FLUSH(&retline);
FLUSH(&retbool);
}
-
diff --git a/src/pkg/runtime/amd64/traceback.c b/src/pkg/runtime/amd64/traceback.c
index df4e787a75..81310396f2 100644
--- a/src/pkg/runtime/amd64/traceback.c
+++ b/src/pkg/runtime/amd64/traceback.c
@@ -57,7 +57,9 @@ traceback(byte *pc0, byte *sp, G *g)
printf("%S", f->name);
if(pc > f->entry)
printf("+%p", (uintptr)(pc - f->entry));
- printf(" %S:%d\n", f->src, funcline(f, pc-1)); // -1 to get to CALL instr.
+ if(n > 0)
+ pc--; // get to CALL instruction
+ printf(" %S:%d\n", f->src, funcline(f, pc));
printf("\t%S(", f->name);
for(i = 0; i < f->args; i++) {
if(i != 0)
@@ -141,5 +143,3 @@ runtime·Caller(int32 n, uint64 retpc, String retfile, int32 retline, bool retbo
FLUSH(&retline);
FLUSH(&retbool);
}
-
-