[llvm] 56fa34a - DebugInfo: Temporarily work around -gsplit-dwarf + LTO .debug_gnu_pubnames regression after D94976
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 4 17:35:16 PST 2021
Author: Fangrui Song
Date: 2021-02-04T17:35:09-08:00
New Revision: 56fa34ae3570a34fd0f4c2cf1bfaf095da01a959
URL: https://github.com/llvm/llvm-project/commit/56fa34ae3570a34fd0f4c2cf1bfaf095da01a959
DIFF: https://github.com/llvm/llvm-project/commit/56fa34ae3570a34fd0f4c2cf1bfaf095da01a959.diff
LOG: DebugInfo: Temporarily work around -gsplit-dwarf + LTO .debug_gnu_pubnames regression after D94976
`-flto -gsplit-dwarf -g -O[123]` may create .debug_gnu_pubnames with 0 DIE
offset entries. llvm-dwarfdump -debug-gnu-pubnames/ld.lld --gdb-index errors for that.
```
.section .debug_gnu_pubnames,"", at progbits
.long .LpubNames_end2-.LpubNames_begin2 # Length of Public Names Info
.LpubNames_begin2:
.short 2 # DWARF Version
.long .Lcu_begin2 # Offset of Compilation Unit Info
.long 57 # Compilation Unit Length
.long 0 # DIE offset
.byte 16 # Attributes: TYPE, EXTERNAL
.asciz "absl" # External Name
.long 0 # DIE offset
.byte 16 # Attributes: TYPE, EXTERNAL
.asciz "absl::base_internal" # External Name
.long 0 # End Mark
```
Added:
Modified:
llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
index 23b347f8c907..396df74722bf 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
@@ -551,7 +551,9 @@ DIE *DwarfUnit::getOrCreateContextDIE(const DIScope *Context) {
if (auto *SP = dyn_cast<DISubprogram>(Context)) {
assert(SP->isDefinition());
// When generating type units, each unit gets its own subprogram.
- if (DD->generateTypeUnits())
+ // FIXME: constructSubprogramDefinitionDIE may produce .debug_gnu_pubnames
+ // with 0 DIE Offset entries with split dwarf.
+ if (DD->generateTypeUnits() || DD->useSplitDwarf())
return getOrCreateSubprogramDIE(SP);
// Subprogram definitions should be created in the Unit that they specify,
More information about the llvm-commits
mailing list