Hi Vania,<br><br>If I understood correctly, you have an executable, which is JITing code that has dependencies on the symbols of entire executable. In case dlsym cannot find this symbol, try to link your executable with -rdynamic (gcc) or --export-dynamic (ld):<br>
<br>       -rdynamic<br>           Pass the flag -export-dynamic to the ELF linker, on targets that<br>           support it. This instructs the linker to add all symbols, not only<br>           used ones, to the dynamic symbol table. This option is needed for<br>
           some uses of "dlopen" or to allow obtaining backtraces from within<br>           a program.<br><br>- D.<br><br><div class="gmail_quote">2013/3/13 Vania Joloboff <span dir="ltr"><<a href="mailto:vania.joloboff@inria.fr" target="_blank">vania.joloboff@inria.fr</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
We are new in LLVM...<br>
We want to execute JIT'ed code that links to functions inside our application<br>
For example, the JIT has compiled code like<br>
<br>
extern void open_device(Device * dev);<br>
int foo_bar() { Device dev; ... ; open_device(&dev); ...;}<br>
/<br>
/where open_device() is a function in our own code, that<br>
has initialized and called the ExecutionEngine.<br>
Of course when running we get the error message<br>
<br>
LLVM ERROR: Program used external function open_device which could not be resolved!<br>
<br>
How can we dynamically resolve such external addresses ?<br>
We have seen in the documentation llvm is trying to link<br>
unresolved symbols with dlsym(). In this case it fails.<br>
Is there a hook we can plug in the execution engine so that we control ourselves<br>
the resolution of external symbols after dlsym() has failed.<br>
We still want to try dlsym() first and only when it fails then take control.<br>
<br>
We do not see this in the execution engine interface.<br>
Of course we want to do the resolution only once upon the first call<br>
not for each call to foo_bar() like a profiling listener would do.<br>
<br>
Comments will be appreciated...<span class="HOEnZb"><font color="#888888"><br>
Vania<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
-- <br>
-- Vania Joloboff<br>
<br>
______________________________<u></u>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">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/<u></u>mailman/listinfo/llvmdev</a><br>
</font></span></blockquote></div><br>