1
0
mirror of https://github.com/golang/go synced 2024-11-21 21:04:41 -07:00

runtime: better checks for syscall.NewCallback parameter

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/4859042
This commit is contained in:
Alex Brainman 2011-08-11 12:23:55 +10:00
parent d118905c2c
commit c8ee9c60d2

View File

@ -347,16 +347,26 @@ static Callbacks cbs;
byte *
runtime·compilecallback(Eface fn, bool cleanstack)
{
Func *f;
int32 argsize, n;
FuncType *ft;
Type *t;
int32 argsize, i, n;
byte *p;
Callback *c;
if(fn.type->kind != KindFunc)
runtime·panicstring("not a function");
if((f = runtime·findfunc((uintptr)fn.data)) == nil)
runtime·throw("cannot find function");
argsize = (f->args-2) * 4;
if(fn.type == nil || fn.type->kind != KindFunc)
runtime·panicstring("compilecallback: not a function");
ft = (FuncType*)fn.type;
if(ft->out.len != 1)
runtime·panicstring("compilecallback: function must have one output parameter");
if(((Type**)ft->out.array)[0]->size != sizeof(uintptr))
runtime·panicstring("compilecallback: output parameter size is wrong");
argsize = 0;
for(i=0; i<ft->in.len; i++) {
t = ((Type**)ft->in.array)[i];
if(t->size != sizeof(uintptr))
runtime·panicstring("compilecallback: input parameter size is wrong");
argsize += t->size;
}
// compute size of new fn.
// must match code laid out below.