[Lldb-commits] [RFC] Type lookup for template types is broken...

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Wed May 9 06:16:41 PDT 2018


On Tue, 8 May 2018 at 18:27, via lldb-commits <lldb-commits at lists.llvm.org>
wrote:

> Clang can control the emission of <params> or not in the name, using the
"debugger tuning" feature.  It sounds like neither LLDB nor PS4 will mind
losing the <params> in the name, and it makes the indexing simpler.  If the
tuning is set for GDB then we can still emit the <params> in the names.



> It would make me uncomfortable to have the index and the actual DWARF be
inconsistent, but given the way templates work in general (a variety of
spellings all refer to the same type) it is probably better to use the
un-decorated name in the index even if the DWARF itself used decorated
names.  This should probably be proposed as a revision for DWARF 6.

> --paulr

I just ran into this sort of an inconsistency issue while working on the
DWARFVerifier. I hope I don't end up hijacking the thread, but I thought
I'd write here as it is related to the above issue and all interested
parties are following this thread already.

Background: In D45323 I added code which (among other things) checks that
the names in the index match the debug_info names. Because the
implementation had a bug (I forgot to do a ++NumErrors), the error only
surfaced when I committed D46583 (which added the missing increment).

Anyway, the issue is that the PS4 targets don't emit DW_AT_linkage_name
attributes in the debug info, but we are still emitting an index entry with
the mangled names. This caused the verifier to complain.

Two interesting questions follow from this:
1. (mainly for Paul, I guess) Should we fix the debug_names generator to
not emit the linkage name index entry for PS4 targets?

2. (for everyone) Is this verifier check actually valid? This depending on
the interpretation of the last (non-normative) paragraph of Section 6.1.1.1
(*). One way of reading it is that a producer is allowed to insert
additional entries into the name index. Another would be that we can also
insert additional names for existing entries. This is interesting here
because this is exactly what the the template stripping proposal would do
(add extra names to existing entries). If we don't remove that check, it
will cause the verifier to complain again.

regards
pavel

(*) The intent of the above rules is to provide the consumer with some
assurance that looking up an unqualified name in the index will yield all
relevant debugging information entries that provide a defining declaration
at global scope for that name. A producer may choose to implement
additional rules for what names are placed in the index, and may
communicate those rules to a cooperating consumer via an augmentation
string, described below.


More information about the lldb-commits mailing list