diff options
| author | Dmitriy Vyukov <dvyukov@google.com> | 2013-06-27 20:43:43 +0400 |
|---|---|---|
| committer | Dmitriy Vyukov <dvyukov@google.com> | 2013-06-27 20:43:43 +0400 |
| commit | eac6bee7c1aba48dd4f677dc354acba003d75d41 (patch) | |
| tree | 53e4affca48fbd6faed50a30a3e94572ddc77ea6 /src/pkg/runtime | |
| parent | 4f2278d4db7eaa732ff0bddea7c90e0e6526eb77 (diff) | |
| download | go-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/pkg/runtime')
| -rw-r--r-- | src/pkg/runtime/traceback_arm.c | 10 | ||||
| -rw-r--r-- | src/pkg/runtime/traceback_x86.c | 10 |
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)); |
