diff options
Diffstat (limited to 'src/pkg/runtime/signal_arm.c')
-rw-r--r-- | src/pkg/runtime/signal_arm.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/pkg/runtime/signal_arm.c b/src/pkg/runtime/signal_arm.c index adf61de6b..a6e239601 100644 --- a/src/pkg/runtime/signal_arm.c +++ b/src/pkg/runtime/signal_arm.c @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build darwin freebsd linux netbsd openbsd +// +build darwin dragonfly freebsd linux netbsd openbsd #include "runtime.h" #include "defs_GOOS_GOARCH.h" @@ -46,8 +46,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp) bool crash; if(sig == SIGPROF) { - if(gp != m->g0 && gp != m->gsignal) - runtime·sigprof((uint8*)SIG_PC(info, ctxt), (uint8*)SIG_SP(info, ctxt), (uint8*)SIG_LR(info, ctxt), gp); + runtime·sigprof((uint8*)SIG_PC(info, ctxt), (uint8*)SIG_SP(info, ctxt), (uint8*)SIG_LR(info, ctxt), gp); return; } @@ -94,6 +93,8 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp) return; Throw: + m->throwing = 1; + m->caughtsig = gp; if(runtime·panicking) // traceback already printed runtime·exit(2); runtime·panicking = 1; @@ -111,7 +112,7 @@ Throw: runtime·printf("\n"); if(runtime·gotraceback(&crash)){ - runtime·traceback((void*)SIG_PC(info, ctxt), (void*)SIG_SP(info, ctxt), (void*)SIG_LR(info, ctxt), gp); + runtime·traceback(SIG_PC(info, ctxt), SIG_SP(info, ctxt), SIG_LR(info, ctxt), gp); runtime·tracebackothers(gp); runtime·printf("\n"); runtime·dumpregs(info, ctxt); |