summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-06-12 21:52:52 -0400
committerRuss Cox <rsc@golang.org>2014-06-12 21:52:52 -0400
commit8e4b491ea8512dfa493c15fc105978aa907ca8b4 (patch)
tree25a004711c9588557e9a6f2c7aed2d42c5f7d071
parentacc5561a1c6298257aa98100cbd6d89050f9f9d4 (diff)
downloadgo-8e4b491ea8512dfa493c15fc105978aa907ca8b4.tar.gz
[release-branch.go1.3] runtime: revise CL 105140044 (defer nil) to work on Windows
??? CL 105120044 / 824ea5943ba8 runtime: revise CL 105140044 (defer nil) to work on Windows It appears that something about Go on Windows cannot handle the fault cause by a jump to address 0. The way Go represents and calls functions, this never happened at all, until CL 105140044. This CL changes the code added in CL 105140044 to make jump to 0 impossible once again. Fixes issue 8047. (again, on Windows) TBR=bradfitz R=golang-codereviews, dave CC=adg, golang-codereviews, iant, r https://codereview.appspot.com/105120044 ??? LGTM=bradfitz R=golang-codereviews, bradfitz, alex.brainman CC=adg, golang-codereviews https://codereview.appspot.com/108890045
-rw-r--r--src/pkg/runtime/stack.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/pkg/runtime/stack.c b/src/pkg/runtime/stack.c
index 1f7c2eaad..1680f004e 100644
--- a/src/pkg/runtime/stack.c
+++ b/src/pkg/runtime/stack.c
@@ -9,6 +9,7 @@
#include "funcdata.h"
#include "typekind.h"
#include "type.h"
+#include "../../cmd/ld/textflag.h"
enum
{
@@ -851,6 +852,13 @@ runtime·newstack(void)
*(int32*)345 = 123; // never return
}
+#pragma textflag NOSPLIT
+void
+runtime·nilfunc(void)
+{
+ *(byte*)0 = 0;
+}
+
// adjust Gobuf as if it executed a call to fn
// and then did an immediate gosave.
void
@@ -858,9 +866,10 @@ runtime·gostartcallfn(Gobuf *gobuf, FuncVal *fv)
{
void *fn;
- fn = nil;
if(fv != nil)
fn = fv->fn;
+ else
+ fn = runtime·nilfunc;
runtime·gostartcall(gobuf, fn, fv);
}