Frank Winter
2013-Oct-23 02:07 UTC
[LLVMdev] JIT functions' signature known only at runtime
Hi there! I am trying to figure out how I can call the function returned by the JIT execution engine. The only circumstance that makes this case a little problematic is that the function's signature is only available as runtime state. More precisely the arguments to be passed are only available as a vector of, e.g., union Types { void *ptr; float *ptr_float; double *ptr_double; float fl; int in; double db; bool bl; }; std::vector<std::pair<int,Types> > arguments; where the first element of the pair would clearly identify of which type the argument is. I thought that I might not be the first having this problem and checked the mailing list without success. Does LLVM has any glue code to call functions returned by the JIT execution engine? Or is the only solution in this case to pass the address of the whole vector and let the jitted function handle everything? Frank
Dmitry Mikushin
2013-Oct-23 02:38 UTC
[LLVMdev] JIT functions' signature known only at runtime
If the question could be generalized to "how to call the external function without knowing its interface in advance", then the general solution is Foreign Function Interface (FFI). And LLVM's JIT is (at least - was) using FFI for certain things. We faced the same need some time ago, maybe this code can give a rough idea: http://hpcforge.org/scm/viewvc.php/*checkout*/trunk/src/runtime/HostCall.cpp?root=kernelgen - D. 2013/10/23 Frank Winter <fwinter at jlab.org>> Hi there! I am trying to figure out how I can call the function returned > by the JIT execution engine. The only circumstance that makes this case > a little problematic is that the function's signature is only available as > runtime state. More precisely the arguments to be passed are only > available as a vector of, e.g., > > union Types { > void *ptr; > float *ptr_float; > double *ptr_double; > float fl; > int in; > double db; > bool bl; > }; > > std::vector<std::pair<int,**Types> > arguments; > > where the first element of the pair would clearly identify of which type > the argument is. > > I thought that I might not be the first having this problem and checked > the mailing list > without success. > > Does LLVM has any glue code to call functions returned by the JIT > execution engine? > > Or is the only solution in this case to pass the address of the whole > vector and let the > jitted function handle everything? > > > Frank > > ______________________________**_________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/**mailman/listinfo/llvmdev<http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131023/65c71fe0/attachment.html>