<div dir="ltr">Yep, Wolfgang picked up on the one thing I saw too.<br><br>Minor comments:<br>Yeah, it's a pity some stuff (pre-standard split DWARF) doesn't have headers to allow standalone decoding. (I assume there's a mandate on the DWARF committee to have version headers for everything in every section that can have them now (the only ones that can't that I can think of are the actual string dedup sections because the linker actually looks at them as strings, manipulates them, etc))<br><br>I think it's a bit of a pity that str_offsets_base can point into the middle of a str_offsets contribution in some ways (because it means the actual str offsets will be harder to read in that case "oh, string 5, that means take the str_offsets_base address and add 5 * pointer size (which you find by looking at the address range of the str_offsets_base)" - so if you were dumping str_offsets you might print "header, string 1: "foo", string 2: "bar", etc... " - but now "string 5" might actually be "string 11" because str_offsets_base is the start of string 6 (but it's not '6', its the address... so you have to do all the decoding to figure that out) - a dumper could do some of this so when it's dumping str_offsets_base it could dump "0xdeadbeef, which is string 5 in the 3rd contribution"). Still, that's a pretty unique form of cross-CU sharing that I've not seen elsewhere.<br><br>I think there'd be some point/benefit to being able to have multiple contributions in a DWO file, but I don't think it's /buggy/ that it's not allowed - just a possible future enhancement. "if you have a str_offsets_base, great, otherwise it's assumed to be 0 + <header size> (or just 0 if the CU uses GNU_dwo_id, rather than DWARF5 dwo_id, for example))</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 6, 2017 at 6:35 AM Robinson, Paul via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
> -----Original Message-----<br>
> From: llvm-dev [mailto:<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>] On Behalf Of Pieb,<br>
> Wolfgang via llvm-dev<br>
> Sent: Wednesday, July 05, 2017 6:14 PM<br>
> To: <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> Subject: Re: [llvm-dev] [DWARFv5] Reading the .debug_str_offsets section<br>
><br>
> > -----Original Message-----<br>
> > From: llvm-dev [mailto:<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>] On Behalf Of<br>
> > Robinson, Paul via llvm-dev<br>
> > Sent: Wednesday, July 05, 2017 1:35 PM<br>
> > To: <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> > Subject: [llvm-dev] [DWARFv5] Reading the .debug_str_offsets section<br>
> ><br>
> snip ...<br>
> ><br>
> > Things get way trickier in an object (executable or "-r" ouput) that<br>
> > has a mix of GCC and standard contributions. AFAICT there's no<br>
> > equivalent of DW_AT_str_offsets_base in the GCC style, so about all<br>
> > we can do is something like this:<br>
> > (1) Walk through all units to find all DW_AT_str_offsets_base pointers;<br>
> > (2) for each one, poke around in the prior 8-16 bytes looking for<br>
> >     the header; this is more reliable than it sounds;<br>
> > (3) assume everything else in the section is GCC style.<br>
><br>
> I believe a mix of GCC and standard contributions should only be an issue<br>
> in a split-DWARF (fission) scenario, as there is no .debug_str_offsets<br>
> section in a non-split pre-V5 compilation AFAIK.<br>
<br>
Oh, of course!  So a normal object file is always standard.  Excellent!<br>
<br>
><br>
> And given that we don't have a DW_AT_str_offsets_base attribute in<br>
> .debug_info.dwo sections by standard decree, all units (whether standard<br>
> V5 or GCC-style) would have to share the single contribution in the<br>
> .debug_str_offsets.dwo section (or the single contribution in a slice of<br>
> the section via dwp index table).<br>
><br>
> So the only tricky part for the reader would be to figure out whether a<br>
> .debug_str_offsets.dwo section (or a slice of it) is GCC-style or a<br>
> (single) v5 standard contribution. As you pointed out earlier, either<br>
> looking at the individual unit versions in the .debug_info.dwo section or<br>
> the individual forms used could do the trick.<br>
><br>
> -- wolfgangp<br>
><br>
> > Questions and brickbats welcome.<br>
> > --paulr<br>
> ><br>
> > P.S. Ah, you clever reader, who noticed I carefully said nothing about<br>
> > LTO of mixed-DWARF-version compilations!  Haven't thought about it.<br>
<br>
This is still a question.  However I think it's not that hard to<br>
handle.  If LTO sees a mix of v4 and v5, we emit a standard<br>
.debug_str_offsets.dwo section but force 32-bit offsets (i.e. leave<br>
a comment for our descendants to make sure that happens) and then<br>
the GCC forms will just DTRT.  I think.<br>
The dumper would treat it as a standard section as long as there are<br>
any v5 units in the .dwo (or that contribution to the .dwp).<br>
<br>
IIRC the string sections aren't actually emitted until after all<br>
units have been processed, because everything shares the same string<br>
section, so remembering whether any v5 units have crossed our path<br>
and then adding the v5 header at the last moment should be feasible.<br>
--paulr<br>
<br>
> ><br>
> > _______________________________________________<br>
> > LLVM Developers mailing list<br>
> > <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">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/mailman/listinfo/llvm-dev</a><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">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/mailman/listinfo/llvm-dev</a><br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">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/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>