On Mon, Aug 31, 2020 at 10:33 AM David Anderson via Dwarf-Discuss < dwarf-discuss@lists.dwarfstd.org> wrote:
> I has occurred to me that simply restricting skeleton CUs > to use DW_FORM_string or DW_FORM_strp > would restore the unique meaning of DW_AT_str_offsets_base > to apply to the dwp (letting non-skeleton CUs use > DW_FORM_strx1 etc ). With seemingly little impact on > overall size. > Seems a pity for orthogonality (and for a non-standard/extension use that LLVM has, where skeleton units carry some DIEs (essentially "gmlt"-like data, enough to symbolize with inline stack frames) in the skeleton CU - not being able to used indexed strings would be an object size penalty due to potentially needing to use more relocations) I think the DWARFv5 spec is a bit conflicted, but does have some wording that supports LLVM's existing usage: ".debug_info.dwo to .debug_str_offsets.dwo: Attribute values of class string may have one of the forms DW_FORM_strx, 3 DW_FORM_strx1, DW_FORM_strx2, DW_FORM_strx3 or 4 DW_FORM_strx4, whose value is an index into the .debug_str_offsets.dwo section for the corresponding string" "The string table section in .debug_str.dwo contains all the strings referenced from DWARF attributes using any of the forms DW_FORM_strx, DW_FORM_strx1, DW_FORM_strx2, DW_FORM_strx3 or DW_FORM_strx4. Any attribute in a compilation unit or a type unit using this form refers to an entry in that unit’s contribution to the .debug_str_offsets.dwo section, which in turn provides the offset of a string in the .debug_str.dwo section." (& some that contradicts it): "The DW_AT_addr_base and DW_AT_str_offsets_base attributes provide context that may be necessary to interpret the contents of the corresponding split DWARF object file." "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." 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)
_______________________________________________ Dwarf-Discuss mailing list Dwarf-Discuss@lists.dwarfstd.org http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org