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 {