[DebugInfo] Fix emission of empty debug_names for Apple
authorFelipe de Azevedo Piovezan <fpiovezan@apple.com>
Mon, 19 Jun 2023 14:06:58 +0000 (10:06 -0400)
committerFelipe de Azevedo Piovezan <fpiovezan@apple.com>
Tue, 20 Jun 2023 18:29:12 +0000 (14:29 -0400)
D118754 added a new DICompileUnit::DebugNameTableKind for "Apple", so that,
under DWARF 5, the following combination is used inside DwarfDebug.cpp:

```
(lldb) p getAccelTableKind()
(llvm::AccelTableKind) $6 = Dwarf
(lldb) p CU.getNameTableKind()
(llvm::DICompileUnit::DebugNameTableKind) $7 = Apple
```

This creates a problem in the if statements changed, whereby "for non Apple
AccelTableKind" we emit empty tables for any DebugNameTableKind that is not
"Default". We should consider the newly added kind here too.

Note that our existing test could have caught this, if only it had checked the
_contents_ of the table, instead of merely checking for the existence of the
section.

Differential Revision: https://reviews.llvm.org/D153275

llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/test/DebugInfo/accel-tables-apple.ll

index df21614..59376bd 100644 (file)
@@ -494,6 +494,7 @@ static StringRef getObjCMethodName(StringRef In) {
 void DwarfDebug::addSubprogramNames(const DICompileUnit &CU,
                                     const DISubprogram *SP, DIE &Die) {
   if (getAccelTableKind() != AccelTableKind::Apple &&
+      CU.getNameTableKind() != DICompileUnit::DebugNameTableKind::Apple &&
       CU.getNameTableKind() == DICompileUnit::DebugNameTableKind::None)
     return;
 
@@ -3538,6 +3539,7 @@ void DwarfDebug::addAccelNameImpl(const DICompileUnit &CU,
     return;
 
   if (getAccelTableKind() != AccelTableKind::Apple &&
+      CU.getNameTableKind() != DICompileUnit::DebugNameTableKind::Apple &&
       CU.getNameTableKind() != DICompileUnit::DebugNameTableKind::Default)
     return;
 
index fc1e1ed..727e7ae 100644 (file)
@@ -1,8 +1,9 @@
 ; Verify the emission of accelerator tables for nameTableKind: Apple
 ; REQUIRES: x86-registered-target
 
-; RUN: llc -mtriple=x86_64-apple-darwin12 -filetype=obj < %S/Inputs/name-table-kind-apple-5.ll \
-; RUN:   | llvm-readobj --sections - | FileCheck --check-prefix=DEBUG_NAMES %s
+; RUN: llc -mtriple=x86_64-apple-darwin12 -filetype=obj -o %t.d5.o < %S/Inputs/name-table-kind-apple-5.ll
+; RUN:   llvm-readobj --sections %t.d5.o | FileCheck --check-prefix=DEBUG_NAMES %s
+; RUN:   llvm-dwarfdump --debug-names %t.d5.o | FileCheck --check-prefix=COUNT_DEBUG_NAMES %s
 
 ; RUN: llc -mtriple=x86_64-apple-darwin12 -filetype=obj < %S/Inputs/name-table-kind-apple-4.ll \
 ; RUN:   | llvm-readobj --sections - | FileCheck --check-prefix=APPLE %s
@@ -18,3 +19,5 @@
 ; DEBUG_NAMES: debug_names
 ; DEBUG_NAMES-NOT: apple_names
 ; DEBUG_NAMES-NOT: pubnames
+
+; COUNT_DEBUG_NAMES: Name count: 4