]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix argument printing during traceback
authorDmitriy Vyukov <dvyukov@google.com>
Thu, 27 Jun 2013 16:43:43 +0000 (20:43 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Thu, 27 Jun 2013 16:43:43 +0000 (20:43 +0400)
Current code can print more arguments than necessary
and also incorrectly prints "...".
Update #5723.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/10689043

src/pkg/runtime/traceback_arm.c
src/pkg/runtime/traceback_x86.c

index c4d78872bb7a3dad8e4821a4eb1371fe3af75afa..b91017eea5b14e4939902d111350dc75d19b9bd0 100644 (file)
@@ -139,14 +139,14 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip,
                                if(n > 0 && frame.pc > f->entry && !waspanic)
                                        tracepc -= sizeof(uintptr);
                                runtime·printf("%S(", f->name);
-                               for(i = 0; i < f->args/sizeof(uintptr); i++) {
-                                       if(i != 0)
-                                               runtime·prints(", ");
-                                       runtime·printhex(((uintptr*)frame.argp)[i]);
-                                       if(i >= 4) {
+                               for(i = 0; i < frame.arglen/sizeof(uintptr); i++) {
+                                       if(i >= 5) {
                                                runtime·prints(", ...");
                                                break;
                                        }
+                                       if(i != 0)
+                                               runtime·prints(", ");
+                                       runtime·printhex(((uintptr*)frame.argp)[i]);
                                }
                                runtime·prints(")\n");
                                runtime·printf("\t%S:%d", f->src, runtime·funcline(f, tracepc));
index 739d93aa8c2130e144926885a20c775ca8339c8b..a6c6ebcae9797ec1b1e33b9c52270412440fdf4d 100644 (file)
@@ -142,14 +142,14 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip,
                                if(n > 0 && frame.pc > f->entry && !waspanic)
                                        tracepc--;
                                runtime·printf("%S(", f->name);
-                               for(i = 0; i < f->args/sizeof(uintptr); i++) {
-                                       if(i != 0)
-                                               runtime·prints(", ");
-                                       runtime·printhex(((uintptr*)frame.argp)[i]);
-                                       if(i >= 4) {
+                               for(i = 0; i < frame.arglen/sizeof(uintptr); i++) {
+                                       if(i >= 5) {
                                                runtime·prints(", ...");
                                                break;
                                        }
+                                       if(i != 0)
+                                               runtime·prints(", ");
+                                       runtime·printhex(((uintptr*)frame.argp)[i]);
                                }
                                runtime·prints(")\n");
                                runtime·printf("\t%S:%d", f->src, runtime·funcline(f, tracepc));