f4182d0b79b20975a55422556c6fc626bda8b89e
[oota-llvm.git] / lib / CodeGen / AsmPrinter / DwarfDebug.cpp
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 = DwarfDebugLocDWOSectionSym = 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 = new DIE(Module.getTag());
795   TheCU->insertDIE(Module, IMDie);
796   DIE *EntityDie;
797   DIDescriptor Entity = Module.getEntity();
798   if (Entity.isNameSpace())
799     EntityDie = TheCU->getOrCreateNameSpace(DINameSpace(Entity));
800   else if (Entity.isSubprogram())
801     EntityDie = TheCU->getOrCreateSubprogramDIE(DISubprogram(Entity));
802   else if (Entity.isType())
803     EntityDie = TheCU->getOrCreateTypeDIE(DIType(Entity));
804   else
805     EntityDie = TheCU->getDIE(Entity);
806   TheCU->addSourceLine(IMDie, Module.getLineNumber(),
807                        Module.getContext().getFilename(),
808                        Module.getContext().getDirectory());
809   TheCU->addDIEEntry(IMDie, dwarf::DW_AT_import, EntityDie);
810   StringRef Name = Module.getName();
811   if (!Name.empty())
812     TheCU->addString(IMDie, dwarf::DW_AT_name, Name);
813   Context->addChild(IMDie);
814 }
815
816 // Emit all Dwarf sections that should come prior to the content. Create
817 // global DIEs and emit initial debug info sections. This is invoked by
818 // the target AsmPrinter.
819 void DwarfDebug::beginModule() {
820   if (DisableDebugInfoPrinting)
821     return;
822
823   const Module *M = MMI->getModule();
824
825   // If module has named metadata anchors then use them, otherwise scan the
826   // module using debug info finder to collect debug info.
827   NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
828   if (!CU_Nodes)
829     return;
830   TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
831
832   // Emit initial sections so we can reference labels later.
833   emitSectionLabels();
834
835   SingleCU = CU_Nodes->getNumOperands() == 1;
836
837   for (MDNode *N : CU_Nodes->operands()) {
838     DICompileUnit CUNode(N);
839     DwarfCompileUnit *CU = constructDwarfCompileUnit(CUNode);
840     DIArray ImportedEntities = CUNode.getImportedEntities();
841     for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
842       ScopesWithImportedEntities.push_back(std::make_pair(
843           DIImportedEntity(ImportedEntities.getElement(i)).getContext(),
844           ImportedEntities.getElement(i)));
845     std::sort(ScopesWithImportedEntities.begin(),
846               ScopesWithImportedEntities.end(), less_first());
847     DIArray GVs = CUNode.getGlobalVariables();
848     for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
849       CU->createGlobalVariableDIE(DIGlobalVariable(GVs.getElement(i)));
850     DIArray SPs = CUNode.getSubprograms();
851     for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
852       constructSubprogramDIE(CU, SPs.getElement(i));
853     DIArray EnumTypes = CUNode.getEnumTypes();
854     for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
855       CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
856     DIArray RetainedTypes = CUNode.getRetainedTypes();
857     for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i) {
858       DIType Ty(RetainedTypes.getElement(i));
859       // The retained types array by design contains pointers to
860       // MDNodes rather than DIRefs. Unique them here.
861       DIType UniqueTy(resolve(Ty.getRef()));
862       CU->getOrCreateTypeDIE(UniqueTy);
863     }
864     // Emit imported_modules last so that the relevant context is already
865     // available.
866     for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
867       constructImportedEntityDIE(CU, ImportedEntities.getElement(i));
868   }
869
870   // Tell MMI that we have debug info.
871   MMI->setDebugInfoAvailability(true);
872
873   // Prime section data.
874   SectionMap[Asm->getObjFileLowering().getTextSection()];
875 }
876
877 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
878 void DwarfDebug::computeInlinedDIEs() {
879   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
880   for (DIE *ISP : InlinedSubprogramDIEs)
881     FirstCU->addUInt(ISP, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined);
882
883   for (const auto &AI : AbstractSPDies) {
884     DIE *ISP = AI.second;
885     if (InlinedSubprogramDIEs.count(ISP))
886       continue;
887     FirstCU->addUInt(ISP, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined);
888   }
889 }
890
891 // Collect info for variables that were optimized out.
892 void DwarfDebug::collectDeadVariables() {
893   const Module *M = MMI->getModule();
894
895   if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
896     for (MDNode *N : CU_Nodes->operands()) {
897       DICompileUnit TheCU(N);
898       DIArray Subprograms = TheCU.getSubprograms();
899       for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
900         DISubprogram SP(Subprograms.getElement(i));
901         if (ProcessedSPNodes.count(SP) != 0)
902           continue;
903         if (!SP.isSubprogram())
904           continue;
905         if (!SP.isDefinition())
906           continue;
907         DIArray Variables = SP.getVariables();
908         if (Variables.getNumElements() == 0)
909           continue;
910
911         // Construct subprogram DIE and add variables DIEs.
912         DwarfCompileUnit *SPCU =
913             static_cast<DwarfCompileUnit *>(CUMap.lookup(TheCU));
914         assert(SPCU && "Unable to find Compile Unit!");
915         // FIXME: See the comment in constructSubprogramDIE about duplicate
916         // subprogram DIEs.
917         constructSubprogramDIE(SPCU, SP);
918         DIE *SPDIE = SPCU->getDIE(SP);
919         for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
920           DIVariable DV(Variables.getElement(vi));
921           if (!DV.isVariable())
922             continue;
923           DbgVariable NewVar(DV, NULL, this);
924           if (DIE *VariableDIE = SPCU->constructVariableDIE(NewVar, false))
925             SPDIE->addChild(VariableDIE);
926         }
927       }
928     }
929   }
930 }
931
932 void DwarfDebug::finalizeModuleInfo() {
933   // Collect info for variables that were optimized out.
934   collectDeadVariables();
935
936   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
937   computeInlinedDIEs();
938
939   // Handle anything that needs to be done on a per-unit basis after
940   // all other generation.
941   for (DwarfUnit *TheU : getUnits()) {
942     // Emit DW_AT_containing_type attribute to connect types with their
943     // vtable holding type.
944     TheU->constructContainingTypeDIEs();
945
946     // Add CU specific attributes if we need to add any.
947     if (TheU->getUnitDie()->getTag() == dwarf::DW_TAG_compile_unit) {
948       // If we're splitting the dwarf out now that we've got the entire
949       // CU then add the dwo id to it.
950       DwarfCompileUnit *SkCU =
951           static_cast<DwarfCompileUnit *>(TheU->getSkeleton());
952       if (useSplitDwarf()) {
953         // Emit a unique identifier for this CU.
954         uint64_t ID = DIEHash(Asm).computeCUSignature(*TheU->getUnitDie());
955         TheU->addUInt(TheU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
956                       dwarf::DW_FORM_data8, ID);
957         SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
958                       dwarf::DW_FORM_data8, ID);
959
960         // We don't keep track of which addresses are used in which CU so this
961         // is a bit pessimistic under LTO.
962         if (!InfoHolder.getAddrPool()->empty())
963           addSectionLabel(Asm, SkCU, SkCU->getUnitDie(),
964                           dwarf::DW_AT_GNU_addr_base, DwarfAddrSectionSym,
965                           DwarfAddrSectionSym);
966         if (!TheU->getRangeLists().empty())
967           addSectionLabel(Asm, SkCU, SkCU->getUnitDie(),
968                           dwarf::DW_AT_GNU_ranges_base,
969                           DwarfDebugRangeSectionSym, DwarfDebugRangeSectionSym);
970       }
971
972       // If we have code split among multiple sections or non-contiguous
973       // ranges of code then emit a DW_AT_ranges attribute on the unit that will
974       // remain in the .o file, otherwise add a DW_AT_low_pc.
975       // FIXME: We should use ranges allow reordering of code ala
976       // .subsections_via_symbols in mach-o. This would mean turning on
977       // ranges for all subprogram DIEs for mach-o.
978       DwarfCompileUnit *U = SkCU ? SkCU : static_cast<DwarfCompileUnit *>(TheU);
979       unsigned NumRanges = TheU->getRanges().size();
980       if (NumRanges) {
981         if (NumRanges > 1) {
982           addSectionLabel(Asm, U, U->getUnitDie(), dwarf::DW_AT_ranges,
983                           Asm->GetTempSymbol("cu_ranges", U->getUniqueID()),
984                           DwarfDebugRangeSectionSym);
985
986           // A DW_AT_low_pc attribute may also be specified in combination with
987           // DW_AT_ranges to specify the default base address for use in
988           // location lists (see Section 2.6.2) and range lists (see Section
989           // 2.17.3).
990           U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
991                      0);
992         } else {
993           RangeSpan &Range = TheU->getRanges().back();
994           U->addLocalLabelAddress(U->getUnitDie(), dwarf::DW_AT_low_pc,
995                                   Range.getStart());
996           U->addLabelDelta(U->getUnitDie(), dwarf::DW_AT_high_pc,
997                            Range.getEnd(), Range.getStart());
998         }
999       }
1000     }
1001   }
1002
1003   // Compute DIE offsets and sizes.
1004   InfoHolder.computeSizeAndOffsets();
1005   if (useSplitDwarf())
1006     SkeletonHolder.computeSizeAndOffsets();
1007 }
1008
1009 void DwarfDebug::endSections() {
1010   // Filter labels by section.
1011   for (const SymbolCU &SCU : ArangeLabels) {
1012     if (SCU.Sym->isInSection()) {
1013       // Make a note of this symbol and it's section.
1014       const MCSection *Section = &SCU.Sym->getSection();
1015       if (!Section->getKind().isMetadata())
1016         SectionMap[Section].push_back(SCU);
1017     } else {
1018       // Some symbols (e.g. common/bss on mach-o) can have no section but still
1019       // appear in the output. This sucks as we rely on sections to build
1020       // arange spans. We can do it without, but it's icky.
1021       SectionMap[NULL].push_back(SCU);
1022     }
1023   }
1024
1025   // Build a list of sections used.
1026   std::vector<const MCSection *> Sections;
1027   for (const auto &it : SectionMap) {
1028     const MCSection *Section = it.first;
1029     Sections.push_back(Section);
1030   }
1031
1032   // Sort the sections into order.
1033   // This is only done to ensure consistent output order across different runs.
1034   std::sort(Sections.begin(), Sections.end(), SectionSort);
1035
1036   // Add terminating symbols for each section.
1037   for (unsigned ID = 0, E = Sections.size(); ID != E; ID++) {
1038     const MCSection *Section = Sections[ID];
1039     MCSymbol *Sym = NULL;
1040
1041     if (Section) {
1042       // We can't call MCSection::getLabelEndName, as it's only safe to do so
1043       // if we know the section name up-front. For user-created sections, the
1044       // resulting label may not be valid to use as a label. (section names can
1045       // use a greater set of characters on some systems)
1046       Sym = Asm->GetTempSymbol("debug_end", ID);
1047       Asm->OutStreamer.SwitchSection(Section);
1048       Asm->OutStreamer.EmitLabel(Sym);
1049     }
1050
1051     // Insert a final terminator.
1052     SectionMap[Section].push_back(SymbolCU(NULL, Sym));
1053   }
1054 }
1055
1056 // Emit all Dwarf sections that should come after the content.
1057 void DwarfDebug::endModule() {
1058   assert(CurFn == 0);
1059   assert(CurMI == 0);
1060
1061   if (!FirstCU)
1062     return;
1063
1064   // End any existing sections.
1065   // TODO: Does this need to happen?
1066   endSections();
1067
1068   // Finalize the debug info for the module.
1069   finalizeModuleInfo();
1070
1071   emitDebugStr();
1072
1073   // Emit all the DIEs into a debug info section.
1074   emitDebugInfo();
1075
1076   // Corresponding abbreviations into a abbrev section.
1077   emitAbbreviations();
1078
1079   // Emit info into a debug loc section.
1080   emitDebugLoc();
1081
1082   // Emit info into a debug aranges section.
1083   if (GenerateARangeSection)
1084     emitDebugARanges();
1085
1086   // Emit info into a debug ranges section.
1087   emitDebugRanges();
1088
1089   if (useSplitDwarf()) {
1090     emitDebugStrDWO();
1091     emitDebugInfoDWO();
1092     emitDebugAbbrevDWO();
1093     emitDebugLineDWO();
1094     // Emit DWO addresses.
1095     InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1096   }
1097
1098   // Emit info into the dwarf accelerator table sections.
1099   if (useDwarfAccelTables()) {
1100     emitAccelNames();
1101     emitAccelObjC();
1102     emitAccelNamespaces();
1103     emitAccelTypes();
1104   }
1105
1106   // Emit the pubnames and pubtypes sections if requested.
1107   if (HasDwarfPubSections) {
1108     emitDebugPubNames(GenerateGnuPubSections);
1109     emitDebugPubTypes(GenerateGnuPubSections);
1110   }
1111
1112   // clean up.
1113   SPMap.clear();
1114
1115   // Reset these for the next Module if we have one.
1116   FirstCU = NULL;
1117 }
1118
1119 // Find abstract variable, if any, associated with Var.
1120 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1121                                               DebugLoc ScopeLoc) {
1122   LLVMContext &Ctx = DV->getContext();
1123   // More then one inlined variable corresponds to one abstract variable.
1124   DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1125   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1126   if (AbsDbgVariable)
1127     return AbsDbgVariable;
1128
1129   LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1130   if (!Scope)
1131     return NULL;
1132
1133   AbsDbgVariable = new DbgVariable(Var, NULL, this);
1134   addScopeVariable(Scope, AbsDbgVariable);
1135   AbstractVariables[Var] = AbsDbgVariable;
1136   return AbsDbgVariable;
1137 }
1138
1139 // If Var is a current function argument then add it to CurrentFnArguments list.
1140 bool DwarfDebug::addCurrentFnArgument(DbgVariable *Var, LexicalScope *Scope) {
1141   if (!LScopes.isCurrentFunctionScope(Scope))
1142     return false;
1143   DIVariable DV = Var->getVariable();
1144   if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1145     return false;
1146   unsigned ArgNo = DV.getArgNumber();
1147   if (ArgNo == 0)
1148     return false;
1149
1150   size_t Size = CurrentFnArguments.size();
1151   if (Size == 0)
1152     CurrentFnArguments.resize(CurFn->getFunction()->arg_size());
1153   // llvm::Function argument size is not good indicator of how many
1154   // arguments does the function have at source level.
1155   if (ArgNo > Size)
1156     CurrentFnArguments.resize(ArgNo * 2);
1157   CurrentFnArguments[ArgNo - 1] = Var;
1158   return true;
1159 }
1160
1161 // Collect variable information from side table maintained by MMI.
1162 void DwarfDebug::collectVariableInfoFromMMITable(
1163     SmallPtrSet<const MDNode *, 16> &Processed) {
1164   for (const auto &VI : MMI->getVariableDbgInfo()) {
1165     if (!VI.Var)
1166       continue;
1167     Processed.insert(VI.Var);
1168     DIVariable DV(VI.Var);
1169     LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc);
1170
1171     // If variable scope is not found then skip this variable.
1172     if (Scope == 0)
1173       continue;
1174
1175     DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VI.Loc);
1176     DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable, this);
1177     RegVar->setFrameIndex(VI.Slot);
1178     if (!addCurrentFnArgument(RegVar, Scope))
1179       addScopeVariable(Scope, RegVar);
1180     if (AbsDbgVariable)
1181       AbsDbgVariable->setFrameIndex(VI.Slot);
1182   }
1183 }
1184
1185 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
1186 // defined reg.
1187 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1188   assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1189   return MI->getNumOperands() == 3 && MI->getOperand(0).isReg() &&
1190          MI->getOperand(0).getReg() &&
1191          (MI->getOperand(1).isImm() ||
1192           (MI->getOperand(1).isReg() && MI->getOperand(1).getReg() == 0U));
1193 }
1194
1195 // Get .debug_loc entry for the instruction range starting at MI.
1196 static DebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1197                                       const MCSymbol *FLabel,
1198                                       const MCSymbol *SLabel,
1199                                       const MachineInstr *MI,
1200                                       DwarfCompileUnit *Unit) {
1201   const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1202
1203   assert(MI->getNumOperands() == 3);
1204   if (MI->getOperand(0).isReg()) {
1205     MachineLocation MLoc;
1206     // If the second operand is an immediate, this is a
1207     // register-indirect address.
1208     if (!MI->getOperand(1).isImm())
1209       MLoc.set(MI->getOperand(0).getReg());
1210     else
1211       MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1212     return DebugLocEntry(FLabel, SLabel, MLoc, Var, Unit);
1213   }
1214   if (MI->getOperand(0).isImm())
1215     return DebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm(), Unit);
1216   if (MI->getOperand(0).isFPImm())
1217     return DebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm(), Unit);
1218   if (MI->getOperand(0).isCImm())
1219     return DebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm(), 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     SmallVector<DebugLocEntry, 4> DebugLoc;
1275     for (SmallVectorImpl<const MachineInstr *>::const_iterator
1276              HI = History.begin(),
1277              HE = History.end();
1278          HI != HE; ++HI) {
1279       const MachineInstr *Begin = *HI;
1280       assert(Begin->isDebugValue() && "Invalid History entry");
1281
1282       // Check if DBG_VALUE is truncating a range.
1283       if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg() &&
1284           !Begin->getOperand(0).getReg())
1285         continue;
1286
1287       // Compute the range for a register location.
1288       const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1289       const MCSymbol *SLabel = 0;
1290
1291       if (HI + 1 == HE)
1292         // If Begin is the last instruction in History then its value is valid
1293         // until the end of the function.
1294         SLabel = FunctionEndSym;
1295       else {
1296         const MachineInstr *End = HI[1];
1297         DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1298                      << "\t" << *Begin << "\t" << *End << "\n");
1299         if (End->isDebugValue())
1300           SLabel = getLabelBeforeInsn(End);
1301         else {
1302           // End is a normal instruction clobbering the range.
1303           SLabel = getLabelAfterInsn(End);
1304           assert(SLabel && "Forgot label after clobber instruction");
1305           ++HI;
1306         }
1307       }
1308
1309       // The value is valid until the next DBG_VALUE or clobber.
1310       LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1311       DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1312       DebugLocEntry Loc = getDebugLocEntry(Asm, FLabel, SLabel, Begin, TheCU);
1313       if (DebugLoc.empty() || !DebugLoc.back().Merge(Loc))
1314         DebugLoc.push_back(std::move(Loc));
1315     }
1316     DotDebugLocEntries.push_back(std::move(DebugLoc));
1317   }
1318
1319   // Collect info for variables that were optimized out.
1320   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1321   DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1322   for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1323     DIVariable DV(Variables.getElement(i));
1324     if (!DV || !DV.isVariable() || !Processed.insert(DV))
1325       continue;
1326     if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1327       addScopeVariable(Scope, new DbgVariable(DV, NULL, this));
1328   }
1329 }
1330
1331 // Return Label preceding the instruction.
1332 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1333   MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1334   assert(Label && "Didn't insert label before instruction");
1335   return Label;
1336 }
1337
1338 // Return Label immediately following the instruction.
1339 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1340   return LabelsAfterInsn.lookup(MI);
1341 }
1342
1343 // Process beginning of an instruction.
1344 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1345   assert(CurMI == 0);
1346   CurMI = MI;
1347   // Check if source location changes, but ignore DBG_VALUE locations.
1348   if (!MI->isDebugValue()) {
1349     DebugLoc DL = MI->getDebugLoc();
1350     if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1351       unsigned Flags = 0;
1352       PrevInstLoc = DL;
1353       if (DL == PrologEndLoc) {
1354         Flags |= DWARF2_FLAG_PROLOGUE_END;
1355         PrologEndLoc = DebugLoc();
1356       }
1357       if (PrologEndLoc.isUnknown())
1358         Flags |= DWARF2_FLAG_IS_STMT;
1359
1360       if (!DL.isUnknown()) {
1361         const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1362         recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1363       } else
1364         recordSourceLine(0, 0, 0, 0);
1365     }
1366   }
1367
1368   // Insert labels where requested.
1369   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
1370       LabelsBeforeInsn.find(MI);
1371
1372   // No label needed.
1373   if (I == LabelsBeforeInsn.end())
1374     return;
1375
1376   // Label already assigned.
1377   if (I->second)
1378     return;
1379
1380   if (!PrevLabel) {
1381     PrevLabel = MMI->getContext().CreateTempSymbol();
1382     Asm->OutStreamer.EmitLabel(PrevLabel);
1383   }
1384   I->second = PrevLabel;
1385 }
1386
1387 // Process end of an instruction.
1388 void DwarfDebug::endInstruction() {
1389   assert(CurMI != 0);
1390   // Don't create a new label after DBG_VALUE instructions.
1391   // They don't generate code.
1392   if (!CurMI->isDebugValue())
1393     PrevLabel = 0;
1394
1395   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
1396       LabelsAfterInsn.find(CurMI);
1397   CurMI = 0;
1398
1399   // No label needed.
1400   if (I == LabelsAfterInsn.end())
1401     return;
1402
1403   // Label already assigned.
1404   if (I->second)
1405     return;
1406
1407   // We need a label after this instruction.
1408   if (!PrevLabel) {
1409     PrevLabel = MMI->getContext().CreateTempSymbol();
1410     Asm->OutStreamer.EmitLabel(PrevLabel);
1411   }
1412   I->second = PrevLabel;
1413 }
1414
1415 // Each LexicalScope has first instruction and last instruction to mark
1416 // beginning and end of a scope respectively. Create an inverse map that list
1417 // scopes starts (and ends) with an instruction. One instruction may start (or
1418 // end) multiple scopes. Ignore scopes that are not reachable.
1419 void DwarfDebug::identifyScopeMarkers() {
1420   SmallVector<LexicalScope *, 4> WorkList;
1421   WorkList.push_back(LScopes.getCurrentFunctionScope());
1422   while (!WorkList.empty()) {
1423     LexicalScope *S = WorkList.pop_back_val();
1424
1425     const SmallVectorImpl<LexicalScope *> &Children = S->getChildren();
1426     if (!Children.empty())
1427       WorkList.append(Children.begin(), Children.end());
1428
1429     if (S->isAbstractScope())
1430       continue;
1431
1432     for (const InsnRange &R : S->getRanges()) {
1433       assert(R.first && "InsnRange does not have first instruction!");
1434       assert(R.second && "InsnRange does not have second instruction!");
1435       requestLabelBeforeInsn(R.first);
1436       requestLabelAfterInsn(R.second);
1437     }
1438   }
1439 }
1440
1441 // Gather pre-function debug information.  Assumes being called immediately
1442 // after the function entry point has been emitted.
1443 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1444   CurFn = MF;
1445
1446   // If there's no debug info for the function we're not going to do anything.
1447   if (!MMI->hasDebugInfo())
1448     return;
1449
1450   // Grab the lexical scopes for the function, if we don't have any of those
1451   // then we're not going to be able to do anything.
1452   LScopes.initialize(*MF);
1453   if (LScopes.empty())
1454     return;
1455
1456   assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1457
1458   // Make sure that each lexical scope will have a begin/end label.
1459   identifyScopeMarkers();
1460
1461   // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
1462   // belongs to so that we add to the correct per-cu line table in the
1463   // non-asm case.
1464   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1465   DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1466   assert(TheCU && "Unable to find compile unit!");
1467   if (Asm->OutStreamer.hasRawTextSupport())
1468     // Use a single line table if we are generating assembly.
1469     Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1470   else
1471     Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1472
1473   // Emit a label for the function so that we have a beginning address.
1474   FunctionBeginSym = Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber());
1475   // Assumes in correct section after the entry point.
1476   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1477
1478   const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1479   // LiveUserVar - Map physreg numbers to the MDNode they contain.
1480   std::vector<const MDNode *> LiveUserVar(TRI->getNumRegs());
1481
1482   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end(); I != E;
1483        ++I) {
1484     bool AtBlockEntry = true;
1485     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1486          II != IE; ++II) {
1487       const MachineInstr *MI = II;
1488
1489       if (MI->isDebugValue()) {
1490         assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1491
1492         // Keep track of user variables.
1493         const MDNode *Var =
1494             MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1495
1496         // Variable is in a register, we need to check for clobbers.
1497         if (isDbgValueInDefinedReg(MI))
1498           LiveUserVar[MI->getOperand(0).getReg()] = Var;
1499
1500         // Check the history of this variable.
1501         SmallVectorImpl<const MachineInstr *> &History = DbgValues[Var];
1502         if (History.empty()) {
1503           UserVariables.push_back(Var);
1504           // The first mention of a function argument gets the FunctionBeginSym
1505           // label, so arguments are visible when breaking at function entry.
1506           DIVariable DV(Var);
1507           if (DV.isVariable() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1508               getDISubprogram(DV.getContext()).describes(MF->getFunction()))
1509             LabelsBeforeInsn[MI] = FunctionBeginSym;
1510         } else {
1511           // We have seen this variable before. Try to coalesce DBG_VALUEs.
1512           const MachineInstr *Prev = History.back();
1513           if (Prev->isDebugValue()) {
1514             // Coalesce identical entries at the end of History.
1515             if (History.size() >= 2 &&
1516                 Prev->isIdenticalTo(History[History.size() - 2])) {
1517               DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1518                            << "\t" << *Prev << "\t"
1519                            << *History[History.size() - 2] << "\n");
1520               History.pop_back();
1521             }
1522
1523             // Terminate old register assignments that don't reach MI;
1524             MachineFunction::const_iterator PrevMBB = Prev->getParent();
1525             if (PrevMBB != I && (!AtBlockEntry || std::next(PrevMBB) != I) &&
1526                 isDbgValueInDefinedReg(Prev)) {
1527               // Previous register assignment needs to terminate at the end of
1528               // its basic block.
1529               MachineBasicBlock::const_iterator LastMI =
1530                   PrevMBB->getLastNonDebugInstr();
1531               if (LastMI == PrevMBB->end()) {
1532                 // Drop DBG_VALUE for empty range.
1533                 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1534                              << "\t" << *Prev << "\n");
1535                 History.pop_back();
1536               } else if (std::next(PrevMBB) != PrevMBB->getParent()->end())
1537                 // Terminate after LastMI.
1538                 History.push_back(LastMI);
1539             }
1540           }
1541         }
1542         History.push_back(MI);
1543       } else {
1544         // Not a DBG_VALUE instruction.
1545         if (!MI->isPosition())
1546           AtBlockEntry = false;
1547
1548         // First known non-DBG_VALUE and non-frame setup location marks
1549         // the beginning of the function body.
1550         if (!MI->getFlag(MachineInstr::FrameSetup) &&
1551             (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1552           PrologEndLoc = MI->getDebugLoc();
1553
1554         // Check if the instruction clobbers any registers with debug vars.
1555         for (const MachineOperand &MO : MI->operands()) {
1556           if (!MO.isReg() || !MO.isDef() || !MO.getReg())
1557             continue;
1558           for (MCRegAliasIterator AI(MO.getReg(), TRI, true); AI.isValid();
1559                ++AI) {
1560             unsigned Reg = *AI;
1561             const MDNode *Var = LiveUserVar[Reg];
1562             if (!Var)
1563               continue;
1564             // Reg is now clobbered.
1565             LiveUserVar[Reg] = 0;
1566
1567             // Was MD last defined by a DBG_VALUE referring to Reg?
1568             DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1569             if (HistI == DbgValues.end())
1570               continue;
1571             SmallVectorImpl<const MachineInstr *> &History = HistI->second;
1572             if (History.empty())
1573               continue;
1574             const MachineInstr *Prev = History.back();
1575             // Sanity-check: Register assignments are terminated at the end of
1576             // their block.
1577             if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1578               continue;
1579             // Is the variable still in Reg?
1580             if (!isDbgValueInDefinedReg(Prev) ||
1581                 Prev->getOperand(0).getReg() != Reg)
1582               continue;
1583             // Var is clobbered. Make sure the next instruction gets a label.
1584             History.push_back(MI);
1585           }
1586         }
1587       }
1588     }
1589   }
1590
1591   for (auto &I : DbgValues) {
1592     SmallVectorImpl<const MachineInstr *> &History = I.second;
1593     if (History.empty())
1594       continue;
1595
1596     // Make sure the final register assignments are terminated.
1597     const MachineInstr *Prev = History.back();
1598     if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1599       const MachineBasicBlock *PrevMBB = Prev->getParent();
1600       MachineBasicBlock::const_iterator LastMI =
1601           PrevMBB->getLastNonDebugInstr();
1602       if (LastMI == PrevMBB->end())
1603         // Drop DBG_VALUE for empty range.
1604         History.pop_back();
1605       else if (PrevMBB != &PrevMBB->getParent()->back()) {
1606         // Terminate after LastMI.
1607         History.push_back(LastMI);
1608       }
1609     }
1610     // Request labels for the full history.
1611     for (const MachineInstr *MI : History) {
1612       if (MI->isDebugValue())
1613         requestLabelBeforeInsn(MI);
1614       else
1615         requestLabelAfterInsn(MI);
1616     }
1617   }
1618
1619   PrevInstLoc = DebugLoc();
1620   PrevLabel = FunctionBeginSym;
1621
1622   // Record beginning of function.
1623   if (!PrologEndLoc.isUnknown()) {
1624     DebugLoc FnStartDL =
1625         PrologEndLoc.getFnDebugLoc(MF->getFunction()->getContext());
1626     recordSourceLine(
1627         FnStartDL.getLine(), FnStartDL.getCol(),
1628         FnStartDL.getScope(MF->getFunction()->getContext()),
1629         // We'd like to list the prologue as "not statements" but GDB behaves
1630         // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1631         DWARF2_FLAG_IS_STMT);
1632   }
1633 }
1634
1635 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1636   SmallVectorImpl<DbgVariable *> &Vars = ScopeVariables[LS];
1637   DIVariable DV = Var->getVariable();
1638   // Variables with positive arg numbers are parameters.
1639   if (unsigned ArgNum = DV.getArgNumber()) {
1640     // Keep all parameters in order at the start of the variable list to ensure
1641     // function types are correct (no out-of-order parameters)
1642     //
1643     // This could be improved by only doing it for optimized builds (unoptimized
1644     // builds have the right order to begin with), searching from the back (this
1645     // would catch the unoptimized case quickly), or doing a binary search
1646     // rather than linear search.
1647     SmallVectorImpl<DbgVariable *>::iterator I = Vars.begin();
1648     while (I != Vars.end()) {
1649       unsigned CurNum = (*I)->getVariable().getArgNumber();
1650       // A local (non-parameter) variable has been found, insert immediately
1651       // before it.
1652       if (CurNum == 0)
1653         break;
1654       // A later indexed parameter has been found, insert immediately before it.
1655       if (CurNum > ArgNum)
1656         break;
1657       ++I;
1658     }
1659     Vars.insert(I, Var);
1660     return;
1661   }
1662
1663   Vars.push_back(Var);
1664 }
1665
1666 // Gather and emit post-function debug information.
1667 void DwarfDebug::endFunction(const MachineFunction *MF) {
1668   // Every beginFunction(MF) call should be followed by an endFunction(MF) call,
1669   // though the beginFunction may not be called at all.
1670   // We should handle both cases.
1671   if (CurFn == 0)
1672     CurFn = MF;
1673   else
1674     assert(CurFn == MF);
1675   assert(CurFn != 0);
1676
1677   if (!MMI->hasDebugInfo() || LScopes.empty()) {
1678     // If we don't have a lexical scope for this function then there will
1679     // be a hole in the range information. Keep note of this by setting the
1680     // previously used section to nullptr.
1681     PrevSection = nullptr;
1682     PrevCU = nullptr;
1683     CurFn = 0;
1684     return;
1685   }
1686
1687   // Define end label for subprogram.
1688   FunctionEndSym = Asm->GetTempSymbol("func_end", Asm->getFunctionNumber());
1689   // Assumes in correct section after the entry point.
1690   Asm->OutStreamer.EmitLabel(FunctionEndSym);
1691
1692   // Set DwarfDwarfCompileUnitID in MCContext to default value.
1693   Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1694
1695   SmallPtrSet<const MDNode *, 16> ProcessedVars;
1696   collectVariableInfo(ProcessedVars);
1697
1698   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1699   DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1700   assert(TheCU && "Unable to find compile unit!");
1701
1702   // Construct abstract scopes.
1703   for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
1704     DISubprogram SP(AScope->getScopeNode());
1705     if (SP.isSubprogram()) {
1706       // Collect info for variables that were optimized out.
1707       DIArray Variables = SP.getVariables();
1708       for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1709         DIVariable DV(Variables.getElement(i));
1710         if (!DV || !DV.isVariable() || !ProcessedVars.insert(DV))
1711           continue;
1712         // Check that DbgVariable for DV wasn't created earlier, when
1713         // findAbstractVariable() was called for inlined instance of DV.
1714         LLVMContext &Ctx = DV->getContext();
1715         DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1716         if (AbstractVariables.lookup(CleanDV))
1717           continue;
1718         if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1719           addScopeVariable(Scope, new DbgVariable(DV, NULL, this));
1720       }
1721     }
1722     if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1723       constructScopeDIE(TheCU, AScope);
1724   }
1725
1726   DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1727   if (!CurFn->getTarget().Options.DisableFramePointerElim(*CurFn))
1728     TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1729
1730   // Add the range of this function to the list of ranges for the CU.
1731   RangeSpan Span(FunctionBeginSym, FunctionEndSym);
1732   TheCU->addRange(std::move(Span));
1733   PrevSection = Asm->getCurrentSection();
1734   PrevCU = TheCU;
1735
1736   // Clear debug info
1737   for (auto &I : ScopeVariables)
1738     DeleteContainerPointers(I.second);
1739   ScopeVariables.clear();
1740   DeleteContainerPointers(CurrentFnArguments);
1741   UserVariables.clear();
1742   DbgValues.clear();
1743   AbstractVariables.clear();
1744   LabelsBeforeInsn.clear();
1745   LabelsAfterInsn.clear();
1746   PrevLabel = NULL;
1747   CurFn = 0;
1748 }
1749
1750 // Register a source line with debug info. Returns the  unique label that was
1751 // emitted and which provides correspondence to the source line list.
1752 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1753                                   unsigned Flags) {
1754   StringRef Fn;
1755   StringRef Dir;
1756   unsigned Src = 1;
1757   unsigned Discriminator = 0;
1758   if (S) {
1759     DIDescriptor Scope(S);
1760
1761     if (Scope.isCompileUnit()) {
1762       DICompileUnit CU(S);
1763       Fn = CU.getFilename();
1764       Dir = CU.getDirectory();
1765     } else if (Scope.isFile()) {
1766       DIFile F(S);
1767       Fn = F.getFilename();
1768       Dir = F.getDirectory();
1769     } else if (Scope.isSubprogram()) {
1770       DISubprogram SP(S);
1771       Fn = SP.getFilename();
1772       Dir = SP.getDirectory();
1773     } else if (Scope.isLexicalBlockFile()) {
1774       DILexicalBlockFile DBF(S);
1775       Fn = DBF.getFilename();
1776       Dir = DBF.getDirectory();
1777     } else if (Scope.isLexicalBlock()) {
1778       DILexicalBlock DB(S);
1779       Fn = DB.getFilename();
1780       Dir = DB.getDirectory();
1781       Discriminator = DB.getDiscriminator();
1782     } else
1783       llvm_unreachable("Unexpected scope info");
1784
1785     unsigned CUID = Asm->OutStreamer.getContext().getDwarfCompileUnitID();
1786     Src = static_cast<DwarfCompileUnit *>(InfoHolder.getUnits()[CUID])
1787               ->getOrCreateSourceID(Fn, Dir);
1788   }
1789   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0,
1790                                          Discriminator, Fn);
1791 }
1792
1793 //===----------------------------------------------------------------------===//
1794 // Emit Methods
1795 //===----------------------------------------------------------------------===//
1796
1797 // Compute the size and offset of a DIE. The offset is relative to start of the
1798 // CU. It returns the offset after laying out the DIE.
1799 unsigned DwarfFile::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1800   // Record the abbreviation.
1801   assignAbbrevNumber(Die->getAbbrev());
1802
1803   // Get the abbreviation for this DIE.
1804   const DIEAbbrev &Abbrev = Die->getAbbrev();
1805
1806   // Set DIE offset
1807   Die->setOffset(Offset);
1808
1809   // Start the size with the size of abbreviation code.
1810   Offset += getULEB128Size(Die->getAbbrevNumber());
1811
1812   const SmallVectorImpl<DIEValue *> &Values = Die->getValues();
1813   const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
1814
1815   // Size the DIE attribute values.
1816   for (unsigned i = 0, N = Values.size(); i < N; ++i)
1817     // Size attribute value.
1818     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1819
1820   // Get the children.
1821   const std::vector<DIE *> &Children = Die->getChildren();
1822
1823   // Size the DIE children if any.
1824   if (!Children.empty()) {
1825     assert(Abbrev.hasChildren() && "Children flag not set");
1826
1827     for (DIE *Child : Children)
1828       Offset = computeSizeAndOffset(Child, Offset);
1829
1830     // End of children marker.
1831     Offset += sizeof(int8_t);
1832   }
1833
1834   Die->setSize(Offset - Die->getOffset());
1835   return Offset;
1836 }
1837
1838 // Compute the size and offset for each DIE.
1839 void DwarfFile::computeSizeAndOffsets() {
1840   // Offset from the first CU in the debug info section is 0 initially.
1841   unsigned SecOffset = 0;
1842
1843   // Iterate over each compile unit and set the size and offsets for each
1844   // DIE within each compile unit. All offsets are CU relative.
1845   for (DwarfUnit *TheU : CUs) {
1846     TheU->setDebugInfoOffset(SecOffset);
1847
1848     // CU-relative offset is reset to 0 here.
1849     unsigned Offset = sizeof(int32_t) +      // Length of Unit Info
1850                       TheU->getHeaderSize(); // Unit-specific headers
1851
1852     // EndOffset here is CU-relative, after laying out
1853     // all of the CU DIE.
1854     unsigned EndOffset = computeSizeAndOffset(TheU->getUnitDie(), Offset);
1855     SecOffset += EndOffset;
1856   }
1857 }
1858
1859 // Emit initial Dwarf sections with a label at the start of each one.
1860 void DwarfDebug::emitSectionLabels() {
1861   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1862
1863   // Dwarf sections base addresses.
1864   DwarfInfoSectionSym =
1865       emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1866   if (useSplitDwarf())
1867     DwarfInfoDWOSectionSym =
1868         emitSectionSym(Asm, TLOF.getDwarfInfoDWOSection(), "section_info_dwo");
1869   DwarfAbbrevSectionSym =
1870       emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1871   if (useSplitDwarf())
1872     DwarfAbbrevDWOSectionSym = emitSectionSym(
1873         Asm, TLOF.getDwarfAbbrevDWOSection(), "section_abbrev_dwo");
1874   if (GenerateARangeSection)
1875     emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1876
1877   DwarfLineSectionSym =
1878       emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1879   if (GenerateGnuPubSections) {
1880     DwarfGnuPubNamesSectionSym =
1881         emitSectionSym(Asm, TLOF.getDwarfGnuPubNamesSection());
1882     DwarfGnuPubTypesSectionSym =
1883         emitSectionSym(Asm, TLOF.getDwarfGnuPubTypesSection());
1884   } else if (HasDwarfPubSections) {
1885     emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1886     emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1887   }
1888
1889   DwarfStrSectionSym =
1890       emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
1891   if (useSplitDwarf()) {
1892     DwarfStrDWOSectionSym =
1893         emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
1894     DwarfAddrSectionSym =
1895         emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
1896     DwarfDebugLocDWOSectionSym =
1897         emitSectionSym(Asm, TLOF.getDwarfLocDWOSection(), "skel_loc");
1898   } else
1899     DwarfDebugLocSectionSym =
1900         emitSectionSym(Asm, TLOF.getDwarfLocSection(), "section_debug_loc");
1901   DwarfDebugRangeSectionSym =
1902       emitSectionSym(Asm, TLOF.getDwarfRangesSection(), "debug_range");
1903 }
1904
1905 // Recursively emits a debug information entry.
1906 void DwarfDebug::emitDIE(DIE *Die) {
1907   // Get the abbreviation for this DIE.
1908   const DIEAbbrev &Abbrev = Die->getAbbrev();
1909
1910   // Emit the code (index) for the abbreviation.
1911   if (Asm->isVerbose())
1912     Asm->OutStreamer.AddComment("Abbrev [" + Twine(Abbrev.getNumber()) +
1913                                 "] 0x" + Twine::utohexstr(Die->getOffset()) +
1914                                 ":0x" + Twine::utohexstr(Die->getSize()) + " " +
1915                                 dwarf::TagString(Abbrev.getTag()));
1916   Asm->EmitULEB128(Abbrev.getNumber());
1917
1918   const SmallVectorImpl<DIEValue *> &Values = Die->getValues();
1919   const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
1920
1921   // Emit the DIE attribute values.
1922   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1923     dwarf::Attribute Attr = AbbrevData[i].getAttribute();
1924     dwarf::Form Form = AbbrevData[i].getForm();
1925     assert(Form && "Too many attributes for DIE (check abbreviation)");
1926
1927     if (Asm->isVerbose()) {
1928       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1929       if (Attr == dwarf::DW_AT_accessibility)
1930         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(
1931             cast<DIEInteger>(Values[i])->getValue()));
1932     }
1933
1934     // Emit an attribute using the defined form.
1935     Values[i]->EmitValue(Asm, Form);
1936   }
1937
1938   // Emit the DIE children if any.
1939   if (Abbrev.hasChildren()) {
1940     const std::vector<DIE *> &Children = Die->getChildren();
1941
1942     for (DIE *Child : Children)
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 // Emit locations into the debug loc section.
2390 void DwarfDebug::emitDebugLoc() {
2391   // Start the dwarf loc section.
2392   Asm->OutStreamer.SwitchSection(
2393       useSplitDwarf() ? Asm->getObjFileLowering().getDwarfLocDWOSection()
2394                       : Asm->getObjFileLowering().getDwarfLocSection());
2395   unsigned char Size = Asm->getDataLayout().getPointerSize();
2396   unsigned index = 0;
2397   for (const auto &DebugLoc : DotDebugLocEntries) {
2398     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2399     for (const auto &Entry : DebugLoc) {
2400       // Set up the range. This range is relative to the entry point of the
2401       // compile unit. This is a hard coded 0 for low_pc when we're emitting
2402       // ranges, or the DW_AT_low_pc on the compile unit otherwise.
2403       const DwarfCompileUnit *CU = Entry.getCU();
2404       if (useSplitDwarf()) {
2405         // Just always use start_length for now - at least that's one address
2406         // rather than two. We could get fancier and try to, say, reuse an
2407         // address we know we've emitted elsewhere (the start of the function?
2408         // The start of the CU or CU subrange that encloses this range?)
2409         Asm->EmitInt8(dwarf::DW_LLE_start_length_entry);
2410         unsigned idx = InfoHolder.getAddrPoolIndex(Entry.getBeginSym());
2411         Asm->EmitULEB128(idx);
2412         Asm->EmitLabelDifference(Entry.getEndSym(), Entry.getBeginSym(), 4);
2413       } else if (CU->getRanges().size() == 1) {
2414         // Grab the begin symbol from the first range as our base.
2415         const MCSymbol *Base = CU->getRanges()[0].getStart();
2416         Asm->EmitLabelDifference(Entry.getBeginSym(), Base, Size);
2417         Asm->EmitLabelDifference(Entry.getEndSym(), Base, Size);
2418       } else {
2419         Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size);
2420         Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size);
2421       }
2422       Asm->OutStreamer.AddComment("Loc expr size");
2423       MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2424       MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2425       Asm->EmitLabelDifference(end, begin, 2);
2426       Asm->OutStreamer.EmitLabel(begin);
2427       // Emit the entry.
2428       APByteStreamer Streamer(*Asm);
2429       emitDebugLocEntry(Streamer, Entry);
2430       // Close the range.
2431       Asm->OutStreamer.EmitLabel(end);
2432     }
2433     if (useSplitDwarf())
2434       Asm->EmitInt8(dwarf::DW_LLE_end_of_list_entry);
2435     else {
2436       Asm->OutStreamer.EmitIntValue(0, Size);
2437       Asm->OutStreamer.EmitIntValue(0, Size);
2438     }
2439     ++index;
2440   }
2441 }
2442
2443 struct ArangeSpan {
2444   const MCSymbol *Start, *End;
2445 };
2446
2447 // Emit a debug aranges section, containing a CU lookup for any
2448 // address we can tie back to a CU.
2449 void DwarfDebug::emitDebugARanges() {
2450   // Start the dwarf aranges section.
2451   Asm->OutStreamer.SwitchSection(
2452       Asm->getObjFileLowering().getDwarfARangesSection());
2453
2454   typedef DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan> > SpansType;
2455
2456   SpansType Spans;
2457
2458   // Build a list of sections used.
2459   std::vector<const MCSection *> Sections;
2460   for (const auto &it : SectionMap) {
2461     const MCSection *Section = it.first;
2462     Sections.push_back(Section);
2463   }
2464
2465   // Sort the sections into order.
2466   // This is only done to ensure consistent output order across different runs.
2467   std::sort(Sections.begin(), Sections.end(), SectionSort);
2468
2469   // Build a set of address spans, sorted by CU.
2470   for (const MCSection *Section : Sections) {
2471     SmallVector<SymbolCU, 8> &List = SectionMap[Section];
2472     if (List.size() < 2)
2473       continue;
2474
2475     // Sort the symbols by offset within the section.
2476     std::sort(List.begin(), List.end(),
2477               [&](const SymbolCU &A, const SymbolCU &B) {
2478       unsigned IA = A.Sym ? Asm->OutStreamer.GetSymbolOrder(A.Sym) : 0;
2479       unsigned IB = B.Sym ? Asm->OutStreamer.GetSymbolOrder(B.Sym) : 0;
2480
2481       // Symbols with no order assigned should be placed at the end.
2482       // (e.g. section end labels)
2483       if (IA == 0)
2484         return false;
2485       if (IB == 0)
2486         return true;
2487       return IA < IB;
2488     });
2489
2490     // If we have no section (e.g. common), just write out
2491     // individual spans for each symbol.
2492     if (Section == NULL) {
2493       for (const SymbolCU &Cur : List) {
2494         ArangeSpan Span;
2495         Span.Start = Cur.Sym;
2496         Span.End = NULL;
2497         if (Cur.CU)
2498           Spans[Cur.CU].push_back(Span);
2499       }
2500     } else {
2501       // Build spans between each label.
2502       const MCSymbol *StartSym = List[0].Sym;
2503       for (size_t n = 1, e = List.size(); n < e; n++) {
2504         const SymbolCU &Prev = List[n - 1];
2505         const SymbolCU &Cur = List[n];
2506
2507         // Try and build the longest span we can within the same CU.
2508         if (Cur.CU != Prev.CU) {
2509           ArangeSpan Span;
2510           Span.Start = StartSym;
2511           Span.End = Cur.Sym;
2512           Spans[Prev.CU].push_back(Span);
2513           StartSym = Cur.Sym;
2514         }
2515       }
2516     }
2517   }
2518
2519   unsigned PtrSize = Asm->getDataLayout().getPointerSize();
2520
2521   // Build a list of CUs used.
2522   std::vector<DwarfCompileUnit *> CUs;
2523   for (const auto &it : Spans) {
2524     DwarfCompileUnit *CU = it.first;
2525     CUs.push_back(CU);
2526   }
2527
2528   // Sort the CU list (again, to ensure consistent output order).
2529   std::sort(CUs.begin(), CUs.end(), [](const DwarfUnit *A, const DwarfUnit *B) {
2530     return A->getUniqueID() < B->getUniqueID();
2531   });
2532
2533   // Emit an arange table for each CU we used.
2534   for (DwarfCompileUnit *CU : CUs) {
2535     std::vector<ArangeSpan> &List = Spans[CU];
2536
2537     // Emit size of content not including length itself.
2538     unsigned ContentSize =
2539         sizeof(int16_t) + // DWARF ARange version number
2540         sizeof(int32_t) + // Offset of CU in the .debug_info section
2541         sizeof(int8_t) +  // Pointer Size (in bytes)
2542         sizeof(int8_t);   // Segment Size (in bytes)
2543
2544     unsigned TupleSize = PtrSize * 2;
2545
2546     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
2547     unsigned Padding =
2548         OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize);
2549
2550     ContentSize += Padding;
2551     ContentSize += (List.size() + 1) * TupleSize;
2552
2553     // For each compile unit, write the list of spans it covers.
2554     Asm->OutStreamer.AddComment("Length of ARange Set");
2555     Asm->EmitInt32(ContentSize);
2556     Asm->OutStreamer.AddComment("DWARF Arange version number");
2557     Asm->EmitInt16(dwarf::DW_ARANGES_VERSION);
2558     Asm->OutStreamer.AddComment("Offset Into Debug Info Section");
2559     Asm->EmitSectionOffset(CU->getLocalLabelBegin(), CU->getLocalSectionSym());
2560     Asm->OutStreamer.AddComment("Address Size (in bytes)");
2561     Asm->EmitInt8(PtrSize);
2562     Asm->OutStreamer.AddComment("Segment Size (in bytes)");
2563     Asm->EmitInt8(0);
2564
2565     Asm->OutStreamer.EmitFill(Padding, 0xff);
2566
2567     for (const ArangeSpan &Span : List) {
2568       Asm->EmitLabelReference(Span.Start, PtrSize);
2569
2570       // Calculate the size as being from the span start to it's end.
2571       if (Span.End) {
2572         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
2573       } else {
2574         // For symbols without an end marker (e.g. common), we
2575         // write a single arange entry containing just that one symbol.
2576         uint64_t Size = SymSize[Span.Start];
2577         if (Size == 0)
2578           Size = 1;
2579
2580         Asm->OutStreamer.EmitIntValue(Size, PtrSize);
2581       }
2582     }
2583
2584     Asm->OutStreamer.AddComment("ARange terminator");
2585     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2586     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2587   }
2588 }
2589
2590 // Emit visible names into a debug ranges section.
2591 void DwarfDebug::emitDebugRanges() {
2592   // Start the dwarf ranges section.
2593   Asm->OutStreamer.SwitchSection(
2594       Asm->getObjFileLowering().getDwarfRangesSection());
2595
2596   // Size for our labels.
2597   unsigned char Size = Asm->getDataLayout().getPointerSize();
2598
2599   // Grab the specific ranges for the compile units in the module.
2600   for (const auto &I : CUMap) {
2601     DwarfCompileUnit *TheCU = I.second;
2602
2603     // Emit a symbol so we can find the beginning of our ranges.
2604     Asm->OutStreamer.EmitLabel(TheCU->getLabelRange());
2605
2606     // Iterate over the misc ranges for the compile units in the module.
2607     for (const RangeSpanList &List : TheCU->getRangeLists()) {
2608       // Emit our symbol so we can find the beginning of the range.
2609       Asm->OutStreamer.EmitLabel(List.getSym());
2610
2611       for (const RangeSpan &Range : List.getRanges()) {
2612         const MCSymbol *Begin = Range.getStart();
2613         const MCSymbol *End = Range.getEnd();
2614         assert(Begin && "Range without a begin symbol?");
2615         assert(End && "Range without an end symbol?");
2616         Asm->OutStreamer.EmitSymbolValue(Begin, Size);
2617         Asm->OutStreamer.EmitSymbolValue(End, Size);
2618       }
2619
2620       // And terminate the list with two 0 values.
2621       Asm->OutStreamer.EmitIntValue(0, Size);
2622       Asm->OutStreamer.EmitIntValue(0, Size);
2623     }
2624
2625     // Now emit a range for the CU itself.
2626     if (TheCU->getRanges().size() > 1) {
2627       Asm->OutStreamer.EmitLabel(
2628           Asm->GetTempSymbol("cu_ranges", TheCU->getUniqueID()));
2629       for (const RangeSpan &Range : TheCU->getRanges()) {
2630         const MCSymbol *Begin = Range.getStart();
2631         const MCSymbol *End = Range.getEnd();
2632         assert(Begin && "Range without a begin symbol?");
2633         assert(End && "Range without an end symbol?");
2634         Asm->OutStreamer.EmitSymbolValue(Begin, Size);
2635         Asm->OutStreamer.EmitSymbolValue(End, Size);
2636       }
2637       // And terminate the list with two 0 values.
2638       Asm->OutStreamer.EmitIntValue(0, Size);
2639       Asm->OutStreamer.EmitIntValue(0, Size);
2640     }
2641   }
2642 }
2643
2644 // DWARF5 Experimental Separate Dwarf emitters.
2645
2646 void DwarfDebug::initSkeletonUnit(const DwarfUnit *U, DIE *Die,
2647                                   DwarfUnit *NewU) {
2648   NewU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2649                        U->getCUNode().getSplitDebugFilename());
2650
2651   if (!CompilationDir.empty())
2652     NewU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2653
2654   addGnuPubAttributes(NewU, Die);
2655
2656   SkeletonHolder.addUnit(NewU);
2657 }
2658
2659 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2660 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2661 // DW_AT_addr_base, DW_AT_ranges_base.
2662 DwarfCompileUnit *DwarfDebug::constructSkeletonCU(const DwarfCompileUnit *CU) {
2663
2664   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2665   DwarfCompileUnit *NewCU = new DwarfCompileUnit(
2666       CU->getUniqueID(), Die, CU->getCUNode(), Asm, this, &SkeletonHolder);
2667   NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
2668                      DwarfInfoSectionSym);
2669
2670   NewCU->initStmtList(DwarfLineSectionSym);
2671
2672   initSkeletonUnit(CU, Die, NewCU);
2673
2674   return NewCU;
2675 }
2676
2677 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_dwo_name,
2678 // DW_AT_addr_base.
2679 DwarfTypeUnit *DwarfDebug::constructSkeletonTU(DwarfTypeUnit *TU) {
2680   DwarfCompileUnit &CU = static_cast<DwarfCompileUnit &>(
2681       *SkeletonHolder.getUnits()[TU->getCU().getUniqueID()]);
2682
2683   DIE *Die = new DIE(dwarf::DW_TAG_type_unit);
2684   DwarfTypeUnit *NewTU =
2685       new DwarfTypeUnit(TU->getUniqueID(), Die, CU, Asm, this, &SkeletonHolder);
2686   NewTU->setTypeSignature(TU->getTypeSignature());
2687   NewTU->setType(NULL);
2688   NewTU->initSection(
2689       Asm->getObjFileLowering().getDwarfTypesSection(TU->getTypeSignature()));
2690
2691   initSkeletonUnit(TU, Die, NewTU);
2692   return NewTU;
2693 }
2694
2695 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2696 // compile units that would normally be in debug_info.
2697 void DwarfDebug::emitDebugInfoDWO() {
2698   assert(useSplitDwarf() && "No split dwarf debug info?");
2699   InfoHolder.emitUnits(this, nullptr);
2700 }
2701
2702 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2703 // abbreviations for the .debug_info.dwo section.
2704 void DwarfDebug::emitDebugAbbrevDWO() {
2705   assert(useSplitDwarf() && "No split dwarf?");
2706   InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
2707 }
2708
2709 void DwarfDebug::emitDebugLineDWO() {
2710   assert(useSplitDwarf() && "No split dwarf?");
2711   Asm->OutStreamer.SwitchSection(
2712       Asm->getObjFileLowering().getDwarfLineDWOSection());
2713   SplitTypeUnitFileTable.Emit(Asm->OutStreamer);
2714 }
2715
2716 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2717 // string section and is identical in format to traditional .debug_str
2718 // sections.
2719 void DwarfDebug::emitDebugStrDWO() {
2720   assert(useSplitDwarf() && "No split dwarf?");
2721   const MCSection *OffSec =
2722       Asm->getObjFileLowering().getDwarfStrOffDWOSection();
2723   const MCSymbol *StrSym = DwarfStrSectionSym;
2724   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
2725                          OffSec, StrSym);
2726 }
2727
2728 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) {
2729   if (!useSplitDwarf())
2730     return nullptr;
2731   if (SingleCU)
2732     SplitTypeUnitFileTable.setCompilationDir(CU.getCUNode().getDirectory());
2733   return &SplitTypeUnitFileTable;
2734 }
2735
2736 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
2737                                       StringRef Identifier, DIE *RefDie,
2738                                       DICompositeType CTy) {
2739   // Flag the type unit reference as a declaration so that if it contains
2740   // members (implicit special members, static data member definitions, member
2741   // declarations for definitions in this CU, etc) consumers don't get confused
2742   // and think this is a full definition.
2743   CU.addFlag(RefDie, dwarf::DW_AT_declaration);
2744
2745   const DwarfTypeUnit *&TU = DwarfTypeUnits[CTy];
2746   if (TU) {
2747     CU.addDIETypeSignature(RefDie, *TU);
2748     return;
2749   }
2750
2751   DIE *UnitDie = new DIE(dwarf::DW_TAG_type_unit);
2752   DwarfTypeUnit *NewTU =
2753       new DwarfTypeUnit(InfoHolder.getUnits().size(), UnitDie, CU, Asm, this,
2754                         &InfoHolder, getDwoLineTable(CU));
2755   TU = NewTU;
2756   InfoHolder.addUnit(NewTU);
2757
2758   NewTU->addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
2759                  CU.getLanguage());
2760
2761   MD5 Hash;
2762   Hash.update(Identifier);
2763   // ... take the least significant 8 bytes and return those. Our MD5
2764   // implementation always returns its results in little endian, swap bytes
2765   // appropriately.
2766   MD5::MD5Result Result;
2767   Hash.final(Result);
2768   uint64_t Signature = *reinterpret_cast<support::ulittle64_t *>(Result + 8);
2769   NewTU->setTypeSignature(Signature);
2770   if (useSplitDwarf())
2771     NewTU->setSkeleton(constructSkeletonTU(NewTU));
2772   else
2773     CU.applyStmtList(*UnitDie);
2774
2775   NewTU->setType(NewTU->createTypeDIE(CTy));
2776
2777   NewTU->initSection(
2778       useSplitDwarf()
2779           ? Asm->getObjFileLowering().getDwarfTypesDWOSection(Signature)
2780           : Asm->getObjFileLowering().getDwarfTypesSection(Signature));
2781
2782   CU.addDIETypeSignature(RefDie, *NewTU);
2783 }
2784
2785 void DwarfDebug::attachLowHighPC(DwarfCompileUnit *Unit, DIE *D,
2786                                  MCSymbol *Begin, MCSymbol *End) {
2787   Unit->addLabelAddress(D, dwarf::DW_AT_low_pc, Begin);
2788   if (DwarfVersion < 4)
2789     Unit->addLabelAddress(D, dwarf::DW_AT_high_pc, End);
2790   else
2791     Unit->addLabelDelta(D, dwarf::DW_AT_high_pc, End, Begin);
2792 }