<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Julius, I had similar questions a while ago. First of all: the
    GlobalMappingLayer is used for explicit mappings from strings to
    function pointers, so that your generated code can access these
    functions. It doesn't do much more.<br>
    <br>
    I didn't inspect your attached example, but I think you can look at
    one of my examples to find out how I wire it up. Maybe that helps:<br>
<a class="moz-txt-link-freetext" href="https://github.com/weliveindetail/JitFromScratch/commit/70277db033d75599eff24ccd802cdf7fdfbcde99">https://github.com/weliveindetail/JitFromScratch/commit/70277db033d75599eff24ccd802cdf7fdfbcde99</a><br>
    <br>
    <blockquote type="cite">The problem I have with that conceptually
      is: The name seems to matter. The abstraction I'd like is that I
      get an llvm::Function*, and that is mapped to &somefunc, the
      name "bla" I gave it should be irrelevant.</blockquote>
    Just query the name of your llvm::Function and pass it also to the
    GlobalMappingLayer (if you want to use it).<br>
    <br>
    <blockquote type="cite">(And that's what I'd like that to be like
      for all functions and function calls and whatnot: The name I give
      them is irrelevant, only the llvm::Function*/llvm::Value*
      matters.) Am I using the wrong API and there is a way to do this
      without the names, without any symbol resolution at all? (I don't
      want to use symbols from the current executable or anywhere else,
      either.)
    </blockquote>
    I think the ExecutionEngine just did the query and pass on
    implicitly.<br>
    <br>
    <blockquote type="cite">The problem I have with that
      implementationally: It just doesn't work. I get a LLVM ERROR:
      Undefined temporary symbol from the ELFObjectWriter (and the error
      is actually about that symbol I'm trying to map)</blockquote>
    Query your mapping during symbol resolution like this:<br>
<a class="moz-txt-link-freetext" href="https://github.com/weliveindetail/JitFromScratch/commit/70277db033d75599eff24ccd802cdf7fdfbcde99#diff-db46172f086b2c8918df9eea96b799c2R165">https://github.com/weliveindetail/JitFromScratch/commit/70277db033d75599eff24ccd802cdf7fdfbcde99#diff-db46172f086b2c8918df9eea96b799c2R165</a><br>
    <br>
    If you want your generated code to have implicit access to functions
    in your binary, then have a look at these two lines:<br>
<a class="moz-txt-link-freetext" href="https://github.com/weliveindetail/JitFromScratch/commit/860bec7e7fae1a1f31ef794bf78d191c44355c4c#diff-db46172f086b2c8918df9eea96b799c2R22">https://github.com/weliveindetail/JitFromScratch/commit/860bec7e7fae1a1f31ef794bf78d191c44355c4c#diff-db46172f086b2c8918df9eea96b799c2R22</a><br>
<a class="moz-txt-link-freetext" href="https://github.com/weliveindetail/JitFromScratch/commit/860bec7e7fae1a1f31ef794bf78d191c44355c4c#diff-db46172f086b2c8918df9eea96b799c2R64">https://github.com/weliveindetail/JitFromScratch/commit/860bec7e7fae1a1f31ef794bf78d191c44355c4c#diff-db46172f086b2c8918df9eea96b799c2R64</a><br>
    <br>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <span class="blob-code-inner">It registers your binary as dynamic
      library and resolves symbols from within your process. In order to
      avoid C++ mangling trouble, the functions that get used may be
      extern "C" qualified. If you use a frontend like Clang to generate
      your code, take care about compatible settings, e.g. debug vs.
      release and ABI-related compile flags like exceptions and RTTI.<br>
      <br>
      Cheers,<br>
      Stefan<br>
    </span><br>
    <div class="moz-cite-prefix">Am 07.11.16 um 11:47 schrieb Julius
      Michaelis via llvm-dev:<br>
    </div>
    <blockquote cite="mid:20161107104717.GA6991@liftm.de" type="cite">Hi,
      <br>
      <br>
      I have migrated an LLVM front-end from LLVM 3.5 to 3.8 and now to
      3.9 and ORC, and there is a concept which I could not transfer.
      Consider:
      <br>
      <br>
      extern "C" { void somefunc() {} }
      <br>
      â€¦
      <br>
      auto llvmfunc = llvm::Function::Create(type,
      llvmFunction::PrivateLinkage, "bla", module));
      <br>
      executionengine.addGlobalMapping(llvmfunc, &somefunc);
      <br>
      // now I have llvmfunc to work with and don't need to consider
      anything else
      <br>
      <br>
      The GlobalMappingLayer class seems to provide the functionality I
      want. I oriented myself on the example from
<a class="moz-txt-link-freetext" href="https://github.com/AndySomogyi/cayman/blob/aaa809c/src/llvm_orc_initial.cpp#L1172">https://github.com/AndySomogyi/cayman/blob/aaa809c/src/llvm_orc_initial.cpp#L1172</a>
      (just oriented, because at least on 3.9, I can not stack the
      GlobalMappingLayer on the ObjectLinkingLayer. I have to put it
      onto the IRCompileLayer. One question I'd have: How does that
      order matter?)
      <br>
      <br>
      The problem I have with that conceptually is: The name seems to
      matter. The abstraction I'd like is that I get an llvm::Function*,
      and that is mapped to &somefunc, the name "bla" I gave it
      should be irrelevant. (And that's what I'd like that to be like
      for all functions and function calls and whatnot: The name I give
      them is irrelevant, only the llvm::Function*/llvm::Value*
      matters.) Am I using the wrong API and there is a way to do this
      without the names, without any symbol resolution at all? (I don't
      want to use symbols from the current executable or anywhere else,
      either.)
      <br>
      <br>
      The problem I have with that implementationally: It just doesn't
      work. I get a LLVM ERROR: Undefined temporary symbol from the
      ELFObjectWriter (and the error is actually about that symbol I'm
      trying to map), none of the llvm assertions fail. I compiled a
      minimal example of what I'm doing and attached it. The curious
      part is that the lambda resolver does not even get invoked… Can
      anybody tell me what I am doing wrong?
      <br>
      <br>
      Thank you
      <br>
      Julius
      <br>
      <br>
      <br>
      PS: Related thread:
      <a class="moz-txt-link-freetext" href="http://lists.llvm.org/pipermail/llvm-dev/2015-August/thread.html#89230">http://lists.llvm.org/pipermail/llvm-dev/2015-August/thread.html#89230</a>
      <br>
      <br>
      PPS:
      <br>
      The whole thing I'm building is supposed to be a script engine for
      a game. As the scripts aren't supposed to have any access outside
      the game, I'd like as little linking magic as possible.
      <br>
      It's still in early stages.
<a class="moz-txt-link-freetext" href="https://git.openclonk.org/jcaesar/experimental.git/blob/7be141ce667f4689428943592bae0a7568134213:/src/script/C4AulCompiler.cpp">https://git.openclonk.org/jcaesar/experimental.git/blob/7be141ce667f4689428943592bae0a7568134213:/src/script/C4AulCompiler.cpp</a><br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
<a class="moz-txt-link-freetext" href="https://about.me/stefan.graenitz">https://about.me/stefan.graenitz</a></pre>
  </body>
</html>