<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 17, 2018, at 8:13 AM, Pavel Labath via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org" class="">lldb-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Hello all,<br class=""><br class="">In <<a href="https://reviews.llvm.org/D41986#977215" class="">https://reviews.llvm.org/D41986#977215</a>> it was brought up that<br class="">there are at least two parties interested in having DWARF5 accelerator<br class="">tables implemented, so I'm writing this email to see if there's anyone<br class="">else interested in this topic, and to try to synchronize our efforts.<br class=""><br class="">Our interest for this stems from a desire to make dwarf parsing fast<br class="">on non-apple targets (specifically android). As you may know, apple<br class="">targets already use a non-standard accelerator table format, which was<br class="">a precursor to the dwarf5 one. Due to other differences in debug info<br class="">deployment model, the apple tables are not directly applicable to<br class="">other targets, so instead of trying to make them fit, we chose to go<br class="">with the standard approach.<br class=""><br class="">I personally will have some time to work on this this quarter or two,<br class="">and my plan is roughly the following:<br class="">1. add .debug_names support to llvm-dwarfdump via the DebugInfo<br class="">library (to enable testing of the table generation)<br class="">2. add .debug_names generation support (not enabled by default)<br class="">3. add .debug_names support to lldb<br class="">4. validate all three things work together<br class="">5. hook up .debug_names to clang's -glldb flag.<br class="">6. add .debug_names support to lld (accelerator table merging)<br class=""><br class="">Right now I have (1) roughly implemented, and I think I'll be able to<br class="">put it up for review in a couple of days (although I expect the review<br class="">will go through several revisions before being accepted). I also have<br class="">a very basic implementation of (2), but this is still quite far from<br class="">being upstreamable.<br class=""><br class="">So, my question is whether anyone is planning to work, or maybe<br class="">working already on dwarf5 accelerator tables? Help with reviewing<br class="">patches would also be greatly appreciated. If you have any questions<br class="">or concerns, let me know.<br class=""></div></div></blockquote></div><br class=""><div class=""><br class=""></div><div class="">This sounds great. I would also vote for a few additions to the work:</div><div class="">- modify llvm-dwarfdump or llvm-dsymutil to be able to compute and add the Apple and DWARF accelerator tables to existing object files that have DWARF in them. As we are working out the bugs we might end up with compiler bugs where not everything was added to the accelerator tables that was required. llvm-dsymutil has a "--update" option that allows it to update and re-create the Apple accelerator tables in a dSYM file. It would be nice to have this functionality so that when we pull legacy DWARF files from a build server, we have a simple way to update them with the needed indexing info so we can debug them as quickly as new DWARF files.</div><div class=""><br class=""></div><div class="">Within LLDB, the DWARF parser will need to abstract the indexing lookups. Right now we have each function that accesses the index doing:</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; color: rgb(79, 129, 135);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">  </span><span style="font-variant-ligatures: no-common-ligatures; color: #ba2da2" class="">if</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> (</span><span style="font-variant-ligatures: no-common-ligatures" class="">m_using_apple_tables</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">) {</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; color: rgb(79, 129, 135);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">    </span><span style="font-variant-ligatures: no-common-ligatures; color: #ba2da2" class="">if</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> (</span><span style="font-variant-ligatures: no-common-ligatures" class="">m_apple_types_ap</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">.</span><span style="font-variant-ligatures: no-common-ligatures; color: #3e1e81" class="">get</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">()) {</span></div><div style="margin: 0px; font-size: 11px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">      </span><span style="font-variant-ligatures: no-common-ligatures; color: #ba2da2" class="">const</span><span style="font-variant-ligatures: no-common-ligatures" class=""> </span><span style="font-variant-ligatures: no-common-ligatures; color: #ba2da2" class="">char</span><span style="font-variant-ligatures: no-common-ligatures" class=""> *name_cstr = name.</span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">GetCString</span><span style="font-variant-ligatures: no-common-ligatures" class="">();</span></div><div style="margin: 0px; font-size: 11px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">      </span><span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">m_apple_types_ap</span><span style="font-variant-ligatures: no-common-ligatures" class="">-></span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">FindByName</span><span style="font-variant-ligatures: no-common-ligatures" class="">(name_cstr, die_offsets);</span></div><div style="margin: 0px; font-size: 11px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">    }</span></div><div style="margin: 0px; font-size: 11px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  } </span><span style="font-variant-ligatures: no-common-ligatures; color: #ba2da2" class="">else</span><span style="font-variant-ligatures: no-common-ligatures" class=""> {</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; color: rgb(79, 129, 135);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">    </span><span style="font-variant-ligatures: no-common-ligatures; color: #ba2da2" class="">if</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> (!</span><span style="font-variant-ligatures: no-common-ligatures" class="">m_indexed</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">)</span></div><div style="margin: 0px; font-size: 11px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">      </span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">Index</span><span style="font-variant-ligatures: no-common-ligatures" class="">();</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; min-height: 13px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">    </span><span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">m_type_index</span><span style="font-variant-ligatures: no-common-ligatures" class="">.</span><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">Find</span><span style="font-variant-ligatures: no-common-ligatures" class="">(name, die_offsets);</span></div><div style="margin: 0px; font-size: 11px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  }</span></div></div><div class=""><span style="font-variant-ligatures: no-common-ligatures" class=""><br class=""></span></div><div class=""><span style="font-variant-ligatures: no-common-ligatures" class="">We should abstract these out into a indexing base class and have one for manual DWARF indexing, one for Apple accelerator table and one for .debug_names. </span>I look forward to seeing this in LLDB!</div><div class=""><br class=""></div><div class="">Greg</div><div class=""><br class=""></div></body></html>