Commit ab38e2a4 authored by Russ Cox's avatar Russ Cox

runtime: show m stack during crash on m stack

The various throwing > 0 finish a change started
in a previous CL, which sets throwing = -1 to mean
"don't show the internals". That gets set during the
"all goroutines are asleep - deadlock!" crash, and it
should also be set during any other expected crash
that does not indicate a problem within the runtime.

Most runtime.throw do indicate a problem within the
runtime, however, so we should be able to enumerate
the ones that should be silent. The goroutine sleeping
deadlock is the only one I can think of.

Update #5139

R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/13662043
parent fa4984d5
...@@ -443,7 +443,7 @@ runtime·dopanic(int32 unused) ...@@ -443,7 +443,7 @@ runtime·dopanic(int32 unused)
runtime·printf("\n"); runtime·printf("\n");
runtime·goroutineheader(g); runtime·goroutineheader(g);
runtime·traceback((uintptr)runtime·getcallerpc(&unused), (uintptr)runtime·getcallersp(&unused), 0, g); runtime·traceback((uintptr)runtime·getcallerpc(&unused), (uintptr)runtime·getcallersp(&unused), 0, g);
} else if(t >= 2) { } else if(t >= 2 || m->throwing > 0) {
runtime·printf("\nruntime stack:\n"); runtime·printf("\nruntime stack:\n");
runtime·traceback((uintptr)runtime·getcallerpc(&unused), (uintptr)runtime·getcallersp(&unused), 0, g); runtime·traceback((uintptr)runtime·getcallerpc(&unused), (uintptr)runtime·getcallersp(&unused), 0, g);
} }
......
...@@ -153,7 +153,7 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip, ...@@ -153,7 +153,7 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip,
runtime·printf("\t%S:%d", file, line); runtime·printf("\t%S:%d", file, line);
if(frame.pc > f->entry) if(frame.pc > f->entry)
runtime·printf(" +%p", (uintptr)(frame.pc - f->entry)); runtime·printf(" +%p", (uintptr)(frame.pc - f->entry));
if(m->throwing && gp == m->curg) if(m->throwing > 0 && gp == m->curg)
runtime·printf(" fp=%p", frame.fp); runtime·printf(" fp=%p", frame.fp);
runtime·printf("\n"); runtime·printf("\n");
nprint++; nprint++;
......
...@@ -170,7 +170,7 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip, ...@@ -170,7 +170,7 @@ runtime·gentraceback(uintptr pc0, uintptr sp0, uintptr lr0, G *gp, int32 skip,
runtime·printf("\t%S:%d", file, line); runtime·printf("\t%S:%d", file, line);
if(frame.pc > f->entry) if(frame.pc > f->entry)
runtime·printf(" +%p", (uintptr)(frame.pc - f->entry)); runtime·printf(" +%p", (uintptr)(frame.pc - f->entry));
if(m->throwing && gp == m->curg) if(m->throwing > 0 && gp == m->curg)
runtime·printf(" fp=%p", frame.fp); runtime·printf(" fp=%p", frame.fp);
runtime·printf("\n"); runtime·printf("\n");
nprint++; nprint++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment