mirror of
https://github.com/golang/go
synced 2024-11-12 10:20:27 -07:00
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
This commit is contained in:
parent
e209a0fa06
commit
060a988011
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user