aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDmitriy Vyukov <dvyukov@google.com>2013-06-27 20:43:43 +0400
committerDmitriy Vyukov <dvyukov@google.com>2013-06-27 20:43:43 +0400
commiteac6bee7c1aba48dd4f677dc354acba003d75d41 (patch)
tree53e4affca48fbd6faed50a30a3e94572ddc77ea6 /src
parent4f2278d4db7eaa732ff0bddea7c90e0e6526eb77 (diff)
downloadgo-eac6bee7c1aba48dd4f677dc354acba003d75d41.tar.xz
runtime: fix argument printing during traceback
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
Diffstat (limited to 'src')
-rw-r--r--src/pkg/runtime/traceback_arm.c10
-rw-r--r--src/pkg/runtime/traceback_x86.c10
2 files changed, 10 insertions, 10 deletions
diff --git a/src/pkg/runtime/traceback_arm.c b/src/pkg/runtime/traceback_arm.c
index c4d78872bb..b91017eea5 100644
--- a/src/pkg/runtime/traceback_arm.c
+++ b/src/pkg/runtime/traceback_arm.c
@@ -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));
diff --git a/src/pkg/runtime/traceback_x86.c b/src/pkg/runtime/traceback_x86.c
index 739d93aa8c..a6c6ebcae9 100644
--- a/src/pkg/runtime/traceback_x86.c
+++ b/src/pkg/runtime/traceback_x86.c
@@ -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));