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

David Blaikie dblaikie at gmail.com
Thu Mar 12 15:29:10 PDT 2015


On Thu, Mar 12, 2015 at 3:24 PM, Kevin Hu <hxy9243 at gmail.com> 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?
>

You can look at the Clang code to see how it produces this IR - or you
might be able to use the LLVM C++ backend that will produce C++ source code
that generates the textual IR it's given.


>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150312/711ca052/attachment.html>


More information about the llvm-dev mailing list