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