diff options
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 65 |
1 files changed, 24 insertions, 41 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 40fe0e9cb49..f1e61b488a2 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -2407,67 +2407,50 @@ void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU, CU.addDIETypeSignature(RefDie, Signature); } -void DwarfDebug::addAccelDebugName(StringRef Name, const DIE &Die) { - assert(getAccelTableKind() == AccelTableKind::Dwarf); +// Add the Name along with its companion DIE to the appropriate accelerator +// table (for AccelTableKind::Dwarf it's always AccelDebugNames, for +// AccelTableKind::Apple, we use the table we got as an argument). If +// accelerator tables are disabled, this function does nothing. +template <typename DataT> +void DwarfDebug::addAccelNameImpl(AccelTable<DataT> &AppleAccel, StringRef Name, + const DIE &Die) { + if (getAccelTableKind() == AccelTableKind::None) + return; DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; - AccelDebugNames.addName(Holder.getStringPool().getEntry(*Asm, Name), Die); -} + DwarfStringPoolEntryRef Ref = + Holder.getStringPool().getEntry(*Asm, Name); -// Accelerator table mutators - add each name along with its companion -// DIE to the proper table while ensuring that the name that we're going -// to reference is in the string table. We do this since the names we -// add may not only be identical to the names in the DIE. -void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) { switch (getAccelTableKind()) { case AccelTableKind::Apple: - AccelNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); + AppleAccel.addName(Ref, Die); break; case AccelTableKind::Dwarf: - addAccelDebugName(Name, Die); + AccelDebugNames.addName(Ref, Die); break; - case AccelTableKind::None: - return; case AccelTableKind::Default: llvm_unreachable("Default should have already been resolved."); + case AccelTableKind::None: + llvm_unreachable("None handled above"); } } +void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) { + addAccelNameImpl(AccelNames, Name, Die); +} + void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) { - if (getAccelTableKind() != AccelTableKind::Apple) - return; - AccelObjC.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); + // ObjC names go only into the Apple accelerator tables. + if (getAccelTableKind() == AccelTableKind::Apple) + addAccelNameImpl(AccelObjC, Name, Die); } void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) { - switch (getAccelTableKind()) { - case AccelTableKind::Apple: - AccelNamespace.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), - &Die); - break; - case AccelTableKind::Dwarf: - addAccelDebugName(Name, Die); - break; - case AccelTableKind::None: - return; - case AccelTableKind::Default: - llvm_unreachable("Default should have already been resolved."); - } + addAccelNameImpl(AccelNamespace, Name, Die); } void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) { - switch (getAccelTableKind()) { - case AccelTableKind::Apple: - AccelTypes.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); - break; - case AccelTableKind::Dwarf: - addAccelDebugName(Name, Die); - break; - case AccelTableKind::None: - return; - case AccelTableKind::Default: - llvm_unreachable("Default should have already been resolved."); - } + addAccelNameImpl(AccelTypes, Name, Die); } uint16_t DwarfDebug::getDwarfVersion() const { |