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 #define DEBUG_TYPE "dwarfdebug"
15 #include "ByteStreamer.h"
16 #include "DwarfDebug.h"
17 #include "DIE.h"
18 #include "DIEHash.h"
19 #include "DwarfAccelTable.h"
20 #include "DwarfUnit.h"
21 #include "llvm/ADT/STLExtras.h"
22 #include "llvm/ADT/Statistic.h"
23 #include "llvm/ADT/StringExtras.h"
24 #include "llvm/ADT/Triple.h"
25 #include "llvm/CodeGen/MachineFunction.h"
26 #include "llvm/CodeGen/MachineModuleInfo.h"
27 #include "llvm/IR/Constants.h"
28 #include "llvm/IR/DIBuilder.h"
29 #include "llvm/IR/DataLayout.h"
30 #include "llvm/IR/DebugInfo.h"
31 #include "llvm/IR/Instructions.h"
32 #include "llvm/IR/Module.h"
33 #include "llvm/IR/ValueHandle.h"
34 #include "llvm/MC/MCAsmInfo.h"
35 #include "llvm/MC/MCSection.h"
36 #include "llvm/MC/MCStreamer.h"
37 #include "llvm/MC/MCSymbol.h"
38 #include "llvm/Support/CommandLine.h"
39 #include "llvm/Support/Debug.h"
40 #include "llvm/Support/Dwarf.h"
41 #include "llvm/Support/ErrorHandling.h"
42 #include "llvm/Support/FormattedStream.h"
43 #include "llvm/Support/LEB128.h"
44 #include "llvm/Support/MD5.h"
45 #include "llvm/Support/Path.h"
46 #include "llvm/Support/Timer.h"
47 #include "llvm/Target/TargetFrameLowering.h"
48 #include "llvm/Target/TargetLoweringObjectFile.h"
49 #include "llvm/Target/TargetMachine.h"
50 #include "llvm/Target/TargetOptions.h"
51 #include "llvm/Target/TargetRegisterInfo.h"
52 using namespace llvm;
53 
54 static cl::opt<bool>
55 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden,
56                          cl::desc("Disable debug info printing"));
57 
58 static cl::opt<bool> UnknownLocations(
59     "use-unknown-locations", cl::Hidden,
60     cl::desc("Make an absence of debug location information explicit."),
61     cl::init(false));
62 
63 static cl::opt<bool>
64 GenerateGnuPubSections("generate-gnu-dwarf-pub-sections", cl::Hidden,
65                        cl::desc("Generate GNU-style pubnames and pubtypes"),
66                        cl::init(false));
67 
68 static cl::opt<bool> GenerateARangeSection("generate-arange-section",
69                                            cl::Hidden,
70                                            cl::desc("Generate dwarf aranges"),
71                                            cl::init(false));
72 
73 namespace {
74 enum DefaultOnOff { Default, Enable, Disable };
75 }
76 
77 static cl::opt<DefaultOnOff>
78 DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
79                  cl::desc("Output prototype dwarf accelerator tables."),
80                  cl::values(clEnumVal(Default, "Default for platform"),
81                             clEnumVal(Enable, "Enabled"),
82                             clEnumVal(Disable, "Disabled"), clEnumValEnd),
83                  cl::init(Default));
84 
85 static cl::opt<DefaultOnOff>
86 SplitDwarf("split-dwarf", cl::Hidden,
87            cl::desc("Output DWARF5 split debug info."),
88            cl::values(clEnumVal(Default, "Default for platform"),
89                       clEnumVal(Enable, "Enabled"),
90                       clEnumVal(Disable, "Disabled"), clEnumValEnd),
91            cl::init(Default));
92 
93 static cl::opt<DefaultOnOff>
94 DwarfPubSections("generate-dwarf-pub-sections", cl::Hidden,
95                  cl::desc("Generate DWARF pubnames and pubtypes sections"),
96                  cl::values(clEnumVal(Default, "Default for platform"),
97                             clEnumVal(Enable, "Enabled"),
98                             clEnumVal(Disable, "Disabled"), clEnumValEnd),
99                  cl::init(Default));
100 
101 static cl::opt<unsigned>
102 DwarfVersionNumber("dwarf-version", cl::Hidden,
103                    cl::desc("Generate DWARF for dwarf version."), cl::init(0));
104 
105 static const char *const DWARFGroupName = "DWARF Emission";
106 static const char *const DbgTimerName = "DWARF Debug Writer";
107 
108 //===----------------------------------------------------------------------===//
109 
110 namespace llvm {
111 
112 /// resolve - Look in the DwarfDebug map for the MDNode that
113 /// corresponds to the reference.
114 template <typename T> T DbgVariable::resolve(DIRef<T> Ref) const {
115   return DD->resolve(Ref);
116 }
117 
118 bool DbgVariable::isBlockByrefVariable() const {
119   assert(Var.isVariable() && "Invalid complex DbgVariable!");
120   return Var.isBlockByrefVariable(DD->getTypeIdentifierMap());
121 }
122 
123 
124 DIType DbgVariable::getType() const {
125   DIType Ty = Var.getType().resolve(DD->getTypeIdentifierMap());
126   // FIXME: isBlockByrefVariable should be reformulated in terms of complex
127   // addresses instead.
128   if (Var.isBlockByrefVariable(DD->getTypeIdentifierMap())) {
129     /* Byref variables, in Blocks, are declared by the programmer as
130        "SomeType VarName;", but the compiler creates a
131        __Block_byref_x_VarName struct, and gives the variable VarName
132        either the struct, or a pointer to the struct, as its type.  This
133        is necessary for various behind-the-scenes things the compiler
134        needs to do with by-reference variables in blocks.
135 
136        However, as far as the original *programmer* is concerned, the
137        variable should still have type 'SomeType', as originally declared.
138 
139        The following function dives into the __Block_byref_x_VarName
140        struct to find the original type of the variable.  This will be
141        passed back to the code generating the type for the Debug
142        Information Entry for the variable 'VarName'.  'VarName' will then
143        have the original type 'SomeType' in its debug information.
144 
145        The original type 'SomeType' will be the type of the field named
146        'VarName' inside the __Block_byref_x_VarName struct.
147 
148        NOTE: In order for this to not completely fail on the debugger
149        side, the Debug Information Entry for the variable VarName needs to
150        have a DW_AT_location that tells the debugger how to unwind through
151        the pointers and __Block_byref_x_VarName struct to find the actual
152        value of the variable.  The function addBlockByrefType does this.  */
153     DIType subType = Ty;
154     uint16_t tag = Ty.getTag();
155 
156     if (tag == dwarf::DW_TAG_pointer_type)
157       subType = resolve(DIDerivedType(Ty).getTypeDerivedFrom());
158 
159     DIArray Elements = DICompositeType(subType).getTypeArray();
160     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
161       DIDerivedType DT(Elements.getElement(i));
162       if (getName() == DT.getName())
163         return (resolve(DT.getTypeDerivedFrom()));
164     }
165   }
166   return Ty;
167 }
168 
169 } // end llvm namespace
170 
171 /// Return Dwarf Version by checking module flags.
172 static unsigned getDwarfVersionFromModule(const Module *M) {
173   Value *Val = M->getModuleFlag("Dwarf Version");
174   if (!Val)
175     return dwarf::DWARF_VERSION;
176   return cast<ConstantInt>(Val)->getZExtValue();
177 }
178 
179 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
180     : Asm(A), MMI(Asm->MMI), FirstCU(0), PrevLabel(NULL), GlobalRangeCount(0),
181       InfoHolder(A, "info_string", DIEValueAllocator), HasCURanges(false),
182       UsedNonDefaultText(false),
183       SkeletonHolder(A, "skel_string", DIEValueAllocator) {
184 
185   DwarfInfoSectionSym = DwarfAbbrevSectionSym = DwarfStrSectionSym = 0;
186   DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0;
187   DwarfAddrSectionSym = 0;
188   DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0;
189   FunctionBeginSym = FunctionEndSym = 0;
190   CurFn = 0;
191   CurMI = 0;
192 
193   // Turn on accelerator tables for Darwin by default, pubnames by
194   // default for non-Darwin, and handle split dwarf.
195   bool IsDarwin = Triple(A->getTargetTriple()).isOSDarwin();
196 
197   if (DwarfAccelTables == Default)
198     HasDwarfAccelTables = IsDarwin;
199   else
200     HasDwarfAccelTables = DwarfAccelTables == Enable;
201 
202   if (SplitDwarf == Default)
203     HasSplitDwarf = false;
204   else
205     HasSplitDwarf = SplitDwarf == Enable;
206 
207   if (DwarfPubSections == Default)
208     HasDwarfPubSections = !IsDarwin;
209   else
210     HasDwarfPubSections = DwarfPubSections == Enable;
211 
212   DwarfVersion = DwarfVersionNumber
213                      ? DwarfVersionNumber
214                      : getDwarfVersionFromModule(MMI->getModule());
215 
216   {
217     NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
218     beginModule();
219   }
220 }
221 
222 // Switch to the specified MCSection and emit an assembler
223 // temporary label to it if SymbolStem is specified.
224 static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section,
225                                 const char *SymbolStem = 0) {
226   Asm->OutStreamer.SwitchSection(Section);
227   if (!SymbolStem)
228     return 0;
229 
230   MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
231   Asm->OutStreamer.EmitLabel(TmpSym);
232   return TmpSym;
233 }
234 
235 DwarfFile::~DwarfFile() {
236   for (DwarfUnit *DU : CUs)
237     delete DU;
238 }
239 
240 MCSymbol *DwarfFile::getStringPoolSym() {
241   return Asm->GetTempSymbol(StringPref);
242 }
243 
244 MCSymbol *DwarfFile::getStringPoolEntry(StringRef Str) {
245   std::pair<MCSymbol *, unsigned> &Entry =
246       StringPool.GetOrCreateValue(Str).getValue();
247   if (Entry.first)
248     return Entry.first;
249 
250   Entry.second = NextStringPoolNumber++;
251   return Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
252 }
253 
254 unsigned DwarfFile::getStringPoolIndex(StringRef Str) {
255   std::pair<MCSymbol *, unsigned> &Entry =
256       StringPool.GetOrCreateValue(Str).getValue();
257   if (Entry.first)
258     return Entry.second;
259 
260   Entry.second = NextStringPoolNumber++;
261   Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
262   return Entry.second;
263 }
264 
265 unsigned DwarfFile::getAddrPoolIndex(const MCSymbol *Sym, bool TLS) {
266   std::pair<AddrPool::iterator, bool> P = AddressPool.insert(
267       std::make_pair(Sym, AddressPoolEntry(NextAddrPoolNumber, TLS)));
268   if (P.second)
269     ++NextAddrPoolNumber;
270   return P.first->second.Number;
271 }
272 
273 // Define a unique number for the abbreviation.
274 //
275 void DwarfFile::assignAbbrevNumber(DIEAbbrev &Abbrev) {
276   // Check the set for priors.
277   DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
278 
279   // If it's newly added.
280   if (InSet == &Abbrev) {
281     // Add to abbreviation list.
282     Abbreviations.push_back(&Abbrev);
283 
284     // Assign the vector position + 1 as its number.
285     Abbrev.setNumber(Abbreviations.size());
286   } else {
287     // Assign existing abbreviation number.
288     Abbrev.setNumber(InSet->getNumber());
289   }
290 }
291 
292 static bool isObjCClass(StringRef Name) {
293   return Name.startswith("+") || Name.startswith("-");
294 }
295 
296 static bool hasObjCCategory(StringRef Name) {
297   if (!isObjCClass(Name))
298     return false;
299 
300   return Name.find(") ") != StringRef::npos;
301 }
302 
303 static void getObjCClassCategory(StringRef In, StringRef &Class,
304                                  StringRef &Category) {
305   if (!hasObjCCategory(In)) {
306     Class = In.slice(In.find('[') + 1, In.find(' '));
307     Category = "";
308     return;
309   }
310 
311   Class = In.slice(In.find('[') + 1, In.find('('));
312   Category = In.slice(In.find('[') + 1, In.find(' '));
313   return;
314 }
315 
316 static StringRef getObjCMethodName(StringRef In) {
317   return In.slice(In.find(' ') + 1, In.find(']'));
318 }
319 
320 // Helper for sorting sections into a stable output order.
321 static bool SectionSort(const MCSection *A, const MCSection *B) {
322   std::string LA = (A ? A->getLabelBeginName() : "");
323   std::string LB = (B ? B->getLabelBeginName() : "");
324   return LA < LB;
325 }
326 
327 // Add the various names to the Dwarf accelerator table names.
328 // TODO: Determine whether or not we should add names for programs
329 // that do not have a DW_AT_name or DW_AT_linkage_name field - this
330 // is only slightly different than the lookup of non-standard ObjC names.
331 static void addSubprogramNames(DwarfUnit *TheU, DISubprogram SP, DIE *Die) {
332   if (!SP.isDefinition())
333     return;
334   TheU->addAccelName(SP.getName(), Die);
335 
336   // If the linkage name is different than the name, go ahead and output
337   // that as well into the name table.
338   if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
339     TheU->addAccelName(SP.getLinkageName(), Die);
340 
341   // If this is an Objective-C selector name add it to the ObjC accelerator
342   // too.
343   if (isObjCClass(SP.getName())) {
344     StringRef Class, Category;
345     getObjCClassCategory(SP.getName(), Class, Category);
346     TheU->addAccelObjC(Class, Die);
347     if (Category != "")
348       TheU->addAccelObjC(Category, Die);
349     // Also add the base method name to the name table.
350     TheU->addAccelName(getObjCMethodName(SP.getName()), Die);
351   }
352 }
353 
354 /// isSubprogramContext - Return true if Context is either a subprogram
355 /// or another context nested inside a subprogram.
356 bool DwarfDebug::isSubprogramContext(const MDNode *Context) {
357   if (!Context)
358     return false;
359   DIDescriptor D(Context);
360   if (D.isSubprogram())
361     return true;
362   if (D.isType())
363     return isSubprogramContext(resolve(DIType(Context).getContext()));
364   return false;
365 }
366 
367 // Find DIE for the given subprogram and attach appropriate DW_AT_low_pc
368 // and DW_AT_high_pc attributes. If there are global variables in this
369 // scope then create and insert DIEs for these variables.
370 DIE *DwarfDebug::updateSubprogramScopeDIE(DwarfCompileUnit *SPCU,
371                                           DISubprogram SP) {
372   DIE *SPDie = SPCU->getDIE(SP);
373 
374   assert(SPDie && "Unable to find subprogram DIE!");
375 
376   // If we're updating an abstract DIE, then we will be adding the children and
377   // object pointer later on. But what we don't want to do is process the
378   // concrete DIE twice.
379   if (DIE *AbsSPDIE = AbstractSPDies.lookup(SP)) {
380     // Pick up abstract subprogram DIE.
381     SPDie =
382         SPCU->createAndAddDIE(dwarf::DW_TAG_subprogram, *SPCU->getUnitDie());
383     SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin, AbsSPDIE);
384   } else {
385     DISubprogram SPDecl = SP.getFunctionDeclaration();
386     if (!SPDecl.isSubprogram()) {
387       // There is not any need to generate specification DIE for a function
388       // defined at compile unit level. If a function is defined inside another
389       // function then gdb prefers the definition at top level and but does not
390       // expect specification DIE in parent function. So avoid creating
391       // specification DIE for a function defined inside a function.
392       DIScope SPContext = resolve(SP.getContext());
393       if (SP.isDefinition() && !SPContext.isCompileUnit() &&
394           !SPContext.isFile() && !isSubprogramContext(SPContext)) {
395         SPCU->addFlag(SPDie, dwarf::DW_AT_declaration);
396 
397         // Add arguments.
398         DICompositeType SPTy = SP.getType();
399         DIArray Args = SPTy.getTypeArray();
400         uint16_t SPTag = SPTy.getTag();
401         if (SPTag == dwarf::DW_TAG_subroutine_type)
402           SPCU->constructSubprogramArguments(*SPDie, Args);
403         DIE *SPDeclDie = SPDie;
404         SPDie = SPCU->createAndAddDIE(dwarf::DW_TAG_subprogram,
405                                       *SPCU->getUnitDie());
406         SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, SPDeclDie);
407       }
408     }
409   }
410 
411   attachLowHighPC(SPCU, SPDie, FunctionBeginSym, FunctionEndSym);
412 
413   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
414   MachineLocation Location(RI->getFrameRegister(*Asm->MF));
415   SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
416 
417   // Add name to the name table, we do this here because we're guaranteed
418   // to have concrete versions of our DW_TAG_subprogram nodes.
419   addSubprogramNames(SPCU, SP, SPDie);
420 
421   return SPDie;
422 }
423 
424 /// Check whether we should create a DIE for the given Scope, return true
425 /// if we don't create a DIE (the corresponding DIE is null).
426 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) {
427   if (Scope->isAbstractScope())
428     return false;
429 
430   // We don't create a DIE if there is no Range.
431   const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges();
432   if (Ranges.empty())
433     return true;
434 
435   if (Ranges.size() > 1)
436     return false;
437 
438   // We don't create a DIE if we have a single Range and the end label
439   // is null.
440   SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin();
441   MCSymbol *End = getLabelAfterInsn(RI->second);
442   return !End;
443 }
444 
445 static void addSectionLabel(AsmPrinter *Asm, DwarfUnit *U, DIE *D,
446                             dwarf::Attribute A, const MCSymbol *L,
447                             const MCSymbol *Sec) {
448   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
449     U->addSectionLabel(D, A, L);
450   else
451     U->addSectionDelta(D, A, L, Sec);
452 }
453 
454 void DwarfDebug::addScopeRangeList(DwarfCompileUnit *TheCU, DIE *ScopeDIE,
455                                    const SmallVectorImpl<InsnRange> &Range) {
456   // Emit offset in .debug_range as a relocatable label. emitDIE will handle
457   // emitting it appropriately.
458   MCSymbol *RangeSym = Asm->GetTempSymbol("debug_ranges", GlobalRangeCount++);
459   addSectionLabel(Asm, TheCU, ScopeDIE, dwarf::DW_AT_ranges, RangeSym,
460                   DwarfDebugRangeSectionSym);
461 
462   RangeSpanList List(RangeSym);
463   for (const InsnRange &R : Range) {
464     RangeSpan Span(getLabelBeforeInsn(R.first), getLabelAfterInsn(R.second));
465     List.addRange(std::move(Span));
466   }
467 
468   // Add the range list to the set of ranges to be emitted.
469   TheCU->addRangeList(std::move(List));
470 }
471 
472 // Construct new DW_TAG_lexical_block for this scope and attach
473 // DW_AT_low_pc/DW_AT_high_pc labels.
474 DIE *DwarfDebug::constructLexicalScopeDIE(DwarfCompileUnit *TheCU,
475                                           LexicalScope *Scope) {
476   if (isLexicalScopeDIENull(Scope))
477     return 0;
478 
479   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
480   if (Scope->isAbstractScope())
481     return ScopeDIE;
482 
483   const SmallVectorImpl<InsnRange> &ScopeRanges = Scope->getRanges();
484 
485   // If we have multiple ranges, emit them into the range section.
486   if (ScopeRanges.size() > 1) {
487     addScopeRangeList(TheCU, ScopeDIE, ScopeRanges);
488     return ScopeDIE;
489   }
490 
491   // Construct the address range for this DIE.
492   SmallVectorImpl<InsnRange>::const_iterator RI = ScopeRanges.begin();
493   MCSymbol *Start = getLabelBeforeInsn(RI->first);
494   MCSymbol *End = getLabelAfterInsn(RI->second);
495   assert(End && "End label should not be null!");
496 
497   assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
498   assert(End->isDefined() && "Invalid end label for an inlined scope!");
499 
500   attachLowHighPC(TheCU, ScopeDIE, Start, End);
501 
502   return ScopeDIE;
503 }
504 
505 // This scope represents inlined body of a function. Construct DIE to
506 // represent this concrete inlined copy of the function.
507 DIE *DwarfDebug::constructInlinedScopeDIE(DwarfCompileUnit *TheCU,
508                                           LexicalScope *Scope) {
509   const SmallVectorImpl<InsnRange> &ScopeRanges = Scope->getRanges();
510   assert(!ScopeRanges.empty() &&
511          "LexicalScope does not have instruction markers!");
512 
513   if (!Scope->getScopeNode())
514     return NULL;
515   DIScope DS(Scope->getScopeNode());
516   DISubprogram InlinedSP = getDISubprogram(DS);
517   DIE *OriginDIE = TheCU->getDIE(InlinedSP);
518   if (!OriginDIE) {
519     DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram.");
520     return NULL;
521   }
522 
523   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
524   TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin, OriginDIE);
525 
526   // If we have multiple ranges, emit them into the range section.
527   if (ScopeRanges.size() > 1)
528     addScopeRangeList(TheCU, ScopeDIE, ScopeRanges);
529   else {
530     SmallVectorImpl<InsnRange>::const_iterator RI = ScopeRanges.begin();
531     MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
532     MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
533 
534     if (StartLabel == 0 || EndLabel == 0)
535       llvm_unreachable("Unexpected Start and End labels for an inlined scope!");
536 
537     assert(StartLabel->isDefined() &&
538            "Invalid starting label for an inlined scope!");
539     assert(EndLabel->isDefined() && "Invalid end label for an inlined scope!");
540 
541     attachLowHighPC(TheCU, ScopeDIE, StartLabel, EndLabel);
542   }
543 
544   InlinedSubprogramDIEs.insert(OriginDIE);
545 
546   // Add the call site information to the DIE.
547   DILocation DL(Scope->getInlinedAt());
548   TheCU->addUInt(
549       ScopeDIE, dwarf::DW_AT_call_file, None,
550       TheCU->getOrCreateSourceID(DL.getFilename(), DL.getDirectory()));
551   TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, None, DL.getLineNumber());
552 
553   // Add name to the name table, we do this here because we're guaranteed
554   // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
555   addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
556 
557   return ScopeDIE;
558 }
559 
560 DIE *DwarfDebug::createScopeChildrenDIE(DwarfCompileUnit *TheCU,
561                                         LexicalScope *Scope,
562                                         SmallVectorImpl<DIE *> &Children) {
563   DIE *ObjectPointer = NULL;
564 
565   // Collect arguments for current function.
566   if (LScopes.isCurrentFunctionScope(Scope)) {
567     for (DbgVariable *ArgDV : CurrentFnArguments)
568       if (ArgDV)
569         if (DIE *Arg =
570                 TheCU->constructVariableDIE(*ArgDV, Scope->isAbstractScope())) {
571           Children.push_back(Arg);
572           if (ArgDV->isObjectPointer())
573             ObjectPointer = Arg;
574         }
575 
576     // If this is a variadic function, add an unspecified parameter.
577     DISubprogram SP(Scope->getScopeNode());
578     DIArray FnArgs = SP.getType().getTypeArray();
579     if (FnArgs.getElement(FnArgs.getNumElements() - 1)
580             .isUnspecifiedParameter()) {
581       DIE *Ellipsis = new DIE(dwarf::DW_TAG_unspecified_parameters);
582       Children.push_back(Ellipsis);
583     }
584   }
585 
586   // Collect lexical scope children first.
587   for (DbgVariable *DV : ScopeVariables.lookup(Scope))
588     if (DIE *Variable = TheCU->constructVariableDIE(*DV,
589                                                     Scope->isAbstractScope())) {
590       Children.push_back(Variable);
591       if (DV->isObjectPointer())
592         ObjectPointer = Variable;
593     }
594   for (LexicalScope *LS : Scope->getChildren())
595     if (DIE *Nested = constructScopeDIE(TheCU, LS))
596       Children.push_back(Nested);
597   return ObjectPointer;
598 }
599 
600 // Construct a DIE for this scope.
601 DIE *DwarfDebug::constructScopeDIE(DwarfCompileUnit *TheCU,
602                                    LexicalScope *Scope) {
603   if (!Scope || !Scope->getScopeNode())
604     return NULL;
605 
606   // Unique scope where applicable.
607   DIScope DS(resolve(DIScope(Scope->getScopeNode()).getRef()));
608 
609   SmallVector<DIE *, 8> Children;
610   DIE *ObjectPointer = NULL;
611   bool ChildrenCreated = false;
612 
613   // We try to create the scope DIE first, then the children DIEs. This will
614   // avoid creating un-used children then removing them later when we find out
615   // the scope DIE is null.
616   DIE *ScopeDIE = NULL;
617   if (Scope->getInlinedAt())
618     ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
619   else if (DS.isSubprogram()) {
620     ProcessedSPNodes.insert(DS);
621     if (Scope->isAbstractScope()) {
622       ScopeDIE = TheCU->getDIE(DS);
623       // Note down abstract DIE.
624       if (ScopeDIE)
625         AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
626     } else
627       ScopeDIE = updateSubprogramScopeDIE(TheCU, DISubprogram(DS));
628   } else {
629     // Early exit when we know the scope DIE is going to be null.
630     if (isLexicalScopeDIENull(Scope))
631       return NULL;
632 
633     // We create children here when we know the scope DIE is not going to be
634     // null and the children will be added to the scope DIE.
635     ObjectPointer = createScopeChildrenDIE(TheCU, Scope, Children);
636     ChildrenCreated = true;
637 
638     // There is no need to emit empty lexical block DIE.
639     std::pair<ImportedEntityMap::const_iterator,
640               ImportedEntityMap::const_iterator> Range =
641         std::equal_range(
642             ScopesWithImportedEntities.begin(),
643             ScopesWithImportedEntities.end(),
644             std::pair<const MDNode *, const MDNode *>(DS, (const MDNode *)0),
645             less_first());
646     if (Children.empty() && Range.first == Range.second)
647       return NULL;
648     ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
649     assert(ScopeDIE && "Scope DIE should not be null.");
650     for (ImportedEntityMap::const_iterator i = Range.first; i != Range.second;
651          ++i)
652       constructImportedEntityDIE(TheCU, i->second, ScopeDIE);
653   }
654 
655   if (!ScopeDIE) {
656     assert(Children.empty() &&
657            "We create children only when the scope DIE is not null.");
658     return NULL;
659   }
660   if (!ChildrenCreated)
661     // We create children when the scope DIE is not null.
662     ObjectPointer = createScopeChildrenDIE(TheCU, Scope, Children);
663 
664   // Add children
665   for (DIE *I : Children)
666     ScopeDIE->addChild(I);
667 
668   if (DS.isSubprogram() && ObjectPointer != NULL)
669     TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer, ObjectPointer);
670 
671   return ScopeDIE;
672 }
673 
674 void DwarfDebug::addGnuPubAttributes(DwarfUnit *U, DIE *D) const {
675   if (!GenerateGnuPubSections)
676     return;
677 
678   U->addFlag(D, dwarf::DW_AT_GNU_pubnames);
679 }
680 
681 // Create new DwarfCompileUnit for the given metadata node with tag
682 // DW_TAG_compile_unit.
683 DwarfCompileUnit *DwarfDebug::constructDwarfCompileUnit(DICompileUnit DIUnit) {
684   StringRef FN = DIUnit.getFilename();
685   CompilationDir = DIUnit.getDirectory();
686 
687   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
688   DwarfCompileUnit *NewCU = new DwarfCompileUnit(
689       InfoHolder.getUnits().size(), Die, DIUnit, Asm, this, &InfoHolder);
690   InfoHolder.addUnit(NewCU);
691   if (!Asm->OutStreamer.hasRawTextSupport() || SingleCU)
692     Asm->OutStreamer.getContext().setMCLineTableCompilationDir(
693         NewCU->getUniqueID(), CompilationDir);
694 
695   NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
696   NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
697                  DIUnit.getLanguage());
698   NewCU->addString(Die, dwarf::DW_AT_name, FN);
699 
700   if (!useSplitDwarf()) {
701     NewCU->initStmtList(DwarfLineSectionSym);
702 
703     // If we're using split dwarf the compilation dir is going to be in the
704     // skeleton CU and so we don't need to duplicate it here.
705     if (!CompilationDir.empty())
706       NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
707 
708     addGnuPubAttributes(NewCU, Die);
709   }
710 
711   if (DIUnit.isOptimized())
712     NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized);
713 
714   StringRef Flags = DIUnit.getFlags();
715   if (!Flags.empty())
716     NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
717 
718   if (unsigned RVer = DIUnit.getRunTimeVersion())
719     NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
720                    dwarf::DW_FORM_data1, RVer);
721 
722   if (!FirstCU)
723     FirstCU = NewCU;
724 
725   if (useSplitDwarf()) {
726     NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoDWOSection(),
727                        DwarfInfoDWOSectionSym);
728     NewCU->setSkeleton(constructSkeletonCU(NewCU));
729   } else
730     NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
731                        DwarfInfoSectionSym);
732 
733   CUMap.insert(std::make_pair(DIUnit, NewCU));
734   CUDieMap.insert(std::make_pair(Die, NewCU));
735   return NewCU;
736 }
737 
738 // Construct subprogram DIE.
739 void DwarfDebug::constructSubprogramDIE(DwarfCompileUnit *TheCU,
740                                         const MDNode *N) {
741   // FIXME: We should only call this routine once, however, during LTO if a
742   // program is defined in multiple CUs we could end up calling it out of
743   // beginModule as we walk the CUs.
744 
745   DwarfCompileUnit *&CURef = SPMap[N];
746   if (CURef)
747     return;
748   CURef = TheCU;
749 
750   DISubprogram SP(N);
751   if (!SP.isDefinition())
752     // This is a method declaration which will be handled while constructing
753     // class type.
754     return;
755 
756   DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
757 
758   // Expose as a global name.
759   TheCU->addGlobalName(SP.getName(), SubprogramDie, resolve(SP.getContext()));
760 }
761 
762 void DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit *TheCU,
763                                             const MDNode *N) {
764   DIImportedEntity Module(N);
765   assert(Module.Verify());
766   if (DIE *D = TheCU->getOrCreateContextDIE(Module.getContext()))
767     constructImportedEntityDIE(TheCU, Module, D);
768 }
769 
770 void DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit *TheCU,
771                                             const MDNode *N, DIE *Context) {
772   DIImportedEntity Module(N);
773   assert(Module.Verify());
774   return constructImportedEntityDIE(TheCU, Module, Context);
775 }
776 
777 void DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit *TheCU,
778                                             const DIImportedEntity &Module,
779                                             DIE *Context) {
780   assert(Module.Verify() &&
781          "Use one of the MDNode * overloads to handle invalid metadata");
782   assert(Context && "Should always have a context for an imported_module");
783   DIE *IMDie = new DIE(Module.getTag());
784   TheCU->insertDIE(Module, IMDie);
785   DIE *EntityDie;
786   DIDescriptor Entity = Module.getEntity();
787   if (Entity.isNameSpace())
788     EntityDie = TheCU->getOrCreateNameSpace(DINameSpace(Entity));
789   else if (Entity.isSubprogram())
790     EntityDie = TheCU->getOrCreateSubprogramDIE(DISubprogram(Entity));
791   else if (Entity.isType())
792     EntityDie = TheCU->getOrCreateTypeDIE(DIType(Entity));
793   else
794     EntityDie = TheCU->getDIE(Entity);
795   TheCU->addSourceLine(IMDie, Module.getLineNumber(),
796                        Module.getContext().getFilename(),
797                        Module.getContext().getDirectory());
798   TheCU->addDIEEntry(IMDie, dwarf::DW_AT_import, EntityDie);
799   StringRef Name = Module.getName();
800   if (!Name.empty())
801     TheCU->addString(IMDie, dwarf::DW_AT_name, Name);
802   Context->addChild(IMDie);
803 }
804 
805 // Emit all Dwarf sections that should come prior to the content. Create
806 // global DIEs and emit initial debug info sections. This is invoked by
807 // the target AsmPrinter.
808 void DwarfDebug::beginModule() {
809   if (DisableDebugInfoPrinting)
810     return;
811 
812   const Module *M = MMI->getModule();
813 
814   // If module has named metadata anchors then use them, otherwise scan the
815   // module using debug info finder to collect debug info.
816   NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
817   if (!CU_Nodes)
818     return;
819   TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
820 
821   // Emit initial sections so we can reference labels later.
822   emitSectionLabels();
823 
824   SingleCU = CU_Nodes->getNumOperands() == 1;
825 
826   for (MDNode *N : CU_Nodes->operands()) {
827     DICompileUnit CUNode(N);
828     DwarfCompileUnit *CU = constructDwarfCompileUnit(CUNode);
829     DIArray ImportedEntities = CUNode.getImportedEntities();
830     for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
831       ScopesWithImportedEntities.push_back(std::make_pair(
832           DIImportedEntity(ImportedEntities.getElement(i)).getContext(),
833           ImportedEntities.getElement(i)));
834     std::sort(ScopesWithImportedEntities.begin(),
835               ScopesWithImportedEntities.end(), less_first());
836     DIArray GVs = CUNode.getGlobalVariables();
837     for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
838       CU->createGlobalVariableDIE(DIGlobalVariable(GVs.getElement(i)));
839     DIArray SPs = CUNode.getSubprograms();
840     for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
841       constructSubprogramDIE(CU, SPs.getElement(i));
842     DIArray EnumTypes = CUNode.getEnumTypes();
843     for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
844       CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
845     DIArray RetainedTypes = CUNode.getRetainedTypes();
846     for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i) {
847       DIType Ty(RetainedTypes.getElement(i));
848       // The retained types array by design contains pointers to
849       // MDNodes rather than DIRefs. Unique them here.
850       DIType UniqueTy(resolve(Ty.getRef()));
851       CU->getOrCreateTypeDIE(UniqueTy);
852     }
853     // Emit imported_modules last so that the relevant context is already
854     // available.
855     for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
856       constructImportedEntityDIE(CU, ImportedEntities.getElement(i));
857   }
858 
859   // Tell MMI that we have debug info.
860   MMI->setDebugInfoAvailability(true);
861 
862   // Prime section data.
863   SectionMap[Asm->getObjFileLowering().getTextSection()];
864 }
865 
866 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
867 void DwarfDebug::computeInlinedDIEs() {
868   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
869   for (DIE *ISP : InlinedSubprogramDIEs)
870     FirstCU->addUInt(ISP, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined);
871 
872   for (const auto &AI : AbstractSPDies) {
873     DIE *ISP = AI.second;
874     if (InlinedSubprogramDIEs.count(ISP))
875       continue;
876     FirstCU->addUInt(ISP, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined);
877   }
878 }
879 
880 // Collect info for variables that were optimized out.
881 void DwarfDebug::collectDeadVariables() {
882   const Module *M = MMI->getModule();
883 
884   if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
885     for (MDNode *N : CU_Nodes->operands()) {
886       DICompileUnit TheCU(N);
887       DIArray Subprograms = TheCU.getSubprograms();
888       for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
889         DISubprogram SP(Subprograms.getElement(i));
890         if (ProcessedSPNodes.count(SP) != 0)
891           continue;
892         if (!SP.isSubprogram())
893           continue;
894         if (!SP.isDefinition())
895           continue;
896         DIArray Variables = SP.getVariables();
897         if (Variables.getNumElements() == 0)
898           continue;
899 
900         // Construct subprogram DIE and add variables DIEs.
901         DwarfCompileUnit *SPCU =
902             static_cast<DwarfCompileUnit *>(CUMap.lookup(TheCU));
903         assert(SPCU && "Unable to find Compile Unit!");
904         // FIXME: See the comment in constructSubprogramDIE about duplicate
905         // subprogram DIEs.
906         constructSubprogramDIE(SPCU, SP);
907         DIE *SPDIE = SPCU->getDIE(SP);
908         for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
909           DIVariable DV(Variables.getElement(vi));
910           if (!DV.isVariable())
911             continue;
912           DbgVariable NewVar(DV, NULL, this);
913           if (DIE *VariableDIE = SPCU->constructVariableDIE(NewVar, false))
914             SPDIE->addChild(VariableDIE);
915         }
916       }
917     }
918   }
919 }
920 
921 void DwarfDebug::finalizeModuleInfo() {
922   // Collect info for variables that were optimized out.
923   collectDeadVariables();
924 
925   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
926   computeInlinedDIEs();
927 
928   // Handle anything that needs to be done on a per-unit basis after
929   // all other generation.
930   for (DwarfUnit *TheU : getUnits()) {
931     // Emit DW_AT_containing_type attribute to connect types with their
932     // vtable holding type.
933     TheU->constructContainingTypeDIEs();
934 
935     // Add CU specific attributes if we need to add any.
936     if (TheU->getUnitDie()->getTag() == dwarf::DW_TAG_compile_unit) {
937       // If we're splitting the dwarf out now that we've got the entire
938       // CU then add the dwo id to it.
939       DwarfCompileUnit *SkCU =
940           static_cast<DwarfCompileUnit *>(TheU->getSkeleton());
941       if (useSplitDwarf()) {
942         // Emit a unique identifier for this CU.
943         uint64_t ID = DIEHash(Asm).computeCUSignature(*TheU->getUnitDie());
944         TheU->addUInt(TheU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
945                       dwarf::DW_FORM_data8, ID);
946         SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
947                       dwarf::DW_FORM_data8, ID);
948       }
949 
950       // If we have code split among multiple sections or we've requested
951       // it then emit a DW_AT_ranges attribute on the unit that will remain
952       // in the .o file, otherwise add a DW_AT_low_pc.
953       // FIXME: Also add a high pc if we can.
954       // FIXME: We should use ranges if we have multiple compile units or
955       // allow reordering of code ala .subsections_via_symbols in mach-o.
956       DwarfCompileUnit *U = SkCU ? SkCU : static_cast<DwarfCompileUnit *>(TheU);
957       if (useCURanges() && TheU->getRanges().size()) {
958         addSectionLabel(Asm, U, U->getUnitDie(), dwarf::DW_AT_ranges,
959                         Asm->GetTempSymbol("cu_ranges", U->getUniqueID()),
960                         DwarfDebugRangeSectionSym);
961 
962         // A DW_AT_low_pc attribute may also be specified in combination with
963         // DW_AT_ranges to specify the default base address for use in location
964         // lists (see Section 2.6.2) and range lists (see Section 2.17.3).
965         U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
966                    0);
967       } else
968         U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
969                    0);
970     }
971   }
972 
973   // Compute DIE offsets and sizes.
974   InfoHolder.computeSizeAndOffsets();
975   if (useSplitDwarf())
976     SkeletonHolder.computeSizeAndOffsets();
977 }
978 
979 void DwarfDebug::endSections() {
980   // Filter labels by section.
981   for (const SymbolCU &SCU : ArangeLabels) {
982     if (SCU.Sym->isInSection()) {
983       // Make a note of this symbol and it's section.
984       const MCSection *Section = &SCU.Sym->getSection();
985       if (!Section->getKind().isMetadata())
986         SectionMap[Section].push_back(SCU);
987     } else {
988       // Some symbols (e.g. common/bss on mach-o) can have no section but still
989       // appear in the output. This sucks as we rely on sections to build
990       // arange spans. We can do it without, but it's icky.
991       SectionMap[NULL].push_back(SCU);
992     }
993   }
994 
995   // Build a list of sections used.
996   std::vector<const MCSection *> Sections;
997   for (const auto &it : SectionMap) {
998     const MCSection *Section = it.first;
999     Sections.push_back(Section);
1000   }
1001 
1002   // Sort the sections into order.
1003   // This is only done to ensure consistent output order across different runs.
1004   std::sort(Sections.begin(), Sections.end(), SectionSort);
1005 
1006   // Add terminating symbols for each section.
1007   for (unsigned ID = 0, E = Sections.size(); ID != E; ID++) {
1008     const MCSection *Section = Sections[ID];
1009     MCSymbol *Sym = NULL;
1010 
1011     if (Section) {
1012       // We can't call MCSection::getLabelEndName, as it's only safe to do so
1013       // if we know the section name up-front. For user-created sections, the
1014       // resulting label may not be valid to use as a label. (section names can
1015       // use a greater set of characters on some systems)
1016       Sym = Asm->GetTempSymbol("debug_end", ID);
1017       Asm->OutStreamer.SwitchSection(Section);
1018       Asm->OutStreamer.EmitLabel(Sym);
1019     }
1020 
1021     // Insert a final terminator.
1022     SectionMap[Section].push_back(SymbolCU(NULL, Sym));
1023   }
1024 
1025   // For now only turn on CU ranges if we have -ffunction-sections enabled,
1026   // we've emitted a function into a unique section, or we're using LTO. If
1027   // we're using LTO then we can't know that any particular function in the
1028   // module is correlated to a particular CU and so we need to be conservative.
1029   // At this point all sections should be finalized except for dwarf sections.
1030   HasCURanges = UsedNonDefaultText || (CUMap.size() > 1) ||
1031                 TargetMachine::getFunctionSections();
1032 }
1033 
1034 // Emit all Dwarf sections that should come after the content.
1035 void DwarfDebug::endModule() {
1036   assert(CurFn == 0);
1037   assert(CurMI == 0);
1038 
1039   if (!FirstCU)
1040     return;
1041 
1042   // End any existing sections.
1043   // TODO: Does this need to happen?
1044   endSections();
1045 
1046   // Finalize the debug info for the module.
1047   finalizeModuleInfo();
1048 
1049   emitDebugStr();
1050 
1051   // Emit all the DIEs into a debug info section.
1052   emitDebugInfo();
1053 
1054   // Corresponding abbreviations into a abbrev section.
1055   emitAbbreviations();
1056 
1057   // Emit info into a debug loc section.
1058   emitDebugLoc();
1059 
1060   // Emit info into a debug aranges section.
1061   if (GenerateARangeSection)
1062     emitDebugARanges();
1063 
1064   // Emit info into a debug ranges section.
1065   emitDebugRanges();
1066 
1067   if (useSplitDwarf()) {
1068     emitDebugStrDWO();
1069     emitDebugInfoDWO();
1070     emitDebugAbbrevDWO();
1071     emitDebugLineDWO();
1072     // Emit DWO addresses.
1073     InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1074   }
1075 
1076   // Emit info into the dwarf accelerator table sections.
1077   if (useDwarfAccelTables()) {
1078     emitAccelNames();
1079     emitAccelObjC();
1080     emitAccelNamespaces();
1081     emitAccelTypes();
1082   }
1083 
1084   // Emit the pubnames and pubtypes sections if requested.
1085   if (HasDwarfPubSections) {
1086     emitDebugPubNames(GenerateGnuPubSections);
1087     emitDebugPubTypes(GenerateGnuPubSections);
1088   }
1089 
1090   // clean up.
1091   SPMap.clear();
1092 
1093   // Reset these for the next Module if we have one.
1094   FirstCU = NULL;
1095 }
1096 
1097 // Find abstract variable, if any, associated with Var.
1098 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1099                                               DebugLoc ScopeLoc) {
1100   LLVMContext &Ctx = DV->getContext();
1101   // More then one inlined variable corresponds to one abstract variable.
1102   DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1103   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1104   if (AbsDbgVariable)
1105     return AbsDbgVariable;
1106 
1107   LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1108   if (!Scope)
1109     return NULL;
1110 
1111   AbsDbgVariable = new DbgVariable(Var, NULL, this);
1112   addScopeVariable(Scope, AbsDbgVariable);
1113   AbstractVariables[Var] = AbsDbgVariable;
1114   return AbsDbgVariable;
1115 }
1116 
1117 // If Var is a current function argument then add it to CurrentFnArguments list.
1118 bool DwarfDebug::addCurrentFnArgument(DbgVariable *Var, LexicalScope *Scope) {
1119   if (!LScopes.isCurrentFunctionScope(Scope))
1120     return false;
1121   DIVariable DV = Var->getVariable();
1122   if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1123     return false;
1124   unsigned ArgNo = DV.getArgNumber();
1125   if (ArgNo == 0)
1126     return false;
1127 
1128   size_t Size = CurrentFnArguments.size();
1129   if (Size == 0)
1130     CurrentFnArguments.resize(CurFn->getFunction()->arg_size());
1131   // llvm::Function argument size is not good indicator of how many
1132   // arguments does the function have at source level.
1133   if (ArgNo > Size)
1134     CurrentFnArguments.resize(ArgNo * 2);
1135   CurrentFnArguments[ArgNo - 1] = Var;
1136   return true;
1137 }
1138 
1139 // Collect variable information from side table maintained by MMI.
1140 void DwarfDebug::collectVariableInfoFromMMITable(
1141     SmallPtrSet<const MDNode *, 16> &Processed) {
1142   for (const auto &VI : MMI->getVariableDbgInfo()) {
1143     if (!VI.Var)
1144       continue;
1145     Processed.insert(VI.Var);
1146     DIVariable DV(VI.Var);
1147     LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc);
1148 
1149     // If variable scope is not found then skip this variable.
1150     if (Scope == 0)
1151       continue;
1152 
1153     DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VI.Loc);
1154     DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable, this);
1155     RegVar->setFrameIndex(VI.Slot);
1156     if (!addCurrentFnArgument(RegVar, Scope))
1157       addScopeVariable(Scope, RegVar);
1158     if (AbsDbgVariable)
1159       AbsDbgVariable->setFrameIndex(VI.Slot);
1160   }
1161 }
1162 
1163 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
1164 // defined reg.
1165 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1166   assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1167   return MI->getNumOperands() == 3 && MI->getOperand(0).isReg() &&
1168          MI->getOperand(0).getReg() &&
1169          (MI->getOperand(1).isImm() ||
1170           (MI->getOperand(1).isReg() && MI->getOperand(1).getReg() == 0U));
1171 }
1172 
1173 // Get .debug_loc entry for the instruction range starting at MI.
1174 static DebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1175                                          const MCSymbol *FLabel,
1176                                          const MCSymbol *SLabel,
1177                                          const MachineInstr *MI) {
1178   const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1179 
1180   assert(MI->getNumOperands() == 3);
1181   if (MI->getOperand(0).isReg()) {
1182     MachineLocation MLoc;
1183     // If the second operand is an immediate, this is a
1184     // register-indirect address.
1185     if (!MI->getOperand(1).isImm())
1186       MLoc.set(MI->getOperand(0).getReg());
1187     else
1188       MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1189     return DebugLocEntry(FLabel, SLabel, MLoc, Var);
1190   }
1191   if (MI->getOperand(0).isImm())
1192     return DebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1193   if (MI->getOperand(0).isFPImm())
1194     return DebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1195   if (MI->getOperand(0).isCImm())
1196     return DebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1197 
1198   llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1199 }
1200 
1201 // Find variables for each lexical scope.
1202 void
1203 DwarfDebug::collectVariableInfo(SmallPtrSet<const MDNode *, 16> &Processed) {
1204 
1205   // Grab the variable info that was squirreled away in the MMI side-table.
1206   collectVariableInfoFromMMITable(Processed);
1207 
1208   for (const MDNode *Var : UserVariables) {
1209     if (Processed.count(Var))
1210       continue;
1211 
1212     // History contains relevant DBG_VALUE instructions for Var and instructions
1213     // clobbering it.
1214     SmallVectorImpl<const MachineInstr *> &History = DbgValues[Var];
1215     if (History.empty())
1216       continue;
1217     const MachineInstr *MInsn = History.front();
1218 
1219     DIVariable DV(Var);
1220     LexicalScope *Scope = NULL;
1221     if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1222         DISubprogram(DV.getContext()).describes(CurFn->getFunction()))
1223       Scope = LScopes.getCurrentFunctionScope();
1224     else if (MDNode *IA = DV.getInlinedAt())
1225       Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1226     else
1227       Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1228     // If variable scope is not found then skip this variable.
1229     if (!Scope)
1230       continue;
1231 
1232     Processed.insert(DV);
1233     assert(MInsn->isDebugValue() && "History must begin with debug value");
1234     DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1235     DbgVariable *RegVar = new DbgVariable(DV, AbsVar, this);
1236     if (!addCurrentFnArgument(RegVar, Scope))
1237       addScopeVariable(Scope, RegVar);
1238     if (AbsVar)
1239       AbsVar->setMInsn(MInsn);
1240 
1241     // Simplify ranges that are fully coalesced.
1242     if (History.size() <= 1 ||
1243         (History.size() == 2 && MInsn->isIdenticalTo(History.back()))) {
1244       RegVar->setMInsn(MInsn);
1245       continue;
1246     }
1247 
1248     // Handle multiple DBG_VALUE instructions describing one variable.
1249     RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1250 
1251     for (SmallVectorImpl<const MachineInstr *>::const_iterator
1252              HI = History.begin(),
1253              HE = History.end();
1254          HI != HE; ++HI) {
1255       const MachineInstr *Begin = *HI;
1256       assert(Begin->isDebugValue() && "Invalid History entry");
1257 
1258       // Check if DBG_VALUE is truncating a range.
1259       if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg() &&
1260           !Begin->getOperand(0).getReg())
1261         continue;
1262 
1263       // Compute the range for a register location.
1264       const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1265       const MCSymbol *SLabel = 0;
1266 
1267       if (HI + 1 == HE)
1268         // If Begin is the last instruction in History then its value is valid
1269         // until the end of the function.
1270         SLabel = FunctionEndSym;
1271       else {
1272         const MachineInstr *End = HI[1];
1273         DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1274                      << "\t" << *Begin << "\t" << *End << "\n");
1275         if (End->isDebugValue())
1276           SLabel = getLabelBeforeInsn(End);
1277         else {
1278           // End is a normal instruction clobbering the range.
1279           SLabel = getLabelAfterInsn(End);
1280           assert(SLabel && "Forgot label after clobber instruction");
1281           ++HI;
1282         }
1283       }
1284 
1285       // The value is valid until the next DBG_VALUE or clobber.
1286       DotDebugLocEntries.push_back(
1287           getDebugLocEntry(Asm, FLabel, SLabel, Begin));
1288     }
1289     DotDebugLocEntries.push_back(DebugLocEntry());
1290   }
1291 
1292   // Collect info for variables that were optimized out.
1293   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1294   DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1295   for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1296     DIVariable DV(Variables.getElement(i));
1297     if (!DV || !DV.isVariable() || !Processed.insert(DV))
1298       continue;
1299     if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1300       addScopeVariable(Scope, new DbgVariable(DV, NULL, this));
1301   }
1302 }
1303 
1304 // Return Label preceding the instruction.
1305 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1306   MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1307   assert(Label && "Didn't insert label before instruction");
1308   return Label;
1309 }
1310 
1311 // Return Label immediately following the instruction.
1312 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1313   return LabelsAfterInsn.lookup(MI);
1314 }
1315 
1316 // Process beginning of an instruction.
1317 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1318   assert(CurMI == 0);
1319   CurMI = MI;
1320   // Check if source location changes, but ignore DBG_VALUE locations.
1321   if (!MI->isDebugValue()) {
1322     DebugLoc DL = MI->getDebugLoc();
1323     if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1324       unsigned Flags = 0;
1325       PrevInstLoc = DL;
1326       if (DL == PrologEndLoc) {
1327         Flags |= DWARF2_FLAG_PROLOGUE_END;
1328         PrologEndLoc = DebugLoc();
1329       }
1330       if (PrologEndLoc.isUnknown())
1331         Flags |= DWARF2_FLAG_IS_STMT;
1332 
1333       if (!DL.isUnknown()) {
1334         const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1335         recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1336       } else
1337         recordSourceLine(0, 0, 0, 0);
1338     }
1339   }
1340 
1341   // Insert labels where requested.
1342   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
1343       LabelsBeforeInsn.find(MI);
1344 
1345   // No label needed.
1346   if (I == LabelsBeforeInsn.end())
1347     return;
1348 
1349   // Label already assigned.
1350   if (I->second)
1351     return;
1352 
1353   if (!PrevLabel) {
1354     PrevLabel = MMI->getContext().CreateTempSymbol();
1355     Asm->OutStreamer.EmitLabel(PrevLabel);
1356   }
1357   I->second = PrevLabel;
1358 }
1359 
1360 // Process end of an instruction.
1361 void DwarfDebug::endInstruction() {
1362   assert(CurMI != 0);
1363   // Don't create a new label after DBG_VALUE instructions.
1364   // They don't generate code.
1365   if (!CurMI->isDebugValue())
1366     PrevLabel = 0;
1367 
1368   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
1369       LabelsAfterInsn.find(CurMI);
1370   CurMI = 0;
1371 
1372   // No label needed.
1373   if (I == LabelsAfterInsn.end())
1374     return;
1375 
1376   // Label already assigned.
1377   if (I->second)
1378     return;
1379 
1380   // We need a label after this instruction.
1381   if (!PrevLabel) {
1382     PrevLabel = MMI->getContext().CreateTempSymbol();
1383     Asm->OutStreamer.EmitLabel(PrevLabel);
1384   }
1385   I->second = PrevLabel;
1386 }
1387 
1388 // Each LexicalScope has first instruction and last instruction to mark
1389 // beginning and end of a scope respectively. Create an inverse map that list
1390 // scopes starts (and ends) with an instruction. One instruction may start (or
1391 // end) multiple scopes. Ignore scopes that are not reachable.
1392 void DwarfDebug::identifyScopeMarkers() {
1393   SmallVector<LexicalScope *, 4> WorkList;
1394   WorkList.push_back(LScopes.getCurrentFunctionScope());
1395   while (!WorkList.empty()) {
1396     LexicalScope *S = WorkList.pop_back_val();
1397 
1398     const SmallVectorImpl<LexicalScope *> &Children = S->getChildren();
1399     if (!Children.empty())
1400       WorkList.append(Children.begin(), Children.end());
1401 
1402     if (S->isAbstractScope())
1403       continue;
1404 
1405     for (const InsnRange &R : S->getRanges()) {
1406       assert(R.first && "InsnRange does not have first instruction!");
1407       assert(R.second && "InsnRange does not have second instruction!");
1408       requestLabelBeforeInsn(R.first);
1409       requestLabelAfterInsn(R.second);
1410     }
1411   }
1412 }
1413 
1414 // Gather pre-function debug information.  Assumes being called immediately
1415 // after the function entry point has been emitted.
1416 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1417   CurFn = MF;
1418 
1419   // If there's no debug info for the function we're not going to do anything.
1420   if (!MMI->hasDebugInfo())
1421     return;
1422 
1423   // Grab the lexical scopes for the function, if we don't have any of those
1424   // then we're not going to be able to do anything.
1425   LScopes.initialize(*MF);
1426   if (LScopes.empty()) {
1427     // If we don't have a lexical scope for this function then there will
1428     // be a hole in the range information. Keep note of this.
1429     UsedNonDefaultText = true;
1430     return;
1431   }
1432 
1433   assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1434 
1435   // Make sure that each lexical scope will have a begin/end label.
1436   identifyScopeMarkers();
1437 
1438   // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
1439   // belongs to so that we add to the correct per-cu line table in the
1440   // non-asm case.
1441   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1442   DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1443   assert(TheCU && "Unable to find compile unit!");
1444   if (Asm->OutStreamer.hasRawTextSupport())
1445     // Use a single line table if we are generating assembly.
1446     Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1447   else
1448     Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1449 
1450   // Check the current section against the standard text section. If different
1451   // keep track so that we will know when we're emitting functions into multiple
1452   // sections.
1453   if (Asm->getObjFileLowering().getTextSection() != Asm->getCurrentSection())
1454     UsedNonDefaultText = true;
1455 
1456   // Emit a label for the function so that we have a beginning address.
1457   FunctionBeginSym = Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber());
1458   // Assumes in correct section after the entry point.
1459   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1460 
1461   const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1462   // LiveUserVar - Map physreg numbers to the MDNode they contain.
1463   std::vector<const MDNode *> LiveUserVar(TRI->getNumRegs());
1464 
1465   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end(); I != E;
1466        ++I) {
1467     bool AtBlockEntry = true;
1468     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1469          II != IE; ++II) {
1470       const MachineInstr *MI = II;
1471 
1472       if (MI->isDebugValue()) {
1473         assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1474 
1475         // Keep track of user variables.
1476         const MDNode *Var =
1477             MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1478 
1479         // Variable is in a register, we need to check for clobbers.
1480         if (isDbgValueInDefinedReg(MI))
1481           LiveUserVar[MI->getOperand(0).getReg()] = Var;
1482 
1483         // Check the history of this variable.
1484         SmallVectorImpl<const MachineInstr *> &History = DbgValues[Var];
1485         if (History.empty()) {
1486           UserVariables.push_back(Var);
1487           // The first mention of a function argument gets the FunctionBeginSym
1488           // label, so arguments are visible when breaking at function entry.
1489           DIVariable DV(Var);
1490           if (DV.isVariable() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1491               getDISubprogram(DV.getContext()).describes(MF->getFunction()))
1492             LabelsBeforeInsn[MI] = FunctionBeginSym;
1493         } else {
1494           // We have seen this variable before. Try to coalesce DBG_VALUEs.
1495           const MachineInstr *Prev = History.back();
1496           if (Prev->isDebugValue()) {
1497             // Coalesce identical entries at the end of History.
1498             if (History.size() >= 2 &&
1499                 Prev->isIdenticalTo(History[History.size() - 2])) {
1500               DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1501                            << "\t" << *Prev << "\t"
1502                            << *History[History.size() - 2] << "\n");
1503               History.pop_back();
1504             }
1505 
1506             // Terminate old register assignments that don't reach MI;
1507             MachineFunction::const_iterator PrevMBB = Prev->getParent();
1508             if (PrevMBB != I && (!AtBlockEntry || std::next(PrevMBB) != I) &&
1509                 isDbgValueInDefinedReg(Prev)) {
1510               // Previous register assignment needs to terminate at the end of
1511               // its basic block.
1512               MachineBasicBlock::const_iterator LastMI =
1513                   PrevMBB->getLastNonDebugInstr();
1514               if (LastMI == PrevMBB->end()) {
1515                 // Drop DBG_VALUE for empty range.
1516                 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1517                              << "\t" << *Prev << "\n");
1518                 History.pop_back();
1519               } else if (std::next(PrevMBB) != PrevMBB->getParent()->end())
1520                 // Terminate after LastMI.
1521                 History.push_back(LastMI);
1522             }
1523           }
1524         }
1525         History.push_back(MI);
1526       } else {
1527         // Not a DBG_VALUE instruction.
1528         if (!MI->isPosition())
1529           AtBlockEntry = false;
1530 
1531         // First known non-DBG_VALUE and non-frame setup location marks
1532         // the beginning of the function body.
1533         if (!MI->getFlag(MachineInstr::FrameSetup) &&
1534             (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1535           PrologEndLoc = MI->getDebugLoc();
1536 
1537         // Check if the instruction clobbers any registers with debug vars.
1538         for (const MachineOperand &MO : MI->operands()) {
1539           if (!MO.isReg() || !MO.isDef() || !MO.getReg())
1540             continue;
1541           for (MCRegAliasIterator AI(MO.getReg(), TRI, true); AI.isValid();
1542                ++AI) {
1543             unsigned Reg = *AI;
1544             const MDNode *Var = LiveUserVar[Reg];
1545             if (!Var)
1546               continue;
1547             // Reg is now clobbered.
1548             LiveUserVar[Reg] = 0;
1549 
1550             // Was MD last defined by a DBG_VALUE referring to Reg?
1551             DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1552             if (HistI == DbgValues.end())
1553               continue;
1554             SmallVectorImpl<const MachineInstr *> &History = HistI->second;
1555             if (History.empty())
1556               continue;
1557             const MachineInstr *Prev = History.back();
1558             // Sanity-check: Register assignments are terminated at the end of
1559             // their block.
1560             if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1561               continue;
1562             // Is the variable still in Reg?
1563             if (!isDbgValueInDefinedReg(Prev) ||
1564                 Prev->getOperand(0).getReg() != Reg)
1565               continue;
1566             // Var is clobbered. Make sure the next instruction gets a label.
1567             History.push_back(MI);
1568           }
1569         }
1570       }
1571     }
1572   }
1573 
1574   for (auto &I : DbgValues) {
1575     SmallVectorImpl<const MachineInstr *> &History = I.second;
1576     if (History.empty())
1577       continue;
1578 
1579     // Make sure the final register assignments are terminated.
1580     const MachineInstr *Prev = History.back();
1581     if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1582       const MachineBasicBlock *PrevMBB = Prev->getParent();
1583       MachineBasicBlock::const_iterator LastMI =
1584           PrevMBB->getLastNonDebugInstr();
1585       if (LastMI == PrevMBB->end())
1586         // Drop DBG_VALUE for empty range.
1587         History.pop_back();
1588       else if (PrevMBB != &PrevMBB->getParent()->back()) {
1589         // Terminate after LastMI.
1590         History.push_back(LastMI);
1591       }
1592     }
1593     // Request labels for the full history.
1594     for (const MachineInstr *MI : History) {
1595       if (MI->isDebugValue())
1596         requestLabelBeforeInsn(MI);
1597       else
1598         requestLabelAfterInsn(MI);
1599     }
1600   }
1601 
1602   PrevInstLoc = DebugLoc();
1603   PrevLabel = FunctionBeginSym;
1604 
1605   // Record beginning of function.
1606   if (!PrologEndLoc.isUnknown()) {
1607     DebugLoc FnStartDL =
1608         PrologEndLoc.getFnDebugLoc(MF->getFunction()->getContext());
1609     recordSourceLine(
1610         FnStartDL.getLine(), FnStartDL.getCol(),
1611         FnStartDL.getScope(MF->getFunction()->getContext()),
1612         // We'd like to list the prologue as "not statements" but GDB behaves
1613         // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1614         DWARF2_FLAG_IS_STMT);
1615   }
1616 }
1617 
1618 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1619   SmallVectorImpl<DbgVariable *> &Vars = ScopeVariables[LS];
1620   DIVariable DV = Var->getVariable();
1621   // Variables with positive arg numbers are parameters.
1622   if (unsigned ArgNum = DV.getArgNumber()) {
1623     // Keep all parameters in order at the start of the variable list to ensure
1624     // function types are correct (no out-of-order parameters)
1625     //
1626     // This could be improved by only doing it for optimized builds (unoptimized
1627     // builds have the right order to begin with), searching from the back (this
1628     // would catch the unoptimized case quickly), or doing a binary search
1629     // rather than linear search.
1630     SmallVectorImpl<DbgVariable *>::iterator I = Vars.begin();
1631     while (I != Vars.end()) {
1632       unsigned CurNum = (*I)->getVariable().getArgNumber();
1633       // A local (non-parameter) variable has been found, insert immediately
1634       // before it.
1635       if (CurNum == 0)
1636         break;
1637       // A later indexed parameter has been found, insert immediately before it.
1638       if (CurNum > ArgNum)
1639         break;
1640       ++I;
1641     }
1642     Vars.insert(I, Var);
1643     return;
1644   }
1645 
1646   Vars.push_back(Var);
1647 }
1648 
1649 // Gather and emit post-function debug information.
1650 void DwarfDebug::endFunction(const MachineFunction *MF) {
1651   // Every beginFunction(MF) call should be followed by an endFunction(MF) call,
1652   // though the beginFunction may not be called at all.
1653   // We should handle both cases.
1654   if (CurFn == 0)
1655     CurFn = MF;
1656   else
1657     assert(CurFn == MF);
1658   assert(CurFn != 0);
1659 
1660   if (!MMI->hasDebugInfo() || LScopes.empty()) {
1661     CurFn = 0;
1662     return;
1663   }
1664 
1665   // Define end label for subprogram.
1666   FunctionEndSym = Asm->GetTempSymbol("func_end", Asm->getFunctionNumber());
1667   // Assumes in correct section after the entry point.
1668   Asm->OutStreamer.EmitLabel(FunctionEndSym);
1669 
1670   // Set DwarfDwarfCompileUnitID in MCContext to default value.
1671   Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1672 
1673   SmallPtrSet<const MDNode *, 16> ProcessedVars;
1674   collectVariableInfo(ProcessedVars);
1675 
1676   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1677   DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1678   assert(TheCU && "Unable to find compile unit!");
1679 
1680   // Construct abstract scopes.
1681   for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
1682     DISubprogram SP(AScope->getScopeNode());
1683     if (SP.isSubprogram()) {
1684       // Collect info for variables that were optimized out.
1685       DIArray Variables = SP.getVariables();
1686       for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1687         DIVariable DV(Variables.getElement(i));
1688         if (!DV || !DV.isVariable() || !ProcessedVars.insert(DV))
1689           continue;
1690         // Check that DbgVariable for DV wasn't created earlier, when
1691         // findAbstractVariable() was called for inlined instance of DV.
1692         LLVMContext &Ctx = DV->getContext();
1693         DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1694         if (AbstractVariables.lookup(CleanDV))
1695           continue;
1696         if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1697           addScopeVariable(Scope, new DbgVariable(DV, NULL, this));
1698       }
1699     }
1700     if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1701       constructScopeDIE(TheCU, AScope);
1702   }
1703 
1704   DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1705   if (!CurFn->getTarget().Options.DisableFramePointerElim(*CurFn))
1706     TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1707 
1708   // Add the range of this function to the list of ranges for the CU.
1709   RangeSpan Span(FunctionBeginSym, FunctionEndSym);
1710   TheCU->addRange(std::move(Span));
1711 
1712   // Clear debug info
1713   for (auto &I : ScopeVariables)
1714     DeleteContainerPointers(I.second);
1715   ScopeVariables.clear();
1716   DeleteContainerPointers(CurrentFnArguments);
1717   UserVariables.clear();
1718   DbgValues.clear();
1719   AbstractVariables.clear();
1720   LabelsBeforeInsn.clear();
1721   LabelsAfterInsn.clear();
1722   PrevLabel = NULL;
1723   CurFn = 0;
1724 }
1725 
1726 // Register a source line with debug info. Returns the  unique label that was
1727 // emitted and which provides correspondence to the source line list.
1728 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1729                                   unsigned Flags) {
1730   StringRef Fn;
1731   StringRef Dir;
1732   unsigned Src = 1;
1733   unsigned Discriminator = 0;
1734   if (S) {
1735     DIDescriptor Scope(S);
1736 
1737     if (Scope.isCompileUnit()) {
1738       DICompileUnit CU(S);
1739       Fn = CU.getFilename();
1740       Dir = CU.getDirectory();
1741     } else if (Scope.isFile()) {
1742       DIFile F(S);
1743       Fn = F.getFilename();
1744       Dir = F.getDirectory();
1745     } else if (Scope.isSubprogram()) {
1746       DISubprogram SP(S);
1747       Fn = SP.getFilename();
1748       Dir = SP.getDirectory();
1749     } else if (Scope.isLexicalBlockFile()) {
1750       DILexicalBlockFile DBF(S);
1751       Fn = DBF.getFilename();
1752       Dir = DBF.getDirectory();
1753     } else if (Scope.isLexicalBlock()) {
1754       DILexicalBlock DB(S);
1755       Fn = DB.getFilename();
1756       Dir = DB.getDirectory();
1757       Discriminator = DB.getDiscriminator();
1758     } else
1759       llvm_unreachable("Unexpected scope info");
1760 
1761     unsigned CUID = Asm->OutStreamer.getContext().getDwarfCompileUnitID();
1762     Src = static_cast<DwarfCompileUnit *>(InfoHolder.getUnits()[CUID])
1763               ->getOrCreateSourceID(Fn, Dir);
1764   }
1765   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0,
1766                                          Discriminator, Fn);
1767 }
1768 
1769 //===----------------------------------------------------------------------===//
1770 // Emit Methods
1771 //===----------------------------------------------------------------------===//
1772 
1773 // Compute the size and offset of a DIE. The offset is relative to start of the
1774 // CU. It returns the offset after laying out the DIE.
1775 unsigned DwarfFile::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1776   // Record the abbreviation.
1777   assignAbbrevNumber(Die->getAbbrev());
1778 
1779   // Get the abbreviation for this DIE.
1780   const DIEAbbrev &Abbrev = Die->getAbbrev();
1781 
1782   // Set DIE offset
1783   Die->setOffset(Offset);
1784 
1785   // Start the size with the size of abbreviation code.
1786   Offset += getULEB128Size(Die->getAbbrevNumber());
1787 
1788   const SmallVectorImpl<DIEValue *> &Values = Die->getValues();
1789   const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
1790 
1791   // Size the DIE attribute values.
1792   for (unsigned i = 0, N = Values.size(); i < N; ++i)
1793     // Size attribute value.
1794     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1795 
1796   // Get the children.
1797   const std::vector<DIE *> &Children = Die->getChildren();
1798 
1799   // Size the DIE children if any.
1800   if (!Children.empty()) {
1801     assert(Abbrev.hasChildren() && "Children flag not set");
1802 
1803     for (DIE *Child : Children)
1804       Offset = computeSizeAndOffset(Child, Offset);
1805 
1806     // End of children marker.
1807     Offset += sizeof(int8_t);
1808   }
1809 
1810   Die->setSize(Offset - Die->getOffset());
1811   return Offset;
1812 }
1813 
1814 // Compute the size and offset for each DIE.
1815 void DwarfFile::computeSizeAndOffsets() {
1816   // Offset from the first CU in the debug info section is 0 initially.
1817   unsigned SecOffset = 0;
1818 
1819   // Iterate over each compile unit and set the size and offsets for each
1820   // DIE within each compile unit. All offsets are CU relative.
1821   for (DwarfUnit *TheU : CUs) {
1822     TheU->setDebugInfoOffset(SecOffset);
1823 
1824     // CU-relative offset is reset to 0 here.
1825     unsigned Offset = sizeof(int32_t) +      // Length of Unit Info
1826                       TheU->getHeaderSize(); // Unit-specific headers
1827 
1828     // EndOffset here is CU-relative, after laying out
1829     // all of the CU DIE.
1830     unsigned EndOffset = computeSizeAndOffset(TheU->getUnitDie(), Offset);
1831     SecOffset += EndOffset;
1832   }
1833 }
1834 
1835 // Emit initial Dwarf sections with a label at the start of each one.
1836 void DwarfDebug::emitSectionLabels() {
1837   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1838 
1839   // Dwarf sections base addresses.
1840   DwarfInfoSectionSym =
1841       emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1842   if (useSplitDwarf())
1843     DwarfInfoDWOSectionSym =
1844         emitSectionSym(Asm, TLOF.getDwarfInfoDWOSection(), "section_info_dwo");
1845   DwarfAbbrevSectionSym =
1846       emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1847   if (useSplitDwarf())
1848     DwarfAbbrevDWOSectionSym = emitSectionSym(
1849         Asm, TLOF.getDwarfAbbrevDWOSection(), "section_abbrev_dwo");
1850   if (GenerateARangeSection)
1851     emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1852 
1853   DwarfLineSectionSym =
1854       emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1855   emitSectionSym(Asm, TLOF.getDwarfLocSection());
1856   if (GenerateGnuPubSections) {
1857     DwarfGnuPubNamesSectionSym =
1858         emitSectionSym(Asm, TLOF.getDwarfGnuPubNamesSection());
1859     DwarfGnuPubTypesSectionSym =
1860         emitSectionSym(Asm, TLOF.getDwarfGnuPubTypesSection());
1861   } else if (HasDwarfPubSections) {
1862     emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1863     emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1864   }
1865 
1866   DwarfStrSectionSym =
1867       emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
1868   if (useSplitDwarf()) {
1869     DwarfStrDWOSectionSym =
1870         emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
1871     DwarfAddrSectionSym =
1872         emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
1873   }
1874   DwarfDebugRangeSectionSym =
1875       emitSectionSym(Asm, TLOF.getDwarfRangesSection(), "debug_range");
1876 
1877   DwarfDebugLocSectionSym =
1878       emitSectionSym(Asm, TLOF.getDwarfLocSection(), "section_debug_loc");
1879 }
1880 
1881 // Recursively emits a debug information entry.
1882 void DwarfDebug::emitDIE(DIE *Die) {
1883   // Get the abbreviation for this DIE.
1884   const DIEAbbrev &Abbrev = Die->getAbbrev();
1885 
1886   // Emit the code (index) for the abbreviation.
1887   if (Asm->isVerbose())
1888     Asm->OutStreamer.AddComment("Abbrev [" + Twine(Abbrev.getNumber()) +
1889                                 "] 0x" + Twine::utohexstr(Die->getOffset()) +
1890                                 ":0x" + Twine::utohexstr(Die->getSize()) + " " +
1891                                 dwarf::TagString(Abbrev.getTag()));
1892   Asm->EmitULEB128(Abbrev.getNumber());
1893 
1894   const SmallVectorImpl<DIEValue *> &Values = Die->getValues();
1895   const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
1896 
1897   // Emit the DIE attribute values.
1898   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1899     dwarf::Attribute Attr = AbbrevData[i].getAttribute();
1900     dwarf::Form Form = AbbrevData[i].getForm();
1901     assert(Form && "Too many attributes for DIE (check abbreviation)");
1902 
1903     if (Asm->isVerbose()) {
1904       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1905       if (Attr == dwarf::DW_AT_accessibility)
1906         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(
1907             cast<DIEInteger>(Values[i])->getValue()));
1908     }
1909 
1910     // Emit an attribute using the defined form.
1911     Values[i]->EmitValue(Asm, Form);
1912   }
1913 
1914   // Emit the DIE children if any.
1915   if (Abbrev.hasChildren()) {
1916     const std::vector<DIE *> &Children = Die->getChildren();
1917 
1918     for (DIE *Child : Children)
1919       emitDIE(Child);
1920 
1921     Asm->OutStreamer.AddComment("End Of Children Mark");
1922     Asm->EmitInt8(0);
1923   }
1924 }
1925 
1926 // Emit the various dwarf units to the unit section USection with
1927 // the abbreviations going into ASection.
1928 void DwarfFile::emitUnits(DwarfDebug *DD, const MCSection *ASection,
1929                           const MCSymbol *ASectionSym) {
1930   for (DwarfUnit *TheU : CUs) {
1931     DIE *Die = TheU->getUnitDie();
1932     const MCSection *USection = TheU->getSection();
1933     Asm->OutStreamer.SwitchSection(USection);
1934 
1935     // Emit the compile units header.
1936     Asm->OutStreamer.EmitLabel(TheU->getLabelBegin());
1937 
1938     // Emit size of content not including length itself
1939     Asm->OutStreamer.AddComment("Length of Unit");
1940     Asm->EmitInt32(TheU->getHeaderSize() + Die->getSize());
1941 
1942     TheU->emitHeader(ASection, ASectionSym);
1943 
1944     DD->emitDIE(Die);
1945     Asm->OutStreamer.EmitLabel(TheU->getLabelEnd());
1946   }
1947 }
1948 
1949 // Emit the debug info section.
1950 void DwarfDebug::emitDebugInfo() {
1951   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1952 
1953   Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfAbbrevSection(),
1954                    DwarfAbbrevSectionSym);
1955 }
1956 
1957 // Emit the abbreviation section.
1958 void DwarfDebug::emitAbbreviations() {
1959   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1960 
1961   Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1962 }
1963 
1964 void DwarfFile::emitAbbrevs(const MCSection *Section) {
1965   // Check to see if it is worth the effort.
1966   if (!Abbreviations.empty()) {
1967     // Start the debug abbrev section.
1968     Asm->OutStreamer.SwitchSection(Section);
1969 
1970     // For each abbrevation.
1971     for (const DIEAbbrev *Abbrev : Abbreviations) {
1972       // Emit the abbrevations code (base 1 index.)
1973       Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1974 
1975       // Emit the abbreviations data.
1976       Abbrev->Emit(Asm);
1977     }
1978 
1979     // Mark end of abbreviations.
1980     Asm->EmitULEB128(0, "EOM(3)");
1981   }
1982 }
1983 
1984 // Emit the last address of the section and the end of the line matrix.
1985 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1986   // Define last address of section.
1987   Asm->OutStreamer.AddComment("Extended Op");
1988   Asm->EmitInt8(0);
1989 
1990   Asm->OutStreamer.AddComment("Op size");
1991   Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
1992   Asm->OutStreamer.AddComment("DW_LNE_set_address");
1993   Asm->EmitInt8(dwarf::DW_LNE_set_address);
1994 
1995   Asm->OutStreamer.AddComment("Section end label");
1996 
1997   Asm->OutStreamer.EmitSymbolValue(
1998       Asm->GetTempSymbol("section_end", SectionEnd),
1999       Asm->getDataLayout().getPointerSize());
2000 
2001   // Mark end of matrix.
2002   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2003   Asm->EmitInt8(0);
2004   Asm->EmitInt8(1);
2005   Asm->EmitInt8(1);
2006 }
2007 
2008 // Emit visible names into a hashed accelerator table section.
2009 void DwarfDebug::emitAccelNames() {
2010   DwarfAccelTable AT(
2011       DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4));
2012   for (DwarfUnit *TheU : getUnits()) {
2013     for (const auto &GI : TheU->getAccelNames()) {
2014       StringRef Name = GI.getKey();
2015       for (const DIE *D : GI.second)
2016         AT.AddName(Name, D);
2017     }
2018   }
2019 
2020   AT.FinalizeTable(Asm, "Names");
2021   Asm->OutStreamer.SwitchSection(
2022       Asm->getObjFileLowering().getDwarfAccelNamesSection());
2023   MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2024   Asm->OutStreamer.EmitLabel(SectionBegin);
2025 
2026   // Emit the full data.
2027   AT.Emit(Asm, SectionBegin, &InfoHolder);
2028 }
2029 
2030 // Emit objective C classes and categories into a hashed accelerator table
2031 // section.
2032 void DwarfDebug::emitAccelObjC() {
2033   DwarfAccelTable AT(
2034       DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4));
2035   for (DwarfUnit *TheU : getUnits()) {
2036     for (const auto &GI : TheU->getAccelObjC()) {
2037       StringRef Name = GI.getKey();
2038       for (const DIE *D : GI.second)
2039         AT.AddName(Name, D);
2040     }
2041   }
2042 
2043   AT.FinalizeTable(Asm, "ObjC");
2044   Asm->OutStreamer.SwitchSection(
2045       Asm->getObjFileLowering().getDwarfAccelObjCSection());
2046   MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2047   Asm->OutStreamer.EmitLabel(SectionBegin);
2048 
2049   // Emit the full data.
2050   AT.Emit(Asm, SectionBegin, &InfoHolder);
2051 }
2052 
2053 // Emit namespace dies into a hashed accelerator table.
2054 void DwarfDebug::emitAccelNamespaces() {
2055   DwarfAccelTable AT(
2056       DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4));
2057   for (DwarfUnit *TheU : getUnits()) {
2058     for (const auto &GI : TheU->getAccelNamespace()) {
2059       StringRef Name = GI.getKey();
2060       for (const DIE *D : GI.second)
2061         AT.AddName(Name, D);
2062     }
2063   }
2064 
2065   AT.FinalizeTable(Asm, "namespac");
2066   Asm->OutStreamer.SwitchSection(
2067       Asm->getObjFileLowering().getDwarfAccelNamespaceSection());
2068   MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2069   Asm->OutStreamer.EmitLabel(SectionBegin);
2070 
2071   // Emit the full data.
2072   AT.Emit(Asm, SectionBegin, &InfoHolder);
2073 }
2074 
2075 // Emit type dies into a hashed accelerator table.
2076 void DwarfDebug::emitAccelTypes() {
2077   std::vector<DwarfAccelTable::Atom> Atoms;
2078   Atoms.push_back(
2079       DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4));
2080   Atoms.push_back(
2081       DwarfAccelTable::Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2));
2082   Atoms.push_back(
2083       DwarfAccelTable::Atom(dwarf::DW_ATOM_type_flags, dwarf::DW_FORM_data1));
2084   DwarfAccelTable AT(Atoms);
2085   for (DwarfUnit *TheU : getUnits()) {
2086     for (const auto &GI : TheU->getAccelTypes()) {
2087       StringRef Name = GI.getKey();
2088       for (const auto &DI : GI.second)
2089         AT.AddName(Name, DI.first, DI.second);
2090     }
2091   }
2092 
2093   AT.FinalizeTable(Asm, "types");
2094   Asm->OutStreamer.SwitchSection(
2095       Asm->getObjFileLowering().getDwarfAccelTypesSection());
2096   MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2097   Asm->OutStreamer.EmitLabel(SectionBegin);
2098 
2099   // Emit the full data.
2100   AT.Emit(Asm, SectionBegin, &InfoHolder);
2101 }
2102 
2103 // Public name handling.
2104 // The format for the various pubnames:
2105 //
2106 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
2107 // for the DIE that is named.
2108 //
2109 // gnu pubnames - offset/index value/name tuples where the offset is the offset
2110 // into the CU and the index value is computed according to the type of value
2111 // for the DIE that is named.
2112 //
2113 // For type units the offset is the offset of the skeleton DIE. For split dwarf
2114 // it's the offset within the debug_info/debug_types dwo section, however, the
2115 // reference in the pubname header doesn't change.
2116 
2117 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
2118 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU,
2119                                                         const DIE *Die) {
2120   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
2121 
2122   // We could have a specification DIE that has our most of our knowledge,
2123   // look for that now.
2124   DIEValue *SpecVal = Die->findAttribute(dwarf::DW_AT_specification);
2125   if (SpecVal) {
2126     DIE *SpecDIE = cast<DIEEntry>(SpecVal)->getEntry();
2127     if (SpecDIE->findAttribute(dwarf::DW_AT_external))
2128       Linkage = dwarf::GIEL_EXTERNAL;
2129   } else if (Die->findAttribute(dwarf::DW_AT_external))
2130     Linkage = dwarf::GIEL_EXTERNAL;
2131 
2132   switch (Die->getTag()) {
2133   case dwarf::DW_TAG_class_type:
2134   case dwarf::DW_TAG_structure_type:
2135   case dwarf::DW_TAG_union_type:
2136   case dwarf::DW_TAG_enumeration_type:
2137     return dwarf::PubIndexEntryDescriptor(
2138         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
2139                               ? dwarf::GIEL_STATIC
2140                               : dwarf::GIEL_EXTERNAL);
2141   case dwarf::DW_TAG_typedef:
2142   case dwarf::DW_TAG_base_type:
2143   case dwarf::DW_TAG_subrange_type:
2144     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
2145   case dwarf::DW_TAG_namespace:
2146     return dwarf::GIEK_TYPE;
2147   case dwarf::DW_TAG_subprogram:
2148     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
2149   case dwarf::DW_TAG_constant:
2150   case dwarf::DW_TAG_variable:
2151     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
2152   case dwarf::DW_TAG_enumerator:
2153     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
2154                                           dwarf::GIEL_STATIC);
2155   default:
2156     return dwarf::GIEK_NONE;
2157   }
2158 }
2159 
2160 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
2161 ///
2162 void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
2163   const MCSection *PSec =
2164       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
2165                : Asm->getObjFileLowering().getDwarfPubNamesSection();
2166 
2167   emitDebugPubSection(GnuStyle, PSec, "Names", &DwarfUnit::getGlobalNames);
2168 }
2169 
2170 void DwarfDebug::emitDebugPubSection(
2171     bool GnuStyle, const MCSection *PSec, StringRef Name,
2172     const StringMap<const DIE *> &(DwarfUnit::*Accessor)() const) {
2173   for (const auto &NU : CUMap) {
2174     DwarfCompileUnit *TheU = NU.second;
2175 
2176     const auto &Globals = (TheU->*Accessor)();
2177 
2178     if (Globals.empty())
2179       continue;
2180 
2181     if (auto Skeleton = static_cast<DwarfCompileUnit *>(TheU->getSkeleton()))
2182       TheU = Skeleton;
2183     unsigned ID = TheU->getUniqueID();
2184 
2185     // Start the dwarf pubnames section.
2186     Asm->OutStreamer.SwitchSection(PSec);
2187 
2188     // Emit the header.
2189     Asm->OutStreamer.AddComment("Length of Public " + Name + " Info");
2190     MCSymbol *BeginLabel = Asm->GetTempSymbol("pub" + Name + "_begin", ID);
2191     MCSymbol *EndLabel = Asm->GetTempSymbol("pub" + Name + "_end", ID);
2192     Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);
2193 
2194     Asm->OutStreamer.EmitLabel(BeginLabel);
2195 
2196     Asm->OutStreamer.AddComment("DWARF Version");
2197     Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION);
2198 
2199     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2200     Asm->EmitSectionOffset(TheU->getLabelBegin(), TheU->getSectionSym());
2201 
2202     Asm->OutStreamer.AddComment("Compilation Unit Length");
2203     Asm->EmitLabelDifference(TheU->getLabelEnd(), TheU->getLabelBegin(), 4);
2204 
2205     // Emit the pubnames for this compilation unit.
2206     for (const auto &GI : Globals) {
2207       const char *Name = GI.getKeyData();
2208       const DIE *Entity = GI.second;
2209 
2210       Asm->OutStreamer.AddComment("DIE offset");
2211       Asm->EmitInt32(Entity->getOffset());
2212 
2213       if (GnuStyle) {
2214         dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity);
2215         Asm->OutStreamer.AddComment(
2216             Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
2217             dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
2218         Asm->EmitInt8(Desc.toBits());
2219       }
2220 
2221       Asm->OutStreamer.AddComment("External Name");
2222       Asm->OutStreamer.EmitBytes(StringRef(Name, GI.getKeyLength() + 1));
2223     }
2224 
2225     Asm->OutStreamer.AddComment("End Mark");
2226     Asm->EmitInt32(0);
2227     Asm->OutStreamer.EmitLabel(EndLabel);
2228   }
2229 }
2230 
2231 void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
2232   const MCSection *PSec =
2233       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
2234                : Asm->getObjFileLowering().getDwarfPubTypesSection();
2235 
2236   emitDebugPubSection(GnuStyle, PSec, "Types", &DwarfUnit::getGlobalTypes);
2237 }
2238 
2239 // Emit strings into a string section.
2240 void DwarfFile::emitStrings(const MCSection *StrSection,
2241                             const MCSection *OffsetSection = NULL,
2242                             const MCSymbol *StrSecSym = NULL) {
2243 
2244   if (StringPool.empty())
2245     return;
2246 
2247   // Start the dwarf str section.
2248   Asm->OutStreamer.SwitchSection(StrSection);
2249 
2250   // Get all of the string pool entries and put them in an array by their ID so
2251   // we can sort them.
2252   SmallVector<std::pair<unsigned, const StrPool::value_type *>, 64 > Entries;
2253 
2254   for (const auto &I : StringPool)
2255     Entries.push_back(std::make_pair(I.second.second, &I));
2256 
2257   array_pod_sort(Entries.begin(), Entries.end());
2258 
2259   for (const auto &Entry : Entries) {
2260     // Emit a label for reference from debug information entries.
2261     Asm->OutStreamer.EmitLabel(Entry.second->getValue().first);
2262 
2263     // Emit the string itself with a terminating null byte.
2264     Asm->OutStreamer.EmitBytes(StringRef(Entry.second->getKeyData(),
2265                                          Entry.second->getKeyLength() + 1));
2266   }
2267 
2268   // If we've got an offset section go ahead and emit that now as well.
2269   if (OffsetSection) {
2270     Asm->OutStreamer.SwitchSection(OffsetSection);
2271     unsigned offset = 0;
2272     unsigned size = 4; // FIXME: DWARF64 is 8.
2273     for (const auto &Entry : Entries) {
2274       Asm->OutStreamer.EmitIntValue(offset, size);
2275       offset += Entry.second->getKeyLength() + 1;
2276     }
2277   }
2278 }
2279 
2280 // Emit addresses into the section given.
2281 void DwarfFile::emitAddresses(const MCSection *AddrSection) {
2282 
2283   if (AddressPool.empty())
2284     return;
2285 
2286   // Start the dwarf addr section.
2287   Asm->OutStreamer.SwitchSection(AddrSection);
2288 
2289   // Order the address pool entries by ID
2290   SmallVector<const MCExpr *, 64> Entries(AddressPool.size());
2291 
2292   for (const auto &I : AddressPool)
2293     Entries[I.second.Number] =
2294         I.second.TLS
2295             ? Asm->getObjFileLowering().getDebugThreadLocalSymbol(I.first)
2296             : MCSymbolRefExpr::Create(I.first, Asm->OutContext);
2297 
2298   for (const MCExpr *Entry : Entries)
2299     Asm->OutStreamer.EmitValue(Entry, Asm->getDataLayout().getPointerSize());
2300 }
2301 
2302 // Emit visible names into a debug str section.
2303 void DwarfDebug::emitDebugStr() {
2304   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2305   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2306 }
2307 
2308 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer,
2309                                    const DebugLocEntry &Entry) {
2310   DIVariable DV(Entry.getVariable());
2311   if (Entry.isInt()) {
2312     DIBasicType BTy(resolve(DV.getType()));
2313     if (BTy.Verify() && (BTy.getEncoding() == dwarf::DW_ATE_signed ||
2314                          BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2315       Streamer.EmitInt8(dwarf::DW_OP_consts, "DW_OP_consts");
2316       Streamer.EmitSLEB128(Entry.getInt());
2317     } else {
2318       Streamer.EmitInt8(dwarf::DW_OP_constu, "DW_OP_constu");
2319       Streamer.EmitULEB128(Entry.getInt());
2320     }
2321   } else if (Entry.isLocation()) {
2322     MachineLocation Loc = Entry.getLoc();
2323     if (!DV.hasComplexAddress())
2324       // Regular entry.
2325       Asm->EmitDwarfRegOp(Streamer, Loc, DV.isIndirect());
2326     else {
2327       // Complex address entry.
2328       unsigned N = DV.getNumAddrElements();
2329       unsigned i = 0;
2330       if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2331         if (Loc.getOffset()) {
2332           i = 2;
2333           Asm->EmitDwarfRegOp(Streamer, Loc, DV.isIndirect());
2334           Streamer.EmitInt8(dwarf::DW_OP_deref, "DW_OP_deref");
2335           Streamer.EmitInt8(dwarf::DW_OP_plus_uconst, "DW_OP_plus_uconst");
2336           Streamer.EmitSLEB128(DV.getAddrElement(1));
2337         } else {
2338           // If first address element is OpPlus then emit
2339           // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2340           MachineLocation TLoc(Loc.getReg(), DV.getAddrElement(1));
2341           Asm->EmitDwarfRegOp(Streamer, TLoc, DV.isIndirect());
2342           i = 2;
2343         }
2344       } else {
2345         Asm->EmitDwarfRegOp(Streamer, Loc, DV.isIndirect());
2346       }
2347 
2348       // Emit remaining complex address elements.
2349       for (; i < N; ++i) {
2350         uint64_t Element = DV.getAddrElement(i);
2351         if (Element == DIBuilder::OpPlus) {
2352           Streamer.EmitInt8(dwarf::DW_OP_plus_uconst, "DW_OP_plus_uconst");
2353           Streamer.EmitULEB128(DV.getAddrElement(++i));
2354         } else if (Element == DIBuilder::OpDeref) {
2355           if (!Loc.isReg())
2356             Streamer.EmitInt8(dwarf::DW_OP_deref, "DW_OP_deref");
2357         } else
2358           llvm_unreachable("unknown Opcode found in complex address");
2359       }
2360     }
2361   }
2362   // else ... ignore constant fp. There is not any good way to
2363   // to represent them here in dwarf.
2364   // FIXME: ^
2365 }
2366 
2367 // Emit locations into the debug loc section.
2368 void DwarfDebug::emitDebugLoc() {
2369   if (DotDebugLocEntries.empty())
2370     return;
2371 
2372   for (SmallVectorImpl<DebugLocEntry>::iterator
2373            I = DotDebugLocEntries.begin(),
2374            E = DotDebugLocEntries.end();
2375        I != E; ++I) {
2376     DebugLocEntry &Entry = *I;
2377     if (I + 1 != DotDebugLocEntries.end())
2378       Entry.Merge(I + 1);
2379   }
2380 
2381   // Start the dwarf loc section.
2382   Asm->OutStreamer.SwitchSection(
2383       Asm->getObjFileLowering().getDwarfLocSection());
2384   unsigned char Size = Asm->getDataLayout().getPointerSize();
2385   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2386   unsigned index = 1;
2387   for (SmallVectorImpl<DebugLocEntry>::const_iterator
2388            I = DotDebugLocEntries.begin(),
2389            E = DotDebugLocEntries.end();
2390        I != E; ++I, ++index) {
2391     const DebugLocEntry &Entry = *I;
2392     if (Entry.isMerged())
2393       continue;
2394 
2395     if (Entry.isEmpty()) {
2396       Asm->OutStreamer.EmitIntValue(0, Size);
2397       Asm->OutStreamer.EmitIntValue(0, Size);
2398       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2399     } else {
2400       // Set up the range.
2401       Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size);
2402       Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size);
2403       Asm->OutStreamer.AddComment("Loc expr size");
2404       MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2405       MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2406       Asm->EmitLabelDifference(end, begin, 2);
2407       Asm->OutStreamer.EmitLabel(begin);
2408       // Emit the entry.
2409       APByteStreamer Streamer(*Asm);
2410       emitDebugLocEntry(Streamer, Entry);
2411       // Close the range.
2412       Asm->OutStreamer.EmitLabel(end);
2413     }
2414   }
2415 }
2416 
2417 struct ArangeSpan {
2418   const MCSymbol *Start, *End;
2419 };
2420 
2421 // Emit a debug aranges section, containing a CU lookup for any
2422 // address we can tie back to a CU.
2423 void DwarfDebug::emitDebugARanges() {
2424   // Start the dwarf aranges section.
2425   Asm->OutStreamer.SwitchSection(
2426       Asm->getObjFileLowering().getDwarfARangesSection());
2427 
2428   typedef DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan> > SpansType;
2429 
2430   SpansType Spans;
2431 
2432   // Build a list of sections used.
2433   std::vector<const MCSection *> Sections;
2434   for (const auto &it : SectionMap) {
2435     const MCSection *Section = it.first;
2436     Sections.push_back(Section);
2437   }
2438 
2439   // Sort the sections into order.
2440   // This is only done to ensure consistent output order across different runs.
2441   std::sort(Sections.begin(), Sections.end(), SectionSort);
2442 
2443   // Build a set of address spans, sorted by CU.
2444   for (const MCSection *Section : Sections) {
2445     SmallVector<SymbolCU, 8> &List = SectionMap[Section];
2446     if (List.size() < 2)
2447       continue;
2448 
2449     // Sort the symbols by offset within the section.
2450     std::sort(List.begin(), List.end(),
2451               [&](const SymbolCU &A, const SymbolCU &B) {
2452       unsigned IA = A.Sym ? Asm->OutStreamer.GetSymbolOrder(A.Sym) : 0;
2453       unsigned IB = B.Sym ? Asm->OutStreamer.GetSymbolOrder(B.Sym) : 0;
2454 
2455       // Symbols with no order assigned should be placed at the end.
2456       // (e.g. section end labels)
2457       if (IA == 0)
2458         return false;
2459       if (IB == 0)
2460         return true;
2461       return IA < IB;
2462     });
2463 
2464     // If we have no section (e.g. common), just write out
2465     // individual spans for each symbol.
2466     if (Section == NULL) {
2467       for (const SymbolCU &Cur : List) {
2468         ArangeSpan Span;
2469         Span.Start = Cur.Sym;
2470         Span.End = NULL;
2471         if (Cur.CU)
2472           Spans[Cur.CU].push_back(Span);
2473       }
2474     } else {
2475       // Build spans between each label.
2476       const MCSymbol *StartSym = List[0].Sym;
2477       for (size_t n = 1, e = List.size(); n < e; n++) {
2478         const SymbolCU &Prev = List[n - 1];
2479         const SymbolCU &Cur = List[n];
2480 
2481         // Try and build the longest span we can within the same CU.
2482         if (Cur.CU != Prev.CU) {
2483           ArangeSpan Span;
2484           Span.Start = StartSym;
2485           Span.End = Cur.Sym;
2486           Spans[Prev.CU].push_back(Span);
2487           StartSym = Cur.Sym;
2488         }
2489       }
2490     }
2491   }
2492 
2493   unsigned PtrSize = Asm->getDataLayout().getPointerSize();
2494 
2495   // Build a list of CUs used.
2496   std::vector<DwarfCompileUnit *> CUs;
2497   for (const auto &it : Spans) {
2498     DwarfCompileUnit *CU = it.first;
2499     CUs.push_back(CU);
2500   }
2501 
2502   // Sort the CU list (again, to ensure consistent output order).
2503   std::sort(CUs.begin(), CUs.end(), [](const DwarfUnit *A, const DwarfUnit *B) {
2504     return A->getUniqueID() < B->getUniqueID();
2505   });
2506 
2507   // Emit an arange table for each CU we used.
2508   for (DwarfCompileUnit *CU : CUs) {
2509     std::vector<ArangeSpan> &List = Spans[CU];
2510 
2511     // Emit size of content not including length itself.
2512     unsigned ContentSize =
2513         sizeof(int16_t) + // DWARF ARange version number
2514         sizeof(int32_t) + // Offset of CU in the .debug_info section
2515         sizeof(int8_t) +  // Pointer Size (in bytes)
2516         sizeof(int8_t);   // Segment Size (in bytes)
2517 
2518     unsigned TupleSize = PtrSize * 2;
2519 
2520     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
2521     unsigned Padding =
2522         OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize);
2523 
2524     ContentSize += Padding;
2525     ContentSize += (List.size() + 1) * TupleSize;
2526 
2527     // For each compile unit, write the list of spans it covers.
2528     Asm->OutStreamer.AddComment("Length of ARange Set");
2529     Asm->EmitInt32(ContentSize);
2530     Asm->OutStreamer.AddComment("DWARF Arange version number");
2531     Asm->EmitInt16(dwarf::DW_ARANGES_VERSION);
2532     Asm->OutStreamer.AddComment("Offset Into Debug Info Section");
2533     Asm->EmitSectionOffset(CU->getLocalLabelBegin(), CU->getLocalSectionSym());
2534     Asm->OutStreamer.AddComment("Address Size (in bytes)");
2535     Asm->EmitInt8(PtrSize);
2536     Asm->OutStreamer.AddComment("Segment Size (in bytes)");
2537     Asm->EmitInt8(0);
2538 
2539     Asm->OutStreamer.EmitFill(Padding, 0xff);
2540 
2541     for (const ArangeSpan &Span : List) {
2542       Asm->EmitLabelReference(Span.Start, PtrSize);
2543 
2544       // Calculate the size as being from the span start to it's end.
2545       if (Span.End) {
2546         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
2547       } else {
2548         // For symbols without an end marker (e.g. common), we
2549         // write a single arange entry containing just that one symbol.
2550         uint64_t Size = SymSize[Span.Start];
2551         if (Size == 0)
2552           Size = 1;
2553 
2554         Asm->OutStreamer.EmitIntValue(Size, PtrSize);
2555       }
2556     }
2557 
2558     Asm->OutStreamer.AddComment("ARange terminator");
2559     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2560     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2561   }
2562 }
2563 
2564 // Emit visible names into a debug ranges section.
2565 void DwarfDebug::emitDebugRanges() {
2566   // Start the dwarf ranges section.
2567   Asm->OutStreamer.SwitchSection(
2568       Asm->getObjFileLowering().getDwarfRangesSection());
2569 
2570   // Size for our labels.
2571   unsigned char Size = Asm->getDataLayout().getPointerSize();
2572 
2573   // Grab the specific ranges for the compile units in the module.
2574   for (const auto &I : CUMap) {
2575     DwarfCompileUnit *TheCU = I.second;
2576 
2577     // Emit a symbol so we can find the beginning of our ranges.
2578     Asm->OutStreamer.EmitLabel(TheCU->getLabelRange());
2579 
2580     // Iterate over the misc ranges for the compile units in the module.
2581     for (const RangeSpanList &List : TheCU->getRangeLists()) {
2582       // Emit our symbol so we can find the beginning of the range.
2583       Asm->OutStreamer.EmitLabel(List.getSym());
2584 
2585       for (const RangeSpan &Range : List.getRanges()) {
2586         const MCSymbol *Begin = Range.getStart();
2587         const MCSymbol *End = Range.getEnd();
2588         assert(Begin && "Range without a begin symbol?");
2589         assert(End && "Range without an end symbol?");
2590         Asm->OutStreamer.EmitSymbolValue(Begin, Size);
2591         Asm->OutStreamer.EmitSymbolValue(End, Size);
2592       }
2593 
2594       // And terminate the list with two 0 values.
2595       Asm->OutStreamer.EmitIntValue(0, Size);
2596       Asm->OutStreamer.EmitIntValue(0, Size);
2597     }
2598 
2599     // Now emit a range for the CU itself.
2600     if (useCURanges() && TheCU->getRanges().size()) {
2601       Asm->OutStreamer.EmitLabel(
2602           Asm->GetTempSymbol("cu_ranges", TheCU->getUniqueID()));
2603       for (const RangeSpan &Range : TheCU->getRanges()) {
2604         const MCSymbol *Begin = Range.getStart();
2605         const MCSymbol *End = Range.getEnd();
2606         assert(Begin && "Range without a begin symbol?");
2607         assert(End && "Range without an end symbol?");
2608         Asm->OutStreamer.EmitSymbolValue(Begin, Size);
2609         Asm->OutStreamer.EmitSymbolValue(End, Size);
2610       }
2611       // And terminate the list with two 0 values.
2612       Asm->OutStreamer.EmitIntValue(0, Size);
2613       Asm->OutStreamer.EmitIntValue(0, Size);
2614     }
2615   }
2616 }
2617 
2618 // DWARF5 Experimental Separate Dwarf emitters.
2619 
2620 void DwarfDebug::initSkeletonUnit(const DwarfUnit *U, DIE *Die,
2621                                   DwarfUnit *NewU) {
2622   NewU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2623                        U->getCUNode().getSplitDebugFilename());
2624 
2625   // Relocate to the beginning of the addr_base section, else 0 for the
2626   // beginning of the one for this compile unit.
2627   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2628     NewU->addSectionLabel(Die, dwarf::DW_AT_GNU_addr_base, DwarfAddrSectionSym);
2629   else
2630     NewU->addSectionOffset(Die, dwarf::DW_AT_GNU_addr_base, 0);
2631 
2632   if (!CompilationDir.empty())
2633     NewU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2634 
2635   addGnuPubAttributes(NewU, Die);
2636 
2637   SkeletonHolder.addUnit(NewU);
2638 }
2639 
2640 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2641 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2642 // DW_AT_ranges_base, DW_AT_addr_base.
2643 // TODO: Implement DW_AT_ranges_base.
2644 DwarfCompileUnit *DwarfDebug::constructSkeletonCU(const DwarfCompileUnit *CU) {
2645 
2646   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2647   DwarfCompileUnit *NewCU = new DwarfCompileUnit(
2648       CU->getUniqueID(), Die, CU->getCUNode(), Asm, this, &SkeletonHolder);
2649   NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
2650                      DwarfInfoSectionSym);
2651 
2652   NewCU->initStmtList(DwarfLineSectionSym);
2653 
2654   initSkeletonUnit(CU, Die, NewCU);
2655 
2656   return NewCU;
2657 }
2658 
2659 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_dwo_name,
2660 // DW_AT_addr_base.
2661 DwarfTypeUnit *DwarfDebug::constructSkeletonTU(DwarfTypeUnit *TU) {
2662   DwarfCompileUnit &CU = static_cast<DwarfCompileUnit &>(
2663       *SkeletonHolder.getUnits()[TU->getCU().getUniqueID()]);
2664 
2665   DIE *Die = new DIE(dwarf::DW_TAG_type_unit);
2666   DwarfTypeUnit *NewTU =
2667       new DwarfTypeUnit(TU->getUniqueID(), Die, CU, Asm, this, &SkeletonHolder);
2668   NewTU->setTypeSignature(TU->getTypeSignature());
2669   NewTU->setType(NULL);
2670   NewTU->initSection(
2671       Asm->getObjFileLowering().getDwarfTypesSection(TU->getTypeSignature()));
2672 
2673   initSkeletonUnit(TU, Die, NewTU);
2674   return NewTU;
2675 }
2676 
2677 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2678 // compile units that would normally be in debug_info.
2679 void DwarfDebug::emitDebugInfoDWO() {
2680   assert(useSplitDwarf() && "No split dwarf debug info?");
2681   InfoHolder.emitUnits(this,
2682                        Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2683                        DwarfAbbrevDWOSectionSym);
2684 }
2685 
2686 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2687 // abbreviations for the .debug_info.dwo section.
2688 void DwarfDebug::emitDebugAbbrevDWO() {
2689   assert(useSplitDwarf() && "No split dwarf?");
2690   InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
2691 }
2692 
2693 void DwarfDebug::emitDebugLineDWO() {
2694   assert(useSplitDwarf() && "No split dwarf?");
2695   Asm->OutStreamer.SwitchSection(
2696       Asm->getObjFileLowering().getDwarfLineDWOSection());
2697   SplitTypeUnitFileTable.Emit(Asm->OutStreamer);
2698 }
2699 
2700 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2701 // string section and is identical in format to traditional .debug_str
2702 // sections.
2703 void DwarfDebug::emitDebugStrDWO() {
2704   assert(useSplitDwarf() && "No split dwarf?");
2705   const MCSection *OffSec =
2706       Asm->getObjFileLowering().getDwarfStrOffDWOSection();
2707   const MCSymbol *StrSym = DwarfStrSectionSym;
2708   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
2709                          OffSec, StrSym);
2710 }
2711 
2712 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) {
2713   if (!useSplitDwarf())
2714     return nullptr;
2715   if (SingleCU)
2716     SplitTypeUnitFileTable.setCompilationDir(CU.getCUNode().getDirectory());
2717   return &SplitTypeUnitFileTable;
2718 }
2719 
2720 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
2721                                       StringRef Identifier, DIE *RefDie,
2722                                       DICompositeType CTy) {
2723   // Flag the type unit reference as a declaration so that if it contains
2724   // members (implicit special members, static data member definitions, member
2725   // declarations for definitions in this CU, etc) consumers don't get confused
2726   // and think this is a full definition.
2727   CU.addFlag(RefDie, dwarf::DW_AT_declaration);
2728 
2729   const DwarfTypeUnit *&TU = DwarfTypeUnits[CTy];
2730   if (TU) {
2731     CU.addDIETypeSignature(RefDie, *TU);
2732     return;
2733   }
2734 
2735   DIE *UnitDie = new DIE(dwarf::DW_TAG_type_unit);
2736   DwarfTypeUnit *NewTU =
2737       new DwarfTypeUnit(InfoHolder.getUnits().size(), UnitDie, CU, Asm, this,
2738                         &InfoHolder, getDwoLineTable(CU));
2739   TU = NewTU;
2740   InfoHolder.addUnit(NewTU);
2741 
2742   NewTU->addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
2743                  CU.getLanguage());
2744 
2745   MD5 Hash;
2746   Hash.update(Identifier);
2747   // ... take the least significant 8 bytes and return those. Our MD5
2748   // implementation always returns its results in little endian, swap bytes
2749   // appropriately.
2750   MD5::MD5Result Result;
2751   Hash.final(Result);
2752   uint64_t Signature = *reinterpret_cast<support::ulittle64_t *>(Result + 8);
2753   NewTU->setTypeSignature(Signature);
2754   if (useSplitDwarf())
2755     NewTU->setSkeleton(constructSkeletonTU(NewTU));
2756   else
2757     CU.applyStmtList(*UnitDie);
2758 
2759   NewTU->setType(NewTU->createTypeDIE(CTy));
2760 
2761   NewTU->initSection(
2762       useSplitDwarf()
2763           ? Asm->getObjFileLowering().getDwarfTypesDWOSection(Signature)
2764           : Asm->getObjFileLowering().getDwarfTypesSection(Signature));
2765 
2766   CU.addDIETypeSignature(RefDie, *NewTU);
2767 }
2768 
2769 void DwarfDebug::attachLowHighPC(DwarfCompileUnit *Unit, DIE *D,
2770                                  MCSymbol *Begin, MCSymbol *End) {
2771   Unit->addLabelAddress(D, dwarf::DW_AT_low_pc, Begin);
2772   if (DwarfVersion < 4)
2773     Unit->addLabelAddress(D, dwarf::DW_AT_high_pc, End);
2774   else
2775     Unit->addLabelDelta(D, dwarf::DW_AT_high_pc, End, Begin);
2776 }
2777