[Lldb-commits] [lldb] Improve type lookup using .debug_names parent chain (PR #108907)

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Wed Sep 25 07:02:14 PDT 2024


================
@@ -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


More information about the lldb-commits mailing list