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