<br><br><div class="gmail_quote">On 3 February 2010 15:29, Garrison Venn <span dir="ltr"><<a href="mailto:gvenn.cfe.dev@gmail.com">gvenn.cfe.dev@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi James,<br>
<div class="im"><br>
> This is interesting. I've just implemented dynamic loading of bitcode modules into lli for my project. I did this by hacking lli using the Linker class. Is ExecutionEngine::addGlobalMapping() preferred for this purpose?<br>

<br>
</div>I'm not sure about the preferred way, but at least for the JIT, here is an email from Jeffrey<br>
concerning a previous thread. The issue in that thread was solved via use of<br>
ExecutionEngine::addGlobalMapping(...). I don't know if the inability of the JIT or<br>
interpreter systems to automatically search in other modules is by design or not.<br></blockquote><div><br>Hi Garrison,<br><br>Thanks for that. I got the same error that Michael Muller posted below and just assumed I'd need to use the linker to resolve it. I'm linking dynamically loaded modules on demand into the existing main module for the running program created by lli on startup. This seems to work on small test cases but I've no idea if this is the right thing to do (I doubt it's thread safe for example given the naive way I'm doing it). I think I need to go read the source and documentation!<br>
 <br>-- James<br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Garrison<br>
<br>
On Jan 11, 2010, at 14:39, Jeffrey Yasskin wrote:<br>
<br>
> The JIT tries to handle this in some cases<br>
> (<a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp?annotate=92771#l942" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp?annotate=92771#l942</a>),<br>

> but doesn't handle it for functions. There aren't any tests, so I'm<br>
> not surprised it's broken.<br>
><br>
> The JIT would be simpler if we just dropped multiple-module support<br>
> and asked people to link their modules together before trying to JIT<br>
> them.  Is there a reason you can't do that?<br>
><br>
> If there is, could you write a test for<br>
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/JIT/" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/JIT/</a><br>
> that exercises the behavior you want, and file a bug with it attached?<br>
> I'm not likely to actually implement that any time soon, but having a<br>
> bug with a test will make it easier for someone else to pick it up.<br>
><br>
> Thanks,<br>
> Jeffrey<br>
><br>
> On Fri, Jan 8, 2010 at 4:49 PM, Michael Muller <<a href="mailto:mmuller@enduden.com">mmuller@enduden.com</a>> wrote:<br>
>><br>
>> Hi all,<br>
>><br>
>> I'm trying to use a function defined in one LLVM module from another module<br>
>> (in the JIT) but for some reason it's not working out.  My sequence of<br>
>> activity is roughly like this:<br>
>><br>
>>  1) Create moduleA<br>
>>  2) Create moduleB with "func()"<br>
>>  3) execEng = ExecutionEngine::create(<br>
>>         new ExistingModuleProvider(moduleB));<br>
>>  4) execute "func()" (this works fine)<br>
>>  4) add "func()" to moduleA as a declaration (no code blocks) with External<br>
>>     linkage.<br>
>>  5) execEng->addModuleProvider(new ExistingModuleProvider(moduleA));<br>
>>  6) run a function in moduleA that calls "func()"<br>
>><br>
>> I get:<br>
>>  LLVM ERROR: Program used external function 'func' which could not be resolved!<br>
>><br>
>> I'm guessing I'm either going about this wrong or missing something.  Can<br>
>> anyone offer me some insight?<br>
>><br>
>> =============================================================================<br>
>> michaelMuller = <a href="mailto:mmuller@enduden.com">mmuller@enduden.com</a> | <a href="http://www.mindhog.net/%7Emmuller" target="_blank">http://www.mindhog.net/~mmuller</a><br>
>> -----------------------------------------------------------------------------<br>
>> We are the music-makers, and we are the dreamers of dreams<br>
>>  - Arthur O'Shaughnessy<br>
>> =============================================================================<br>
<div><div></div><div class="h5">>> _______________________________________________<br>
>> LLVM Developers mailing list<br>
>> <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
>><br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br>
</div></div></blockquote></div><br>