aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-09-11 00:26:56 -0400
committerRuss Cox <rsc@golang.org>2010-09-11 00:26:56 -0400
commitbefecf6b595220f31d70815bee4067a0e260516d (patch)
treed8129add5ab7f85c7bbfed963537591cf5dc6ad2 /src/pkg/runtime
parent0aa2317096fde91c51a279b885765b5e26359150 (diff)
downloadgo-befecf6b595220f31d70815bee4067a0e260516d.tar.xz
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
Diffstat (limited to 'src/pkg/runtime')
-rw-r--r--src/pkg/runtime/darwin/amd64/signal.c4
-rw-r--r--src/pkg/runtime/freebsd/amd64/signal.c4
-rw-r--r--src/pkg/runtime/linux/amd64/signal.c4
3 files changed, 6 insertions, 6 deletions
diff --git a/src/pkg/runtime/darwin/amd64/signal.c b/src/pkg/runtime/darwin/amd64/signal.c
index 648ef207ca..5dc811cfa7 100644
--- a/src/pkg/runtime/darwin/amd64/signal.c
+++ b/src/pkg/runtime/darwin/amd64/signal.c
@@ -112,8 +112,8 @@ sighandler(int32 sig, Siginfo *info, void *context)
printf("\n");
if(gotraceback()){
- traceback((void*)r->rip, (void*)r->rsp, 0, (void*)r->r15);
- tracebackothers((void*)r->r15);
+ traceback((void*)r->rip, (void*)r->rsp, 0, g);
+ tracebackothers(g);
dumpregs(r);
}
diff --git a/src/pkg/runtime/freebsd/amd64/signal.c b/src/pkg/runtime/freebsd/amd64/signal.c
index 57bfcfb55e..09053ac786 100644
--- a/src/pkg/runtime/freebsd/amd64/signal.c
+++ b/src/pkg/runtime/freebsd/amd64/signal.c
@@ -106,8 +106,8 @@ sighandler(int32 sig, Siginfo* info, void* context)
printf("\n");
if(gotraceback()){
- traceback((void*)r->mc_rip, (void*)r->mc_rsp, 0, (void*)r->mc_r15);
- tracebackothers((void*)r->mc_r15);
+ traceback((void*)r->mc_rip, (void*)r->mc_rsp, 0, g);
+ tracebackothers(g);
dumpregs(r);
}
diff --git a/src/pkg/runtime/linux/amd64/signal.c b/src/pkg/runtime/linux/amd64/signal.c
index 63c3a2e6ea..e46a0944c5 100644
--- a/src/pkg/runtime/linux/amd64/signal.c
+++ b/src/pkg/runtime/linux/amd64/signal.c
@@ -105,8 +105,8 @@ sighandler(int32 sig, Siginfo* info, void* context)
printf("\n");
if(gotraceback()){
- traceback((void*)r->rip, (void*)r->rsp, 0, (void*)r->r15);
- tracebackothers((void*)r->r15);
+ traceback((void*)r->rip, (void*)r->rsp, 0, g);
+ tracebackothers(g);
dumpregs(r);
}