[Dwarf-Discuss] More on DW_AT_str_offset_base debug_str_offsets.dwo confusion

David Anderson davea42@linuxmail.org
Tue Sep 1 17:24:34 GMT 2020

On 8/31/20 8:39 PM, David Blaikie wrote:
> On Mon, Aug 31, 2020 at 8:22 PM David Anderson <davea42 at linuxmail.org
> <mailto:davea42 at linuxmail.org>> wrote:
>     On 8/31/20 1:03 PM, David Blaikie wrote:
>     > I'd rather go with LLVM's existing?interpretation - that strx
>     > encodings used in .dwo do not attempt to use str_offsets in the
>     skeleton.
>     > But I wouldn't mind adding a str_offsets_base to the split full unit
>     > to make it clear - this would be consistent with rnglists, I
>     think? (I
>     > think, in theory a rnglistx in a .dwo with a split full unit
>     without a
>     > rnglists_base would use the rnglists_base (and .debug_rnglists
>     > non-dwo) in the executable, but if the split full unit has a
>     > rnglists_base, then the rnglistx in the split full unit use that
>     base
>     > to find rnglists in debug_rnglists.dwo - arguably I'd say we
>     might as
>     > well say the same thing about loclists, too, for consistency,
>     though I
>     > don't have any use for skeleton location lists right now)
>     It seems to me that rnglists base and loclists_base in Split Full
>     always
>     reference the data in .debug_rnglists/.debug_loclists
>     3.1.3? Split Full Compilation Unit Entries
>     The following attributes are not part of a split full compilation unit
>     entry but instead are
>     inherited (if present) from the corresponding skeleton compilation
>     unit:
>     DW_AT_low_pc,
>     DW_AT_high_pc, DW_AT_ranges, DW_AT_stmt_list, DW_AT_comp_dir,
>     DW_AT_str_offsets_base, DW_AT_addr_base and DW_AT_rnglists_base.
> Hmm... yeah. I guess LLVM implements rnglistx /rnglist_base the same
> as strx/str_offsets_base. Where it assumes that any *x encoding refers
> to entities in the .dwo, even in the absence of a
> rnglists_base/str_offsets_base in the split full unit. I had thought
> we'd implemented it to emit a rnglists_base in the split full unit,
> which would've been in contrast to the str_offsets_base - so my
> mistake/apologies for the previous description.
Still confused.

Lets say skeleton A is in object file OB.
And OB.dwp contains the split-full CU DIE.
Lets say non-empty? .debug_rnglists and .debug_rnglists.dwo? exist.

The compiler could create the rnglists for A in *either* OB or OB.dwp.
And could pick and choose, for each split-able Compilation Unit,
which place to put rnglists
independently of all other CUs.

Meaning both OB and OB.dwp could have rnglists, but only
one of them has the rnglists entry for any given CU.

How do we know? which .debug_rnglists section? to look at
given Skeleton A and split-full A?
Which does the DW_AT_rnglists_base apply to?

If one violated the standard and put DW_AT_rnglists_base
into the CU die that has the rnglists (skeleton or split-full) it would then
be known where to read the rnglists.

Confused, still.

Despite all appearances, your boss is a thinking, feeling, human being.

More information about the Dwarf-discuss mailing list