<div dir="ltr">An old co-worker told me that writing a dwarf support library was the most painful experience of his life due to the confusing standards documents, so it's not surprising DWARF5 is going slow.  <br></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature">GNOMETOYS<br></div></div>
<br><div class="gmail_quote">On Mon, Dec 4, 2017 at 12:49 PM, Robinson, Paul via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div bgcolor="white" link="blue" vlink="purple" lang="EN-US">
<div class="m_-6728851010636233016WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Thanks for providing the experimental data!  It clearly shows the value of type sections in DWARF.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Regarding why type sections are off by default, aside from the issue of consumers needing to understand them, there is a size penalty to type sections that
 becomes more evident in smaller projects (meaning, fewer compilation units).  The size penalty can be balanced against the amount of deduplication for a net win, if you have enough duplicates that you can eliminate.  But it is a tradeoff.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">In Sony's case, it is not uncommon for studios to do what are called "unity" builds, where you have basically one master .cpp file that does #include of each
 other .cpp file, giving you an LTO-like build.  In this case the debug-info production will automatically produce only one copy of each type, and so using type sections would probably make the net debug info bigger.  And of course an LTO build will deduplicate
 type info at the metadata level, with a similar effect.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">So, I think whether type sections help or hurt will depend on how a particular project's build procedure is set up.  Clang/LLVM are set up to do lots of smaller
 compilations and link them all together, in a fairly traditional model, and that is where type sections will provide the most benefit.  Your data, then, is essentially for a best-case scenario.  Other kinds of projects will not benefit as much.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Regarding DWARF 5 and emitting type sections into the .debug_info section rather than the .debug_types section:  The work to support DWARF 5 in LLVM has not
 gotten very far yet.  Conforming to the standard in this respect is certainly on my list, however there are other features that Sony considers higher priority.  If you or someone else wants to contribute that feature sooner, that would be excellent!  Otherwise,
 we will get to it in due time.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Thanks,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">--paulr<u></u><u></u></span></p>
<p class="MsoNormal"><a name="m_-6728851010636233016__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></a></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> llvm-dev [mailto:<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@<wbr>lists.llvm.org</a>]
<b>On Behalf Of </b>George Rimar via llvm-dev<br>
<b>Sent:</b> Monday, December 04, 2017 7:11 AM<br>
<b>To:</b> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> [llvm-dev] [RFC] - Deduplication of debug information in linkers (LLD).<u></u><u></u></span></p>
</div>
</div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">Hi all !<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">We have an issue with LLD, it is  "relocation R_X86_64_32 out of range" (PR31109)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">which occurs during resolving relocations in debug sections. It looks happens<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">because .debug_info section can be too large sometimes and 32x relocation is not enough<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">to represent the value. One of possible solutions looks to be to deduplicate information<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">to reduce .debug_info size.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">The rest of mail contains information about experiments I did, the obtained results and<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">some questions and suggestions as well.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">I was investigating idea to deduplicate debug types information. Idea is described at<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">p276 of DWARF4 specification (<a href="http://www.dwarfstd.org/doc/DWARF4.pdf" target="_blank">http://www.dwarfstd.org/doc/<wbr>DWARF4.pdf</a>). It suggests<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">to split types information out of .debug_info and emit multiple .debug_types sections<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">with use of COMDATs. Both clang and gcc I tested implements -fdebug-types-section flag for that:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">-fdebug-types-section, -fno-debug-types-section<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">Place debug types in their own section (ELF Only)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">gcc's description is here:
<a href="https://gcc.gnu.org/onlinedocs/gcc-6.4.0/gcc/Debugging-Options.html#Debugging-Options" target="_blank">
https://gcc.gnu.org/<wbr>onlinedocs/gcc-6.4.0/gcc/<wbr>Debugging-Options.html#<wbr>Debugging-Options</a>.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">This flag is disabled by default. I compared clang binaries to see the difference<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">with and without the linker side optimisation.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">1) Clang built with -g has size of 1.7 GB, .debug_info section size is 894.5 Mb.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">2) Clang built with -g -fdebug-types-section has size of 1.0 GB.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">   .debug_types size is 26.267 MB, .debug_info size is 227.7 MB.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">Difference is huge and I believe shows (though probably for most of readers here it was<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">already obvious) that optimization can be useful. Though
<span style="background:white">-fdebug-types-section</span> is disabled by default.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">Looks it was initially disabled because not all of DWARF consumers were aware of .debug_types section.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">Now in 2017 situation is different. I think most of DWARF consumers knows about .debug_types, but:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">1) DWARF5 specification explicitly eliminates the .debug_types section introduced in DWARF4:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">   p8, "1.4 Changes from Version 4 to Version 5"
<a href="http://dwarfstd.org/doc/DWARF5.pdf" target="_blank">http://dwarfstd.org/doc/<wbr>DWARF5.pdf</a><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">2) Instead of emiting multiple .debug_types it suggests to emit multiple .debug_info COMDAT<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">   sections. (p375, p376).<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">And it seems currently there is no way to make clang to emit multiple .debug_info with type information<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">like DWARF5 suggests. I tried command line below:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">-g -fdebug-types-section -gdwarf-5<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">It still emits .debug_types and does not look there is a flag for emiting multiple .debug_info.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">Looking at whole LLVM code (lib/mc, lib/CodeGen) actually it seems it is just always assumed .debug_info is<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">a unique section in object.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">(also not sure why clang emits .debug_types when -gdwarf-5 flag is set, as this section is incompatible with v5,<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">probably it is a bug).<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">So my questions are following:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">1) Do we want to try to implement multiple .debug_info approach ? As it seems can be very useful sometimes.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">2) For now in LLD may be we may want to extend our error message from "relocation X out of range" to something<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">   suggesting to use -fdebug-types-section (only for relocations in debug sections) ?<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:black">3) Why -fdebug-types-section is disabled by default ?<u></u><u></u></span></p>
</div>
<p><span style="font-family:"Calibri","sans-serif";color:black">​<u></u><u></u></span></p>
<div id="m_-6728851010636233016Signature">
<div name="divtagdefaultwrapper">
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri","sans-serif";color:black">Best regards,<br>
George | Developer | </span><span style="font-size:10.0pt;font-family:"Calibri","sans-serif";color:#212121;background:white">Access Softek, Inc</span><span style="font-size:10.0pt;font-family:"Calibri","sans-serif";color:black"><u></u><u></u></span></p>
</div>
</div>
</div>
</div>
</div></div></div>
</div>
</div>

<br>______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>