diff options
| author | Russ Cox <rsc@golang.org> | 2013-12-13 15:44:57 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2013-12-13 15:44:57 -0500 |
| commit | bc135f6492035024e778fe7dedb451ebaa06d3e8 (patch) | |
| tree | 0d380fd72d92f17a99f5a496de99f1b4f6979174 /src/pkg/runtime/traceback_arm.c | |
| parent | c134ce272f5e1170908771f8371f5f8c01caf37c (diff) | |
| download | go-bc135f6492035024e778fe7dedb451ebaa06d3e8.tar.xz | |
runtime: fix crash in runtime.GoroutineProfile
This is a possible Go 1.2.1 candidate.
Fixes #6946.
R=iant, r
CC=golang-dev
https://golang.org/cl/41640043
Diffstat (limited to 'src/pkg/runtime/traceback_arm.c')
| -rw-r--r-- | src/pkg/runtime/traceback_arm.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/pkg/runtime/traceback_arm.c b/src/pkg/runtime/traceback_arm.c index 341aa20588..8a3685e76c 100644 --- a/src/pkg/runtime/traceback_arm.c +++ b/src/pkg/runtime/traceback_arm.c @@ -20,6 +20,18 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip, Stktop *stk; String file; + if(pc0 == ~(uintptr)0 && sp0 == ~(uintptr)0) { // Signal to fetch saved values from gp. + if(gp->syscallstack != (uintptr)nil) { + pc0 = gp->syscallpc; + sp0 = gp->syscallsp; + lr0 = 0; + } else { + pc0 = gp->sched.pc; + sp0 = gp->sched.sp; + lr0 = gp->sched.lr; + } + } + nprint = 0; runtime·memclr((byte*)&frame, sizeof frame); frame.pc = pc0; |
