<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Hi,</p>
    <p>Not sure whether this matches your use case, but the Orc-based
      JIT used in LLI appears to be using
      `llvm::orc::LocalCXXRuntimeOverrides`
(<a class="moz-txt-link-freetext" href="http://llvm.org/doxygen/classllvm_1_1orc_1_1LocalCXXRuntimeOverrides.html">http://llvm.org/doxygen/classllvm_1_1orc_1_1LocalCXXRuntimeOverrides.html</a>)
      to override `__cxa_atexit`:</p>
    <p><a class="moz-txt-link-freetext" href="https://github.com/llvm-mirror/llvm/blob/release_50/tools/lli/OrcLazyJIT.h#L74">https://github.com/llvm-mirror/llvm/blob/release_50/tools/lli/OrcLazyJIT.h#L74</a><br>
    </p>
    <p><a class="moz-txt-link-freetext" href="https://github.com/llvm-mirror/llvm/blob/release_50/tools/lli/lli.cpp#L631">https://github.com/llvm-mirror/llvm/blob/release_50/tools/lli/lli.cpp#L631</a><br>
    </p>
    Best,<br>
    Matt<br>
    <br>
    <div class="moz-cite-prefix">On 11/23/2017 19:49, Stefan Gränitz via
      llvm-dev wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:818e8dd3-06bb-ab22-215f-392a2542e165@gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      Maybe the easiest workaround would be overriding symbol resolution
      for the function name and redirect it to your own version in
      static code (and hope it has no bad side effect on your use case).<br>
      <br>
      I think when running 3rd party code, the only way to definitely
      avoid this kind of trouble is to never deallocate any code or data
      sections. Doug Binks mentioned that too in his cppcast about
      Runtime Compiled C++ <a class="moz-txt-link-freetext"
        href="http://cppcast.com/2016/05/doug-binks/"
        moz-do-not-send="true">http://cppcast.com/2016/05/doug-binks/</a><br>
      <br>
      <div class="moz-cite-prefix">Am 21.11.17 um 14:20 schrieb
        Nikodemus Siivola via llvm-dev:<br>
      </div>
      <blockquote type="cite"
cite="mid:CADow0CpEC8EZ+2-PUa=5J_Eyg-7GiY3cogrBA+2Le10DqO8mKw@mail.gmail.com">
        <div dir="ltr">Transform the atexit into equivalent code you can
          control, run it before the destructors of the JIT engine run?
          <div><br>
          </div>
        </div>
        <div class="gmail_extra"><br>
          <div class="gmail_quote">On Tue, Nov 21, 2017 at 12:13 PM,
            Alex Denisov via llvm-dev <span dir="ltr"><<a
                href="mailto:llvm-dev@lists.llvm.org" target="_blank"
                moz-do-not-send="true">llvm-dev@lists.llvm.org</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex"><span
                class="">> It's not the job of the Orc engine.<br>
                <br>
              </span>I could argue about this, but I won’t :)<br>
              <span class=""><br>
                > Just don't use atexit.<br>
                <br>
              </span>The problem is that I run third-party programs. I
              cannot control them.<br>
              <div class="HOEnZb">
                <div class="h5"><br>
                  > On 20. Nov 2017, at 01:04, Joerg Sonnenberger via
                  llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org"
                    moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
                  wrote:<br>
                  ><br>
                  > On Mon, Nov 20, 2017 at 12:22:49AM +0100, Alex
                  Denisov via llvm-dev wrote:<br>
                  >> JIT allocates and maps some memory for the
                  execution. Some function X at address 0xdeadbeef is
                  part of this memory.<br>
                  >> JIT calls a code that passes the X to atexit.<br>
                  >> JIT deallocates and unmaps the memory used
                  for execution (either via objectLayer.removeObjectSet
                  or by calling JIT's destructors)<br>
                  >> atexit (cxa_finalize_ranges) calls the X at
                  0xdeadbeef which does not belong to 'us' anymore,
                  which leads to the crash.<br>
                  ><br>
                  > Sounds plausible.<br>
                  ><br>
                  >> Given that my assumption is correct what can
                  we do about this? Is there<br>
                  >> anything that can be done to cover this case
                  inside of the Orc engine?<br>
                  ><br>
                  > It's not the job of the Orc engine. Just don't
                  use atexit.<br>
                  ><br>
                  > Joerg<br>
                  > ______________________________<wbr>_________________<br>
                  > LLVM Developers mailing list<br>
                  > <a href="mailto:llvm-dev@lists.llvm.org"
                    moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
                  > <a
                    href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
                  <br>
                </div>
              </div>
              <br>
              ______________________________<wbr>_________________<br>
              LLVM Developers mailing list<br>
              <a href="mailto:llvm-dev@lists.llvm.org"
                moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
              <a
                href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
                rel="noreferrer" target="_blank" moz-do-not-send="true">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
              <br>
            </blockquote>
          </div>
          <br>
        </div>
        <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" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" moz-do-not-send="true">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://weliveindetail.github.io/blog/" moz-do-not-send="true">https://weliveindetail.github.io/blog/</a>
<a class="moz-txt-link-freetext" href="https://cryptup.org/pub/stefan.graenitz@gmail.com" moz-do-not-send="true">https://cryptup.org/pub/stefan.graenitz@gmail.com</a></pre>
      <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>
  </body>
</html>