On Wed, 2012-02-01 at 11:55 +0200, Pekka Enberg wrote: > From: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> > > We need to tell llvm about it or it won't generate the proper > stack frame & argument list on some architectures. > > Cc: Christopher Li <sparse@xxxxxxxxxxx> > Cc: Jeff Garzik <jgarzik@xxxxxxxxxx> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> > [ penberg@xxxxxxxxxx: Fix function pointer calls ] > Signed-off-by: Pekka Enberg <penberg@xxxxxxxxxx> > --- > sparse-llvm.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/sparse-llvm.c b/sparse-llvm.c > index a291a0d..9226a21 100644 > --- a/sparse-llvm.c > +++ b/sparse-llvm.c > @@ -79,7 +79,7 @@ static LLVMTypeRef sym_func_type(LLVMModuleRef module, struct symbol *sym) > arg_type[idx++] = symbol_type(module, arg_sym); > } END_FOR_EACH_PTR(arg); > func_type = LLVMFunctionType(ret_type, arg_type, n_arg, > - /* varargs? */ 0); > + sym->ctype.base_type->variadic); > > return func_type; > } Is the above hunk correct ? It was really just a guess, I haven't tested that code path :-) >From my understanding (please correct me if I'm wrong) this is used to generate a type for a function pointer inside a structure definition or an argument list... so I -assume- base_type will work but still only have a very blurry version of the big picture in mind... (And no time to do more than answer email on that subject today) > @@ -744,7 +744,7 @@ static LLVMTypeRef get_func_type(struct function *fn, struct instruction *insn) > } END_FOR_EACH_PTR(arg); > > func_type = LLVMFunctionType(ret_type, arg_type, n_arg, > - /* varargs? */ 0); > + insn->fntype->variadic); > > return func_type; > } Cheers, Ben. -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html