Commit befecf6b authored by Russ Cox's avatar Russ Cox

runtime: fix crash trace on amd64

g is not in r15 anymore.
now it's in a per-thread memory segment,
which is valid even inside a signal handler,
so we can just refer to g directly.

Fixes #1082.

R=r
CC=golang-dev
https://golang.org/cl/2149045
parent 0aa23170
...@@ -112,8 +112,8 @@ sighandler(int32 sig, Siginfo *info, void *context) ...@@ -112,8 +112,8 @@ sighandler(int32 sig, Siginfo *info, void *context)
printf("\n"); printf("\n");
if(gotraceback()){ if(gotraceback()){
traceback((void*)r->rip, (void*)r->rsp, 0, (void*)r->r15); traceback((void*)r->rip, (void*)r->rsp, 0, g);
tracebackothers((void*)r->r15); tracebackothers(g);
dumpregs(r); dumpregs(r);
} }
......
...@@ -106,8 +106,8 @@ sighandler(int32 sig, Siginfo* info, void* context) ...@@ -106,8 +106,8 @@ sighandler(int32 sig, Siginfo* info, void* context)
printf("\n"); printf("\n");
if(gotraceback()){ if(gotraceback()){
traceback((void*)r->mc_rip, (void*)r->mc_rsp, 0, (void*)r->mc_r15); traceback((void*)r->mc_rip, (void*)r->mc_rsp, 0, g);
tracebackothers((void*)r->mc_r15); tracebackothers(g);
dumpregs(r); dumpregs(r);
} }
......
...@@ -105,8 +105,8 @@ sighandler(int32 sig, Siginfo* info, void* context) ...@@ -105,8 +105,8 @@ sighandler(int32 sig, Siginfo* info, void* context)
printf("\n"); printf("\n");
if(gotraceback()){ if(gotraceback()){
traceback((void*)r->rip, (void*)r->rsp, 0, (void*)r->r15); traceback((void*)r->rip, (void*)r->rsp, 0, g);
tracebackothers((void*)r->r15); tracebackothers(g);
dumpregs(r); dumpregs(r);
} }
......
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