<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>
      <blockquote type="cite"><font face="sans-serif" size="2">I tried
          loading the "msvcrt.lib"
          as a archive. That was... a bad idea! I get a Exception while
          loading:</font>
        <br>
        <font face="sans-serif" size="2">Assertion failed:
          ((int64_t)Result <=
          INT32_MAX) && "Relocation overflow", file
          \lib\executionengine\runtimedyld\Targets/RuntimeDyldCOFFX86_64.h,
          line 81</font></blockquote>
      It's a limitation of the COFF/PE format and unrelated to
      exceptions. This patch explains it and shows a workaround:<br>
<a class="moz-txt-link-freetext" href="https://github.com/weliveindetail/pj-llvm/commit/97cd336d458ae9c73232d1b539ceefcdb2f5eb0f">https://github.com/weliveindetail/pj-llvm/commit/97cd336d458ae9c73232d1b539ceefcdb2f5eb0f</a><br>
      <br>
      <blockquote type="cite"><font face="sans-serif" size="2">Is there
          no hope left?</font></blockquote>
      Well at least I am not aware of a solution.<br>
      <br>
      Am 28.09.17 um 16:04 schrieb <a class="moz-txt-link-abbreviated" href="mailto:bjoern.gaier@horiba.com">bjoern.gaier@horiba.com</a>:<br>
    </p>
    <blockquote type="cite"
cite="mid:OF7EFB9111.9CDF74C8-ONC12581A9.004C8488-C12581A9.004D52D5@smtpgw.horiba.co.jp"><font
        face="sans-serif" size="2">Hello Stefan,</font>
      <br>
      <br>
      <font face="sans-serif" size="2">I'm happy someone replied to my
        problem!
        Many thanks! To be honest... I didn't understood much of your
        mail. I'm
        a beginner with the JIT - so I will explain what I've done.</font>
      <br>
      <br>
      <font face="sans-serif" size="2">To manage the memory and resolve
        symbols,
        I'm using my own Resolver-Class, which overloads the allocation
        and the
        findSymbol functions. I've noticed today, that the
        "registerEHFrames"
        function of my class gets called automatically, with correct
        values. I'm
        remapping my code and the address are still correct. Great! But,
        what should
        I do with it? I pass the values to the original function, but my
        exception
        won't be caught! It's an exception raised inside the JITTED code
        and should
        also catched there.</font>
      <br>
      <br>
      <font face="sans-serif" size="2">I tried loading the "msvcrt.lib"
        as a archive. That was... a bad idea! I get a Exception while
        loading:</font>
      <br>
      <font face="sans-serif" size="2">Assertion failed:
        ((int64_t)Result <=
        INT32_MAX) && "Relocation overflow", file
        \lib\executionengine\runtimedyld\Targets/RuntimeDyldCOFFX86_64.h,
        line 81</font>
      <br>
      <br>
      <font face="sans-serif" size="2">Research didn't helped me! My
        code was
        compiled with /MD, but it didn't changed. So I'm still stupid D:</font>
      <br>
      <font face="sans-serif" size="2">The JITTED code must be loaded to
        shared
        memory later - there aren't libraries, so even if this would
        work, it wouldn't
        help me. I tried compiling my code with sjlj-exceptions. Didn't
        worked...</font>
      <br>
      <br>
      <font face="sans-serif" size="2">Is there no hope left?</font>
      <br>
      <br>
      <font face="sans-serif" size="2">Kind regards</font>
      <br>
      <font face="sans-serif" size="2">Björn</font>
      <br>
      <br>
      <br>
      <br>
      <font face="sans-serif" size="1" color="#5f5f5f">From:      
         </font><font face="sans-serif" size="1">Stefan Gränitz
        <a class="moz-txt-link-rfc2396E" href="mailto:stefan.graenitz@gmail.com"><stefan.graenitz@gmail.com></a></font>
      <br>
      <font face="sans-serif" size="1" color="#5f5f5f">To:      
         </font><font face="sans-serif" size="1"><a class="moz-txt-link-abbreviated" href="mailto:bjoern.gaier@horiba.com">bjoern.gaier@horiba.com</a>,
        <a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a></font>
      <br>
      <font face="sans-serif" size="1" color="#5f5f5f">Date:      
         </font><font face="sans-serif" size="1">27.09.2017 23:09</font>
      <br>
      <font face="sans-serif" size="1" color="#5f5f5f">Subject:    
           </font><font face="sans-serif" size="1">Re: [llvm-dev]
        Clang/LLVM JIT - When to use "registerEHFrames()"</font>
      <br>
      <hr noshade="noshade">
      <br>
      <br>
      <br>
      <font size="3">Hi Björn<br>
        <br>
        To first answer your questionin the subject: For x86
        registerEHFrames()
        is only a stub. For x86_64 registerEHFrames() is implemented
        properly in
        RuntimeDyldCOFFX86_64, calling MemMgr.registerEHFrames() for
        each EH frame
        section. It should be called and work out of the box without
        your involvement,
        but unfortunately it won't solve your issue. All the essential
        information
        is there in the comments, just check the base classes.<br>
        <br>
        This thread from last year helps with your unresolved symbol:</font><font
        size="3" color="blue"><u><br>
        </u></font><a
        href="http://lists.llvm.org/pipermail/llvm-dev/2016-October/106458.html"
        moz-do-not-send="true"><font size="3" color="blue"><u>http://lists.llvm.org/pipermail/llvm-dev/2016-October/106458.html</u></font></a><font
        size="3"><br>
        <br>
        Back then I tried to solve a related issue: SEH exceptions
        thrown from
        code loaded with RuntimeDyld had to be caught in statically
        compiled code.
        It turned out Windows explicitly prohibits this. I got in touch
        with Microsoft
        people and IIRC it's due to security concerns.<br>
        <br>
        Depending on your specific case, you may want to fall back to </font><font
        face="Calibri" size="2">vectored
        exception handling. In my experience this was a dead end though.
        If you
        need a solution for arbitrary situations, you just can't jump
        back to a
        "safe" place to continue execution. I tried setjump (on each
        entry point to the dynamically loaded code) / longjmp (in the
        vectored
        exception handler), but the address was invalidated when I
        accessed it.
        I suspect it's kind of undefined behavior to call longjmp
        outside a child
        frame of the function that called setjmp. Anyway it turned all
        far too
        hacky.</font><font size="3"><br>
        <br>
        If you are willing to do research, compare implementations and
        behavior
        with the MachO and ELF versions. At least one of them works,
        just not on
        Windows ;)<br>
        Also check the LLILC project: </font><a
        href="https://github.com/dotnet/llilc" moz-do-not-send="true"><font
          size="3" color="blue"><u>https://github.com/dotnet/llilc</u></font></a><font
        size="3">
        I heard about some solution that uses trampolines to push
        exceptions back
        to dynamically loaded code and handle them there.<br>
        <br>
        AND disclaimer: I did not follow recent developments in this
        area. If there's
        news please let me know!<br>
        <br>
        Cheers & Good Luck!<br>
        Stefan</font>
      <p><font size="3">Am 25.09.17 um 11:31 schrieb via llvm-dev:</font>
        <br>
        <font face="sans-serif" size="2">Hello friendly LLVM-World,</font><font
          size="3">
          <br>
        </font><font face="sans-serif" size="2"><br>
          because I don't know if I had send my problem to the correct
          Mailing-List,
          I will send my problem to this address too. I'm not subscribed
          to this
          list, so please add my in CC if you response.</font><font
          size="3"> <br>
        </font><font face="sans-serif" size="2"><br>
          Kind regards</font><font size="3"> </font><font
          face="sans-serif" size="2"><br>
          Björn</font><font size="3"> <br>
          <br>
        </font><font face="sans-serif" size="1" color="#5f5f5f"><br>
          From:        </font><font face="sans-serif" size="1">Bjoern
          Gaier/HE/HORIBA</font><font size="3"> </font><font
          face="sans-serif" size="1" color="#5f5f5f"><br>
          To:        </font><font face="sans-serif" size="1">Clang
          Dev </font><a href="mailto:cfe-dev@lists.llvm.org"
          moz-do-not-send="true"><font face="sans-serif" size="1"
            color="blue"><u><cfe-dev@lists.llvm.org></u></font></a><font
          face="sans-serif" size="1">,
          "cfe-dev" </font><a
          href="mailto:cfe-dev-bounces@lists.llvm.org"
          moz-do-not-send="true"><font face="sans-serif" size="1"
            color="blue"><u><cfe-dev-bounces@lists.llvm.org></u></font></a><font
          size="3">
        </font><font face="sans-serif" size="1" color="#5f5f5f"><br>
          Date:        </font><font face="sans-serif" size="1">19.09.2017
          08:05</font><font size="3"> </font><font face="sans-serif"
          size="1" color="#5f5f5f"><br>
          Subject:        </font><font face="sans-serif" size="1">Clang/LLVM
          JIT - When to use "registerEHFrames()"</font><font size="3"> <br>
        </font>
      </p>
      <hr noshade="noshade"><font size="3"><br>
      </font><font face="sans-serif" size="2"><br>
        Hello friendly Clang-World,</font><font size="3"> <br>
      </font><font face="sans-serif" size="2"><br>
        I was experimenting with Clang and the JIT capabilities of LLVM.
        Most of
        my attempts were successfully but, I still fail miserably at
        exceptions.
        Doing research I found the function "registerEHFrames()" which
        should assist me supporting exceptions - but sadly the
        documentation I
        found wasn't helpful.</font><font size="3"> </font><font
        face="sans-serif" size="2"><br>
        I looked at into the "notifyObjectLoaded" function and
        discovered
        that there appear some symbol names starting with "$" - I
        expected
        them to be connected to my try and catch block. But what now? As
        usually,
        at this point I have there names, but can't get there address to
        register
        them with the "registerEHFrames()" function. Also the JITTER
        still wants an address for "??_7type_info@@6B@" which is the
        virtual table of the type_info struct.</font><font size="3"> <br>
      </font><font face="sans-serif" size="2"><br>
        Confusing! So friendly Clang-World, could you please help? </font><font
        size="3"><br>
      </font><font face="sans-serif" size="2"><br>
        Not so important - but has the dragon which decorates clang and
        LLVM a
        name?</font><font size="3"> <br>
      </font><font face="sans-serif" size="2"><br>
        Kind regards</font><font size="3"> </font><font
        face="sans-serif" size="2"><br>
        Björn</font><font size="3"> </font><font face="sans-serif"
        size="2"><br>
        <br>
        Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB
        9816, USt.ID-Nr.
        DE 114 165 789<br>
        Geschäftsführer: Hiroshi Kawamura, Dr Hiroshi Nakamura, Markus
        Bode, Heiko
        Lampert, Takashi Nagano, Takeshi Fukushima.</font><font size="3">
        <br>
      </font>
      <br>
      <tt><font size="3">_______________________________________________<br>
          LLVM Developers mailing list<br>
        </font></tt><a href="mailto:llvm-dev@lists.llvm.org"
        moz-do-not-send="true"><tt><font size="3" color="blue"><u>llvm-dev@lists.llvm.org</u></font></tt></a><tt><font
          size="3"><br>
        </font></tt><a
        href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
        moz-do-not-send="true"><tt><font size="3" color="blue"><u>http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</u></font></tt></a><tt><font
          size="3"><br>
        </font></tt>
      <br>
      <tt><font size="3">-- <br>
        </font></tt><a href="https://weliveindetail.github.io/blog/"
        moz-do-not-send="true"><tt><font size="3" color="blue"><u>https://weliveindetail.github.io/blog/</u></font></tt></a><tt><font
          size="3"><br>
        </font></tt><a
        href="https://cryptup.org/pub/stefan.graenitz@gmail.com"
        moz-do-not-send="true"><tt><font size="3" color="blue"><u>https://cryptup.org/pub/stefan.graenitz@gmail.com</u></font></tt></a>
      <br>
      <br>
      <font face="sans-serif" size="2"><br>
        Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB
        9816, USt.ID-Nr.
        DE 114 165 789<br>
        Geschäftsführer: Hiroshi Kawamura, Dr Hiroshi Nakamura, Markus
        Bode, Heiko
        Lampert, Takashi Nagano, Takeshi Fukushima.</font>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
<a class="moz-txt-link-freetext" href="https://weliveindetail.github.io/blog/">https://weliveindetail.github.io/blog/</a>
<a class="moz-txt-link-freetext" href="https://cryptup.org/pub/stefan.graenitz@gmail.com">https://cryptup.org/pub/stefan.graenitz@gmail.com</a></pre>
  </body>
</html>