Commit 060a9880 authored by Russ Cox's avatar Russ Cox

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
parent e209a0fa
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "funcdata.h" #include "funcdata.h"
#include "typekind.h" #include "typekind.h"
#include "type.h" #include "type.h"
#include "../../cmd/ld/textflag.h"
enum enum
{ {
...@@ -851,6 +852,13 @@ runtime·newstack(void) ...@@ -851,6 +852,13 @@ runtime·newstack(void)
*(int32*)345 = 123; // never return *(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 // adjust Gobuf as if it executed a call to fn
// and then did an immediate gosave. // and then did an immediate gosave.
void void
...@@ -858,9 +866,10 @@ runtime·gostartcallfn(Gobuf *gobuf, FuncVal *fv) ...@@ -858,9 +866,10 @@ runtime·gostartcallfn(Gobuf *gobuf, FuncVal *fv)
{ {
void *fn; void *fn;
fn = nil;
if(fv != nil) if(fv != nil)
fn = fv->fn; fn = fv->fn;
else
fn = runtime·nilfunc;
runtime·gostartcall(gobuf, fn, fv); runtime·gostartcall(gobuf, fn, fv);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment