]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: restore stack frame debugging
authorDmitry Vyukov <dvyukov@google.com>
Wed, 4 Feb 2015 08:26:22 +0000 (11:26 +0300)
committerDmitry Vyukov <dvyukov@google.com>
Thu, 12 Feb 2015 08:58:26 +0000 (08:58 +0000)
Dump frames of functions.
Add function name and var width to output.

Change-Id: Ida06b8def96178fa550ca90836eb4a2509b9e13f
Reviewed-on: https://go-review.googlesource.com/3870
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/gc/pgen.c
src/cmd/gc/subr.c

index 0774e061e5b1e5aab0143e47d4c9f19fde54f346..1665094b73e8f311ada07574a228e74a1c123415 100644 (file)
@@ -327,7 +327,7 @@ compile(Node *fn)
 
        defframe(ptxt);
 
-       if(0)
+       if(debug['f'])
                frame(0);
 
        // Remove leftover instrumentation from the instruction stream.
index fc925bbec32be680ac5afc7ec52b520915a83610..486e1d8dc92d74549fd131a1fc6a2fbcf688bc43 100644 (file)
@@ -1703,36 +1703,31 @@ ptrto(Type *t)
 void
 frame(int context)
 {
-       char *p;
        NodeList *l;
        Node *n;
-       int flag;
+       vlong w;
 
-       p = "stack";
-       l = nil;
-       if(curfn)
-               l = curfn->dcl;
        if(context) {
-               p = "external";
+               print("--- external frame ---\n");
                l = externdcl;
-       }
+       } else if(curfn) {
+               print("--- %S frame ---\n", curfn->nname->sym);
+               l = curfn->dcl;
+       } else
+               return;
 
-       flag = 1;
        for(; l; l=l->next) {
                n = l->n;
+               w = -1;
+               if(n->type)
+                       w = n->type->width;
                switch(n->op) {
                case ONAME:
-                       if(flag)
-                               print("--- %s frame ---\n", p);
-                       print("%O %S G%d %T\n", n->op, n->sym, n->vargen, n->type);
-                       flag = 0;
+                       print("%O %S G%d %T width=%lld\n", n->op, n->sym, n->vargen, n->type, w);
                        break;
 
                case OTYPE:
-                       if(flag)
-                               print("--- %s frame ---\n", p);
-                       print("%O %T\n", n->op, n->type);
-                       flag = 0;
+                       print("%O %T width=%lld\n", n->op, n->type, w);
                        break;
                }
        }