<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I don't totally follow the proposed encoding change & would appreciate a small example.<div class=""><br class=""></div><div class="">Is the idea to replace e.g. an 'AT_low_pc (<direct address>) + relocation for <direct address>' with an 'AT_low_pc (<indirection into a pool of addresses> + offset)', s.t. the cost of a relocation for the address is paid down the more it's used? How do you figure the offset out?</div><div class=""><br class=""></div><div class="">thanks,</div><div class="">vedant<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jan 8, 2020, at 1:33 PM, David Blaikie via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Sounds good all round - I'll commit these two modes, and maybe even the third (given Sony's interest & possible interest in changing their consumer to handle it) of a custom form to eek out the last few bytes from the more direct addr+offset encoding.<br class=""><br class="">I'll follow up here with flag names and revision numbers once they're in.</div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 8, 2020 at 1:26 PM Robinson, Paul <<a href="mailto:paul.robinson@sony.com" class="">paul.robinson@sony.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On some previous occasion that introduced additional indirection<br class="">
(don't remember the details) my debugger people groused about the<br class="">
additional performance cost of chasing down data in a different <br class="">
object-file section. So we (Sony) might be happier with low_pc as<br class="">
expressions, than with a ranges-always solution.<br class="">
<br class="">
But hard to say without data, and getting both modes in at least<br class="">
as a temporary thing sounds like a good plan.<br class="">
--paulr<br class="">
<br class="">
<br class="">
> -----Original Message-----<br class="">
> From: <a href="mailto:aprantl@apple.com" target="_blank" class="">aprantl@apple.com</a> <<a href="mailto:aprantl@apple.com" target="_blank" class="">aprantl@apple.com</a>><br class="">
> Sent: Wednesday, January 8, 2020 1:49 PM<br class="">
> To: David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank" class="">dblaikie@gmail.com</a>><br class="">
> Cc: llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>>; Jonas Devlieghere<br class="">
> <<a href="mailto:jdevlieghere@apple.com" target="_blank" class="">jdevlieghere@apple.com</a>>; Robinson, Paul <<a href="mailto:paul.robinson@sony.com" target="_blank" class="">paul.robinson@sony.com</a>>; Eric<br class="">
> Christopher <<a href="mailto:echristo@gmail.com" target="_blank" class="">echristo@gmail.com</a>>; Frederic Riss <<a href="mailto:friss@apple.com" target="_blank" class="">friss@apple.com</a>><br class="">
> Subject: Re: Increasing address pool reuse/reducing .o file size in<br class="">
> DWARFv5<br class="">
> <br class="">
> I think this sounds like a good plan for Linux. I would like to see the<br class="">
> numbers for Darwin (= non-split DWARF) to decide whether we should just<br class="">
> make that the default. Eric's suggestion of having this committed as an<br class="">
> option first seems like a good step in that direction. If it is an<br class="">
> advantage across the board we can remove the option and just make this the<br class="">
> default behavior.<br class="">
> <br class="">
> thanks,<br class="">
> adrian<br class="">
> <br class="">
> > On Dec 30, 2019, at 12:08 PM, David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank" class="">dblaikie@gmail.com</a>> wrote:<br class="">
> ><br class="">
> > tl;dr: in DWARFv5, using DW_AT_ranges even when the range is contiguous<br class="">
> reduces linked, uncompressed debug_addr size for optimized builds by 93%<br class="">
> and reduces total .o file size (with compression and split) by 15%. It<br class="">
> does grow .dwo file size a bit - DWARFv5, no compression, not split shows<br class="">
> the net effect if all bytes are equal: -O3 clang binary grows by 0.4%, -O0<br class="">
> clang binary shrinks by 0.1%<br class="">
> > Should we enable this strategy by default for DWARFv5, for DWARFv5+Split<br class="">
> DWARF, or not by default at all/only under a flag?<br class="">
> ><br class="">
> ><br class="">
> ><br class="">
> > So, I've brought this up a few times before - that DWARFv5 does a pretty<br class="">
> good job of reducing relocations (& reducing .o file size with Split<br class="">
> DWARF) by allowing many uses of addresses to include some kind of<br class="">
> address+offset (debug_rnglists and loclists allowing "base_address" then<br class="">
> offset_pairs (an improvement over similar functionality in DWARFv4 because<br class="">
> the offset pairs can be uleb encoded - so they can be quite compact))<br class="">
> ><br class="">
> > But one place that DWARFv5 misses to reduce relocations further is<br class="">
> direct addresses from debug_info, such as DW_AT_low_pc.<br class="">
> ><br class="">
> > For a while I've wondered if we could use an extension form for<br class="">
> addr+offset, and I prototyped this without an extension attribute, but<br class="">
> instead using exprloc. This has slightly higher overhead to express the...<br class="">
> expression. (it's 9 bytes in total, could be as few as 5 with a custom<br class="">
> form)<br class="">
> ><br class="">
> > But I had another idea that's more instantly deployable: Why not use<br class="">
> DW_AT_ranges even when the range is contiguous? That way the low_pc that<br class="">
> previously couldn't use an existing address pool entry + offset, could use<br class="">
> the rnglist support for base address.<br class="">
> ><br class="">
> > The only unnecessary address pool entries that remain that I've found<br class="">
> are DW_AT_low_pc for DW_TAG_labels - but there's only a handful of those<br class="">
> in most code. So the "ranges everywhere" strategy gets the addresses for<br class="">
> optimized clang down from 4758 (v4 address pool used 9923 addresses... )<br class="">
> to 342, with about ~4 "extra" addresses for DW_TAG_labels.<br class="">
> ><br class="">
> > This could also be a bit less costly if DWARFv5 rnglists didn't use a<br class="">
> separate offset table (instead encoding the offsets directly in<br class="">
> debug_info, rather than using indexes)<br class="">
> ><br class="">
> > I have patches for both the addr+offset exprloc and for the ranges-<br class="">
> always, both with -mllvm flags - do people think they're both worth<br class="">
> committing for experimentation? Neither? Default on in some cases (like<br class="">
> Split DWARF)?<br class="">
> ><br class="">
> > Thanks,<br class="">
> > - Dave<br class="">
<br class="">
</blockquote></div>
_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br class=""></div></blockquote></div><br class=""></div></body></html>