================ @@ -374,25 +377,40 @@ void DebugNamesDWARFIndex::GetFullyQualifiedType( m_fallback.GetFullyQualifiedType(context, callback); } +bool DebugNamesDWARFIndex::SameAsEntryATName( + llvm::StringRef query_name, const DebugNames::Entry &entry) const { + auto maybe_dieoffset = entry.getDIEUnitOffset(); + if (!maybe_dieoffset) + return false; + + // [Optimization] instead of parsing the entry from dwo file, we simply + // check if the query_name can point to an entry of the same DIE offset. + // This greatly reduced number of dwo file parsed and thus improved the + // performance. + for (const DebugNames::Entry &query_entry : + entry.getNameIndex()->equal_range(query_name)) { + auto query_dieoffset = query_entry.getDIEUnitOffset(); + if (!query_dieoffset) + continue; + + if (*query_dieoffset == *maybe_dieoffset) { + return true; + } else if (*query_dieoffset > *maybe_dieoffset) { + // The pool entries of the same name are sequentially cluttered together + // so if the query name from `query_name` is after the target entry, this + // is definitely not the correct one, we can stop searching. ---------------- labath wrote:
Okay, I think I've finally understood what you mean now. You want to reverse-engineer the name of an debug_names entry (check whether it matches the expected string) by looking at whether its contained in the range of entries belonging to that name. That should be doable (and it's quite clever actually), but we don't currently have an API which would make that possible. If necessary, I think we can add one, though. https://github.com/llvm/llvm-project/pull/108907 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits