Hi, On Tue, 2020-06-09 at 13:24 -0700, Fangrui Song via Elfutils-devel wrote: > I want to revive the thread, but focus on whether a tombstone value > (-1/-2) in .debug_* can cause trouble to various DWARF consumers (gdb, > debug related tools in elfutils and other utilities I don't know about). > > Paul Robinson has proposed that DWARF v6 should reserve a tombstone > value (the value a relocation referencing a discarded symbol in a > .debug_* section should be resolved to) > http://www.dwarfstd.org/ShowIssue.php?issue=200609.1
I would appreciate having a clear "not valid" marker instead of getting a possibly bogus (but valid) address. -1 seems a reasonable value. Although I have seen (and written) code that simply assumes zero is that value. Would such an invalid address marker in an DW_AT_low_pc make the whole program scope under a DIE invalid? What about (addr, loc, rng) base addresses? Can they contain an invalid marker, does that make the whole table/range invalid? I must admit that as a DWARF consumer I am slightly worried that having a sanctioned "invalid marker" will cause DWARF producers to just not coordinate and simply assume they can always invalidate anything they emit. Even if there could be a real solution by coordinating between compiler/linker who is responsible for producing the valid DWARF entries (especially when LTO is involved). > Some comments about the proposal: > > > - deduplicating different functions with identical content; GNU > > refers > > to this as ICF (Identical Code Folding); > > ICF (gold --icf={safe,all}) can cause DW_TAG_subprogram with > different DW_AT_name to have the same range. Cary Coutant wrote up a general Two-Level Line Number Table proposal to address the issue of having a single machine instruction corresponds to more than one source statement: http://wiki.dwarfstd.org/index.php?title=TwoLevelLineTables Which seems useful in these kind of situations. But I don't know the current status of the proposal. Cheers, Mark