I have a function address held in an uint64_t. I would like to cast
the function address to a function prototype and create a call to the
function in LLVM. How could I do this ?
Thanks
Xin
I have a function address held in an uint64_t. I would like to cast
the function address to a function prototype and create a call to the
function in LLVM. How could I do this ?
Thanks
Xin
Using uintptr_t is the way to hold pointer values. However, I seem to recall there being an exception for function addresses.
-bw
In fact i want to cast a uint64_t to a function address and make LLVM
generate IR to call it.
i.e. in LLVM IR, i want to generate something like this.
the uint64_t function prototype function args
call 0xAABBCC (void () (int int)) (1 , 2)
Thanks
Xin
From: llvmdev-bounces@cs.uiuc.edu [mailto:llvmdev-bounces@cs.uiuc.edu] On Behalf Of Xin Tong
Subject: [LLVMdev] Cast Pointer Address to Functions
I have a function address held in an uint64_t. I would like to cast
the function address to a function prototype and create a call to the
function in LLVM. How could I do this ?
This is what works for us:
std::vector<Type*> margs;
FunctionType* fType;
PointerType* pm3_routine;
Value* m3func;
Value* result;
margs.resize(1);
margs[0] = I64;
fType = FunctionType::get(I32, margs, false);
pm3_routine = PointerType::get(fType, 0);
m3func = Builder.CreateIntToPtr(I64_Const((uint64_t)pFunc), pm3_routine, "pm3func");
result = Builder.CreateCall(m3func, parameter, "m3func");
- Chuck
THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY MATERIAL and is thus for use only by the intended recipient. If you received this in error, please contact the sender and delete the e-mail and its attachments from all computers.
Interestingly I have something similar. but does not seem to work.
This one works.
Value *FuncCast = EIR->CreateIntToPtr(FuncAddr, FuncTyPntr, "FuncName");
This one does not work. it gives me an instruction with badref.
CastInst *FuncCast = CastInst::Create(Instruction::IntToPtr,
FuncAddr, FuncTyPntr);
Anyone knows why ?
Thanks
Xin