<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">I am in the process if writing a tool that can add .debug_names to a file that contains DWARF but doesn’t have an accelerator table that is adequate for debuggers to use. I was trying to see some example implementations of the .debug_names section to see exactly what I should emit from this tool.</div><div class=""><br class=""></div><div class="">I have a question on the following section from the DWARF 5 specification: 6.1.1.4.7 Abbreviations Table. It contains "Table 6.1: Index attribute encodings” which shows the available attributes for the abbreviations that can be used for each index entry:</div><div class=""><br class=""></div><div class="">DW_IDX_compile_unit. // Index of CU</div><div class="">DW_IDX_type_unit  // Index of TU</div><div class="">DW_IDX_die_offset // Offset of DIE within CU or TU</div><div class="">DW_IDX_parent // Index of name table entry for parent</div><div class="">DW_IDX_type_hash // Hash of type declaration</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">My main question is what are the best practices for how producers should emit an entry for a specific DIE in this lookup table. One option is to specify both a CU index and a relative DIE offset:</div><div class=""><br class=""></div><div class=""><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">DW_IDX_compile_unit + </span><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">DW_FORM_dataX form</span></font></div><div class=""><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">DW_IDX_die_offset + DW_FORM_ref4</span></font></div><div class=""><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class=""><br class=""></span></font></div><div class=""><font color="#000000" class="">“DW_FORM_ref4” is known to be a CU relative offset.</font></div><div class=""><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class=""><br class=""></span></font></div><div class=""><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">Or we can simply emit a single attribute for the die_offset using an absolute DIE offset reference?</span></font></div><div class=""><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class=""><br class=""></span></font></div><div class=""><font color="#000000" class="">DW_IDX_die_offset + DW_FORM_ref_addr</font></div><div class=""><br class=""></div><div class="">There isn’t much written up in the DWARF spec about these attributes except that it seems to imply that DW_IDX_die_offset must also have a CU or TU since the comment says "<span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">Offset of DIE within CU or TU</span><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">”</span></font></div><div class=""><br class=""></div><div class=""><font color="#000000" class="">I was looking at the output of dsymutil, a smart DWARF linker maintained by Apple, and it can emit .debug_names with an option, but it emits the following abbreviation, as seen by using “llvm-dwarfdump --debug-names”:</font></div><div class=""><font color="#000000" class=""><br class=""></font></div><div class=""><font color="#000000" class="">    Abbreviation 0x16 {<br class="">      Tag: DW_TAG_typedef<br class="">      DW_IDX_die_offset: DW_FORM_ref4<br class="">    }<br class=""><br class=""></font></div><div class=""><font color="#000000" class="">And the in the Entry for each type, dsymutil only emits a DIE offset as a DW_FORM_ref4, which seems to imply it is an absolute offset:</font></div><div class=""><font color="#000000" class=""><br class=""></font></div><div class=""><font color="#000000" class="">  Bucket 0 [<br class="">    Name 1 {<br class="">      Hash: 0x4D51C8E0<br class="">      String: 0x000010c4 "pthread_t"<br class="">      Entry @ 0x5a7 {<br class="">        Abbrev: 0x16<br class="">        Tag: DW_TAG_typedef<br class="">        DW_IDX_die_offset: 0x00002162<br class="">      }<br class="">    }<br class="">    Name 2 {<br class="">      Hash: 0x8FEC1B20<br class="">      String: 0x00000323 "long int"<br class="">      Entry @ 0x5ad {<br class="">        Abbrev: 0x24<br class="">        Tag: DW_TAG_base_type<br class="">        DW_IDX_die_offset: 0x00000920<br class="">      }<br class="">    }<br class="">  ]<br class=""><br class=""></font></div><div class=""><font color="#000000" class=""><br class=""></font></div><div class=""><font color="#000000" class="">Should dsymutil be emitting both a CU index and a CU relative offset, or should it just switch over to using a DW_FORM_ref_addr as the encoding for the DIE?</font></div><div class=""><font color="#000000" class=""><br class=""></font></div><div class=""><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">Do any current compilers support emitting .debug_names when “-gdwarf-5” is produced?</div></div><div class=""><br class=""></div><div class=""><font color="#000000" class="">Any clarification or pointers to other producers would be appreciated!</font></div><div class=""><font color="#000000" class=""><br class=""></font></div><div class=""><font color="#000000" class="">Greg Clayton</font></div><div class=""><font color="#000000" class=""><br class=""></font></div></body></html>