[LLVMdev] Using a function from another module

Garrison Venn gvenn.cfe.dev at gmail.com
Sun Jan 10 10:38:14 PST 2010

Won't passing llvm::Function* around vs strings (function names), also work, at code generation time, 
without the need for a module A dec to module B impl. mapping?


On Jan 10, 2010, at 10:31, Kenneth Uildriks wrote:

> On Sun, Jan 10, 2010 at 8:58 AM, Michael Muller <mmuller at enduden.com> wrote:
>> Michael Muller wrote:
>>> Hi all,
>>> I'm trying to use a function defined in one LLVM module from another module
>>> (in the JIT) but for some reason it's not working out.  My sequence of
>>> activity is roughly like this:
>>>   1) Create moduleA
>>>   2) Create moduleB with "func()"
>>>   3) execEng = ExecutionEngine::create(
>>>          new ExistingModuleProvider(moduleB));
>>>   4) execute "func()" (this works fine)
>>>   4) add "func()" to moduleA as a declaration (no code blocks) with External
>>>      linkage.
>>>   5) execEng->addModuleProvider(new ExistingModuleProvider(moduleA));
>>>   6) run a function in moduleA that calls "func()"
>>> I get:
>>>   LLVM ERROR: Program used external function 'func' which could not be resolved!
>>> I'm guessing I'm either going about this wrong or missing something.  Can
>>> anyone offer me some insight?
>> I've played around with this some more.
>> It looks like the only way that I can get this to work is to do an
>> ExecutionEngine::addGlobalMapping() on the function declaration in moduleA to
>> map it to the function pointer in moduleB.
>> This seems awkward, is there a better way to do this?
> I'm doing the same thing, and had to do it in the same way.
> Just because the JIT loads two modules doesn't mean that they're
> automatically linked together within the JIT... one module cannot call
> functions in the other unless the external functions are declared and
> explicitly mapped using addGlobalMapping.  I'm guessing it's meant to
> be that way.
> _______________________________________________
> 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