1 //===- llvm/CodeGen/DwarfDebug.cpp - Dwarf Debug Framework ----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains support for writing dwarf debug info into asm files.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "DwarfDebug.h"
15 #include "ByteStreamer.h"
16 #include "DIEHash.h"
17 #include "DebugLocEntry.h"
18 #include "DebugLocStream.h"
19 #include "DwarfAccelTable.h"
20 #include "DwarfCompileUnit.h"
21 #include "DwarfExpression.h"
22 #include "DwarfFile.h"
23 #include "DwarfUnit.h"
24 #include "llvm/ADT/APInt.h"
25 #include "llvm/ADT/DenseMap.h"
26 #include "llvm/ADT/DenseSet.h"
27 #include "llvm/ADT/MapVector.h"
28 #include "llvm/ADT/STLExtras.h"
29 #include "llvm/ADT/SmallVector.h"
30 #include "llvm/ADT/StringRef.h"
31 #include "llvm/ADT/Triple.h"
32 #include "llvm/ADT/Twine.h"
33 #include "llvm/BinaryFormat/Dwarf.h"
34 #include "llvm/CodeGen/AsmPrinter.h"
35 #include "llvm/CodeGen/DIE.h"
36 #include "llvm/CodeGen/LexicalScopes.h"
37 #include "llvm/CodeGen/MachineBasicBlock.h"
38 #include "llvm/CodeGen/MachineFunction.h"
39 #include "llvm/CodeGen/MachineInstr.h"
40 #include "llvm/CodeGen/MachineModuleInfo.h"
41 #include "llvm/CodeGen/MachineOperand.h"
42 #include "llvm/IR/Constants.h"
43 #include "llvm/IR/DebugInfoMetadata.h"
44 #include "llvm/IR/DebugLoc.h"
45 #include "llvm/IR/Function.h"
46 #include "llvm/IR/GlobalVariable.h"
47 #include "llvm/IR/Module.h"
48 #include "llvm/MC/MCAsmInfo.h"
49 #include "llvm/MC/MCContext.h"
50 #include "llvm/MC/MCDwarf.h"
51 #include "llvm/MC/MCSection.h"
52 #include "llvm/MC/MCStreamer.h"
53 #include "llvm/MC/MCSymbol.h"
54 #include "llvm/MC/MCTargetOptions.h"
55 #include "llvm/MC/MachineLocation.h"
56 #include "llvm/MC/SectionKind.h"
57 #include "llvm/Pass.h"
58 #include "llvm/Support/Casting.h"
59 #include "llvm/Support/CommandLine.h"
60 #include "llvm/Support/Debug.h"
61 #include "llvm/Support/ErrorHandling.h"
62 #include "llvm/Support/MD5.h"
63 #include "llvm/Support/MathExtras.h"
64 #include "llvm/Support/Timer.h"
65 #include "llvm/Support/raw_ostream.h"
66 #include "llvm/Target/TargetLoweringObjectFile.h"
67 #include "llvm/Target/TargetMachine.h"
68 #include "llvm/Target/TargetOptions.h"
69 #include "llvm/Target/TargetRegisterInfo.h"
70 #include "llvm/Target/TargetSubtargetInfo.h"
71 #include <algorithm>
72 #include <cassert>
73 #include <cstddef>
74 #include <cstdint>
75 #include <iterator>
76 #include <string>
77 #include <utility>
78 #include <vector>
79 
80 using namespace llvm;
81 
82 #define DEBUG_TYPE "dwarfdebug"
83 
84 static cl::opt<bool>
85 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden,
86                          cl::desc("Disable debug info printing"));
87 
88 static cl::opt<bool> UseDwarfRangesBaseAddressSpecifier(
89     "use-dwarf-ranges-base-address-specifier", cl::Hidden,
90     cl::desc("Use base address specifiers in debug_ranges"), cl::init(false));
91 
92 static cl::opt<bool> GenerateARangeSection("generate-arange-section",
93                                            cl::Hidden,
94                                            cl::desc("Generate dwarf aranges"),
95                                            cl::init(false));
96 
97 static cl::opt<bool> SplitDwarfCrossCuReferences(
98     "split-dwarf-cross-cu-references", cl::Hidden,
99     cl::desc("Enable cross-cu references in DWO files"), cl::init(false));
100 
101 enum DefaultOnOff { Default, Enable, Disable };
102 
103 static cl::opt<DefaultOnOff> UnknownLocations(
104     "use-unknown-locations", cl::Hidden,
105     cl::desc("Make an absence of debug location information explicit."),
106     cl::values(clEnumVal(Default, "At top of block or after label"),
107                clEnumVal(Enable, "In all cases"), clEnumVal(Disable, "Never")),
108     cl::init(Default));
109 
110 static cl::opt<DefaultOnOff>
111 DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
112                  cl::desc("Output prototype dwarf accelerator tables."),
113                  cl::values(clEnumVal(Default, "Default for platform"),
114                             clEnumVal(Enable, "Enabled"),
115                             clEnumVal(Disable, "Disabled")),
116                  cl::init(Default));
117 
118 enum LinkageNameOption {
119   DefaultLinkageNames,
120   AllLinkageNames,
121   AbstractLinkageNames
122 };
123 
124 static cl::opt<LinkageNameOption>
125     DwarfLinkageNames("dwarf-linkage-names", cl::Hidden,
126                       cl::desc("Which DWARF linkage-name attributes to emit."),
127                       cl::values(clEnumValN(DefaultLinkageNames, "Default",
128                                             "Default for platform"),
129                                  clEnumValN(AllLinkageNames, "All", "All"),
130                                  clEnumValN(AbstractLinkageNames, "Abstract",
131                                             "Abstract subprograms")),
132                       cl::init(DefaultLinkageNames));
133 
134 static const char *const DWARFGroupName = "dwarf";
135 static const char *const DWARFGroupDescription = "DWARF Emission";
136 static const char *const DbgTimerName = "writer";
137 static const char *const DbgTimerDescription = "DWARF Debug Writer";
138 
139 void DebugLocDwarfExpression::emitOp(uint8_t Op, const char *Comment) {
140   BS.EmitInt8(
141       Op, Comment ? Twine(Comment) + " " + dwarf::OperationEncodingString(Op)
142                   : dwarf::OperationEncodingString(Op));
143 }
144 
145 void DebugLocDwarfExpression::emitSigned(int64_t Value) {
146   BS.EmitSLEB128(Value, Twine(Value));
147 }
148 
149 void DebugLocDwarfExpression::emitUnsigned(uint64_t Value) {
150   BS.EmitULEB128(Value, Twine(Value));
151 }
152 
153 bool DebugLocDwarfExpression::isFrameRegister(const TargetRegisterInfo &TRI,
154                                               unsigned MachineReg) {
155   // This information is not available while emitting .debug_loc entries.
156   return false;
157 }
158 
159 bool DbgVariable::isBlockByrefVariable() const {
160   assert(Var && "Invalid complex DbgVariable!");
161   return Var->getType().resolve()->isBlockByrefStruct();
162 }
163 
164 const DIType *DbgVariable::getType() const {
165   DIType *Ty = Var->getType().resolve();
166   // FIXME: isBlockByrefVariable should be reformulated in terms of complex
167   // addresses instead.
168   if (Ty->isBlockByrefStruct()) {
169     /* Byref variables, in Blocks, are declared by the programmer as
170        "SomeType VarName;", but the compiler creates a
171        __Block_byref_x_VarName struct, and gives the variable VarName
172        either the struct, or a pointer to the struct, as its type.  This
173        is necessary for various behind-the-scenes things the compiler
174        needs to do with by-reference variables in blocks.
175 
176        However, as far as the original *programmer* is concerned, the
177        variable should still have type 'SomeType', as originally declared.
178 
179        The following function dives into the __Block_byref_x_VarName
180        struct to find the original type of the variable.  This will be
181        passed back to the code generating the type for the Debug
182        Information Entry for the variable 'VarName'.  'VarName' will then
183        have the original type 'SomeType' in its debug information.
184 
185        The original type 'SomeType' will be the type of the field named
186        'VarName' inside the __Block_byref_x_VarName struct.
187 
188        NOTE: In order for this to not completely fail on the debugger
189        side, the Debug Information Entry for the variable VarName needs to
190        have a DW_AT_location that tells the debugger how to unwind through
191        the pointers and __Block_byref_x_VarName struct to find the actual
192        value of the variable.  The function addBlockByrefType does this.  */
193     DIType *subType = Ty;
194     uint16_t tag = Ty->getTag();
195 
196     if (tag == dwarf::DW_TAG_pointer_type)
197       subType = resolve(cast<DIDerivedType>(Ty)->getBaseType());
198 
199     auto Elements = cast<DICompositeType>(subType)->getElements();
200     for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
201       auto *DT = cast<DIDerivedType>(Elements[i]);
202       if (getName() == DT->getName())
203         return resolve(DT->getBaseType());
204     }
205   }
206   return Ty;
207 }
208 
209 ArrayRef<DbgVariable::FrameIndexExpr> DbgVariable::getFrameIndexExprs() const {
210   if (FrameIndexExprs.size() == 1)
211     return FrameIndexExprs;
212 
213   assert(llvm::all_of(FrameIndexExprs,
214                       [](const FrameIndexExpr &A) {
215                         return A.Expr->isFragment();
216                       }) &&
217          "multiple FI expressions without DW_OP_LLVM_fragment");
218   std::sort(FrameIndexExprs.begin(), FrameIndexExprs.end(),
219             [](const FrameIndexExpr &A, const FrameIndexExpr &B) -> bool {
220               return A.Expr->getFragmentInfo()->OffsetInBits <
221                      B.Expr->getFragmentInfo()->OffsetInBits;
222             });
223 
224   return FrameIndexExprs;
225 }
226 
227 void DbgVariable::addMMIEntry(const DbgVariable &V) {
228   assert(DebugLocListIndex == ~0U && !MInsn && "not an MMI entry");
229   assert(V.DebugLocListIndex == ~0U && !V.MInsn && "not an MMI entry");
230   assert(V.Var == Var && "conflicting variable");
231   assert(V.IA == IA && "conflicting inlined-at location");
232 
233   assert(!FrameIndexExprs.empty() && "Expected an MMI entry");
234   assert(!V.FrameIndexExprs.empty() && "Expected an MMI entry");
235 
236   for (const auto &FIE : V.FrameIndexExprs)
237     // Ignore duplicate entries.
238     if (llvm::none_of(FrameIndexExprs, [&](const FrameIndexExpr &Other) {
239           return FIE.FI == Other.FI && FIE.Expr == Other.Expr;
240         }))
241       FrameIndexExprs.push_back(FIE);
242 
243   assert((FrameIndexExprs.size() == 1 ||
244           llvm::all_of(FrameIndexExprs,
245                        [](FrameIndexExpr &FIE) {
246                          return FIE.Expr && FIE.Expr->isFragment();
247                        })) &&
248          "conflicting locations for variable");
249 }
250 
251 static const DwarfAccelTable::Atom TypeAtoms[] = {
252     DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4),
253     DwarfAccelTable::Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2),
254     DwarfAccelTable::Atom(dwarf::DW_ATOM_type_flags, dwarf::DW_FORM_data1)};
255 
256 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
257     : DebugHandlerBase(A), DebugLocs(A->OutStreamer->isVerboseAsm()),
258       InfoHolder(A, "info_string", DIEValueAllocator),
259       SkeletonHolder(A, "skel_string", DIEValueAllocator),
260       IsDarwin(A->TM.getTargetTriple().isOSDarwin()),
261       AccelNames(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
262                                        dwarf::DW_FORM_data4)),
263       AccelObjC(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
264                                       dwarf::DW_FORM_data4)),
265       AccelNamespace(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
266                                            dwarf::DW_FORM_data4)),
267       AccelTypes(TypeAtoms) {
268   const Triple &TT = Asm->TM.getTargetTriple();
269 
270   // Make sure we know our "debugger tuning."  The target option takes
271   // precedence; fall back to triple-based defaults.
272   if (Asm->TM.Options.DebuggerTuning != DebuggerKind::Default)
273     DebuggerTuning = Asm->TM.Options.DebuggerTuning;
274   else if (IsDarwin)
275     DebuggerTuning = DebuggerKind::LLDB;
276   else if (TT.isPS4CPU())
277     DebuggerTuning = DebuggerKind::SCE;
278   else
279     DebuggerTuning = DebuggerKind::GDB;
280 
281   // Turn on accelerator tables for LLDB by default.
282   if (DwarfAccelTables == Default)
283     HasDwarfAccelTables = tuneForLLDB();
284   else
285     HasDwarfAccelTables = DwarfAccelTables == Enable;
286 
287   HasAppleExtensionAttributes = tuneForLLDB();
288 
289   // Handle split DWARF.
290   HasSplitDwarf = !Asm->TM.Options.MCOptions.SplitDwarfFile.empty();
291 
292   // SCE defaults to linkage names only for abstract subprograms.
293   if (DwarfLinkageNames == DefaultLinkageNames)
294     UseAllLinkageNames = !tuneForSCE();
295   else
296     UseAllLinkageNames = DwarfLinkageNames == AllLinkageNames;
297 
298   unsigned DwarfVersionNumber = Asm->TM.Options.MCOptions.DwarfVersion;
299   unsigned DwarfVersion = DwarfVersionNumber ? DwarfVersionNumber
300                                     : MMI->getModule()->getDwarfVersion();
301   // Use dwarf 4 by default if nothing is requested.
302   DwarfVersion = DwarfVersion ? DwarfVersion : dwarf::DWARF_VERSION;
303 
304   // Work around a GDB bug. GDB doesn't support the standard opcode;
305   // SCE doesn't support GNU's; LLDB prefers the standard opcode, which
306   // is defined as of DWARF 3.
307   // See GDB bug 11616 - DW_OP_form_tls_address is unimplemented
308   // https://sourceware.org/bugzilla/show_bug.cgi?id=11616
309   UseGNUTLSOpcode = tuneForGDB() || DwarfVersion < 3;
310 
311   // GDB does not fully support the DWARF 4 representation for bitfields.
312   UseDWARF2Bitfields = (DwarfVersion < 4) || tuneForGDB();
313 
314   Asm->OutStreamer->getContext().setDwarfVersion(DwarfVersion);
315 }
316 
317 // Define out of line so we don't have to include DwarfUnit.h in DwarfDebug.h.
318 DwarfDebug::~DwarfDebug() = default;
319 
320 static bool isObjCClass(StringRef Name) {
321   return Name.startswith("+") || Name.startswith("-");
322 }
323 
324 static bool hasObjCCategory(StringRef Name) {
325   if (!isObjCClass(Name))
326     return false;
327 
328   return Name.find(") ") != StringRef::npos;
329 }
330 
331 static void getObjCClassCategory(StringRef In, StringRef &Class,
332                                  StringRef &Category) {
333   if (!hasObjCCategory(In)) {
334     Class = In.slice(In.find('[') + 1, In.find(' '));
335     Category = "";
336     return;
337   }
338 
339   Class = In.slice(In.find('[') + 1, In.find('('));
340   Category = In.slice(In.find('[') + 1, In.find(' '));
341 }
342 
343 static StringRef getObjCMethodName(StringRef In) {
344   return In.slice(In.find(' ') + 1, In.find(']'));
345 }
346 
347 // Add the various names to the Dwarf accelerator table names.
348 // TODO: Determine whether or not we should add names for programs
349 // that do not have a DW_AT_name or DW_AT_linkage_name field - this
350 // is only slightly different than the lookup of non-standard ObjC names.
351 void DwarfDebug::addSubprogramNames(const DISubprogram *SP, DIE &Die) {
352   if (!SP->isDefinition())
353     return;
354   addAccelName(SP->getName(), Die);
355 
356   // If the linkage name is different than the name, go ahead and output
357   // that as well into the name table.
358   if (SP->getLinkageName() != "" && SP->getName() != SP->getLinkageName())
359     addAccelName(SP->getLinkageName(), Die);
360 
361   // If this is an Objective-C selector name add it to the ObjC accelerator
362   // too.
363   if (isObjCClass(SP->getName())) {
364     StringRef Class, Category;
365     getObjCClassCategory(SP->getName(), Class, Category);
366     addAccelObjC(Class, Die);
367     if (Category != "")
368       addAccelObjC(Category, Die);
369     // Also add the base method name to the name table.
370     addAccelName(getObjCMethodName(SP->getName()), Die);
371   }
372 }
373 
374 /// Check whether we should create a DIE for the given Scope, return true
375 /// if we don't create a DIE (the corresponding DIE is null).
376 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) {
377   if (Scope->isAbstractScope())
378     return false;
379 
380   // We don't create a DIE if there is no Range.
381   const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges();
382   if (Ranges.empty())
383     return true;
384 
385   if (Ranges.size() > 1)
386     return false;
387 
388   // We don't create a DIE if we have a single Range and the end label
389   // is null.
390   return !getLabelAfterInsn(Ranges.front().second);
391 }
392 
393 template <typename Func> static void forBothCUs(DwarfCompileUnit &CU, Func F) {
394   F(CU);
395   if (auto *SkelCU = CU.getSkeleton())
396     if (CU.getCUNode()->getSplitDebugInlining())
397       F(*SkelCU);
398 }
399 
400 bool DwarfDebug::shareAcrossDWOCUs() const {
401   return SplitDwarfCrossCuReferences;
402 }
403 
404 void DwarfDebug::constructAbstractSubprogramScopeDIE(DwarfCompileUnit &SrcCU,
405                                                      LexicalScope *Scope) {
406   assert(Scope && Scope->getScopeNode());
407   assert(Scope->isAbstractScope());
408   assert(!Scope->getInlinedAt());
409 
410   auto *SP = cast<DISubprogram>(Scope->getScopeNode());
411 
412   // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
413   // was inlined from another compile unit.
414   if (useSplitDwarf() && !shareAcrossDWOCUs() && !SP->getUnit()->getSplitDebugInlining())
415     // Avoid building the original CU if it won't be used
416     SrcCU.constructAbstractSubprogramScopeDIE(Scope);
417   else {
418     auto &CU = getOrCreateDwarfCompileUnit(SP->getUnit());
419     if (auto *SkelCU = CU.getSkeleton()) {
420       (shareAcrossDWOCUs() ? CU : SrcCU)
421           .constructAbstractSubprogramScopeDIE(Scope);
422       if (CU.getCUNode()->getSplitDebugInlining())
423         SkelCU->constructAbstractSubprogramScopeDIE(Scope);
424     } else
425       CU.constructAbstractSubprogramScopeDIE(Scope);
426   }
427 }
428 
429 void DwarfDebug::addGnuPubAttributes(DwarfCompileUnit &U, DIE &D) const {
430   if (!U.hasDwarfPubSections())
431     return;
432 
433   U.addFlag(D, dwarf::DW_AT_GNU_pubnames);
434 }
435 
436 // Create new DwarfCompileUnit for the given metadata node with tag
437 // DW_TAG_compile_unit.
438 DwarfCompileUnit &
439 DwarfDebug::getOrCreateDwarfCompileUnit(const DICompileUnit *DIUnit) {
440   if (auto *CU = CUMap.lookup(DIUnit))
441     return *CU;
442   StringRef FN = DIUnit->getFilename();
443   CompilationDir = DIUnit->getDirectory();
444 
445   auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>(
446       InfoHolder.getUnits().size(), DIUnit, Asm, this, &InfoHolder);
447   DwarfCompileUnit &NewCU = *OwnedUnit;
448   DIE &Die = NewCU.getUnitDie();
449   InfoHolder.addUnit(std::move(OwnedUnit));
450   if (useSplitDwarf()) {
451     NewCU.setSkeleton(constructSkeletonCU(NewCU));
452     NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name,
453                   Asm->TM.Options.MCOptions.SplitDwarfFile);
454   }
455 
456   for (auto *IE : DIUnit->getImportedEntities())
457     NewCU.addImportedEntity(IE);
458 
459   // LTO with assembly output shares a single line table amongst multiple CUs.
460   // To avoid the compilation directory being ambiguous, let the line table
461   // explicitly describe the directory of all files, never relying on the
462   // compilation directory.
463   if (!Asm->OutStreamer->hasRawTextSupport() || SingleCU)
464     Asm->OutStreamer->getContext().setMCLineTableCompilationDir(
465         NewCU.getUniqueID(), CompilationDir);
466 
467   StringRef Producer = DIUnit->getProducer();
468   StringRef Flags = DIUnit->getFlags();
469   if (!Flags.empty()) {
470     std::string ProducerWithFlags = Producer.str() + " " + Flags.str();
471     NewCU.addString(Die, dwarf::DW_AT_producer, ProducerWithFlags);
472   } else
473     NewCU.addString(Die, dwarf::DW_AT_producer, Producer);
474 
475   NewCU.addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
476                 DIUnit->getSourceLanguage());
477   NewCU.addString(Die, dwarf::DW_AT_name, FN);
478 
479   if (!useSplitDwarf()) {
480     NewCU.initStmtList();
481 
482     // If we're using split dwarf the compilation dir is going to be in the
483     // skeleton CU and so we don't need to duplicate it here.
484     if (!CompilationDir.empty())
485       NewCU.addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
486 
487     addGnuPubAttributes(NewCU, Die);
488   }
489 
490   if (useAppleExtensionAttributes()) {
491     if (DIUnit->isOptimized())
492       NewCU.addFlag(Die, dwarf::DW_AT_APPLE_optimized);
493 
494     StringRef Flags = DIUnit->getFlags();
495     if (!Flags.empty())
496       NewCU.addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
497 
498     if (unsigned RVer = DIUnit->getRuntimeVersion())
499       NewCU.addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
500                     dwarf::DW_FORM_data1, RVer);
501   }
502 
503   if (useSplitDwarf())
504     NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoDWOSection());
505   else
506     NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection());
507 
508   if (DIUnit->getDWOId()) {
509     // This CU is either a clang module DWO or a skeleton CU.
510     NewCU.addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8,
511                   DIUnit->getDWOId());
512     if (!DIUnit->getSplitDebugFilename().empty())
513       // This is a prefabricated skeleton CU.
514       NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name,
515                       DIUnit->getSplitDebugFilename());
516   }
517 
518   CUMap.insert({DIUnit, &NewCU});
519   CUDieMap.insert({&Die, &NewCU});
520   return NewCU;
521 }
522 
523 void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
524                                                   const DIImportedEntity *N) {
525   if (isa<DILocalScope>(N->getScope()))
526     return;
527   if (DIE *D = TheCU.getOrCreateContextDIE(N->getScope()))
528     D->addChild(TheCU.constructImportedEntityDIE(N));
529 }
530 
531 /// Sort and unique GVEs by comparing their fragment offset.
532 static SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &
533 sortGlobalExprs(SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &GVEs) {
534   std::sort(GVEs.begin(), GVEs.end(),
535             [](DwarfCompileUnit::GlobalExpr A, DwarfCompileUnit::GlobalExpr B) {
536               if (A.Expr != B.Expr && A.Expr && B.Expr) {
537                 auto FragmentA = A.Expr->getFragmentInfo();
538                 auto FragmentB = B.Expr->getFragmentInfo();
539                 if (FragmentA && FragmentB)
540                   return FragmentA->OffsetInBits < FragmentB->OffsetInBits;
541               }
542               return false;
543             });
544   GVEs.erase(std::unique(GVEs.begin(), GVEs.end(),
545                          [](DwarfCompileUnit::GlobalExpr A,
546                             DwarfCompileUnit::GlobalExpr B) {
547                            return A.Expr == B.Expr;
548                          }),
549              GVEs.end());
550   return GVEs;
551 }
552 
553 // Emit all Dwarf sections that should come prior to the content. Create
554 // global DIEs and emit initial debug info sections. This is invoked by
555 // the target AsmPrinter.
556 void DwarfDebug::beginModule() {
557   NamedRegionTimer T(DbgTimerName, DbgTimerDescription, DWARFGroupName,
558                      DWARFGroupDescription, TimePassesIsEnabled);
559   if (DisableDebugInfoPrinting)
560     return;
561 
562   const Module *M = MMI->getModule();
563 
564   unsigned NumDebugCUs = std::distance(M->debug_compile_units_begin(),
565                                        M->debug_compile_units_end());
566   // Tell MMI whether we have debug info.
567   MMI->setDebugInfoAvailability(NumDebugCUs > 0);
568   SingleCU = NumDebugCUs == 1;
569   DenseMap<DIGlobalVariable *, SmallVector<DwarfCompileUnit::GlobalExpr, 1>>
570       GVMap;
571   for (const GlobalVariable &Global : M->globals()) {
572     SmallVector<DIGlobalVariableExpression *, 1> GVs;
573     Global.getDebugInfo(GVs);
574     for (auto *GVE : GVs)
575       GVMap[GVE->getVariable()].push_back({&Global, GVE->getExpression()});
576   }
577 
578   for (DICompileUnit *CUNode : M->debug_compile_units()) {
579     // FIXME: Move local imported entities into a list attached to the
580     // subprogram, then this search won't be needed and a
581     // getImportedEntities().empty() test should go below with the rest.
582     bool HasNonLocalImportedEntities = llvm::any_of(
583         CUNode->getImportedEntities(), [](const DIImportedEntity *IE) {
584           return !isa<DILocalScope>(IE->getScope());
585         });
586 
587     if (!HasNonLocalImportedEntities && CUNode->getEnumTypes().empty() &&
588         CUNode->getRetainedTypes().empty() &&
589         CUNode->getGlobalVariables().empty() && CUNode->getMacros().empty())
590       continue;
591 
592     DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(CUNode);
593 
594     // Global Variables.
595     for (auto *GVE : CUNode->getGlobalVariables()) {
596       // Don't bother adding DIGlobalVariableExpressions listed in the CU if we
597       // already know about the variable and it isn't adding a constant
598       // expression.
599       auto &GVMapEntry = GVMap[GVE->getVariable()];
600       auto *Expr = GVE->getExpression();
601       if (!GVMapEntry.size() || (Expr && Expr->isConstant()))
602         GVMapEntry.push_back({nullptr, Expr});
603     }
604     DenseSet<DIGlobalVariable *> Processed;
605     for (auto *GVE : CUNode->getGlobalVariables()) {
606       DIGlobalVariable *GV = GVE->getVariable();
607       if (Processed.insert(GV).second)
608         CU.getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV]));
609     }
610 
611     for (auto *Ty : CUNode->getEnumTypes()) {
612       // The enum types array by design contains pointers to
613       // MDNodes rather than DIRefs. Unique them here.
614       CU.getOrCreateTypeDIE(cast<DIType>(Ty));
615     }
616     for (auto *Ty : CUNode->getRetainedTypes()) {
617       // The retained types array by design contains pointers to
618       // MDNodes rather than DIRefs. Unique them here.
619       if (DIType *RT = dyn_cast<DIType>(Ty))
620           // There is no point in force-emitting a forward declaration.
621           CU.getOrCreateTypeDIE(RT);
622     }
623     // Emit imported_modules last so that the relevant context is already
624     // available.
625     for (auto *IE : CUNode->getImportedEntities())
626       constructAndAddImportedEntityDIE(CU, IE);
627   }
628 }
629 
630 void DwarfDebug::finishVariableDefinitions() {
631   for (const auto &Var : ConcreteVariables) {
632     DIE *VariableDie = Var->getDIE();
633     assert(VariableDie);
634     // FIXME: Consider the time-space tradeoff of just storing the unit pointer
635     // in the ConcreteVariables list, rather than looking it up again here.
636     // DIE::getUnit isn't simple - it walks parent pointers, etc.
637     DwarfCompileUnit *Unit = CUDieMap.lookup(VariableDie->getUnitDie());
638     assert(Unit);
639     Unit->finishVariableDefinition(*Var);
640   }
641 }
642 
643 void DwarfDebug::finishSubprogramDefinitions() {
644   for (const DISubprogram *SP : ProcessedSPNodes) {
645     assert(SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug);
646     forBothCUs(
647         getOrCreateDwarfCompileUnit(SP->getUnit()),
648         [&](DwarfCompileUnit &CU) { CU.finishSubprogramDefinition(SP); });
649   }
650 }
651 
652 void DwarfDebug::finalizeModuleInfo() {
653   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
654 
655   finishSubprogramDefinitions();
656 
657   finishVariableDefinitions();
658 
659   // Include the DWO file name in the hash if there's more than one CU.
660   // This handles ThinLTO's situation where imported CUs may very easily be
661   // duplicate with the same CU partially imported into another ThinLTO unit.
662   StringRef DWOName;
663   if (CUMap.size() > 1)
664     DWOName = Asm->TM.Options.MCOptions.SplitDwarfFile;
665 
666   // Handle anything that needs to be done on a per-unit basis after
667   // all other generation.
668   for (const auto &P : CUMap) {
669     auto &TheCU = *P.second;
670     // Emit DW_AT_containing_type attribute to connect types with their
671     // vtable holding type.
672     TheCU.constructContainingTypeDIEs();
673 
674     // Add CU specific attributes if we need to add any.
675     // If we're splitting the dwarf out now that we've got the entire
676     // CU then add the dwo id to it.
677     auto *SkCU = TheCU.getSkeleton();
678     if (useSplitDwarf()) {
679       // Emit a unique identifier for this CU.
680       uint64_t ID =
681           DIEHash(Asm).computeCUSignature(DWOName, TheCU.getUnitDie());
682       TheCU.addUInt(TheCU.getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
683                     dwarf::DW_FORM_data8, ID);
684       SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
685                     dwarf::DW_FORM_data8, ID);
686 
687       // We don't keep track of which addresses are used in which CU so this
688       // is a bit pessimistic under LTO.
689       if (!AddrPool.isEmpty()) {
690         const MCSymbol *Sym = TLOF.getDwarfAddrSection()->getBeginSymbol();
691         SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_addr_base,
692                               Sym, Sym);
693       }
694       if (!SkCU->getRangeLists().empty()) {
695         const MCSymbol *Sym = TLOF.getDwarfRangesSection()->getBeginSymbol();
696         SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_ranges_base,
697                               Sym, Sym);
698       }
699     }
700 
701     // If we have code split among multiple sections or non-contiguous
702     // ranges of code then emit a DW_AT_ranges attribute on the unit that will
703     // remain in the .o file, otherwise add a DW_AT_low_pc.
704     // FIXME: We should use ranges allow reordering of code ala
705     // .subsections_via_symbols in mach-o. This would mean turning on
706     // ranges for all subprogram DIEs for mach-o.
707     DwarfCompileUnit &U = SkCU ? *SkCU : TheCU;
708     if (unsigned NumRanges = TheCU.getRanges().size()) {
709       if (NumRanges > 1)
710         // A DW_AT_low_pc attribute may also be specified in combination with
711         // DW_AT_ranges to specify the default base address for use in
712         // location lists (see Section 2.6.2) and range lists (see Section
713         // 2.17.3).
714         U.addUInt(U.getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
715       else
716         U.setBaseAddress(TheCU.getRanges().front().getStart());
717       U.attachRangesOrLowHighPC(U.getUnitDie(), TheCU.takeRanges());
718     }
719 
720     auto *CUNode = cast<DICompileUnit>(P.first);
721     // If compile Unit has macros, emit "DW_AT_macro_info" attribute.
722     if (CUNode->getMacros())
723       U.addSectionLabel(U.getUnitDie(), dwarf::DW_AT_macro_info,
724                         U.getMacroLabelBegin(),
725                         TLOF.getDwarfMacinfoSection()->getBeginSymbol());
726   }
727 
728   // Emit all frontend-produced Skeleton CUs, i.e., Clang modules.
729   for (auto *CUNode : MMI->getModule()->debug_compile_units())
730     if (CUNode->getDWOId())
731       getOrCreateDwarfCompileUnit(CUNode);
732 
733   // Compute DIE offsets and sizes.
734   InfoHolder.computeSizeAndOffsets();
735   if (useSplitDwarf())
736     SkeletonHolder.computeSizeAndOffsets();
737 }
738 
739 // Emit all Dwarf sections that should come after the content.
740 void DwarfDebug::endModule() {
741   assert(CurFn == nullptr);
742   assert(CurMI == nullptr);
743 
744   // If we aren't actually generating debug info (check beginModule -
745   // conditionalized on !DisableDebugInfoPrinting and the presence of the
746   // llvm.dbg.cu metadata node)
747   if (!MMI->hasDebugInfo())
748     return;
749 
750   // Finalize the debug info for the module.
751   finalizeModuleInfo();
752 
753   emitDebugStr();
754 
755   if (useSplitDwarf())
756     emitDebugLocDWO();
757   else
758     // Emit info into a debug loc section.
759     emitDebugLoc();
760 
761   // Corresponding abbreviations into a abbrev section.
762   emitAbbreviations();
763 
764   // Emit all the DIEs into a debug info section.
765   emitDebugInfo();
766 
767   // Emit info into a debug aranges section.
768   if (GenerateARangeSection)
769     emitDebugARanges();
770 
771   // Emit info into a debug ranges section.
772   emitDebugRanges();
773 
774   // Emit info into a debug macinfo section.
775   emitDebugMacinfo();
776 
777   if (useSplitDwarf()) {
778     emitDebugStrDWO();
779     emitDebugInfoDWO();
780     emitDebugAbbrevDWO();
781     emitDebugLineDWO();
782     // Emit DWO addresses.
783     AddrPool.emit(*Asm, Asm->getObjFileLowering().getDwarfAddrSection());
784   }
785 
786   // Emit info into the dwarf accelerator table sections.
787   if (useDwarfAccelTables()) {
788     emitAccelNames();
789     emitAccelObjC();
790     emitAccelNamespaces();
791     emitAccelTypes();
792   }
793 
794   // Emit the pubnames and pubtypes sections if requested.
795   emitDebugPubSections();
796 
797   // clean up.
798   // FIXME: AbstractVariables.clear();
799 }
800 
801 void DwarfDebug::ensureAbstractVariableIsCreated(DwarfCompileUnit &CU, InlinedVariable IV,
802                                                  const MDNode *ScopeNode) {
803   const DILocalVariable *Cleansed = nullptr;
804   if (CU.getExistingAbstractVariable(IV, Cleansed))
805     return;
806 
807   CU.createAbstractVariable(Cleansed, LScopes.getOrCreateAbstractScope(
808                                        cast<DILocalScope>(ScopeNode)));
809 }
810 
811 void DwarfDebug::ensureAbstractVariableIsCreatedIfScoped(DwarfCompileUnit &CU,
812     InlinedVariable IV, const MDNode *ScopeNode) {
813   const DILocalVariable *Cleansed = nullptr;
814   if (CU.getExistingAbstractVariable(IV, Cleansed))
815     return;
816 
817   if (LexicalScope *Scope =
818           LScopes.findAbstractScope(cast_or_null<DILocalScope>(ScopeNode)))
819     CU.createAbstractVariable(Cleansed, Scope);
820 }
821 
822 // Collect variable information from side table maintained by MF.
823 void DwarfDebug::collectVariableInfoFromMFTable(
824     DwarfCompileUnit &TheCU, DenseSet<InlinedVariable> &Processed) {
825   SmallDenseMap<InlinedVariable, DbgVariable *> MFVars;
826   for (const auto &VI : Asm->MF->getVariableDbgInfo()) {
827     if (!VI.Var)
828       continue;
829     assert(VI.Var->isValidLocationForIntrinsic(VI.Loc) &&
830            "Expected inlined-at fields to agree");
831 
832     InlinedVariable Var(VI.Var, VI.Loc->getInlinedAt());
833     Processed.insert(Var);
834     LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc);
835 
836     // If variable scope is not found then skip this variable.
837     if (!Scope)
838       continue;
839 
840     ensureAbstractVariableIsCreatedIfScoped(TheCU, Var, Scope->getScopeNode());
841     auto RegVar = llvm::make_unique<DbgVariable>(Var.first, Var.second);
842     RegVar->initializeMMI(VI.Expr, VI.Slot);
843     if (DbgVariable *DbgVar = MFVars.lookup(Var))
844       DbgVar->addMMIEntry(*RegVar);
845     else if (InfoHolder.addScopeVariable(Scope, RegVar.get())) {
846       MFVars.insert({Var, RegVar.get()});
847       ConcreteVariables.push_back(std::move(RegVar));
848     }
849   }
850 }
851 
852 // Get .debug_loc entry for the instruction range starting at MI.
853 static DebugLocEntry::Value getDebugLocValue(const MachineInstr *MI) {
854   const DIExpression *Expr = MI->getDebugExpression();
855   assert(MI->getNumOperands() == 4);
856   if (MI->getOperand(0).isReg()) {
857     auto RegOp = MI->getOperand(0);
858     auto Op1 = MI->getOperand(1);
859     // If the second operand is an immediate, this is a
860     // register-indirect address.
861     assert((!Op1.isImm() || (Op1.getImm() == 0)) && "unexpected offset");
862     MachineLocation MLoc(RegOp.getReg(), Op1.isImm());
863     return DebugLocEntry::Value(Expr, MLoc);
864   }
865   if (MI->getOperand(0).isImm())
866     return DebugLocEntry::Value(Expr, MI->getOperand(0).getImm());
867   if (MI->getOperand(0).isFPImm())
868     return DebugLocEntry::Value(Expr, MI->getOperand(0).getFPImm());
869   if (MI->getOperand(0).isCImm())
870     return DebugLocEntry::Value(Expr, MI->getOperand(0).getCImm());
871 
872   llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!");
873 }
874 
875 /// \brief If this and Next are describing different fragments of the same
876 /// variable, merge them by appending Next's values to the current
877 /// list of values.
878 /// Return true if the merge was successful.
879 bool DebugLocEntry::MergeValues(const DebugLocEntry &Next) {
880   if (Begin == Next.Begin) {
881     auto *FirstExpr = cast<DIExpression>(Values[0].Expression);
882     auto *FirstNextExpr = cast<DIExpression>(Next.Values[0].Expression);
883     if (!FirstExpr->isFragment() || !FirstNextExpr->isFragment())
884       return false;
885 
886     // We can only merge entries if none of the fragments overlap any others.
887     // In doing so, we can take advantage of the fact that both lists are
888     // sorted.
889     for (unsigned i = 0, j = 0; i < Values.size(); ++i) {
890       for (; j < Next.Values.size(); ++j) {
891         int res = DebugHandlerBase::fragmentCmp(
892             cast<DIExpression>(Values[i].Expression),
893             cast<DIExpression>(Next.Values[j].Expression));
894         if (res == 0) // The two expressions overlap, we can't merge.
895           return false;
896         // Values[i] is entirely before Next.Values[j],
897         // so go back to the next entry of Values.
898         else if (res == -1)
899           break;
900         // Next.Values[j] is entirely before Values[i], so go on to the
901         // next entry of Next.Values.
902       }
903     }
904 
905     addValues(Next.Values);
906     End = Next.End;
907     return true;
908   }
909   return false;
910 }
911 
912 /// Build the location list for all DBG_VALUEs in the function that
913 /// describe the same variable.  If the ranges of several independent
914 /// fragments of the same variable overlap partially, split them up and
915 /// combine the ranges. The resulting DebugLocEntries are will have
916 /// strict monotonically increasing begin addresses and will never
917 /// overlap.
918 //
919 // Input:
920 //
921 //   Ranges History [var, loc, fragment ofs size]
922 // 0 |      [x, (reg0, fragment 0, 32)]
923 // 1 | |    [x, (reg1, fragment 32, 32)] <- IsFragmentOfPrevEntry
924 // 2 | |    ...
925 // 3   |    [clobber reg0]
926 // 4        [x, (mem, fragment 0, 64)] <- overlapping with both previous fragments of
927 //                                     x.
928 //
929 // Output:
930 //
931 // [0-1]    [x, (reg0, fragment  0, 32)]
932 // [1-3]    [x, (reg0, fragment  0, 32), (reg1, fragment 32, 32)]
933 // [3-4]    [x, (reg1, fragment 32, 32)]
934 // [4- ]    [x, (mem,  fragment  0, 64)]
935 void
936 DwarfDebug::buildLocationList(SmallVectorImpl<DebugLocEntry> &DebugLoc,
937                               const DbgValueHistoryMap::InstrRanges &Ranges) {
938   SmallVector<DebugLocEntry::Value, 4> OpenRanges;
939 
940   for (auto I = Ranges.begin(), E = Ranges.end(); I != E; ++I) {
941     const MachineInstr *Begin = I->first;
942     const MachineInstr *End = I->second;
943     assert(Begin->isDebugValue() && "Invalid History entry");
944 
945     // Check if a variable is inaccessible in this range.
946     if (Begin->getNumOperands() > 1 &&
947         Begin->getOperand(0).isReg() && !Begin->getOperand(0).getReg()) {
948       OpenRanges.clear();
949       continue;
950     }
951 
952     // If this fragment overlaps with any open ranges, truncate them.
953     const DIExpression *DIExpr = Begin->getDebugExpression();
954     auto Last = remove_if(OpenRanges, [&](DebugLocEntry::Value R) {
955       return fragmentsOverlap(DIExpr, R.getExpression());
956     });
957     OpenRanges.erase(Last, OpenRanges.end());
958 
959     const MCSymbol *StartLabel = getLabelBeforeInsn(Begin);
960     assert(StartLabel && "Forgot label before DBG_VALUE starting a range!");
961 
962     const MCSymbol *EndLabel;
963     if (End != nullptr)
964       EndLabel = getLabelAfterInsn(End);
965     else if (std::next(I) == Ranges.end())
966       EndLabel = Asm->getFunctionEnd();
967     else
968       EndLabel = getLabelBeforeInsn(std::next(I)->first);
969     assert(EndLabel && "Forgot label after instruction ending a range!");
970 
971     DEBUG(dbgs() << "DotDebugLoc: " << *Begin << "\n");
972 
973     auto Value = getDebugLocValue(Begin);
974     DebugLocEntry Loc(StartLabel, EndLabel, Value);
975     bool couldMerge = false;
976 
977     // If this is a fragment, it may belong to the current DebugLocEntry.
978     if (DIExpr->isFragment()) {
979       // Add this value to the list of open ranges.
980       OpenRanges.push_back(Value);
981 
982       // Attempt to add the fragment to the last entry.
983       if (!DebugLoc.empty())
984         if (DebugLoc.back().MergeValues(Loc))
985           couldMerge = true;
986     }
987 
988     if (!couldMerge) {
989       // Need to add a new DebugLocEntry. Add all values from still
990       // valid non-overlapping fragments.
991       if (OpenRanges.size())
992         Loc.addValues(OpenRanges);
993 
994       DebugLoc.push_back(std::move(Loc));
995     }
996 
997     // Attempt to coalesce the ranges of two otherwise identical
998     // DebugLocEntries.
999     auto CurEntry = DebugLoc.rbegin();
1000     DEBUG({
1001       dbgs() << CurEntry->getValues().size() << " Values:\n";
1002       for (auto &Value : CurEntry->getValues())
1003         Value.dump();
1004       dbgs() << "-----\n";
1005     });
1006 
1007     auto PrevEntry = std::next(CurEntry);
1008     if (PrevEntry != DebugLoc.rend() && PrevEntry->MergeRanges(*CurEntry))
1009       DebugLoc.pop_back();
1010   }
1011 }
1012 
1013 DbgVariable *DwarfDebug::createConcreteVariable(DwarfCompileUnit &TheCU,
1014                                                 LexicalScope &Scope,
1015                                                 InlinedVariable IV) {
1016   ensureAbstractVariableIsCreatedIfScoped(TheCU, IV, Scope.getScopeNode());
1017   ConcreteVariables.push_back(
1018       llvm::make_unique<DbgVariable>(IV.first, IV.second));
1019   InfoHolder.addScopeVariable(&Scope, ConcreteVariables.back().get());
1020   return ConcreteVariables.back().get();
1021 }
1022 
1023 /// Determine whether a *singular* DBG_VALUE is valid for the entirety of its
1024 /// enclosing lexical scope. The check ensures there are no other instructions
1025 /// in the same lexical scope preceding the DBG_VALUE and that its range is
1026 /// either open or otherwise rolls off the end of the scope.
1027 static bool validThroughout(LexicalScopes &LScopes,
1028                             const MachineInstr *DbgValue,
1029                             const MachineInstr *RangeEnd) {
1030   assert(DbgValue->getDebugLoc() && "DBG_VALUE without a debug location");
1031   auto MBB = DbgValue->getParent();
1032   auto DL = DbgValue->getDebugLoc();
1033   auto *LScope = LScopes.findLexicalScope(DL);
1034   // Scope doesn't exist; this is a dead DBG_VALUE.
1035   if (!LScope)
1036     return false;
1037   auto &LSRange = LScope->getRanges();
1038   if (LSRange.size() == 0)
1039     return false;
1040 
1041   // Determine if the DBG_VALUE is valid at the beginning of its lexical block.
1042   const MachineInstr *LScopeBegin = LSRange.front().first;
1043   // Early exit if the lexical scope begins outside of the current block.
1044   if (LScopeBegin->getParent() != MBB)
1045     return false;
1046   MachineBasicBlock::const_reverse_iterator Pred(DbgValue);
1047   for (++Pred; Pred != MBB->rend(); ++Pred) {
1048     if (Pred->getFlag(MachineInstr::FrameSetup))
1049       break;
1050     auto PredDL = Pred->getDebugLoc();
1051     if (!PredDL || Pred->isMetaInstruction())
1052       continue;
1053     // Check whether the instruction preceding the DBG_VALUE is in the same
1054     // (sub)scope as the DBG_VALUE.
1055     if (DL->getScope() == PredDL->getScope())
1056       return false;
1057     auto *PredScope = LScopes.findLexicalScope(PredDL);
1058     if (!PredScope || LScope->dominates(PredScope))
1059       return false;
1060   }
1061 
1062   // If the range of the DBG_VALUE is open-ended, report success.
1063   if (!RangeEnd)
1064     return true;
1065 
1066   // Fail if there are instructions belonging to our scope in another block.
1067   const MachineInstr *LScopeEnd = LSRange.back().second;
1068   if (LScopeEnd->getParent() != MBB)
1069     return false;
1070 
1071   // Single, constant DBG_VALUEs in the prologue are promoted to be live
1072   // throughout the function. This is a hack, presumably for DWARF v2 and not
1073   // necessarily correct. It would be much better to use a dbg.declare instead
1074   // if we know the constant is live throughout the scope.
1075   if (DbgValue->getOperand(0).isImm() && MBB->pred_empty())
1076     return true;
1077 
1078   return false;
1079 }
1080 
1081 // Find variables for each lexical scope.
1082 void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU,
1083                                      const DISubprogram *SP,
1084                                      DenseSet<InlinedVariable> &Processed) {
1085   // Grab the variable info that was squirreled away in the MMI side-table.
1086   collectVariableInfoFromMFTable(TheCU, Processed);
1087 
1088   for (const auto &I : DbgValues) {
1089     InlinedVariable IV = I.first;
1090     if (Processed.count(IV))
1091       continue;
1092 
1093     // Instruction ranges, specifying where IV is accessible.
1094     const auto &Ranges = I.second;
1095     if (Ranges.empty())
1096       continue;
1097 
1098     LexicalScope *Scope = nullptr;
1099     if (const DILocation *IA = IV.second)
1100       Scope = LScopes.findInlinedScope(IV.first->getScope(), IA);
1101     else
1102       Scope = LScopes.findLexicalScope(IV.first->getScope());
1103     // If variable scope is not found then skip this variable.
1104     if (!Scope)
1105       continue;
1106 
1107     Processed.insert(IV);
1108     DbgVariable *RegVar = createConcreteVariable(TheCU, *Scope, IV);
1109 
1110     const MachineInstr *MInsn = Ranges.front().first;
1111     assert(MInsn->isDebugValue() && "History must begin with debug value");
1112 
1113     // Check if there is a single DBG_VALUE, valid throughout the var's scope.
1114     if (Ranges.size() == 1 &&
1115         validThroughout(LScopes, MInsn, Ranges.front().second)) {
1116       RegVar->initializeDbgValue(MInsn);
1117       continue;
1118     }
1119 
1120     // Handle multiple DBG_VALUE instructions describing one variable.
1121     DebugLocStream::ListBuilder List(DebugLocs, TheCU, *Asm, *RegVar, *MInsn);
1122 
1123     // Build the location list for this variable.
1124     SmallVector<DebugLocEntry, 8> Entries;
1125     buildLocationList(Entries, Ranges);
1126 
1127     // If the variable has a DIBasicType, extract it.  Basic types cannot have
1128     // unique identifiers, so don't bother resolving the type with the
1129     // identifier map.
1130     const DIBasicType *BT = dyn_cast<DIBasicType>(
1131         static_cast<const Metadata *>(IV.first->getType()));
1132 
1133     // Finalize the entry by lowering it into a DWARF bytestream.
1134     for (auto &Entry : Entries)
1135       Entry.finalize(*Asm, List, BT);
1136   }
1137 
1138   // Collect info for variables that were optimized out.
1139   for (const DILocalVariable *DV : SP->getVariables()) {
1140     if (Processed.insert(InlinedVariable(DV, nullptr)).second)
1141       if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope()))
1142         createConcreteVariable(TheCU, *Scope, InlinedVariable(DV, nullptr));
1143   }
1144 }
1145 
1146 // Process beginning of an instruction.
1147 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1148   DebugHandlerBase::beginInstruction(MI);
1149   assert(CurMI);
1150 
1151   const auto *SP = MI->getParent()->getParent()->getFunction()->getSubprogram();
1152   if (!SP || SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug)
1153     return;
1154 
1155   // Check if source location changes, but ignore DBG_VALUE and CFI locations.
1156   if (MI->isMetaInstruction())
1157     return;
1158   const DebugLoc &DL = MI->getDebugLoc();
1159   // When we emit a line-0 record, we don't update PrevInstLoc; so look at
1160   // the last line number actually emitted, to see if it was line 0.
1161   unsigned LastAsmLine =
1162       Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine();
1163 
1164   if (DL == PrevInstLoc) {
1165     // If we have an ongoing unspecified location, nothing to do here.
1166     if (!DL)
1167       return;
1168     // We have an explicit location, same as the previous location.
1169     // But we might be coming back to it after a line 0 record.
1170     if (LastAsmLine == 0 && DL.getLine() != 0) {
1171       // Reinstate the source location but not marked as a statement.
1172       const MDNode *Scope = DL.getScope();
1173       recordSourceLine(DL.getLine(), DL.getCol(), Scope, /*Flags=*/0);
1174     }
1175     return;
1176   }
1177 
1178   if (!DL) {
1179     // We have an unspecified location, which might want to be line 0.
1180     // If we have already emitted a line-0 record, don't repeat it.
1181     if (LastAsmLine == 0)
1182       return;
1183     // If user said Don't Do That, don't do that.
1184     if (UnknownLocations == Disable)
1185       return;
1186     // See if we have a reason to emit a line-0 record now.
1187     // Reasons to emit a line-0 record include:
1188     // - User asked for it (UnknownLocations).
1189     // - Instruction has a label, so it's referenced from somewhere else,
1190     //   possibly debug information; we want it to have a source location.
1191     // - Instruction is at the top of a block; we don't want to inherit the
1192     //   location from the physically previous (maybe unrelated) block.
1193     if (UnknownLocations == Enable || PrevLabel ||
1194         (PrevInstBB && PrevInstBB != MI->getParent())) {
1195       // Preserve the file and column numbers, if we can, to save space in
1196       // the encoded line table.
1197       // Do not update PrevInstLoc, it remembers the last non-0 line.
1198       const MDNode *Scope = nullptr;
1199       unsigned Column = 0;
1200       if (PrevInstLoc) {
1201         Scope = PrevInstLoc.getScope();
1202         Column = PrevInstLoc.getCol();
1203       }
1204       recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0);
1205     }
1206     return;
1207   }
1208 
1209   // We have an explicit location, different from the previous location.
1210   // Don't repeat a line-0 record, but otherwise emit the new location.
1211   // (The new location might be an explicit line 0, which we do emit.)
1212   if (PrevInstLoc && DL.getLine() == 0 && LastAsmLine == 0)
1213     return;
1214   unsigned Flags = 0;
1215   if (DL == PrologEndLoc) {
1216     Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT;
1217     PrologEndLoc = DebugLoc();
1218   }
1219   // If the line changed, we call that a new statement; unless we went to
1220   // line 0 and came back, in which case it is not a new statement.
1221   unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine;
1222   if (DL.getLine() && DL.getLine() != OldLine)
1223     Flags |= DWARF2_FLAG_IS_STMT;
1224 
1225   const MDNode *Scope = DL.getScope();
1226   recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1227 
1228   // If we're not at line 0, remember this location.
1229   if (DL.getLine())
1230     PrevInstLoc = DL;
1231 }
1232 
1233 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) {
1234   // First known non-DBG_VALUE and non-frame setup location marks
1235   // the beginning of the function body.
1236   for (const auto &MBB : *MF)
1237     for (const auto &MI : MBB)
1238       if (!MI.isMetaInstruction() && !MI.getFlag(MachineInstr::FrameSetup) &&
1239           MI.getDebugLoc())
1240         return MI.getDebugLoc();
1241   return DebugLoc();
1242 }
1243 
1244 // Gather pre-function debug information.  Assumes being called immediately
1245 // after the function entry point has been emitted.
1246 void DwarfDebug::beginFunctionImpl(const MachineFunction *MF) {
1247   CurFn = MF;
1248 
1249   auto *SP = MF->getFunction()->getSubprogram();
1250   assert(LScopes.empty() || SP == LScopes.getCurrentFunctionScope()->getScopeNode());
1251   if (SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug)
1252     return;
1253 
1254   DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(SP->getUnit());
1255 
1256   // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
1257   // belongs to so that we add to the correct per-cu line table in the
1258   // non-asm case.
1259   if (Asm->OutStreamer->hasRawTextSupport())
1260     // Use a single line table if we are generating assembly.
1261     Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1262   else
1263     Asm->OutStreamer->getContext().setDwarfCompileUnitID(CU.getUniqueID());
1264 
1265   // Record beginning of function.
1266   PrologEndLoc = findPrologueEndLoc(MF);
1267   if (PrologEndLoc) {
1268     // We'd like to list the prologue as "not statements" but GDB behaves
1269     // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1270     auto *SP = PrologEndLoc->getInlinedAtScope()->getSubprogram();
1271     recordSourceLine(SP->getScopeLine(), 0, SP, DWARF2_FLAG_IS_STMT);
1272   }
1273 }
1274 
1275 void DwarfDebug::skippedNonDebugFunction() {
1276   // If we don't have a subprogram for this function then there will be a hole
1277   // in the range information. Keep note of this by setting the previously used
1278   // section to nullptr.
1279   PrevCU = nullptr;
1280   CurFn = nullptr;
1281 }
1282 
1283 // Gather and emit post-function debug information.
1284 void DwarfDebug::endFunctionImpl(const MachineFunction *MF) {
1285   const DISubprogram *SP = MF->getFunction()->getSubprogram();
1286 
1287   assert(CurFn == MF &&
1288       "endFunction should be called with the same function as beginFunction");
1289 
1290   // Set DwarfDwarfCompileUnitID in MCContext to default value.
1291   Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1292 
1293   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1294   assert(!FnScope || SP == FnScope->getScopeNode());
1295   DwarfCompileUnit &TheCU = *CUMap.lookup(SP->getUnit());
1296 
1297   DenseSet<InlinedVariable> ProcessedVars;
1298   collectVariableInfo(TheCU, SP, ProcessedVars);
1299 
1300   // Add the range of this function to the list of ranges for the CU.
1301   TheCU.addRange(RangeSpan(Asm->getFunctionBegin(), Asm->getFunctionEnd()));
1302 
1303   // Under -gmlt, skip building the subprogram if there are no inlined
1304   // subroutines inside it. But with -fdebug-info-for-profiling, the subprogram
1305   // is still needed as we need its source location.
1306   if (!TheCU.getCUNode()->getDebugInfoForProfiling() &&
1307       TheCU.getCUNode()->getEmissionKind() == DICompileUnit::LineTablesOnly &&
1308       LScopes.getAbstractScopesList().empty() && !IsDarwin) {
1309     assert(InfoHolder.getScopeVariables().empty());
1310     PrevLabel = nullptr;
1311     CurFn = nullptr;
1312     return;
1313   }
1314 
1315 #ifndef NDEBUG
1316   size_t NumAbstractScopes = LScopes.getAbstractScopesList().size();
1317 #endif
1318   // Construct abstract scopes.
1319   for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
1320     auto *SP = cast<DISubprogram>(AScope->getScopeNode());
1321     // Collect info for variables that were optimized out.
1322     for (const DILocalVariable *DV : SP->getVariables()) {
1323       if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second)
1324         continue;
1325       ensureAbstractVariableIsCreated(TheCU, InlinedVariable(DV, nullptr),
1326                                       DV->getScope());
1327       assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
1328              && "ensureAbstractVariableIsCreated inserted abstract scopes");
1329     }
1330     constructAbstractSubprogramScopeDIE(TheCU, AScope);
1331   }
1332 
1333   ProcessedSPNodes.insert(SP);
1334   TheCU.constructSubprogramScopeDIE(SP, FnScope);
1335   if (auto *SkelCU = TheCU.getSkeleton())
1336     if (!LScopes.getAbstractScopesList().empty() &&
1337         TheCU.getCUNode()->getSplitDebugInlining())
1338       SkelCU->constructSubprogramScopeDIE(SP, FnScope);
1339 
1340   // Clear debug info
1341   // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the
1342   // DbgVariables except those that are also in AbstractVariables (since they
1343   // can be used cross-function)
1344   InfoHolder.getScopeVariables().clear();
1345   PrevLabel = nullptr;
1346   CurFn = nullptr;
1347 }
1348 
1349 // Register a source line with debug info. Returns the  unique label that was
1350 // emitted and which provides correspondence to the source line list.
1351 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1352                                   unsigned Flags) {
1353   StringRef Fn;
1354   StringRef Dir;
1355   unsigned Src = 1;
1356   unsigned Discriminator = 0;
1357   if (auto *Scope = cast_or_null<DIScope>(S)) {
1358     Fn = Scope->getFilename();
1359     Dir = Scope->getDirectory();
1360     if (Line != 0 && getDwarfVersion() >= 4)
1361       if (auto *LBF = dyn_cast<DILexicalBlockFile>(Scope))
1362         Discriminator = LBF->getDiscriminator();
1363 
1364     unsigned CUID = Asm->OutStreamer->getContext().getDwarfCompileUnitID();
1365     Src = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID])
1366               .getOrCreateSourceID(Fn, Dir);
1367   }
1368   Asm->OutStreamer->EmitDwarfLocDirective(Src, Line, Col, Flags, 0,
1369                                           Discriminator, Fn);
1370 }
1371 
1372 //===----------------------------------------------------------------------===//
1373 // Emit Methods
1374 //===----------------------------------------------------------------------===//
1375 
1376 // Emit the debug info section.
1377 void DwarfDebug::emitDebugInfo() {
1378   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1379   Holder.emitUnits(/* UseOffsets */ false);
1380 }
1381 
1382 // Emit the abbreviation section.
1383 void DwarfDebug::emitAbbreviations() {
1384   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1385 
1386   Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1387 }
1388 
1389 void DwarfDebug::emitAccel(DwarfAccelTable &Accel, MCSection *Section,
1390                            StringRef TableName) {
1391   Accel.FinalizeTable(Asm, TableName);
1392   Asm->OutStreamer->SwitchSection(Section);
1393 
1394   // Emit the full data.
1395   Accel.emit(Asm, Section->getBeginSymbol(), this);
1396 }
1397 
1398 // Emit visible names into a hashed accelerator table section.
1399 void DwarfDebug::emitAccelNames() {
1400   emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(),
1401             "Names");
1402 }
1403 
1404 // Emit objective C classes and categories into a hashed accelerator table
1405 // section.
1406 void DwarfDebug::emitAccelObjC() {
1407   emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(),
1408             "ObjC");
1409 }
1410 
1411 // Emit namespace dies into a hashed accelerator table.
1412 void DwarfDebug::emitAccelNamespaces() {
1413   emitAccel(AccelNamespace,
1414             Asm->getObjFileLowering().getDwarfAccelNamespaceSection(),
1415             "namespac");
1416 }
1417 
1418 // Emit type dies into a hashed accelerator table.
1419 void DwarfDebug::emitAccelTypes() {
1420   emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(),
1421             "types");
1422 }
1423 
1424 // Public name handling.
1425 // The format for the various pubnames:
1426 //
1427 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
1428 // for the DIE that is named.
1429 //
1430 // gnu pubnames - offset/index value/name tuples where the offset is the offset
1431 // into the CU and the index value is computed according to the type of value
1432 // for the DIE that is named.
1433 //
1434 // For type units the offset is the offset of the skeleton DIE. For split dwarf
1435 // it's the offset within the debug_info/debug_types dwo section, however, the
1436 // reference in the pubname header doesn't change.
1437 
1438 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
1439 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU,
1440                                                         const DIE *Die) {
1441   // Entities that ended up only in a Type Unit reference the CU instead (since
1442   // the pub entry has offsets within the CU there's no real offset that can be
1443   // provided anyway). As it happens all such entities (namespaces and types,
1444   // types only in C++ at that) are rendered as TYPE+EXTERNAL. If this turns out
1445   // not to be true it would be necessary to persist this information from the
1446   // point at which the entry is added to the index data structure - since by
1447   // the time the index is built from that, the original type/namespace DIE in a
1448   // type unit has already been destroyed so it can't be queried for properties
1449   // like tag, etc.
1450   if (Die->getTag() == dwarf::DW_TAG_compile_unit)
1451     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE,
1452                                           dwarf::GIEL_EXTERNAL);
1453   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
1454 
1455   // We could have a specification DIE that has our most of our knowledge,
1456   // look for that now.
1457   if (DIEValue SpecVal = Die->findAttribute(dwarf::DW_AT_specification)) {
1458     DIE &SpecDIE = SpecVal.getDIEEntry().getEntry();
1459     if (SpecDIE.findAttribute(dwarf::DW_AT_external))
1460       Linkage = dwarf::GIEL_EXTERNAL;
1461   } else if (Die->findAttribute(dwarf::DW_AT_external))
1462     Linkage = dwarf::GIEL_EXTERNAL;
1463 
1464   switch (Die->getTag()) {
1465   case dwarf::DW_TAG_class_type:
1466   case dwarf::DW_TAG_structure_type:
1467   case dwarf::DW_TAG_union_type:
1468   case dwarf::DW_TAG_enumeration_type:
1469     return dwarf::PubIndexEntryDescriptor(
1470         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
1471                               ? dwarf::GIEL_STATIC
1472                               : dwarf::GIEL_EXTERNAL);
1473   case dwarf::DW_TAG_typedef:
1474   case dwarf::DW_TAG_base_type:
1475   case dwarf::DW_TAG_subrange_type:
1476     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
1477   case dwarf::DW_TAG_namespace:
1478     return dwarf::GIEK_TYPE;
1479   case dwarf::DW_TAG_subprogram:
1480     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
1481   case dwarf::DW_TAG_variable:
1482     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
1483   case dwarf::DW_TAG_enumerator:
1484     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
1485                                           dwarf::GIEL_STATIC);
1486   default:
1487     return dwarf::GIEK_NONE;
1488   }
1489 }
1490 
1491 /// emitDebugPubSections - Emit visible names and types into debug pubnames and
1492 /// pubtypes sections.
1493 void DwarfDebug::emitDebugPubSections() {
1494   for (const auto &NU : CUMap) {
1495     DwarfCompileUnit *TheU = NU.second;
1496     if (!TheU->hasDwarfPubSections())
1497       continue;
1498 
1499     bool GnuStyle = TheU->getCUNode()->getGnuPubnames();
1500 
1501     Asm->OutStreamer->SwitchSection(
1502         GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
1503                  : Asm->getObjFileLowering().getDwarfPubNamesSection());
1504     emitDebugPubSection(GnuStyle, "Names", TheU, TheU->getGlobalNames());
1505 
1506     Asm->OutStreamer->SwitchSection(
1507         GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
1508                  : Asm->getObjFileLowering().getDwarfPubTypesSection());
1509     emitDebugPubSection(GnuStyle, "Types", TheU, TheU->getGlobalTypes());
1510   }
1511 }
1512 
1513 void DwarfDebug::emitDebugPubSection(bool GnuStyle, StringRef Name,
1514                                      DwarfCompileUnit *TheU,
1515                                      const StringMap<const DIE *> &Globals) {
1516   if (auto *Skeleton = TheU->getSkeleton())
1517     TheU = Skeleton;
1518 
1519   // Emit the header.
1520   Asm->OutStreamer->AddComment("Length of Public " + Name + " Info");
1521   MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin");
1522   MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end");
1523   Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);
1524 
1525   Asm->OutStreamer->EmitLabel(BeginLabel);
1526 
1527   Asm->OutStreamer->AddComment("DWARF Version");
1528   Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION);
1529 
1530   Asm->OutStreamer->AddComment("Offset of Compilation Unit Info");
1531   Asm->emitDwarfSymbolReference(TheU->getLabelBegin());
1532 
1533   Asm->OutStreamer->AddComment("Compilation Unit Length");
1534   Asm->EmitInt32(TheU->getLength());
1535 
1536   // Emit the pubnames for this compilation unit.
1537   for (const auto &GI : Globals) {
1538     const char *Name = GI.getKeyData();
1539     const DIE *Entity = GI.second;
1540 
1541     Asm->OutStreamer->AddComment("DIE offset");
1542     Asm->EmitInt32(Entity->getOffset());
1543 
1544     if (GnuStyle) {
1545       dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity);
1546       Asm->OutStreamer->AddComment(
1547           Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
1548           dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
1549       Asm->EmitInt8(Desc.toBits());
1550     }
1551 
1552     Asm->OutStreamer->AddComment("External Name");
1553     Asm->OutStreamer->EmitBytes(StringRef(Name, GI.getKeyLength() + 1));
1554   }
1555 
1556   Asm->OutStreamer->AddComment("End Mark");
1557   Asm->EmitInt32(0);
1558   Asm->OutStreamer->EmitLabel(EndLabel);
1559 }
1560 
1561 /// Emit null-terminated strings into a debug str section.
1562 void DwarfDebug::emitDebugStr() {
1563   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1564   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
1565 }
1566 
1567 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer,
1568                                    const DebugLocStream::Entry &Entry) {
1569   auto &&Comments = DebugLocs.getComments(Entry);
1570   auto Comment = Comments.begin();
1571   auto End = Comments.end();
1572   for (uint8_t Byte : DebugLocs.getBytes(Entry))
1573     Streamer.EmitInt8(Byte, Comment != End ? *(Comment++) : "");
1574 }
1575 
1576 static void emitDebugLocValue(const AsmPrinter &AP, const DIBasicType *BT,
1577                               ByteStreamer &Streamer,
1578                               const DebugLocEntry::Value &Value,
1579                               DwarfExpression &DwarfExpr) {
1580   auto *DIExpr = Value.getExpression();
1581   DIExpressionCursor ExprCursor(DIExpr);
1582   DwarfExpr.addFragmentOffset(DIExpr);
1583   // Regular entry.
1584   if (Value.isInt()) {
1585     if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed ||
1586                BT->getEncoding() == dwarf::DW_ATE_signed_char))
1587       DwarfExpr.addSignedConstant(Value.getInt());
1588     else
1589       DwarfExpr.addUnsignedConstant(Value.getInt());
1590   } else if (Value.isLocation()) {
1591     MachineLocation Location = Value.getLoc();
1592     if (Location.isIndirect())
1593       DwarfExpr.setMemoryLocationKind();
1594     DIExpressionCursor Cursor(DIExpr);
1595     const TargetRegisterInfo &TRI = *AP.MF->getSubtarget().getRegisterInfo();
1596     if (!DwarfExpr.addMachineRegExpression(TRI, Cursor, Location.getReg()))
1597       return;
1598     return DwarfExpr.addExpression(std::move(Cursor));
1599   } else if (Value.isConstantFP()) {
1600     APInt RawBytes = Value.getConstantFP()->getValueAPF().bitcastToAPInt();
1601     DwarfExpr.addUnsignedConstant(RawBytes);
1602   }
1603   DwarfExpr.addExpression(std::move(ExprCursor));
1604 }
1605 
1606 void DebugLocEntry::finalize(const AsmPrinter &AP,
1607                              DebugLocStream::ListBuilder &List,
1608                              const DIBasicType *BT) {
1609   DebugLocStream::EntryBuilder Entry(List, Begin, End);
1610   BufferByteStreamer Streamer = Entry.getStreamer();
1611   DebugLocDwarfExpression DwarfExpr(AP.getDwarfVersion(), Streamer);
1612   const DebugLocEntry::Value &Value = Values[0];
1613   if (Value.isFragment()) {
1614     // Emit all fragments that belong to the same variable and range.
1615     assert(llvm::all_of(Values, [](DebugLocEntry::Value P) {
1616           return P.isFragment();
1617         }) && "all values are expected to be fragments");
1618     assert(std::is_sorted(Values.begin(), Values.end()) &&
1619            "fragments are expected to be sorted");
1620 
1621     for (auto Fragment : Values)
1622       emitDebugLocValue(AP, BT, Streamer, Fragment, DwarfExpr);
1623 
1624   } else {
1625     assert(Values.size() == 1 && "only fragments may have >1 value");
1626     emitDebugLocValue(AP, BT, Streamer, Value, DwarfExpr);
1627   }
1628   DwarfExpr.finalize();
1629 }
1630 
1631 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) {
1632   // Emit the size.
1633   Asm->OutStreamer->AddComment("Loc expr size");
1634   Asm->EmitInt16(DebugLocs.getBytes(Entry).size());
1635 
1636   // Emit the entry.
1637   APByteStreamer Streamer(*Asm);
1638   emitDebugLocEntry(Streamer, Entry);
1639 }
1640 
1641 // Emit locations into the debug loc section.
1642 void DwarfDebug::emitDebugLoc() {
1643   if (DebugLocs.getLists().empty())
1644     return;
1645 
1646   // Start the dwarf loc section.
1647   Asm->OutStreamer->SwitchSection(
1648       Asm->getObjFileLowering().getDwarfLocSection());
1649   unsigned char Size = Asm->MAI->getCodePointerSize();
1650   for (const auto &List : DebugLocs.getLists()) {
1651     Asm->OutStreamer->EmitLabel(List.Label);
1652     const DwarfCompileUnit *CU = List.CU;
1653     for (const auto &Entry : DebugLocs.getEntries(List)) {
1654       // Set up the range. This range is relative to the entry point of the
1655       // compile unit. This is a hard coded 0 for low_pc when we're emitting
1656       // ranges, or the DW_AT_low_pc on the compile unit otherwise.
1657       if (auto *Base = CU->getBaseAddress()) {
1658         Asm->EmitLabelDifference(Entry.BeginSym, Base, Size);
1659         Asm->EmitLabelDifference(Entry.EndSym, Base, Size);
1660       } else {
1661         Asm->OutStreamer->EmitSymbolValue(Entry.BeginSym, Size);
1662         Asm->OutStreamer->EmitSymbolValue(Entry.EndSym, Size);
1663       }
1664 
1665       emitDebugLocEntryLocation(Entry);
1666     }
1667     Asm->OutStreamer->EmitIntValue(0, Size);
1668     Asm->OutStreamer->EmitIntValue(0, Size);
1669   }
1670 }
1671 
1672 void DwarfDebug::emitDebugLocDWO() {
1673   Asm->OutStreamer->SwitchSection(
1674       Asm->getObjFileLowering().getDwarfLocDWOSection());
1675   for (const auto &List : DebugLocs.getLists()) {
1676     Asm->OutStreamer->EmitLabel(List.Label);
1677     for (const auto &Entry : DebugLocs.getEntries(List)) {
1678       // Just always use start_length for now - at least that's one address
1679       // rather than two. We could get fancier and try to, say, reuse an
1680       // address we know we've emitted elsewhere (the start of the function?
1681       // The start of the CU or CU subrange that encloses this range?)
1682       Asm->EmitInt8(dwarf::DW_LLE_startx_length);
1683       unsigned idx = AddrPool.getIndex(Entry.BeginSym);
1684       Asm->EmitULEB128(idx);
1685       Asm->EmitLabelDifference(Entry.EndSym, Entry.BeginSym, 4);
1686 
1687       emitDebugLocEntryLocation(Entry);
1688     }
1689     Asm->EmitInt8(dwarf::DW_LLE_end_of_list);
1690   }
1691 }
1692 
1693 struct ArangeSpan {
1694   const MCSymbol *Start, *End;
1695 };
1696 
1697 // Emit a debug aranges section, containing a CU lookup for any
1698 // address we can tie back to a CU.
1699 void DwarfDebug::emitDebugARanges() {
1700   // Provides a unique id per text section.
1701   MapVector<MCSection *, SmallVector<SymbolCU, 8>> SectionMap;
1702 
1703   // Filter labels by section.
1704   for (const SymbolCU &SCU : ArangeLabels) {
1705     if (SCU.Sym->isInSection()) {
1706       // Make a note of this symbol and it's section.
1707       MCSection *Section = &SCU.Sym->getSection();
1708       if (!Section->getKind().isMetadata())
1709         SectionMap[Section].push_back(SCU);
1710     } else {
1711       // Some symbols (e.g. common/bss on mach-o) can have no section but still
1712       // appear in the output. This sucks as we rely on sections to build
1713       // arange spans. We can do it without, but it's icky.
1714       SectionMap[nullptr].push_back(SCU);
1715     }
1716   }
1717 
1718   DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans;
1719 
1720   for (auto &I : SectionMap) {
1721     MCSection *Section = I.first;
1722     SmallVector<SymbolCU, 8> &List = I.second;
1723     if (List.size() < 1)
1724       continue;
1725 
1726     // If we have no section (e.g. common), just write out
1727     // individual spans for each symbol.
1728     if (!Section) {
1729       for (const SymbolCU &Cur : List) {
1730         ArangeSpan Span;
1731         Span.Start = Cur.Sym;
1732         Span.End = nullptr;
1733         assert(Cur.CU);
1734         Spans[Cur.CU].push_back(Span);
1735       }
1736       continue;
1737     }
1738 
1739     // Sort the symbols by offset within the section.
1740     std::sort(
1741         List.begin(), List.end(), [&](const SymbolCU &A, const SymbolCU &B) {
1742           unsigned IA = A.Sym ? Asm->OutStreamer->GetSymbolOrder(A.Sym) : 0;
1743           unsigned IB = B.Sym ? Asm->OutStreamer->GetSymbolOrder(B.Sym) : 0;
1744 
1745           // Symbols with no order assigned should be placed at the end.
1746           // (e.g. section end labels)
1747           if (IA == 0)
1748             return false;
1749           if (IB == 0)
1750             return true;
1751           return IA < IB;
1752         });
1753 
1754     // Insert a final terminator.
1755     List.push_back(SymbolCU(nullptr, Asm->OutStreamer->endSection(Section)));
1756 
1757     // Build spans between each label.
1758     const MCSymbol *StartSym = List[0].Sym;
1759     for (size_t n = 1, e = List.size(); n < e; n++) {
1760       const SymbolCU &Prev = List[n - 1];
1761       const SymbolCU &Cur = List[n];
1762 
1763       // Try and build the longest span we can within the same CU.
1764       if (Cur.CU != Prev.CU) {
1765         ArangeSpan Span;
1766         Span.Start = StartSym;
1767         Span.End = Cur.Sym;
1768         assert(Prev.CU);
1769         Spans[Prev.CU].push_back(Span);
1770         StartSym = Cur.Sym;
1771       }
1772     }
1773   }
1774 
1775   // Start the dwarf aranges section.
1776   Asm->OutStreamer->SwitchSection(
1777       Asm->getObjFileLowering().getDwarfARangesSection());
1778 
1779   unsigned PtrSize = Asm->MAI->getCodePointerSize();
1780 
1781   // Build a list of CUs used.
1782   std::vector<DwarfCompileUnit *> CUs;
1783   for (const auto &it : Spans) {
1784     DwarfCompileUnit *CU = it.first;
1785     CUs.push_back(CU);
1786   }
1787 
1788   // Sort the CU list (again, to ensure consistent output order).
1789   std::sort(CUs.begin(), CUs.end(),
1790             [](const DwarfCompileUnit *A, const DwarfCompileUnit *B) {
1791               return A->getUniqueID() < B->getUniqueID();
1792             });
1793 
1794   // Emit an arange table for each CU we used.
1795   for (DwarfCompileUnit *CU : CUs) {
1796     std::vector<ArangeSpan> &List = Spans[CU];
1797 
1798     // Describe the skeleton CU's offset and length, not the dwo file's.
1799     if (auto *Skel = CU->getSkeleton())
1800       CU = Skel;
1801 
1802     // Emit size of content not including length itself.
1803     unsigned ContentSize =
1804         sizeof(int16_t) + // DWARF ARange version number
1805         sizeof(int32_t) + // Offset of CU in the .debug_info section
1806         sizeof(int8_t) +  // Pointer Size (in bytes)
1807         sizeof(int8_t);   // Segment Size (in bytes)
1808 
1809     unsigned TupleSize = PtrSize * 2;
1810 
1811     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
1812     unsigned Padding =
1813         OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize);
1814 
1815     ContentSize += Padding;
1816     ContentSize += (List.size() + 1) * TupleSize;
1817 
1818     // For each compile unit, write the list of spans it covers.
1819     Asm->OutStreamer->AddComment("Length of ARange Set");
1820     Asm->EmitInt32(ContentSize);
1821     Asm->OutStreamer->AddComment("DWARF Arange version number");
1822     Asm->EmitInt16(dwarf::DW_ARANGES_VERSION);
1823     Asm->OutStreamer->AddComment("Offset Into Debug Info Section");
1824     Asm->emitDwarfSymbolReference(CU->getLabelBegin());
1825     Asm->OutStreamer->AddComment("Address Size (in bytes)");
1826     Asm->EmitInt8(PtrSize);
1827     Asm->OutStreamer->AddComment("Segment Size (in bytes)");
1828     Asm->EmitInt8(0);
1829 
1830     Asm->OutStreamer->emitFill(Padding, 0xff);
1831 
1832     for (const ArangeSpan &Span : List) {
1833       Asm->EmitLabelReference(Span.Start, PtrSize);
1834 
1835       // Calculate the size as being from the span start to it's end.
1836       if (Span.End) {
1837         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
1838       } else {
1839         // For symbols without an end marker (e.g. common), we
1840         // write a single arange entry containing just that one symbol.
1841         uint64_t Size = SymSize[Span.Start];
1842         if (Size == 0)
1843           Size = 1;
1844 
1845         Asm->OutStreamer->EmitIntValue(Size, PtrSize);
1846       }
1847     }
1848 
1849     Asm->OutStreamer->AddComment("ARange terminator");
1850     Asm->OutStreamer->EmitIntValue(0, PtrSize);
1851     Asm->OutStreamer->EmitIntValue(0, PtrSize);
1852   }
1853 }
1854 
1855 /// Emit address ranges into a debug ranges section.
1856 void DwarfDebug::emitDebugRanges() {
1857   if (CUMap.empty())
1858     return;
1859 
1860   // Start the dwarf ranges section.
1861   Asm->OutStreamer->SwitchSection(
1862       Asm->getObjFileLowering().getDwarfRangesSection());
1863 
1864   // Size for our labels.
1865   unsigned char Size = Asm->MAI->getCodePointerSize();
1866 
1867   // Grab the specific ranges for the compile units in the module.
1868   for (const auto &I : CUMap) {
1869     DwarfCompileUnit *TheCU = I.second;
1870 
1871     if (auto *Skel = TheCU->getSkeleton())
1872       TheCU = Skel;
1873 
1874     // Iterate over the misc ranges for the compile units in the module.
1875     for (const RangeSpanList &List : TheCU->getRangeLists()) {
1876       // Emit our symbol so we can find the beginning of the range.
1877       Asm->OutStreamer->EmitLabel(List.getSym());
1878 
1879       // Gather all the ranges that apply to the same section so they can share
1880       // a base address entry.
1881       MapVector<const MCSection *, std::vector<const RangeSpan *>> MV;
1882       for (const RangeSpan &Range : List.getRanges()) {
1883         MV[&Range.getStart()->getSection()].push_back(&Range);
1884       }
1885 
1886       auto *CUBase = TheCU->getBaseAddress();
1887       bool BaseIsSet = false;
1888       for (const auto &P : MV) {
1889         // Don't bother with a base address entry if there's only one range in
1890         // this section in this range list - for example ranges for a CU will
1891         // usually consist of single regions from each of many sections
1892         // (-ffunction-sections, or just C++ inline functions) except under LTO
1893         // or optnone where there may be holes in a single CU's section
1894         // contrubutions.
1895         auto *Base = CUBase;
1896         if (!Base && P.second.size() > 1 &&
1897             UseDwarfRangesBaseAddressSpecifier) {
1898           BaseIsSet = true;
1899           // FIXME/use care: This may not be a useful base address if it's not
1900           // the lowest address/range in this object.
1901           Base = P.second.front()->getStart();
1902           Asm->OutStreamer->EmitIntValue(-1, Size);
1903           Asm->OutStreamer->EmitSymbolValue(Base, Size);
1904         } else if (BaseIsSet) {
1905           BaseIsSet = false;
1906           Asm->OutStreamer->EmitIntValue(-1, Size);
1907           Asm->OutStreamer->EmitIntValue(0, Size);
1908         }
1909 
1910         for (const auto *RS : P.second) {
1911           const MCSymbol *Begin = RS->getStart();
1912           const MCSymbol *End = RS->getEnd();
1913           assert(Begin && "Range without a begin symbol?");
1914           assert(End && "Range without an end symbol?");
1915           if (Base) {
1916             Asm->EmitLabelDifference(Begin, Base, Size);
1917             Asm->EmitLabelDifference(End, Base, Size);
1918           } else {
1919             Asm->OutStreamer->EmitSymbolValue(Begin, Size);
1920             Asm->OutStreamer->EmitSymbolValue(End, Size);
1921           }
1922         }
1923       }
1924 
1925       // And terminate the list with two 0 values.
1926       Asm->OutStreamer->EmitIntValue(0, Size);
1927       Asm->OutStreamer->EmitIntValue(0, Size);
1928     }
1929   }
1930 }
1931 
1932 void DwarfDebug::handleMacroNodes(DIMacroNodeArray Nodes, DwarfCompileUnit &U) {
1933   for (auto *MN : Nodes) {
1934     if (auto *M = dyn_cast<DIMacro>(MN))
1935       emitMacro(*M);
1936     else if (auto *F = dyn_cast<DIMacroFile>(MN))
1937       emitMacroFile(*F, U);
1938     else
1939       llvm_unreachable("Unexpected DI type!");
1940   }
1941 }
1942 
1943 void DwarfDebug::emitMacro(DIMacro &M) {
1944   Asm->EmitULEB128(M.getMacinfoType());
1945   Asm->EmitULEB128(M.getLine());
1946   StringRef Name = M.getName();
1947   StringRef Value = M.getValue();
1948   Asm->OutStreamer->EmitBytes(Name);
1949   if (!Value.empty()) {
1950     // There should be one space between macro name and macro value.
1951     Asm->EmitInt8(' ');
1952     Asm->OutStreamer->EmitBytes(Value);
1953   }
1954   Asm->EmitInt8('\0');
1955 }
1956 
1957 void DwarfDebug::emitMacroFile(DIMacroFile &F, DwarfCompileUnit &U) {
1958   assert(F.getMacinfoType() == dwarf::DW_MACINFO_start_file);
1959   Asm->EmitULEB128(dwarf::DW_MACINFO_start_file);
1960   Asm->EmitULEB128(F.getLine());
1961   DIFile *File = F.getFile();
1962   unsigned FID =
1963       U.getOrCreateSourceID(File->getFilename(), File->getDirectory());
1964   Asm->EmitULEB128(FID);
1965   handleMacroNodes(F.getElements(), U);
1966   Asm->EmitULEB128(dwarf::DW_MACINFO_end_file);
1967 }
1968 
1969 /// Emit macros into a debug macinfo section.
1970 void DwarfDebug::emitDebugMacinfo() {
1971   if (CUMap.empty())
1972     return;
1973 
1974   // Start the dwarf macinfo section.
1975   Asm->OutStreamer->SwitchSection(
1976       Asm->getObjFileLowering().getDwarfMacinfoSection());
1977 
1978   for (const auto &P : CUMap) {
1979     auto &TheCU = *P.second;
1980     auto *SkCU = TheCU.getSkeleton();
1981     DwarfCompileUnit &U = SkCU ? *SkCU : TheCU;
1982     auto *CUNode = cast<DICompileUnit>(P.first);
1983     Asm->OutStreamer->EmitLabel(U.getMacroLabelBegin());
1984     handleMacroNodes(CUNode->getMacros(), U);
1985   }
1986   Asm->OutStreamer->AddComment("End Of Macro List Mark");
1987   Asm->EmitInt8(0);
1988 }
1989 
1990 // DWARF5 Experimental Separate Dwarf emitters.
1991 
1992 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die,
1993                                   std::unique_ptr<DwarfCompileUnit> NewU) {
1994   NewU->addString(Die, dwarf::DW_AT_GNU_dwo_name,
1995                   Asm->TM.Options.MCOptions.SplitDwarfFile);
1996 
1997   if (!CompilationDir.empty())
1998     NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
1999 
2000   addGnuPubAttributes(*NewU, Die);
2001 
2002   SkeletonHolder.addUnit(std::move(NewU));
2003 }
2004 
2005 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2006 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2007 // DW_AT_addr_base, DW_AT_ranges_base.
2008 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) {
2009 
2010   auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>(
2011       CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder);
2012   DwarfCompileUnit &NewCU = *OwnedUnit;
2013   NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection());
2014 
2015   NewCU.initStmtList();
2016 
2017   initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit));
2018 
2019   return NewCU;
2020 }
2021 
2022 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2023 // compile units that would normally be in debug_info.
2024 void DwarfDebug::emitDebugInfoDWO() {
2025   assert(useSplitDwarf() && "No split dwarf debug info?");
2026   // Don't emit relocations into the dwo file.
2027   InfoHolder.emitUnits(/* UseOffsets */ true);
2028 }
2029 
2030 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2031 // abbreviations for the .debug_info.dwo section.
2032 void DwarfDebug::emitDebugAbbrevDWO() {
2033   assert(useSplitDwarf() && "No split dwarf?");
2034   InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
2035 }
2036 
2037 void DwarfDebug::emitDebugLineDWO() {
2038   assert(useSplitDwarf() && "No split dwarf?");
2039   Asm->OutStreamer->SwitchSection(
2040       Asm->getObjFileLowering().getDwarfLineDWOSection());
2041   SplitTypeUnitFileTable.Emit(*Asm->OutStreamer, MCDwarfLineTableParams());
2042 }
2043 
2044 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2045 // string section and is identical in format to traditional .debug_str
2046 // sections.
2047 void DwarfDebug::emitDebugStrDWO() {
2048   assert(useSplitDwarf() && "No split dwarf?");
2049   MCSection *OffSec = Asm->getObjFileLowering().getDwarfStrOffDWOSection();
2050   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
2051                          OffSec);
2052 }
2053 
2054 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) {
2055   if (!useSplitDwarf())
2056     return nullptr;
2057   if (SingleCU)
2058     SplitTypeUnitFileTable.setCompilationDir(CU.getCUNode()->getDirectory());
2059   return &SplitTypeUnitFileTable;
2060 }
2061 
2062 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier) {
2063   MD5 Hash;
2064   Hash.update(Identifier);
2065   // ... take the least significant 8 bytes and return those. Our MD5
2066   // implementation always returns its results in little endian, so we actually
2067   // need the "high" word.
2068   MD5::MD5Result Result;
2069   Hash.final(Result);
2070   return Result.high();
2071 }
2072 
2073 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
2074                                       StringRef Identifier, DIE &RefDie,
2075                                       const DICompositeType *CTy) {
2076   // Fast path if we're building some type units and one has already used the
2077   // address pool we know we're going to throw away all this work anyway, so
2078   // don't bother building dependent types.
2079   if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed())
2080     return;
2081 
2082   auto Ins = TypeSignatures.insert(std::make_pair(CTy, 0));
2083   if (!Ins.second) {
2084     CU.addDIETypeSignature(RefDie, Ins.first->second);
2085     return;
2086   }
2087 
2088   bool TopLevelType = TypeUnitsUnderConstruction.empty();
2089   AddrPool.resetUsedFlag();
2090 
2091   auto OwnedUnit = llvm::make_unique<DwarfTypeUnit>(CU, Asm, this, &InfoHolder,
2092                                                     getDwoLineTable(CU));
2093   DwarfTypeUnit &NewTU = *OwnedUnit;
2094   DIE &UnitDie = NewTU.getUnitDie();
2095   TypeUnitsUnderConstruction.emplace_back(std::move(OwnedUnit), CTy);
2096 
2097   NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
2098                 CU.getLanguage());
2099 
2100   uint64_t Signature = makeTypeSignature(Identifier);
2101   NewTU.setTypeSignature(Signature);
2102   Ins.first->second = Signature;
2103 
2104   if (useSplitDwarf())
2105     NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesDWOSection());
2106   else {
2107     CU.applyStmtList(UnitDie);
2108     NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesSection(Signature));
2109   }
2110 
2111   NewTU.setType(NewTU.createTypeDIE(CTy));
2112 
2113   if (TopLevelType) {
2114     auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction);
2115     TypeUnitsUnderConstruction.clear();
2116 
2117     // Types referencing entries in the address table cannot be placed in type
2118     // units.
2119     if (AddrPool.hasBeenUsed()) {
2120 
2121       // Remove all the types built while building this type.
2122       // This is pessimistic as some of these types might not be dependent on
2123       // the type that used an address.
2124       for (const auto &TU : TypeUnitsToAdd)
2125         TypeSignatures.erase(TU.second);
2126 
2127       // Construct this type in the CU directly.
2128       // This is inefficient because all the dependent types will be rebuilt
2129       // from scratch, including building them in type units, discovering that
2130       // they depend on addresses, throwing them out and rebuilding them.
2131       CU.constructTypeDIE(RefDie, cast<DICompositeType>(CTy));
2132       return;
2133     }
2134 
2135     // If the type wasn't dependent on fission addresses, finish adding the type
2136     // and all its dependent types.
2137     for (auto &TU : TypeUnitsToAdd) {
2138       InfoHolder.computeSizeAndOffsetsForUnit(TU.first.get());
2139       InfoHolder.emitUnit(TU.first.get(), useSplitDwarf());
2140     }
2141   }
2142   CU.addDIETypeSignature(RefDie, Signature);
2143 }
2144 
2145 // Accelerator table mutators - add each name along with its companion
2146 // DIE to the proper table while ensuring that the name that we're going
2147 // to reference is in the string table. We do this since the names we
2148 // add may not only be identical to the names in the DIE.
2149 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) {
2150   if (!useDwarfAccelTables())
2151     return;
2152   AccelNames.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2153 }
2154 
2155 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) {
2156   if (!useDwarfAccelTables())
2157     return;
2158   AccelObjC.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2159 }
2160 
2161 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) {
2162   if (!useDwarfAccelTables())
2163     return;
2164   AccelNamespace.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2165 }
2166 
2167 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) {
2168   if (!useDwarfAccelTables())
2169     return;
2170   AccelTypes.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2171 }
2172 
2173 uint16_t DwarfDebug::getDwarfVersion() const {
2174   return Asm->OutStreamer->getContext().getDwarfVersion();
2175 }
2176