<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Philip,<div class=""><br class=""></div><div class="">Unfortunately there was a week where the admins were not available for creating accounts. We now have a team of 5 people who are set up to create bugzilla accounts so I don’t expect this to be issue going forward.</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Tanya</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Apr 20, 2017, at 10:58 AM, Philip Reames via llvm-foundation <<a href="mailto:llvm-foundation@lists.llvm.org" class="">llvm-foundation@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
  

    <meta http-equiv="content-type" content="text/html; charset=utf-8" class="">
  
  <div bgcolor="#FFFFFF" text="#000000" class=""><p class="">FYI: this is the third person I know of who has run into problems
      getting a bugzilla account created.  This needs addressed ASAP.</p><p class="">Philip<br class="">
    </p>
    <div class="moz-forward-container"><br class="">
      <br class="">
      -------- Forwarded Message --------
      <table class="moz-email-headers-table" border="0" cellpadding="0" cellspacing="0">
        <tbody class="">
          <tr class="">
            <th align="RIGHT" valign="BASELINE" nowrap="nowrap" class="">Subject:
            </th>
            <td class="">Re: [llvm-dev] Possible stack corruption during call to
              JITSymbol::getAddress()</td>
          </tr>
          <tr class="">
            <th align="RIGHT" valign="BASELINE" nowrap="nowrap" class="">Date: </th>
            <td class="">Thu, 20 Apr 2017 09:42:39 -0700</td>
          </tr>
          <tr class="">
            <th align="RIGHT" valign="BASELINE" nowrap="nowrap" class="">From: </th>
            <td class="">David Lurton via llvm-dev
              <a class="moz-txt-link-rfc2396E" href="mailto:llvm-dev@lists.llvm.org"><llvm-dev@lists.llvm.org></a></td>
          </tr>
          <tr class="">
            <th align="RIGHT" valign="BASELINE" nowrap="nowrap" class="">Reply-To:
            </th>
            <td class="">David Lurton <a class="moz-txt-link-rfc2396E" href="mailto:dlurton@gmail.com"><dlurton@gmail.com></a></td>
          </tr>
          <tr class="">
            <th align="RIGHT" valign="BASELINE" nowrap="nowrap" class="">To: </th>
            <td class="">Lang Hames <a class="moz-txt-link-rfc2396E" href="mailto:lhames@gmail.com"><lhames@gmail.com></a></td>
          </tr>
          <tr class="">
            <th align="RIGHT" valign="BASELINE" nowrap="nowrap" class="">CC: </th>
            <td class="">LLVM Developers Mailing List
              <a class="moz-txt-link-rfc2396E" href="mailto:llvm-dev@lists.llvm.org"><llvm-dev@lists.llvm.org></a></td>
          </tr>
        </tbody>
      </table>
      <br class="">
      <br class="">
      <div dir="ltr" class="">Well, 3 days later and so far nobody has responded
        to my request for an account on <a moz-do-not-send="true" href="http://bugs.llvm.org/" class="">bugs.llvm.org</a>.. so it doesn't
        look like I'm going to be able to create that bug on my own,
        unfortunately.</div>
      <div class="gmail_extra"><br class="">
        <div class="gmail_quote">On Wed, Apr 19, 2017 at 6:27 PM, Lang
          Hames <span dir="ltr" class=""><<a moz-do-not-send="true" href="mailto:lhames@gmail.com" target="_blank" class="">lhames@gmail.com</a>></span>
          wrote:<br class="">
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div dir="ltr" class="">Hi David,
              <div class=""><br class="">
              </div>
              <div class="">Thanks very much for that. I'll continue to dig in as
                time permits, and I'll update the bug report with my
                progress once it's filed.</div>
              <div class=""><br class="">
              </div>
              <div class="">Cheers,</div>
              <div class="">Lang.</div>
            </div>
            <div class="HOEnZb">
              <div class="h5">
                <div class="gmail_extra"><br class="">
                  <div class="gmail_quote">On Mon, Apr 17, 2017 at 6:42
                    PM, David Lurton <span dir="ltr" class=""><<a moz-do-not-send="true" href="mailto:dlurton@gmail.com" target="_blank" class="">dlurton@gmail.com</a>></span>
                    wrote:<br class="">
                    <blockquote class="gmail_quote" style="margin:0 0 0
                      .8ex;border-left:1px #ccc solid;padding-left:1ex">
                      <div dir="ltr" class="">Thanks Lang.  I think I'll go the
                        bug creation route.  I have an email out to
                        llvm-admin requesting an account on <a moz-do-not-send="true" href="http://bugs.llvm.org/" target="_blank" class="">bugs.llvm.org</a>. 
                        I'll let you know when I've filed the bug.</div>
                      <div class="m_-3769178140563680007HOEnZb">
                        <div class="m_-3769178140563680007h5">
                          <div class="gmail_extra"><br class="">
                            <div class="gmail_quote">On Sun, Apr 16,
                              2017 at 9:44 PM, Lang Hames <span dir="ltr" class=""><<a moz-do-not-send="true" href="mailto:lhames@gmail.com" target="_blank" class="">lhames@gmail.com</a>></span>
                              wrote:<br class="">
                              <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px
                                #ccc solid;padding-left:1ex">
                                <div dir="ltr" class="">Hi David,
                                  <div class=""><br class="">
                                  </div>
                                  <div class="">This looks like bad eh-frame data
                                    due to a failure to fix up the frame
                                    descriptor entries:</div>
                                  <div class=""><br class="">
                                  </div>
                                  <div class=""><font face="monospace, monospace" class=""><debug:
                                      adding frame> EHFrameAddr:
                                      0x7feae5827000, EHFrameLoadAddr:
                                      0x00000000e5827000, EHFrameSize:
                                      60<br class="">
                                    </font></div>
                                  <div class="">
                                    <div class=""><font face="monospace,
                                        monospace" class="">==64588==ERROR:
                                        AddressSanitizer: SEGV on
                                        unknown address 0x7feae5827020
                                        (pc 0x7feae886d970 bp
                                        0x000000000001 sp 0x7ffca10e75f8
                                        T0)</font></div>
                                  </div>
                                  <div class=""><br class="">
                                  </div>
                                  <div class="">Eyeballing the code in
                                    RuntimeDyldELF (vs RuntimeDyldMachO,
                                    which is doing the right thing) I
                                    see it lacks the necessary fixups.
                                    If you're feeling game you can try
                                    to port RuntimeDyldMachO's solution
                                    to RuntimeDyldELF (where MachO uses
                                    a template argument, you'll need to
                                    switch over the RuntimeDyldImpl Arch
                                    member to determine the pointer size
                                    for the fixup). Otherwise you should
                                    file a bug on <a moz-do-not-send="true" href="http://bugs.llvm.org/" target="_blank" class="">bugs.llvm.org</a>
                                    and CC me, and then I can CC some of
                                    the ELF devs and see if anyone has
                                    time.</div>
                                  <div class=""><br class="">
                                  </div>
                                  <div class="">In the mean time, turning off
                                    exception support should fix this,
                                    though I'm not sure whether that's a
                                    viable option for your use case.</div>
                                  <div class=""><br class="">
                                  </div>
                                  <div class="">Cheers,<br class="">
                                  </div>
                                  <div class="">Lang.</div>
                                </div>
                                <div class="m_-3769178140563680007m_7081830580728777428HOEnZb">
                                  <div class="m_-3769178140563680007m_7081830580728777428h5">
                                    <div class="gmail_extra"><br class="">
                                      <div class="gmail_quote">On Thu,
                                        Apr 13, 2017 at 10:53 AM, Lang
                                        Hames <span dir="ltr" class=""><<a moz-do-not-send="true" href="mailto:lhames@gmail.com" target="_blank" class="">lhames@gmail.com</a>></span>
                                        wrote:<br class="">
                                        <blockquote class="gmail_quote" style="margin:0 0 0
                                          .8ex;border-left:1px #ccc
                                          solid;padding-left:1ex">
                                          <div dir="ltr" class="">Hi David,
                                            <div class=""><br class="">
                                            </div>
                                            <div class="">This is definitely the
                                              right place to ask.</div>
                                            <div class=""><br class="">
                                            </div>
                                            <div class="">Let me see if I can
                                              reproduce this locally...</div>
                                            <div class=""><br class="">
                                            </div>
                                            <div class="">Cheers,</div>
                                            <div class="">Lang.</div>
                                            <div class=""><br class="">
                                            </div>
                                          </div>
                                          <div class="gmail_extra"><br class="">
                                            <div class="gmail_quote">
                                              <div class="">
                                                <div class="m_-3769178140563680007m_7081830580728777428m_8577966870667922979h5">On
                                                  Sun, Apr 9, 2017 at
                                                  2:02 PM, David Lurton
                                                  via llvm-dev <span dir="ltr" class=""><<a moz-do-not-send="true" href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>></span>
                                                  wrote:<br class="">
                                                </div>
                                              </div>
                                              <blockquote class="gmail_quote" style="margin:0 0 0
                                                .8ex;border-left:1px
                                                #ccc
                                                solid;padding-left:1ex">
                                                <div class="">
                                                  <div class="m_-3769178140563680007m_7081830580728777428m_8577966870667922979h5">
                                                    <div dir="ltr" class="">Firstly,
                                                      apologies if this
                                                      is not the right
                                                      place to be asking
                                                      this
                                                      question--feel
                                                      free to point me
                                                      in the correct
                                                      direction.  I
                                                      could be doing
                                                      something wrong
                                                      here but
                                                      stackoverflow
                                                      didn't feel like
                                                      the correct place
                                                      for this since
                                                      there's so little
                                                      there about LLVM
                                                      ORC.
                                                      <div class=""><br class="">
                                                      </div>
                                                      <div class="">
                                                        <div class="">
                                                          <div class="">Basically,
                                                          I have a
                                                          reproduction
                                                          case (below)
                                                          where if I
                                                          throw an
                                                          exception
                                                          before I call
JITSymbol::getAddress() everything works properly but throwing the same
                                                          exception
                                                          afterward will
                                                          result in a
                                                          SIGSEGV during
                                                          stack
                                                          unwinding. 
                                                          This suggests
                                                          to me that
                                                          somehow the
                                                          stack is
                                                          getting
                                                          corrupted
                                                          during the
                                                          JITSymbol::getAddress()
                                                          call.  </div>
                                                        </div>
                                                      </div>
                                                      <div class=""><br class="">
                                                      </div>
                                                      <div class="">This problem
                                                        was initially
                                                        discovered while
                                                        working on my
                                                        own project. 
                                                        While
                                                        troubleshooting
                                                        this I've
                                                        discvoered that
                                                        when LLVM is<span style="font-family:monospace,monospace" class="">-DLLVM_USE_SANITIZER:STRING=<wbr class="">Address </span><font face="arial,
                                                          helvetica,
                                                          sans-serif" class="">the
                                                          problem
                                                          happens at
                                                          different
                                                          points during
                                                          execution,
                                                          perhaps having
                                                          something to
                                                          do with the
                                                          padding around
                                                          the stack
                                                          variables
                                                          added by the
                                                          sanitizer? 
                                                          See the note
                                                          after the call
                                                          to runTest()
                                                          in main().</font></div>
                                                      <div class=""><br class="">
                                                      </div>
                                                      <div class="">I'm running
                                                        this under an
                                                        up-to-date
                                                        Antergos Linux,
                                                        clang version:
                                                        3.9.1 (tried
                                                        compiling LLVM
                                                        and the example
                                                        program below
                                                        with gcc 6.3.1
                                                        and the result
                                                        is the same)
                                                        clang set to
                                                        default compiler
                                                        by setting the
                                                        following
                                                        environment
                                                        variables:</div>
                                                      <div class="">
                                                        <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
CC=/usr/bin/clang</font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
CXX=/usr/bin/clang++</font></div>
                                                        <div class=""><br class="">
                                                        </div>
                                                        <div class="">Commands
                                                          used to build
                                                          LLVM:</div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          git clone <a moz-do-not-send="true" href="https://github.com/llvm-mirror/llvm.git" target="_blank" class="">https://github.com/llvm-mirror<wbr class="">/llvm.git</a></font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          git checkout
                                                          release_40</font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          cd llvm</font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          mkdir build</font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          cd build</font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class=""> 
                                                            cmake ..
                                                          -DLLVM_BUILD_LLVM_DYLIB:BOOL=O<wbr class="">N
-DLLVM_ENABLE_RTTI:BOOL=ON -DLLVM_ENABLE_EH:BOOL=ON
                                                          -DLLVM_USE_SANITIZER:STRING=Ad<wbr class="">dress
-DLLVM_PARALLEL_COMPILE_JOBS:S<wbr class="">TRING=8
                                                          -DLLVM_ENABLE_ASSERTIONS:BOOL=<wbr class="">ON</font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          cmake --build
                                                          . -- -j 8</font></div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          sudo cmake
                                                          --build .
                                                          --target
                                                          install</font></div>
                                                        <div class=""><br class="">
                                                        </div>
                                                        <div class="">Command
                                                          used to build
                                                          test case
                                                          executable:</div>
                                                        <div class=""><br class="">
                                                        </div>
                                                        <div class="">    clang
                                                          test.cpp
                                                          -std=c++14
                                                          -lstdc++
                                                          -lLLVM-4.0
                                                          -Wall
                                                          -pedantic
                                                          -Wextra
                                                           -fstack-protector-all
-fsanitize=address -fexceptions</div>
                                                        <div class=""><br class="">
                                                        </div>
                                                        <div class="">Then of
                                                          course:</div>
                                                        <div class=""><br class="">
                                                        </div>
                                                        <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          ./a.out</font></div>
                                                      </div>
                                                      <div class=""><br class="">
                                                      </div>
                                                      <div class="">Output from
                                                        the a.out:</div>
                                                      <div class=""><br class="">
                                                      </div>
                                                      <div class="">
                                                        <blockquote style="margin:0px
                                                          0px 0px
                                                          40px;border:none;padding:0px" class="">
                                                          <div class="">
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">ASAN:DEADLYSIGNAL</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">==============================<wbr class="">==============================<wbr class="">=====</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">==6582==ERROR:
AddressSanitizer: SEGV on unknown address 0x7f59eeb06020 (pc
                                                          0x7f59f1b20930
                                                          bp
                                                          0x000000000001
                                                          sp
                                                          0x7ffc5e546218
                                                          T0)</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">==6582==The
                                                          signal is
                                                          caused by a
                                                          READ memory
                                                          access.</font></div>
                                                          </div>
                                                        </blockquote>
                                                      </div>
                                                      <div class="">
                                                        <div class=""><font face="arial,
                                                          helvetica,
                                                          sans-serif" class=""><br class="">
                                                          </font></div>
                                                        <div class=""><font face="arial,
                                                          helvetica,
                                                          sans-serif" class="">The
                                                          result if
                                                          running
                                                          `backtrace` in
                                                          GDB while
                                                          execution is
                                                          paused after
                                                          the SIGSEGV
                                                          occurs:</font></div>
                                                        <div class=""><font face="arial,
                                                          helvetica,
                                                          sans-serif" class=""><br class="">
                                                          </font></div>
                                                        <blockquote style="margin:0px
                                                          0px 0px
                                                          40px;border:none;padding:0px" class="">
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#0
 read_encoded_value_with_base (encoding=encoding@entry=28 '\034',
                                                          base=base@entry=0,
p=p@entry=0x7fffe8a06020 <error: Cannot access memory at address
                                                          0x7fffe8a06020>,
val=val@entry=0x7fffffffd6d8) at /build/gcc/src/gcc/libgcc/unwi<wbr class="">nd-pe.h:252</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#1
 0x00007fffeba05a61 in binary_search_single_encoding_<wbr class="">fdes
                                                          (pc=0x7fffeba04426
<_Unwind_Resume+54>, ob=0x0) at /build/gcc/src/gcc/libgcc/unwi<wbr class="">nd-dw2-fde.c:908</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#2
                                                           search_object
(ob=ob@entry=0x60400001d9d0, pc=pc@entry=0x7fffeba04426
                                                          <_Unwind_Resume+54>)
                                                          at
                                                          /build/gcc/src/gcc/libgcc/unwi<wbr class="">nd-dw2-fde.c:977</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#3
 0x00007fffeba05fdd in _Unwind_Find_registered_FDE
                                                          (bases=0x7fffffffda78,
pc=0x7fffeba04426 <_Unwind_Resume+54>) at
                                                          /build/gcc/src/gcc/libgcc/unwi<wbr class="">nd-dw2-fde.c:1013</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#4
 _Unwind_Find_FDE (pc=0x7fffeba04426 <_Unwind_Resume+54>,
                                                          bases=bases@entry=0x7fffffffda<wbr class="">78)
                                                          at
                                                          /build/gcc/src/gcc/libgcc/unwi<wbr class="">nd-dw2-fde-dip.c:454</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#5
 0x00007fffeba02b23 in uw_frame_state_for (context=context@entry=0x7ffff<wbr class="">fffd9d0,
fs=fs@entry=0x7fffffffd820) at /build/gcc/src/gcc/libgcc/unwi<wbr class="">nd-dw2.c:1241</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#6
 0x00007fffeba03d40 in uw_init_context_1 (context=context@entry=0x7ffff<wbr class="">fffd9d0,
outer_cfa=outer_cfa@entry=0x7f<wbr class="">ffffffdc00, outer_ra=0x5110fc) at
                                                          /build/gcc/src/gcc/libgcc/unwi<wbr class="">nd-dw2.c:1562</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#7
 0x00007fffeba04427 in _Unwind_Resume (exc=0x60d00000c7b0) at
                                                          /build/gcc/src/gcc/libgcc/unwi<wbr class="">nd.inc:224</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#8
 0x00000000005110fc in runTest () at /home/dave/projects/untitled/t<wbr class="">est.cpp:124</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#9
 0x0000000000511138 in main (argc=1, argv=0x7fffffffe698) at
                                                          /home/dave/projects/untitled/t<wbr class="">est.cpp:132</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                        </blockquote>
                                                      </div>
                                                      <div class="">My test-case
                                                        is below.  In
                                                        runTest(), note
                                                        the commented
                                                        out throw
                                                        statement before
symbol.getAddress() and the uncommented one after it.  Also note the
                                                        comments after
                                                        the call to
                                                        runTest() in
                                                        main().<br class="">
                                                      </div>
                                                      <div class=""><br class="">
                                                      </div>
                                                      <div class="">Thanks.</div>
                                                      <div class="">
                                                        <blockquote style="margin:0px
                                                          0px 0px
                                                          40px;border:none;padding:0px" class="">
                                                          <div class=""><br class="">
                                                          </div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/ADT/STLExtras.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/ExecutionEngine/Executio<wbr class="">nEngine.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/IR/IRBuilder.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/ExecutionEngine/SectionM<wbr class="">emoryManager.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/ExecutionEngine/Orc/Comp<wbr class="">ileUtils.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/ExecutionEngine/Orc/IRCo<wbr class="">mpileLayer.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/ExecutionEngine/Orc/Lamb<wbr class="">daResolver.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/ExecutionEngine/Orc/Obje<wbr class="">ctLinkingLayer.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/IR/Mangler.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/Support/DynamicLibrary.h<wbr class="">"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
"llvm/Support/TargetSelect.h"</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">#include
<iostream></font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">using
                                                          namespace
                                                          llvm;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">using
                                                          namespace
                                                          llvm::orc;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">/**
                                                          This class
                                                          taken verbatim
                                                          from</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""> *
                                                          <a moz-do-not-send="true" href="https://github.com/llvm-mirror/llvm/blob/release_40/examples/Kaleidoscope/BuildingAJIT/Chapter1/KaleidoscopeJIT.h" target="_blank" class="">https://github.com/llvm-mirror<wbr class="">/llvm/blob/release_40/examples<wbr class="">/Kaleidoscope/BuildingAJIT/Cha<wbr class="">pter1/KaleidoscopeJIT.h</a></font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""> *
                                                          This is from
                                                          the same
                                                          revision of
                                                          LLVM I am
                                                          using (the
                                                          release_40
                                                          branch as of
                                                          4/8/2017)</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""> */</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">class
KaleidoscopeJIT {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">private:</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
std::unique_ptr<TargetMachine> TM;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          const
                                                          DataLayout DL;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
ObjectLinkingLayer<> ObjectLayer;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
IRCompileLayer<decltype(Object<wbr class="">Layer)> CompileLayer;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">public:</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          typedef
                                                          decltype(CompileLayer)::Module<wbr class="">SetHandleT
                                                          ModuleHandle;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
KaleidoscopeJIT()</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                  :
                                                          TM(EngineBuilder().selectTarge<wbr class="">t()),
DL(TM->createDataLayout()),</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                   
                                                          CompileLayer(ObjectLayer,
SimpleCompiler(*TM)) {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                             
                                                          llvm::sys::DynamicLibrary::Loa<wbr class="">dLibraryPermanently(nullptr);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          }</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          TargetMachine
&getTargetMachine() { return *TM; }</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          ModuleHandle
                                                          addModule(std::unique_ptr<Modu<wbr class="">le>
                                                          M) {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              // Build
                                                          our symbol
                                                          resolver:</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              // Lambda
                                                          1: Look back
                                                          into the JIT
                                                          itself to find
                                                          symbols that
                                                          are part of</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              //        
                                                            the same
                                                          "logical
                                                          dylib".</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              // Lambda
                                                          2: Search for
                                                          external
                                                          symbols in the
                                                          host process.</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              auto
                                                          Resolver =
                                                          createLambdaResolver(</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                     
                                                          [&](const
                                                          std::string
                                                          &Name) {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                            if (auto Sym
                                                          =
                                                          CompileLayer.findSymbol(Name,
                                                          false))</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                                return
                                                          Sym;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                            return
                                                          JITSymbol(nullptr);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                      },</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                     
                                                          [](const
                                                          std::string
                                                          &Name) {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                            if (auto
                                                          SymAddr =</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                                   
                                                          RTDyldMemoryManager::getSymbol<wbr class="">AddressInProcess(Name))</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                                return
                                                          JITSymbol(SymAddr,
JITSymbolFlags::Exported);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                            return
                                                          JITSymbol(nullptr);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                     
                                                          });</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              // Build a
                                                          singleton
                                                          module set to
                                                          hold our
                                                          module.</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                             
                                                          std::vector<std::unique_ptr<Mo<wbr class="">dule>>
                                                          Ms;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                             
                                                          Ms.push_back(std::move(M));</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              // Add the
                                                          set to the JIT
                                                          with the
                                                          resolver we
                                                          created above
                                                          and a newly</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              // created
SectionMemoryManager.</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              return
                                                          CompileLayer.addModuleSet(std:<wbr class="">:move(Ms),</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                                       
                                                                 
                                                           make_unique<SectionMemoryMana<wbr class="">ger>(),</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                                       
                                                                 
                                                           std::move(Resolver));</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          }</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          JITSymbol
                                                          findSymbol(const
                                                          std::string
                                                          Name) {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                             
                                                          std::string
                                                          MangledName;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                             
                                                          raw_string_ostream
MangledNameStream(MangledName)<wbr class="">;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                             
                                                          Mangler::getNameWithPrefix(Man<wbr class="">gledNameStream,
                                                          Name, DL);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              return
                                                          CompileLayer.findSymbol(Mangle<wbr class="">dNameStream.str(),
                                                          true);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          }</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          void
                                                          removeModule(ModuleHandle
                                                          H) {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                             
                                                          CompileLayer.removeModuleSet(H<wbr class="">);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          }</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">};</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">const
                                                          std::string
                                                          FUNC_NAME =
                                                          "someFunction";</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">void
                                                          runTest() {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
llvm::LLVMContext context;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
llvm::IRBuilder<> irBuilder{context};</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
KaleidoscopeJIT jit;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          auto module =
std::make_unique<llvm::Module><wbr class="">("help", context);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
module->setDataLayout(jit.getT<wbr class="">argetMachine().createDataLayou<wbr class="">t());</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          auto function
                                                          =
                                                          llvm::cast<llvm::Function>(mod<wbr class="">ule->getOrInsertFunction(FUNC_<wbr class="">NAME,</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                                       
                                                                       
                                                                       
                                                                       
                                                                       
 llvm::Type::getInt32Ty(contex<wbr class="">t), nullptr));</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          auto block =
                                                          llvm::BasicBlock::Create(conte<wbr class="">xt,
"functionBody", function);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
irBuilder.SetInsertPoint(block<wbr class="">);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
irBuilder.CreateRet(llvm::Cons<wbr class="">tantInt::get(context, llvm::APInt(32,
                                                          1, true)));</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
jit.addModule(std::move(module<wbr class="">));</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
llvm::JITSymbol symbol = jit.findSymbol(FUNC_NAME);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          //Just to
                                                          ensure that
                                                          the symbol is
                                                          in fact valid
                                                          (symbol
                                                          evaluates to
                                                          true during
                                                          execution)</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          if(!symbol) {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              throw
                                                          std::runtime_error("Symbol
                                                          not found");</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          }</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          //when
                                                          uncommented,
                                                          the throw
                                                          statement does
                                                          NOT cause a
                                                          SIGSEGV.</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          //throw
                                                          std::runtime_error("This
                                                          should not
                                                          crash.");</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          uint64_t ptr =
symbol.getAddress();</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          //HOWEVER... a
                                                          SIGSEGV occurs
                                                          during
                                                          stack-unwinding
                                                          while throwing
                                                          the exception
                                                          below.</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          //Hence, the
                                                          call to
                                                          symbol.getAddress()
                                                          must be
                                                          causing some
                                                          kind of memory
                                                          corruption.</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          //My guess is
                                                          that it's
                                                          clobbering the
                                                          stack.</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          throw
                                                          std::runtime_error("This
                                                          should not
                                                          crash but does
                                                          anyway.");</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          std::cout
                                                          << "Ptr
                                                          is " <<
                                                          ptr <<
                                                          "\n";</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          int
                                                          (*someFuncPtr)()
                                                          =
                                                          reinterpret_cast<int
(*)()>(ptr);</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          //int
                                                          (*someFuncPtr)()
                                                          = (int
                                                          (*)())ptr;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          int
                                                          returnValue =
                                                          someFuncPtr();</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          std::cout
                                                          <<
                                                          "Return value
                                                          is: " <<
                                                          returnValue
                                                          << "\n";</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">}</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">int
                                                          main(int argc,
                                                          char **argv) {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
llvm::InitializeNativeTarget()<wbr class="">;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
llvm::InitializeAllAsmPrinters<wbr class="">();</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          try {</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              runTest();</font></div>
                                                        </blockquote>
                                                        <blockquote style="margin:0px
                                                          0px 0px
                                                          40px;border:none;padding:0px" class="">
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              //NOTE:
                                                           if LLVM is
                                                          compiled
                                                          without </font><span style="font-family:monospace,monospace" class="">-DLLVM_USE_SANITIZER:S<wbr class="">TRING=Address,
                                                          the last throw
                                                          in runTest()
                                                          does not cause</span></div>
                                                        </blockquote>
                                                        <blockquote style="margin:0px
                                                          0px 0px
                                                          40px;border:none;padding:0px" class="">
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              //a
                                                          SIGSEGV,
                                                          however this
                                                          throw will.</font></div>
                                                        </blockquote>
                                                        <blockquote style="margin:0px
                                                          0px 0px
                                                          40px;border:none;padding:0px" class="">
                                                          <div class="">
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              //throw
                                                          std::runtime_error("This
                                                          should not
                                                          crash but does
                                                          anyway.");</font></div>
                                                          </div>
                                                          <div class=""><span style="font-family:monospace,monospace" class=""> 
                                                            }
                                                          catch(std::runtime_error
                                                          &e) {</span><br class="">
                                                          </div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                              std::cout
                                                          <<
                                                          "Exception
                                                          caught: "
                                                          <<
                                                          e.what()
                                                          << "\n";</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          }</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class=""><br class="">
                                                          </font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
llvm::llvm_shutdown();</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">   
                                                          return 0;</font></div>
                                                          <div class=""><font face="monospace,
                                                          monospace" class="">}<br class="">
                                                          <br class="">
                                                          <br class="">
                                                          </font></div>
                                                        </blockquote>
                                                      </div>
                                                      <div class=""><font face="arial,
                                                          helvetica,
                                                          sans-serif" class=""><br class="">
                                                        </font></div>
                                                    </div>
                                                    <br class="">
                                                  </div>
                                                </div>
______________________________<wbr class="">_________________<br class="">
                                                LLVM Developers mailing
                                                list<br class="">
                                                <a moz-do-not-send="true" href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br class="">
                                                <a moz-do-not-send="true" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/llvm-dev</a><br class="">
                                                <br class="">
                                              </blockquote>
                                            </div>
                                            <br class="">
                                          </div>
                                        </blockquote>
                                      </div>
                                      <br class="">
                                    </div>
                                  </div>
                                </div>
                              </blockquote>
                            </div>
                            <br class="">
                          </div>
                        </div>
                      </div>
                    </blockquote>
                  </div>
                  <br class="">
                </div>
              </div>
            </div>
          </blockquote>
        </div>
        <br class="">
      </div>
    </div>
  </div>

<span id="cid:1BA77B45-F4A2-4E0D-8E9D-05930F85B8E9@wp.comcast.net"><Attached Message Part.txt></span>_______________________________________________<br class="">llvm-foundation mailing list<br class=""><a href="mailto:llvm-foundation@lists.llvm.org" class="">llvm-foundation@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-foundation<br class=""></div></blockquote></div><br class=""></div></body></html>