<div dir="ltr">Hi Frank,<div><br></div><div>This is on Linux, right? If so, you will need to pass --export-dynamic to ld to export symbols from the main binary.</div><div><br></div><div>For example, given source file foo.c:</div><div><br></div><div><font face="monospace, monospace">#include <stdio.h></font></div><div><font face="monospace, monospace">#include <dlfcn.h></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">void bar() {}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">int main(int argc, char *argv[]) {</font></div><div><font face="monospace, monospace">  printf("bar is %p\n", dlsym(RTLD_DEFAULT, "bar")); </font></div><div><font face="monospace, monospace">  return 0;</font></div><div><font face="monospace, monospace">}</font></div><div><br></div><div>You will see:</div><div><br></div><div><font face="monospace, monospace">$ clang -O3 -D_GNU_SOURCE=1 -o foo foo.c -ldl</font></div><div><font face="monospace, monospace">$ ./foo</font></div><div><font face="monospace, monospace">bar is (nil)</font></div><div><font face="monospace, monospace">$ clang -O3 -D_GNU_SOURCE=1 -Wl,--export-dynamic -o foo foo.c -ldl</font></div><div><font face="monospace, monospace">$ ./foo</font></div><div><font face="monospace, monospace">bar is 0x400820</font></div><div><br></div><div>Hope this helps!</div><div><br></div><div>Cheers,</div><div>Lang.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jun 28, 2018 at 12:40 PM Frank Winter via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am upgrading our JIT application to use LLVM 6.0.0, and with this <br>
transition I am making the move to use the new MCJIT facility.<br>
<br>
A problem I am encountering is that the math functions from libm are not <br>
resolved/found. I am using the lambda resolver from the KaleidoscopeJIT <br>
class which first searches the present modules and, if that is <br>
unsuccessful, continues the search in the whole process space.<br>
<br>
The generated modules would declare external functions like<br>
<br>
declare float @cosf(float)<br>
<br>
and would call it like:<br>
<br>
   %17 = call float @cosf(float %16)<br>
<br>
The datalayout is set to<br>
<br>
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"<br>
<br>
The code snippet that adds the module is pretty much from the JIT tutorial:<br>
<br>
       auto Resolver = llvm::orc::createLambdaResolver(<br>
                               [&](const std::string &Name) {<br>
                             if (auto Sym = <br>
CompileLayer.findSymbol(Name, false))<br>
                               return Sym;<br>
                             return llvm::JITSymbol(nullptr);<br>
                               },<br>
                               [](const std::string &Name) {<br>
                             if (auto SymAddr =<br>
llvm::RTDyldMemoryManager::getSymbolAddressInProcess(Name))<br>
                               return llvm::JITSymbol(SymAddr, <br>
llvm::JITSymbolFlags::Exported);<br>
                             return llvm::JITSymbol(nullptr);<br>
                               });<br>
<br>
       cantFail(CompileLayer.addModule(std::move(M),<br>
                       std::move(Resolver)));<br>
<br>
When running the program I receive the following error:<br>
<br>
LLVM ERROR: Program used external function 'cosf' which could not be <br>
resolved!<br>
<br>
This is on an Intel i7 CPU with LLVM targets configured as "X86".<br>
<br>
Adding the '-lm' and '-ldl' option to the linker command that links the <br>
final program doesn't help. (I even called the 'cosf' function by hand <br>
in the host code to make sure it is mapped - didn't change the behavior <br>
of the MCJIT resolver.)<br>
<br>
Any ideas?<br>
<br>
<br>
Best wishes,<br>
<br>
Frank<br>
<br>
<br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>