]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix argument dump in traceback
authorRuss Cox <rsc@golang.org>
Thu, 7 Oct 2010 10:45:40 +0000 (06:45 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 7 Oct 2010 10:45:40 +0000 (06:45 -0400)
Was printing words at SP instead of at FP
after shuffle due to nascent flag.

R=r, r2
CC=golang-dev
https://golang.org/cl/2316044

src/pkg/runtime/amd64/traceback.c

index 3e60002910fb6c43f90aa137ce97b60e5c2d85c1..5cdbf2092c1869539fcfe5f35a55f31eea647956 100644 (file)
@@ -21,7 +21,7 @@ gentraceback(byte *pc0, byte *sp, G *g, int32 skip, uintptr *pcbuf, int32 m)
 {
        byte *p;
        int32 i, n, iter, nascent;
-       uintptr pc, tracepc;
+       uintptr pc, tracepc, *fp;
        Stktop *stk;
        Func *f;
        
@@ -93,10 +93,15 @@ gentraceback(byte *pc0, byte *sp, G *g, int32 skip, uintptr *pcbuf, int32 m)
                                tracepc--;
                        printf(" %S:%d\n", f->src, funcline(f, tracepc));
                        printf("\t%S(", f->name);
+                       fp = (uintptr*)sp;
+                       if(f->frame < sizeof(uintptr))
+                               fp++;
+                       else
+                               fp += f->frame/sizeof(uintptr);
                        for(i = 0; i < f->args; i++) {
                                if(i != 0)
                                        prints(", ");
-                               ·printhex(((uintptr*)sp)[i]);
+                               ·printhex(fp[i]);
                                if(i >= 4) {
                                        prints(", ...");
                                        break;