<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Unwind information is not emitted for ThumbV7PILongThunks"
   href="https://bugs.llvm.org/show_bug.cgi?id=47171">47171</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Unwind information is not emitted for ThumbV7PILongThunks
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>new-bugs
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>new bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>wittman@chromium.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>htmldeveloper@gmail.com, llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>The .debug_frame section of a .so for Android arm32 contains no FDEs covering
ThumbV7PILongThunks. This is particularly problematic for Chromium where the
.text section of libchrome.so is 80MB and contains 42k thunks, and a
non-trivial amount of execution time is spent in the thunks.

This was observed in Chromium's clang built from
1bd7046e4ce0102adef6096a12a289d7f94b8c73.

It's not clear that a reduced repro is possible since thunks are only needed on
arm32 when the text section is >32MB. To reproduce with Chromium:

1. Follow
<a href="https://chromium.googlesource.com/chromium/src/+/master/docs/android_build_instructions.md">https://chromium.googlesource.com/chromium/src/+/master/docs/android_build_instructions.md</a>
has instruction to set up a Chromium build for Android, but use the following
file contents for the 'gn args out/Default' step:

target_os = "android"
target_cpu = "arm"
is_component_build = false

2. After building chrome_public_apk the relevant .so is in
out/Default/lib.unstripped/libchrome.so.

3. Find the address of an example thunk:
third_party/android_ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/bin/objdump
-j .text -dC out/Default/lib.unstripped/libchrome.so | perl -lne 'print if
/^.{8} <__ARMV7PILongThunk___cxa_finalize>/../^$/'

4. Observe that no FDEs cover the address of the example thunk in the output of
llvm-dwarfdump --debug-frame out/Debug/lib.unstripped/libchrome.so</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>