diff options
-rw-r--r-- | src/runtime/crash_unix_test.go | 6 | ||||
-rw-r--r-- | src/runtime/traceback.go | 9 |
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 { |