diff options
author | Russ Cox <rsc@golang.org> | 2014-06-12 21:52:52 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2014-06-12 21:52:52 -0400 |
commit | 8e4b491ea8512dfa493c15fc105978aa907ca8b4 (patch) | |
tree | 25a004711c9588557e9a6f2c7aed2d42c5f7d071 | |
parent | acc5561a1c6298257aa98100cbd6d89050f9f9d4 (diff) | |
download | go-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.c | 11 |
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); } |