diff options
| author | Russ Cox <rsc@golang.org> | 2011-01-18 14:15:11 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2011-01-18 14:15:11 -0500 |
| commit | 12307008e93ca5ef9dca20f0c4e78d6b9b492b6a (patch) | |
| tree | 16c4091d859183538ec90b83b852ca81a22671fe /src/pkg/runtime/linux | |
| parent | eaade07d6318bf59948b89bdead4ad07882df477 (diff) | |
| download | go-12307008e93ca5ef9dca20f0c4e78d6b9b492b6a.tar.xz | |
runtime: print signal information during panic
$ 6.out
panic: runtime error: invalid memory address or nil pointer dereference
[signal 11 code=0x1 addr=0x0 pc=0x1c16]
runtime.panic+0xa7 /Users/rsc/g/go/src/pkg/runtime/proc.c:1089
runtime.panic(0xf6c8, 0x25c010)
runtime.panicstring+0x69 /Users/rsc/g/go/src/pkg/runtime/runtime.c:88
runtime.panicstring(0x24814, 0x0)
runtime.sigpanic+0x144 /Users/rsc/g/go/src/pkg/runtime/darwin/thread.c:465
runtime.sigpanic()
main.f+0x16 /Users/rsc/x.go:5
main.f()
main.main+0x1c /Users/rsc/x.go:9
main.main()
runtime.mainstart+0xf /Users/rsc/g/go/src/pkg/runtime/amd64/asm.s:77
runtime.mainstart()
runtime.goexit /Users/rsc/g/go/src/pkg/runtime/proc.c:149
runtime.goexit()
R=r
CC=golang-dev
https://golang.org/cl/4036042
Diffstat (limited to 'src/pkg/runtime/linux')
| -rw-r--r-- | src/pkg/runtime/linux/386/signal.c | 1 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/amd64/signal.c | 1 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/arm/signal.c | 1 |
3 files changed, 3 insertions, 0 deletions
diff --git a/src/pkg/runtime/linux/386/signal.c b/src/pkg/runtime/linux/386/signal.c index 0dbfcf9ff3..9651a6f280 100644 --- a/src/pkg/runtime/linux/386/signal.c +++ b/src/pkg/runtime/linux/386/signal.c @@ -60,6 +60,7 @@ runtime·sighandler(int32 sig, Siginfo* info, void* context) gp->sig = sig; gp->sigcode0 = info->si_code; gp->sigcode1 = ((uintptr*)info)[3]; + gp->sigpc = r->eip; // Only push runtime·sigpanic if r->eip != 0. // If r->eip == 0, probably panicked because of a diff --git a/src/pkg/runtime/linux/amd64/signal.c b/src/pkg/runtime/linux/amd64/signal.c index e78bbda9d4..9e501c96d8 100644 --- a/src/pkg/runtime/linux/amd64/signal.c +++ b/src/pkg/runtime/linux/amd64/signal.c @@ -70,6 +70,7 @@ runtime·sighandler(int32 sig, Siginfo* info, void* context) gp->sig = sig; gp->sigcode0 = info->si_code; gp->sigcode1 = ((uintptr*)info)[2]; + gp->sigpc = r->rip; // Only push runtime·sigpanic if r->rip != 0. // If r->rip == 0, probably panicked because of a diff --git a/src/pkg/runtime/linux/arm/signal.c b/src/pkg/runtime/linux/arm/signal.c index c65aff913b..481bd13c62 100644 --- a/src/pkg/runtime/linux/arm/signal.c +++ b/src/pkg/runtime/linux/arm/signal.c @@ -67,6 +67,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context) gp->sig = sig; gp->sigcode0 = info->si_code; gp->sigcode1 = r->fault_address; + gp->sigpc = r->arm_pc; // If this is a leaf function, we do smash LR, // but we're not going back there anyway. |
