aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/panic.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-09-03 11:35:22 -0400
committerRuss Cox <rsc@golang.org>2014-09-03 11:35:22 -0400
commit012ceed914a24470207d602deeda3d6642787b4c (patch)
tree19df2c9f42be35852034d67b010d98ca923d9123 /src/pkg/runtime/panic.c
parent7ba41e99728d9a4545361ddfd834a473b424bbb6 (diff)
downloadgo-012ceed914a24470207d602deeda3d6642787b4c.tar.xz
runtime: make onM and mcall take Go func values
This gives them correct types in Go and also makes it possible to use them to run Go code on an m stack. LGTM=iant R=golang-codereviews, dave, iant CC=dvyukov, golang-codereviews, khr, r https://golang.org/cl/137970044
Diffstat (limited to 'src/pkg/runtime/panic.c')
-rw-r--r--src/pkg/runtime/panic.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/pkg/runtime/panic.c b/src/pkg/runtime/panic.c
index ecf4111337..4b6829e011 100644
--- a/src/pkg/runtime/panic.c
+++ b/src/pkg/runtime/panic.c
@@ -214,6 +214,7 @@ runtime·panic(Eface e)
Defer *d, dabort;
Panic p;
uintptr pc, argp;
+ void (*fn)(G*);
runtime·memclr((byte*)&p, sizeof p);
p.arg = e;
@@ -266,7 +267,8 @@ runtime·panic(Eface e)
// Pass information about recovering frame to recovery.
g->sigcode0 = (uintptr)argp;
g->sigcode1 = (uintptr)pc;
- runtime·mcall(recovery);
+ fn = recovery;
+ runtime·mcall(&fn);
runtime·throw("recovery failed"); // mcall should not return
}
}