aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/runtime/crash_unix_test.go6
-rw-r--r--src/runtime/traceback.go9
2 files changed, 9 insertions, 6 deletions
diff --git a/src/runtime/crash_unix_test.go b/src/runtime/crash_unix_test.go
index 6bca2ac66e..8d205e1de5 100644
--- a/src/runtime/crash_unix_test.go
+++ b/src/runtime/crash_unix_test.go
@@ -214,6 +214,12 @@ func TestPanicSystemstack(t *testing.T) {
if nUser != 2 || nSys != 2 {
t.Fatalf("want %d user stack frames in %s and %d system stack frames in %s, got %d and %d:\n%s", 2, userFunc, 2, sysFunc, nUser, nSys, string(tb))
}
+
+ // Traceback should not contain "unexpected SPWRITE" when
+ // unwinding the system stacks.
+ if bytes.Contains(tb, []byte("unexpected SPWRITE")) {
+ t.Errorf("unexpected \"unexpected SPWRITE\" in traceback:\n%s", tb)
+ }
}
func init() {
diff --git a/src/runtime/traceback.go b/src/runtime/traceback.go
index 72200d436f..32a538526c 100644
--- a/src/runtime/traceback.go
+++ b/src/runtime/traceback.go
@@ -359,15 +359,12 @@ func (u *unwinder) resolveInternal(innermost, isSyscall bool) {
//
// uSE uPE inn | action
// T _ _ | frame.lr = 0
- // F T F | frame.lr = 0; print
- // F T T | frame.lr = 0
+ // F T _ | frame.lr = 0
// F F F | print; panic
// F F T | ignore SPWrite
- if u.flags&unwindSilentErrors == 0 && !innermost {
+ if u.flags&(unwindPrintErrors|unwindSilentErrors) == 0 && !innermost {
println("traceback: unexpected SPWRITE function", funcname(f))
- if u.flags&unwindPrintErrors == 0 {
- throw("traceback")
- }
+ throw("traceback")
}
frame.lr = 0
} else {