[LLVMdev] Cast Pointer Address to Functions
Xin Tong
xerox.time.tech at gmail.com
Mon Jun 18 19:56:32 PDT 2012
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
On Mon, Jun 18, 2012 at 10:38 PM, Caldarale, Charles R
<Chuck.Caldarale at unisys.com> wrote:
>> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at 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.
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list