[PATCH] D143397: [WIP][llvm][DebugInfo] Add DW_TAG_imported_declaration to accelerator tables
Michael Buch via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 6 07:09:21 PST 2023
Michael137 created this revision.
Michael137 added reviewers: dblaikie, aprantl.
Herald added a subscriber: hiraditya.
Herald added a project: All.
Michael137 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
**Summary**
After this patch, `DW_TAG_imported_declaration`s will be emitted into
the DWARF accelerator tables (under `.apple_namespaces`)
**Motivation**
Currently LLDB expression evaluation doesn't see through namespace
aliases. This is because LLDB only considers namespaces that are
part of `.apple_namespaces` when building a nested namespace
identifier for C++, which currently doesn't include import
declarations. The alternative to putting imports into accelerator
tables is to do a linear scan of a `DW_TAG_namespace` and look
for import declarations that look like they would satisfy the lookup
request, which is prohibitively expensive.
**Testing**
- Added unit-test
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D143397
Files:
llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/test/DebugInfo/Inputs/accel-imported-declaration.cpp
llvm/test/DebugInfo/Inputs/accel-imported-declaration.macho-arm64.o
llvm/test/DebugInfo/accel-imported-declaration.test
Index: llvm/test/DebugInfo/accel-imported-declaration.test
===================================================================
--- /dev/null
+++ llvm/test/DebugInfo/accel-imported-declaration.test
@@ -0,0 +1,37 @@
+RUN: llvm-dwarfdump -v %p/Inputs/accel-imported-declaration.macho-arm64.o | FileCheck %s
+RUN: llvm-dwarfdump -verify %p/Inputs/accel-imported-declaration.macho-arm64.o | FileCheck %s --check-prefix=VERIFY
+
+Gather some DIE indexes to verify the accelerator table contents.
+
+CHECK: .debug_info contents
+CHECK: {{.*}}DW_TAG_namespace
+CHECK: DW_AT_name{{.*}}"A"
+CHECK: {{.*}}DW_TAG_namespace
+CHECK: DW_AT_name{{.*}}"B"
+CHECK: [[NAMESPACE:0x[0-9a-f]*]]:{{.*}}DW_TAG_namespace
+CHECK: DW_AT_name{{.*}}"C"
+CHECK: [[IMPORTED:0x[0-9a-f]*]]:{{.*}}DW_TAG_imported_declaration
+CHECK: DW_AT_name{{.*}}"C"
+
+Check that the .apple_namespaces section contains two entries for "namespace C"
+
+CHECK: .apple_namespaces contents:
+CHECK: Bucket 1 [
+CHECK-NEXT: Hash {{.*}} [
+CHECK-NEXT: Name{{.*}} {
+CHECK-NEXT: String: {{.*}} "C"
+CHECK-NEXT: Data 0 [
+CHECK-NEXT: Atom[0]: [[NAMESPACE]]
+CHECK-NEXT: ]
+CHECK-NEXT: Data 1 [
+CHECK-NEXT: Atom[0]: [[IMPORTED]]
+CHECK-NEXT: ]
+CHECK-NEXT: }
+CHECK-NEXT: ]
+CHECK-NEXT: ]
+
+VERIFY: Verifying .apple_names...
+VERIFY-NEXT: Verifying .apple_types...
+VERIFY-NEXT: Verifying .apple_namespaces...
+VERIFY-NEXT: Verifying .apple_objc...
+VERIFY-NEXT: No errors.
Index: llvm/test/DebugInfo/Inputs/accel-imported-declaration.cpp
===================================================================
--- /dev/null
+++ llvm/test/DebugInfo/Inputs/accel-imported-declaration.cpp
@@ -0,0 +1,9 @@
+namespace A {
+namespace B {
+namespace C {
+int a = -1;
+} // namespace C
+} // namespace B
+
+namespace C = B::C;
+} // namespace A
Index: llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
===================================================================
--- llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
+++ llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
@@ -1289,8 +1289,10 @@
addSourceLine(*IMDie, Module->getLine(), Module->getFile());
addDIEEntry(*IMDie, dwarf::DW_AT_import, *EntityDie);
StringRef Name = Module->getName();
- if (!Name.empty())
+ if (!Name.empty()) {
addString(*IMDie, dwarf::DW_AT_name, Name);
+ DD->addAccelNamespace(*CUNode, Name, *IMDie);
+ }
// This is for imported module with renamed entities (such as variables and
// subprograms).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D143397.495114.patch
Type: text/x-patch
Size: 2526 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230206/bfecb520/attachment.bin>
More information about the llvm-commits
mailing list