aboutsummaryrefslogtreecommitdiff
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
commit64de40a55106b85e648d59b6a0fd4e27be4a10d2 (patch)
treead4135d84bfd01d46f37d01f958e06a1b6d81109
parent69616e4e5bb4ef4dfbc065bef3df195ce8619e56 (diff)
downloadgo-64de40a55106b85e648d59b6a0fd4e27be4a10d2.tar.gz
go-64de40a55106b85e648d59b6a0fd4e27be4a10d2.zip
[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 #8047. (again, on Windows) TBR=bradfitz R=golang-codereviews, dave CC=adg, golang-codereviews, iant, r https://golang.org/cl/105120044 »»» LGTM=bradfitz R=golang-codereviews, bradfitz, alex.brainman CC=adg, golang-codereviews https://golang.org/cl/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 1f7c2eaada..1680f004eb 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);
}