[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