Location List and Range List Sections Improvement/Enhancement >> We got a report today that GCC even for -gdwarf-5 -gsplit-dwarf uses >> .debug_rnglists section + DW_AT_ranges + DW_AT_low_pc + DW_AT_rnglists_base >> attributes in the DW_TAG_skeleton_unit (and then some DW_AT_ranges in >> .debug_info.dwo that use DW_FORM_rnglistx, but no .debug_rnglists.dwo >> section).
The original split DWARF proposal, and the prototype implementation based on DWARF-4 in GCC did not use .debug_rnglists.dwo (this was before .debug_ranges was converted to .debug_rnglists by issue 160123.1), so we used DW_AT_ranges_base in the skeleton CU so that dwo files could use DW_AT_ranges with a non-relocatable offset relative to that base. With issues 160123.1 (Unify Location Lists and Range Lists) and 160714.1 (Location List and Range List Sections Improvement/Enhancement), we replaced .debug_ranges with .debug_rnglists, and made it possible to place range lists into .debug_rnglists.dwo when using split DWARF. DW_AT_rnglists_base is useful to reduce the number of relocations in a non-split-DWARF object file. It's not necessary when placing range lists into the dwo file, but if it were to be used there, it would not make sense to put it in the skeleton CU. It's pointless in a split DWARF situation, since no relocations are necessary for DW_FORM_rnglistx. It sounds like the DWARF-5 implementation of split DWARF in GCC still has some residuals from the prototype based on DWARF-4. That's likely due to my retirement and the move of the rest of the Google compiler team over to LLVM. > I think the spec is ambiguous here: > > 3.1.3 "The following attributes are not part of a split full compilation unit > entry but instead are 18 inherited (if present) from the corresponding > skeleton compilation unit: DW_AT_low_pc, 19 DW_AT_high_pc, DW_AT_ranges, > DW_AT_stmt_list, DW_AT_comp_dir, 20 DW_AT_str_offsets_base, DW_AT_addr_base > and DW_AT_rnglists_base." > > So, on the one hand, if rnglists_base is inherited that implies that > rnglists_base on a skeleton CU means rnglists.dwo is not used. (so the only > way to use rnglists.dwo is to not have rnglists_base on the skeleton CU and > you don't have it on the split full CU and /that's/ how rnglistx in split > full unit refer to rnglists.dwo instead of debug_rnglists in the linked > executable) Yes, it would be possible to keep range lists in .debug_rnglists (and in the .o) under split DWARF, and then DW_AT_rnglists_base in the skeleton CU would make sense. But that's not the intent. -cary _______________________________________________ Dwarf-Discuss mailing list Dwarf-Discuss@lists.dwarfstd.org http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org