aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gerrand <adg@golang.org>2014-08-12 09:46:42 +1000
committerAndrew Gerrand <adg@golang.org>2014-08-12 09:46:42 +1000
commit6b0ac0f972de8c55503ccb0e056a0113c4bf4970 (patch)
treeb552015a6eaab7b5f74c64d0963905f3b4410946
parent78a4cf7f39dd1bd3debedc85d736b35aabec7d5b (diff)
downloadgo-6b0ac0f972de8c55503ccb0e056a0113c4bf4970.tar.gz
go-6b0ac0f972de8c55503ccb0e056a0113c4bf4970.zip
[release-branch.go1.3] runtime: turn off 'unexpected return pc' print on arm traceback
««« CL 118670043 / 671fa8a9eb80 runtime: turn off 'unexpected return pc' print on arm traceback It can happen legitimately if a profiling signal arrives at just the wrong moment. It's harmless. Fixes #8153. LGTM=minux R=golang-codereviews, minux CC=golang-codereviews, iant, r https://golang.org/cl/118670043 »»» TBR=rsc CC=golang-codereviews https://golang.org/cl/127950044
-rw-r--r--src/pkg/runtime/traceback_arm.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/pkg/runtime/traceback_arm.c b/src/pkg/runtime/traceback_arm.c
index d15244c2a9..30f43d54c2 100644
--- a/src/pkg/runtime/traceback_arm.c
+++ b/src/pkg/runtime/traceback_arm.c
@@ -128,9 +128,14 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip,
frame.lr = *(uintptr*)frame.sp;
flr = runtime·findfunc(frame.lr);
if(flr == nil) {
- runtime·printf("runtime: unexpected return pc for %s called from %p\n", runtime·funcname(f), frame.lr);
- if(callback != nil)
+ // This happens if you get a profiling interrupt at just the wrong time.
+ // In that context it is okay to stop early.
+ // But if callback is set, we're doing a garbage collection and must
+ // get everything, so crash loudly.
+ if(callback != nil) {
+ runtime·printf("runtime: unexpected return pc for %s called from %p\n", runtime·funcname(f), frame.lr);
runtime·throw("unknown caller pc");
+ }
}
}