[LLVMdev] Passing a function pointer as parameter to function call?

Kevin Hu hxy9243 at gmail.com
Fri Mar 13 18:21:23 PDT 2015


Dear John and David,


Many thanks. It works this way.

Thanks a lot for the guidance.


Regards,
Kevin

On Fri, Mar 13, 2015 at 4:52 AM, John Criswell <jtcriswel at gmail.com> wrote:

>  Dear Kevin,
>
> In the LLVM IR, the function and the pointer to the function are the same
> thing.  Within an LLVM pass, if you have a pointer to a Function object:
>
> Function * F = M.getOrInsertFunction(...)
>
> ... then you can use F as a parameter to a call instruction:
>
> std::vector<Value *> args;
> args.push_back (F);
> CallInst * CI = CallInst::Create (AtExit, args, ...);
>
> Regards,
>
> John Criswell
>
>
> On 3/12/15 11:24 PM, Kevin Hu wrote:
>
> Hi David,
>
>
>  Thanks very much.
>
>  I tried and the IR it produces is:
>
>  %call = call i32 @atexit(void ()* foo)
>
>  The problem is this still doesn't give me any clues how to produce the
> code inside my LLVM pass. How do I get the pointer to this foo function?
>
>  Any hints?
>
>
>  Thank you.
> Kevin Hu
>
> On Thu, Mar 12, 2015 at 6:09 PM, David Blaikie <dblaikie at gmail.com> wrote:
>
>> Easiest thing to do would be to write the equivalent C code, throw it
>> through Clang, and look at the IR it produces.
>>
>>  On Thu, Mar 12, 2015 at 3:00 PM, Kevin Hu <hxy9243 at gmail.com> wrote:
>>
>>>  Dear all,
>>>
>>>
>>>  I'm writing an LLVM pass, and I want to insert a call instruction that
>>> takes a function pointer as a parameter. The effect would be the same as
>>> following:
>>>
>>>  atexit(foo);
>>>
>>>  Where foo is a function I insert with M.getOrInsertFunction(), which
>>> in LLVM is a Function class.
>>>
>>>  I searched for a while and did not come up with a satisfying answer.
>>> Should I create a Value class of pointer type, or a Int64Ty for a pointer?
>>> How do I get the pointer to the function I create? I also tried passing foo
>>> as Function* in LLVM as parameter to create CallInst directly, and I
>>> doesn't seem to work.
>>>
>>>  Any hints and enlightenment is appreciated. Many thanks.
>>>
>>>
>>>  Regards,
>>>  Yours,
>>> Kevin Hu
>>>
>>>  _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>
>>>
>>
>
>
>  --
>  Yours,
> X. Hu
>
>
> _______________________________________________
> LLVM Developers mailing listLLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.eduhttp://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
> --
> John Criswell
> Assistant Professor
> Department of Computer Science, University of Rochesterhttp://www.cs.rochester.edu/u/criswell
>
>


-- 
Yours,
X. Hu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150313/e6465502/attachment.html>


More information about the llvm-dev mailing list