[LLVMdev] How to call a pointer that points to a C function (original) (raw)

CK Tan cktanx at gmail.com
Mon Oct 27 10:00:43 PDT 2014


Does anyone have a sample code on calling a c function thru pointer? Thanks.

On Oct 27, 2014, at 1:37 AM, David Chisnall <David.Chisnall at cl.cam.ac.uk> wrote:

There is at least one error here, possibly two.

On 27 Oct 2014, at 07:46, C K Tan <cktanx at gmail.com> wrote:

I have a pointer to a function that I need to invoke without going through llvm::Module::getOrInsertFunction. This example does not work: static int add(int x, int y); llvm::Value *one, *two; llvm::Constant* addfn = llvm::ConstantInt::get(JB->getIntPtrTy(DataLayout), (intptrt)add); llvm::Type* args[] = { Int32Ty, Int32Ty }; llvm::FunctionType* ftype = llvm::FunctionType::get(Int32Ty, args); The type that you want is not the function type, but the function pointer type. ftype->getPointerTo() should give you the type that you need. addfn = llvm::ConstantExpr::getPointerCast(addfn, ftype); I don't remember if this will just do casts between pointers or if it can also create inttoptrs, but you might need to be more explicit and ask for an inttoptr. David



More information about the llvm-dev mailing list