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