Kevin Hu
2015-Mar-12 22:00 UTC
[LLVMdev] Passing a function pointer as parameter to function call?
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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150312/e0d02b41/attachment.html>
David Blaikie
2015-Mar-12 22:09 UTC
[LLVMdev] Passing a function pointer as parameter to function call?
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 > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150312/d5daa829/attachment.html>
Kevin Hu
2015-Mar-12 22:24 UTC
[LLVMdev] Passing a function pointer as parameter to function call?
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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150312/4377cf4e/attachment.html>