[LLVMdev] How to call a pointer that points to a C function (original) (raw)
David Chisnall David.Chisnall at cl.cam.ac.uk
Mon Oct 27 01:37:10 PDT 2014
- Previous message: [LLVMdev] How to call a pointer that points to a C function
- Next message: [LLVMdev] How to call a pointer that points to a C function
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message: [LLVMdev] How to call a pointer that points to a C function
- Next message: [LLVMdev] How to call a pointer that points to a C function
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]