DebugInfo: Remove DwarfDebug::CurrentFnArguments since we have to handle argument...
[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 #include "DwarfDebug.h"
15
16 #include "ByteStreamer.h"
17 #include "DwarfCompileUnit.h"
18 #include "DIE.h"
19 #include "DIEHash.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/Endian.h"
42 #include "llvm/Support/ErrorHandling.h"
43 #include "llvm/Support/FormattedStream.h"
44 #include "llvm/Support/LEB128.h"
45 #include "llvm/Support/MD5.h"
46 #include "llvm/Support/Path.h"
47 #include "llvm/Support/Timer.h"
48 #include "llvm/Target/TargetFrameLowering.h"
49 #include "llvm/Target/TargetLoweringObjectFile.h"
50 #include "llvm/Target/TargetMachine.h"
51 #include "llvm/Target/TargetOptions.h"
52 #include "llvm/Target/TargetRegisterInfo.h"
53 #include "llvm/Target/TargetSubtargetInfo.h"
54 using namespace llvm;
55
56 #define DEBUG_TYPE "dwarfdebug"
57
58 static cl::opt<bool>
59 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden,
60                          cl::desc("Disable debug info printing"));
61
62 static cl::opt<bool> UnknownLocations(
63     "use-unknown-locations", cl::Hidden,
64     cl::desc("Make an absence of debug location information explicit."),
65     cl::init(false));
66
67 static cl::opt<bool>
68 GenerateGnuPubSections("generate-gnu-dwarf-pub-sections", cl::Hidden,
69                        cl::desc("Generate GNU-style pubnames and pubtypes"),
70                        cl::init(false));
71
72 static cl::opt<bool> GenerateARangeSection("generate-arange-section",
73                                            cl::Hidden,
74                                            cl::desc("Generate dwarf aranges"),
75                                            cl::init(false));
76
77 namespace {
78 enum DefaultOnOff { Default, Enable, Disable };
79 }
80
81 static cl::opt<DefaultOnOff>
82 DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
83                  cl::desc("Output prototype dwarf accelerator tables."),
84                  cl::values(clEnumVal(Default, "Default for platform"),
85                             clEnumVal(Enable, "Enabled"),
86                             clEnumVal(Disable, "Disabled"), clEnumValEnd),
87                  cl::init(Default));
88
89 static cl::opt<DefaultOnOff>
90 SplitDwarf("split-dwarf", cl::Hidden,
91            cl::desc("Output DWARF5 split debug info."),
92            cl::values(clEnumVal(Default, "Default for platform"),
93                       clEnumVal(Enable, "Enabled"),
94                       clEnumVal(Disable, "Disabled"), clEnumValEnd),
95            cl::init(Default));
96
97 static cl::opt<DefaultOnOff>
98 DwarfPubSections("generate-dwarf-pub-sections", cl::Hidden,
99                  cl::desc("Generate DWARF pubnames and pubtypes sections"),
100                  cl::values(clEnumVal(Default, "Default for platform"),
101                             clEnumVal(Enable, "Enabled"),
102                             clEnumVal(Disable, "Disabled"), clEnumValEnd),
103                  cl::init(Default));
104
105 static const char *const DWARFGroupName = "DWARF Emission";
106 static const char *const DbgTimerName = "DWARF Debug Writer";
107
108 //===----------------------------------------------------------------------===//
109
110 /// resolve - Look in the DwarfDebug map for the MDNode that
111 /// corresponds to the reference.
112 template <typename T> T DbgVariable::resolve(DIRef<T> Ref) const {
113   return DD->resolve(Ref);
114 }
115
116 bool DbgVariable::isBlockByrefVariable() const {
117   assert(Var.isVariable() && "Invalid complex DbgVariable!");
118   return Var.isBlockByrefVariable(DD->getTypeIdentifierMap());
119 }
120
121 DIType DbgVariable::getType() const {
122   DIType Ty = Var.getType().resolve(DD->getTypeIdentifierMap());
123   // FIXME: isBlockByrefVariable should be reformulated in terms of complex
124   // addresses instead.
125   if (Var.isBlockByrefVariable(DD->getTypeIdentifierMap())) {
126     /* Byref variables, in Blocks, are declared by the programmer as
127        "SomeType VarName;", but the compiler creates a
128        __Block_byref_x_VarName struct, and gives the variable VarName
129        either the struct, or a pointer to the struct, as its type.  This
130        is necessary for various behind-the-scenes things the compiler
131        needs to do with by-reference variables in blocks.
132
133        However, as far as the original *programmer* is concerned, the
134        variable should still have type 'SomeType', as originally declared.
135
136        The following function dives into the __Block_byref_x_VarName
137        struct to find the original type of the variable.  This will be
138        passed back to the code generating the type for the Debug
139        Information Entry for the variable 'VarName'.  'VarName' will then
140        have the original type 'SomeType' in its debug information.
141
142        The original type 'SomeType' will be the type of the field named
143        'VarName' inside the __Block_byref_x_VarName struct.
144
145        NOTE: In order for this to not completely fail on the debugger
146        side, the Debug Information Entry for the variable VarName needs to
147        have a DW_AT_location that tells the debugger how to unwind through
148        the pointers and __Block_byref_x_VarName struct to find the actual
149        value of the variable.  The function addBlockByrefType does this.  */
150     DIType subType = Ty;
151     uint16_t tag = Ty.getTag();
152
153     if (tag == dwarf::DW_TAG_pointer_type)
154       subType = resolve(DIDerivedType(Ty).getTypeDerivedFrom());
155
156     DIArray Elements = DICompositeType(subType).getElements();
157     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
158       DIDerivedType DT(Elements.getElement(i));
159       if (getName() == DT.getName())
160         return (resolve(DT.getTypeDerivedFrom()));
161     }
162   }
163   return Ty;
164 }
165
166 static LLVM_CONSTEXPR DwarfAccelTable::Atom TypeAtoms[] = {
167     DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4),
168     DwarfAccelTable::Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2),
169     DwarfAccelTable::Atom(dwarf::DW_ATOM_type_flags, dwarf::DW_FORM_data1)};
170
171 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
172     : Asm(A), MMI(Asm->MMI), FirstCU(nullptr), PrevLabel(nullptr),
173       GlobalRangeCount(0),
174       InfoHolder(A, *this, "info_string", DIEValueAllocator),
175       UsedNonDefaultText(false),
176       SkeletonHolder(A, *this, "skel_string", DIEValueAllocator),
177       IsDarwin(Triple(A->getTargetTriple()).isOSDarwin()),
178       AccelNames(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
179                                        dwarf::DW_FORM_data4)),
180       AccelObjC(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
181                                       dwarf::DW_FORM_data4)),
182       AccelNamespace(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
183                                            dwarf::DW_FORM_data4)),
184       AccelTypes(TypeAtoms) {
185
186   DwarfInfoSectionSym = DwarfAbbrevSectionSym = DwarfStrSectionSym = nullptr;
187   DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = nullptr;
188   DwarfLineSectionSym = nullptr;
189   DwarfAddrSectionSym = nullptr;
190   DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = nullptr;
191   FunctionBeginSym = FunctionEndSym = nullptr;
192   CurFn = nullptr;
193   CurMI = nullptr;
194
195   // Turn on accelerator tables for Darwin by default, pubnames by
196   // default for non-Darwin, and handle split dwarf.
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   unsigned DwarfVersionNumber = Asm->TM.Options.MCOptions.DwarfVersion;
213   DwarfVersion = DwarfVersionNumber ? DwarfVersionNumber
214                                     : MMI->getModule()->getDwarfVersion();
215
216   Asm->OutStreamer.getContext().setDwarfVersion(DwarfVersion);
217
218   {
219     NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
220     beginModule();
221   }
222 }
223
224 // Define out of line so we don't have to include DwarfUnit.h in DwarfDebug.h.
225 DwarfDebug::~DwarfDebug() { }
226
227 // Switch to the specified MCSection and emit an assembler
228 // temporary label to it if SymbolStem is specified.
229 static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section,
230                                 const char *SymbolStem = nullptr) {
231   Asm->OutStreamer.SwitchSection(Section);
232   if (!SymbolStem)
233     return nullptr;
234
235   MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
236   Asm->OutStreamer.EmitLabel(TmpSym);
237   return TmpSym;
238 }
239
240 static bool isObjCClass(StringRef Name) {
241   return Name.startswith("+") || Name.startswith("-");
242 }
243
244 static bool hasObjCCategory(StringRef Name) {
245   if (!isObjCClass(Name))
246     return false;
247
248   return Name.find(") ") != StringRef::npos;
249 }
250
251 static void getObjCClassCategory(StringRef In, StringRef &Class,
252                                  StringRef &Category) {
253   if (!hasObjCCategory(In)) {
254     Class = In.slice(In.find('[') + 1, In.find(' '));
255     Category = "";
256     return;
257   }
258
259   Class = In.slice(In.find('[') + 1, In.find('('));
260   Category = In.slice(In.find('[') + 1, In.find(' '));
261   return;
262 }
263
264 static StringRef getObjCMethodName(StringRef In) {
265   return In.slice(In.find(' ') + 1, In.find(']'));
266 }
267
268 // Helper for sorting sections into a stable output order.
269 static bool SectionSort(const MCSection *A, const MCSection *B) {
270   std::string LA = (A ? A->getLabelBeginName() : "");
271   std::string LB = (B ? B->getLabelBeginName() : "");
272   return LA < LB;
273 }
274
275 // Add the various names to the Dwarf accelerator table names.
276 // TODO: Determine whether or not we should add names for programs
277 // that do not have a DW_AT_name or DW_AT_linkage_name field - this
278 // is only slightly different than the lookup of non-standard ObjC names.
279 void DwarfDebug::addSubprogramNames(DISubprogram SP, DIE &Die) {
280   if (!SP.isDefinition())
281     return;
282   addAccelName(SP.getName(), Die);
283
284   // If the linkage name is different than the name, go ahead and output
285   // that as well into the name table.
286   if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
287     addAccelName(SP.getLinkageName(), Die);
288
289   // If this is an Objective-C selector name add it to the ObjC accelerator
290   // too.
291   if (isObjCClass(SP.getName())) {
292     StringRef Class, Category;
293     getObjCClassCategory(SP.getName(), Class, Category);
294     addAccelObjC(Class, Die);
295     if (Category != "")
296       addAccelObjC(Category, Die);
297     // Also add the base method name to the name table.
298     addAccelName(getObjCMethodName(SP.getName()), Die);
299   }
300 }
301
302 /// isSubprogramContext - Return true if Context is either a subprogram
303 /// or another context nested inside a subprogram.
304 bool DwarfDebug::isSubprogramContext(const MDNode *Context) {
305   if (!Context)
306     return false;
307   DIDescriptor D(Context);
308   if (D.isSubprogram())
309     return true;
310   if (D.isType())
311     return isSubprogramContext(resolve(DIType(Context).getContext()));
312   return false;
313 }
314
315 /// Check whether we should create a DIE for the given Scope, return true
316 /// if we don't create a DIE (the corresponding DIE is null).
317 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) {
318   if (Scope->isAbstractScope())
319     return false;
320
321   // We don't create a DIE if there is no Range.
322   const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges();
323   if (Ranges.empty())
324     return true;
325
326   if (Ranges.size() > 1)
327     return false;
328
329   // We don't create a DIE if we have a single Range and the end label
330   // is null.
331   return !getLabelAfterInsn(Ranges.front().second);
332 }
333
334 void DwarfDebug::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) {
335   assert(Scope && Scope->getScopeNode());
336   assert(Scope->isAbstractScope());
337   assert(!Scope->getInlinedAt());
338
339   const MDNode *SP = Scope->getScopeNode();
340
341   DIE *&AbsDef = AbstractSPDies[SP];
342   if (AbsDef)
343     return;
344
345   ProcessedSPNodes.insert(SP);
346
347   // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
348   // was inlined from another compile unit.
349   AbsDef = &SPMap[SP]->constructAbstractSubprogramScopeDIE(Scope);
350 }
351
352 void DwarfDebug::addGnuPubAttributes(DwarfUnit &U, DIE &D) const {
353   if (!GenerateGnuPubSections)
354     return;
355
356   U.addFlag(D, dwarf::DW_AT_GNU_pubnames);
357 }
358
359 // Create new DwarfCompileUnit for the given metadata node with tag
360 // DW_TAG_compile_unit.
361 DwarfCompileUnit &DwarfDebug::constructDwarfCompileUnit(DICompileUnit DIUnit) {
362   StringRef FN = DIUnit.getFilename();
363   CompilationDir = DIUnit.getDirectory();
364
365   auto OwnedUnit = make_unique<DwarfCompileUnit>(
366       InfoHolder.getUnits().size(), DIUnit, Asm, this, &InfoHolder);
367   DwarfCompileUnit &NewCU = *OwnedUnit;
368   DIE &Die = NewCU.getUnitDie();
369   InfoHolder.addUnit(std::move(OwnedUnit));
370
371   // LTO with assembly output shares a single line table amongst multiple CUs.
372   // To avoid the compilation directory being ambiguous, let the line table
373   // explicitly describe the directory of all files, never relying on the
374   // compilation directory.
375   if (!Asm->OutStreamer.hasRawTextSupport() || SingleCU)
376     Asm->OutStreamer.getContext().setMCLineTableCompilationDir(
377         NewCU.getUniqueID(), CompilationDir);
378
379   NewCU.addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
380   NewCU.addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
381                 DIUnit.getLanguage());
382   NewCU.addString(Die, dwarf::DW_AT_name, FN);
383
384   if (!useSplitDwarf()) {
385     NewCU.initStmtList(DwarfLineSectionSym);
386
387     // If we're using split dwarf the compilation dir is going to be in the
388     // skeleton CU and so we don't need to duplicate it here.
389     if (!CompilationDir.empty())
390       NewCU.addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
391
392     addGnuPubAttributes(NewCU, Die);
393   }
394
395   if (DIUnit.isOptimized())
396     NewCU.addFlag(Die, dwarf::DW_AT_APPLE_optimized);
397
398   StringRef Flags = DIUnit.getFlags();
399   if (!Flags.empty())
400     NewCU.addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
401
402   if (unsigned RVer = DIUnit.getRunTimeVersion())
403     NewCU.addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
404                   dwarf::DW_FORM_data1, RVer);
405
406   if (!FirstCU)
407     FirstCU = &NewCU;
408
409   if (useSplitDwarf()) {
410     NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoDWOSection(),
411                       DwarfInfoDWOSectionSym);
412     NewCU.setSkeleton(constructSkeletonCU(NewCU));
413   } else
414     NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
415                       DwarfInfoSectionSym);
416
417   CUMap.insert(std::make_pair(DIUnit, &NewCU));
418   CUDieMap.insert(std::make_pair(&Die, &NewCU));
419   return NewCU;
420 }
421
422 void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
423                                                   const MDNode *N) {
424   DIImportedEntity Module(N);
425   assert(Module.Verify());
426   if (DIE *D = TheCU.getOrCreateContextDIE(Module.getContext()))
427     D->addChild(TheCU.constructImportedEntityDIE(Module));
428 }
429
430 // Emit all Dwarf sections that should come prior to the content. Create
431 // global DIEs and emit initial debug info sections. This is invoked by
432 // the target AsmPrinter.
433 void DwarfDebug::beginModule() {
434   if (DisableDebugInfoPrinting)
435     return;
436
437   const Module *M = MMI->getModule();
438
439   FunctionDIs = makeSubprogramMap(*M);
440
441   // If module has named metadata anchors then use them, otherwise scan the
442   // module using debug info finder to collect debug info.
443   NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
444   if (!CU_Nodes)
445     return;
446   TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
447
448   // Emit initial sections so we can reference labels later.
449   emitSectionLabels();
450
451   SingleCU = CU_Nodes->getNumOperands() == 1;
452
453   for (MDNode *N : CU_Nodes->operands()) {
454     DICompileUnit CUNode(N);
455     DwarfCompileUnit &CU = constructDwarfCompileUnit(CUNode);
456     DIArray ImportedEntities = CUNode.getImportedEntities();
457     for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
458       ScopesWithImportedEntities.push_back(std::make_pair(
459           DIImportedEntity(ImportedEntities.getElement(i)).getContext(),
460           ImportedEntities.getElement(i)));
461     std::sort(ScopesWithImportedEntities.begin(),
462               ScopesWithImportedEntities.end(), less_first());
463     DIArray GVs = CUNode.getGlobalVariables();
464     for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
465       CU.getOrCreateGlobalVariableDIE(DIGlobalVariable(GVs.getElement(i)));
466     DIArray SPs = CUNode.getSubprograms();
467     for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
468       SPMap.insert(std::make_pair(SPs.getElement(i), &CU));
469     DIArray EnumTypes = CUNode.getEnumTypes();
470     for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i) {
471       DIType Ty(EnumTypes.getElement(i));
472       // The enum types array by design contains pointers to
473       // MDNodes rather than DIRefs. Unique them here.
474       DIType UniqueTy(resolve(Ty.getRef()));
475       CU.getOrCreateTypeDIE(UniqueTy);
476     }
477     DIArray RetainedTypes = CUNode.getRetainedTypes();
478     for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i) {
479       DIType Ty(RetainedTypes.getElement(i));
480       // The retained types array by design contains pointers to
481       // MDNodes rather than DIRefs. Unique them here.
482       DIType UniqueTy(resolve(Ty.getRef()));
483       CU.getOrCreateTypeDIE(UniqueTy);
484     }
485     // Emit imported_modules last so that the relevant context is already
486     // available.
487     for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
488       constructAndAddImportedEntityDIE(CU, ImportedEntities.getElement(i));
489   }
490
491   // Tell MMI that we have debug info.
492   MMI->setDebugInfoAvailability(true);
493
494   // Prime section data.
495   SectionMap[Asm->getObjFileLowering().getTextSection()];
496 }
497
498 void DwarfDebug::finishVariableDefinitions() {
499   for (const auto &Var : ConcreteVariables) {
500     DIE *VariableDie = Var->getDIE();
501     assert(VariableDie);
502     // FIXME: Consider the time-space tradeoff of just storing the unit pointer
503     // in the ConcreteVariables list, rather than looking it up again here.
504     // DIE::getUnit isn't simple - it walks parent pointers, etc.
505     DwarfCompileUnit *Unit = lookupUnit(VariableDie->getUnit());
506     assert(Unit);
507     DbgVariable *AbsVar = getExistingAbstractVariable(Var->getVariable());
508     if (AbsVar && AbsVar->getDIE()) {
509       Unit->addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin,
510                         *AbsVar->getDIE());
511     } else
512       Unit->applyVariableAttributes(*Var, *VariableDie);
513   }
514 }
515
516 void DwarfDebug::finishSubprogramDefinitions() {
517   for (const auto &P : SPMap)
518     P.second->finishSubprogramDefinition(DISubprogram(P.first));
519 }
520
521
522 // Collect info for variables that were optimized out.
523 void DwarfDebug::collectDeadVariables() {
524   const Module *M = MMI->getModule();
525
526   if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
527     for (MDNode *N : CU_Nodes->operands()) {
528       DICompileUnit TheCU(N);
529       // Construct subprogram DIE and add variables DIEs.
530       DwarfCompileUnit *SPCU =
531           static_cast<DwarfCompileUnit *>(CUMap.lookup(TheCU));
532       assert(SPCU && "Unable to find Compile Unit!");
533       DIArray Subprograms = TheCU.getSubprograms();
534       for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
535         DISubprogram SP(Subprograms.getElement(i));
536         if (ProcessedSPNodes.count(SP) != 0)
537           continue;
538         assert(SP.isSubprogram() &&
539                "CU's subprogram list contains a non-subprogram");
540         assert(SP.isDefinition() &&
541                "CU's subprogram list contains a subprogram declaration");
542         DIArray Variables = SP.getVariables();
543         if (Variables.getNumElements() == 0)
544           continue;
545
546         DIE *SPDIE = AbstractSPDies.lookup(SP);
547         if (!SPDIE)
548           SPDIE = SPCU->getDIE(SP);
549         assert(SPDIE);
550         for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
551           DIVariable DV(Variables.getElement(vi));
552           assert(DV.isVariable());
553           DbgVariable NewVar(DV, DIExpression(nullptr), this);
554           auto VariableDie = SPCU->constructVariableDIE(NewVar);
555           SPCU->applyVariableAttributes(NewVar, *VariableDie);
556           SPDIE->addChild(std::move(VariableDie));
557         }
558       }
559     }
560   }
561 }
562
563 void DwarfDebug::finalizeModuleInfo() {
564   finishSubprogramDefinitions();
565
566   finishVariableDefinitions();
567
568   // Collect info for variables that were optimized out.
569   collectDeadVariables();
570
571   // Handle anything that needs to be done on a per-unit basis after
572   // all other generation.
573   for (const auto &TheU : getUnits()) {
574     // Emit DW_AT_containing_type attribute to connect types with their
575     // vtable holding type.
576     TheU->constructContainingTypeDIEs();
577
578     // Add CU specific attributes if we need to add any.
579     if (TheU->getUnitDie().getTag() == dwarf::DW_TAG_compile_unit) {
580       // If we're splitting the dwarf out now that we've got the entire
581       // CU then add the dwo id to it.
582       DwarfCompileUnit *SkCU =
583           static_cast<DwarfCompileUnit *>(TheU->getSkeleton());
584       if (useSplitDwarf()) {
585         // Emit a unique identifier for this CU.
586         uint64_t ID = DIEHash(Asm).computeCUSignature(TheU->getUnitDie());
587         TheU->addUInt(TheU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
588                       dwarf::DW_FORM_data8, ID);
589         SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
590                       dwarf::DW_FORM_data8, ID);
591
592         // We don't keep track of which addresses are used in which CU so this
593         // is a bit pessimistic under LTO.
594         if (!AddrPool.isEmpty())
595           SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_addr_base,
596                                 DwarfAddrSectionSym, DwarfAddrSectionSym);
597         if (!TheU->getRangeLists().empty())
598           SkCU->addSectionLabel(
599               SkCU->getUnitDie(), dwarf::DW_AT_GNU_ranges_base,
600               DwarfDebugRangeSectionSym, DwarfDebugRangeSectionSym);
601       }
602
603       // If we have code split among multiple sections or non-contiguous
604       // ranges of code then emit a DW_AT_ranges attribute on the unit that will
605       // remain in the .o file, otherwise add a DW_AT_low_pc.
606       // FIXME: We should use ranges allow reordering of code ala
607       // .subsections_via_symbols in mach-o. This would mean turning on
608       // ranges for all subprogram DIEs for mach-o.
609       DwarfCompileUnit &U =
610           SkCU ? *SkCU : static_cast<DwarfCompileUnit &>(*TheU);
611       unsigned NumRanges = TheU->getRanges().size();
612       if (NumRanges) {
613         if (NumRanges > 1) {
614           U.addSectionLabel(U.getUnitDie(), dwarf::DW_AT_ranges,
615                             Asm->GetTempSymbol("cu_ranges", U.getUniqueID()),
616                             DwarfDebugRangeSectionSym);
617
618           // A DW_AT_low_pc attribute may also be specified in combination with
619           // DW_AT_ranges to specify the default base address for use in
620           // location lists (see Section 2.6.2) and range lists (see Section
621           // 2.17.3).
622           U.addUInt(U.getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
623                     0);
624         } else {
625           RangeSpan &Range = TheU->getRanges().back();
626           U.attachLowHighPC(U.getUnitDie(), Range.getStart(), Range.getEnd());
627         }
628       }
629     }
630   }
631
632   // Compute DIE offsets and sizes.
633   InfoHolder.computeSizeAndOffsets();
634   if (useSplitDwarf())
635     SkeletonHolder.computeSizeAndOffsets();
636 }
637
638 void DwarfDebug::endSections() {
639   // Filter labels by section.
640   for (const SymbolCU &SCU : ArangeLabels) {
641     if (SCU.Sym->isInSection()) {
642       // Make a note of this symbol and it's section.
643       const MCSection *Section = &SCU.Sym->getSection();
644       if (!Section->getKind().isMetadata())
645         SectionMap[Section].push_back(SCU);
646     } else {
647       // Some symbols (e.g. common/bss on mach-o) can have no section but still
648       // appear in the output. This sucks as we rely on sections to build
649       // arange spans. We can do it without, but it's icky.
650       SectionMap[nullptr].push_back(SCU);
651     }
652   }
653
654   // Build a list of sections used.
655   std::vector<const MCSection *> Sections;
656   for (const auto &it : SectionMap) {
657     const MCSection *Section = it.first;
658     Sections.push_back(Section);
659   }
660
661   // Sort the sections into order.
662   // This is only done to ensure consistent output order across different runs.
663   std::sort(Sections.begin(), Sections.end(), SectionSort);
664
665   // Add terminating symbols for each section.
666   for (unsigned ID = 0, E = Sections.size(); ID != E; ID++) {
667     const MCSection *Section = Sections[ID];
668     MCSymbol *Sym = nullptr;
669
670     if (Section) {
671       // We can't call MCSection::getLabelEndName, as it's only safe to do so
672       // if we know the section name up-front. For user-created sections, the
673       // resulting label may not be valid to use as a label. (section names can
674       // use a greater set of characters on some systems)
675       Sym = Asm->GetTempSymbol("debug_end", ID);
676       Asm->OutStreamer.SwitchSection(Section);
677       Asm->OutStreamer.EmitLabel(Sym);
678     }
679
680     // Insert a final terminator.
681     SectionMap[Section].push_back(SymbolCU(nullptr, Sym));
682   }
683 }
684
685 // Emit all Dwarf sections that should come after the content.
686 void DwarfDebug::endModule() {
687   assert(CurFn == nullptr);
688   assert(CurMI == nullptr);
689
690   if (!FirstCU)
691     return;
692
693   // End any existing sections.
694   // TODO: Does this need to happen?
695   endSections();
696
697   // Finalize the debug info for the module.
698   finalizeModuleInfo();
699
700   emitDebugStr();
701
702   // Emit all the DIEs into a debug info section.
703   emitDebugInfo();
704
705   // Corresponding abbreviations into a abbrev section.
706   emitAbbreviations();
707
708   // Emit info into a debug aranges section.
709   if (GenerateARangeSection)
710     emitDebugARanges();
711
712   // Emit info into a debug ranges section.
713   emitDebugRanges();
714
715   if (useSplitDwarf()) {
716     emitDebugStrDWO();
717     emitDebugInfoDWO();
718     emitDebugAbbrevDWO();
719     emitDebugLineDWO();
720     emitDebugLocDWO();
721     // Emit DWO addresses.
722     AddrPool.emit(*Asm, Asm->getObjFileLowering().getDwarfAddrSection());
723   } else
724     // Emit info into a debug loc section.
725     emitDebugLoc();
726
727   // Emit info into the dwarf accelerator table sections.
728   if (useDwarfAccelTables()) {
729     emitAccelNames();
730     emitAccelObjC();
731     emitAccelNamespaces();
732     emitAccelTypes();
733   }
734
735   // Emit the pubnames and pubtypes sections if requested.
736   if (HasDwarfPubSections) {
737     emitDebugPubNames(GenerateGnuPubSections);
738     emitDebugPubTypes(GenerateGnuPubSections);
739   }
740
741   // clean up.
742   SPMap.clear();
743   AbstractVariables.clear();
744
745   // Reset these for the next Module if we have one.
746   FirstCU = nullptr;
747 }
748
749 // Find abstract variable, if any, associated with Var.
750 DbgVariable *DwarfDebug::getExistingAbstractVariable(const DIVariable &DV,
751                                                      DIVariable &Cleansed) {
752   LLVMContext &Ctx = DV->getContext();
753   // More then one inlined variable corresponds to one abstract variable.
754   // FIXME: This duplication of variables when inlining should probably be
755   // removed. It's done to allow each DIVariable to describe its location
756   // because the DebugLoc on the dbg.value/declare isn't accurate. We should
757   // make it accurate then remove this duplication/cleansing stuff.
758   Cleansed = cleanseInlinedVariable(DV, Ctx);
759   auto I = AbstractVariables.find(Cleansed);
760   if (I != AbstractVariables.end())
761     return I->second.get();
762   return nullptr;
763 }
764
765 DbgVariable *DwarfDebug::getExistingAbstractVariable(const DIVariable &DV) {
766   DIVariable Cleansed;
767   return getExistingAbstractVariable(DV, Cleansed);
768 }
769
770 void DwarfDebug::createAbstractVariable(const DIVariable &Var,
771                                         LexicalScope *Scope) {
772   auto AbsDbgVariable = make_unique<DbgVariable>(Var, DIExpression(), this);
773   InfoHolder.addNonArgumentScopeVariable(Scope, AbsDbgVariable.get());
774   AbstractVariables[Var] = std::move(AbsDbgVariable);
775 }
776
777 void DwarfDebug::ensureAbstractVariableIsCreated(const DIVariable &DV,
778                                                  const MDNode *ScopeNode) {
779   DIVariable Cleansed = DV;
780   if (getExistingAbstractVariable(DV, Cleansed))
781     return;
782
783   createAbstractVariable(Cleansed, LScopes.getOrCreateAbstractScope(ScopeNode));
784 }
785
786 void
787 DwarfDebug::ensureAbstractVariableIsCreatedIfScoped(const DIVariable &DV,
788                                                     const MDNode *ScopeNode) {
789   DIVariable Cleansed = DV;
790   if (getExistingAbstractVariable(DV, Cleansed))
791     return;
792
793   if (LexicalScope *Scope = LScopes.findAbstractScope(ScopeNode))
794     createAbstractVariable(Cleansed, Scope);
795 }
796
797 // Collect variable information from side table maintained by MMI.
798 void DwarfDebug::collectVariableInfoFromMMITable(
799     SmallPtrSetImpl<const MDNode *> &Processed) {
800   for (const auto &VI : MMI->getVariableDbgInfo()) {
801     if (!VI.Var)
802       continue;
803     Processed.insert(VI.Var);
804     DIVariable DV(VI.Var);
805     DIExpression Expr(VI.Expr);
806     LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc);
807
808     // If variable scope is not found then skip this variable.
809     if (!Scope)
810       continue;
811
812     ensureAbstractVariableIsCreatedIfScoped(DV, Scope->getScopeNode());
813     ConcreteVariables.push_back(make_unique<DbgVariable>(DV, Expr, this));
814     DbgVariable *RegVar = ConcreteVariables.back().get();
815     RegVar->setFrameIndex(VI.Slot);
816     addScopeVariable(Scope, RegVar);
817   }
818 }
819
820 // Get .debug_loc entry for the instruction range starting at MI.
821 static DebugLocEntry::Value getDebugLocValue(const MachineInstr *MI) {
822   const MDNode *Expr = MI->getDebugExpression();
823   const MDNode *Var = MI->getDebugVariable();
824
825   assert(MI->getNumOperands() == 4);
826   if (MI->getOperand(0).isReg()) {
827     MachineLocation MLoc;
828     // If the second operand is an immediate, this is a
829     // register-indirect address.
830     if (!MI->getOperand(1).isImm())
831       MLoc.set(MI->getOperand(0).getReg());
832     else
833       MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
834     return DebugLocEntry::Value(Var, Expr, MLoc);
835   }
836   if (MI->getOperand(0).isImm())
837     return DebugLocEntry::Value(Var, Expr, MI->getOperand(0).getImm());
838   if (MI->getOperand(0).isFPImm())
839     return DebugLocEntry::Value(Var, Expr, MI->getOperand(0).getFPImm());
840   if (MI->getOperand(0).isCImm())
841     return DebugLocEntry::Value(Var, Expr, MI->getOperand(0).getCImm());
842
843   llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!");
844 }
845
846 /// Determine whether two variable pieces overlap.
847 static bool piecesOverlap(DIExpression P1, DIExpression P2) {
848   if (!P1.isVariablePiece() || !P2.isVariablePiece())
849     return true;
850   unsigned l1 = P1.getPieceOffset();
851   unsigned l2 = P2.getPieceOffset();
852   unsigned r1 = l1 + P1.getPieceSize();
853   unsigned r2 = l2 + P2.getPieceSize();
854   // True where [l1,r1[ and [r1,r2[ overlap.
855   return (l1 < r2) && (l2 < r1);
856 }
857
858 /// Build the location list for all DBG_VALUEs in the function that
859 /// describe the same variable.  If the ranges of several independent
860 /// pieces of the same variable overlap partially, split them up and
861 /// combine the ranges. The resulting DebugLocEntries are will have
862 /// strict monotonically increasing begin addresses and will never
863 /// overlap.
864 //
865 // Input:
866 //
867 //   Ranges History [var, loc, piece ofs size]
868 // 0 |      [x, (reg0, piece 0, 32)]
869 // 1 | |    [x, (reg1, piece 32, 32)] <- IsPieceOfPrevEntry
870 // 2 | |    ...
871 // 3   |    [clobber reg0]
872 // 4        [x, (mem, piece 0, 64)] <- overlapping with both previous pieces of x.
873 //
874 // Output:
875 //
876 // [0-1]    [x, (reg0, piece  0, 32)]
877 // [1-3]    [x, (reg0, piece  0, 32), (reg1, piece 32, 32)]
878 // [3-4]    [x, (reg1, piece 32, 32)]
879 // [4- ]    [x, (mem,  piece  0, 64)]
880 void
881 DwarfDebug::buildLocationList(SmallVectorImpl<DebugLocEntry> &DebugLoc,
882                               const DbgValueHistoryMap::InstrRanges &Ranges) {
883   SmallVector<DebugLocEntry::Value, 4> OpenRanges;
884
885   for (auto I = Ranges.begin(), E = Ranges.end(); I != E; ++I) {
886     const MachineInstr *Begin = I->first;
887     const MachineInstr *End = I->second;
888     assert(Begin->isDebugValue() && "Invalid History entry");
889
890     // Check if a variable is inaccessible in this range.
891     if (Begin->getNumOperands() > 1 &&
892         Begin->getOperand(0).isReg() && !Begin->getOperand(0).getReg()) {
893       OpenRanges.clear();
894       continue;
895     }
896
897     // If this piece overlaps with any open ranges, truncate them.
898     DIExpression DIExpr = Begin->getDebugExpression();
899     auto Last = std::remove_if(OpenRanges.begin(), OpenRanges.end(),
900                                [&](DebugLocEntry::Value R) {
901       return piecesOverlap(DIExpr, R.getExpression());
902     });
903     OpenRanges.erase(Last, OpenRanges.end());
904
905     const MCSymbol *StartLabel = getLabelBeforeInsn(Begin);
906     assert(StartLabel && "Forgot label before DBG_VALUE starting a range!");
907
908     const MCSymbol *EndLabel;
909     if (End != nullptr)
910       EndLabel = getLabelAfterInsn(End);
911     else if (std::next(I) == Ranges.end())
912       EndLabel = FunctionEndSym;
913     else
914       EndLabel = getLabelBeforeInsn(std::next(I)->first);
915     assert(EndLabel && "Forgot label after instruction ending a range!");
916
917     DEBUG(dbgs() << "DotDebugLoc: " << *Begin << "\n");
918
919     auto Value = getDebugLocValue(Begin);
920     DebugLocEntry Loc(StartLabel, EndLabel, Value);
921     bool couldMerge = false;
922
923     // If this is a piece, it may belong to the current DebugLocEntry.
924     if (DIExpr.isVariablePiece()) {
925       // Add this value to the list of open ranges.
926       OpenRanges.push_back(Value);
927
928       // Attempt to add the piece to the last entry.
929       if (!DebugLoc.empty())
930         if (DebugLoc.back().MergeValues(Loc))
931           couldMerge = true;
932     }
933
934     if (!couldMerge) {
935       // Need to add a new DebugLocEntry. Add all values from still
936       // valid non-overlapping pieces.
937       if (OpenRanges.size())
938         Loc.addValues(OpenRanges);
939
940       DebugLoc.push_back(std::move(Loc));
941     }
942
943     // Attempt to coalesce the ranges of two otherwise identical
944     // DebugLocEntries.
945     auto CurEntry = DebugLoc.rbegin();
946     auto PrevEntry = std::next(CurEntry);
947     if (PrevEntry != DebugLoc.rend() && PrevEntry->MergeRanges(*CurEntry))
948       DebugLoc.pop_back();
949
950     DEBUG({
951       dbgs() << CurEntry->getValues().size() << " Values:\n";
952       for (auto Value : CurEntry->getValues()) {
953         Value.getVariable()->dump();
954         Value.getExpression()->dump();
955       }
956       dbgs() << "-----\n";
957     });
958   }
959 }
960
961
962 // Find variables for each lexical scope.
963 void
964 DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU, DISubprogram SP,
965                                 SmallPtrSetImpl<const MDNode *> &Processed) {
966   // Grab the variable info that was squirreled away in the MMI side-table.
967   collectVariableInfoFromMMITable(Processed);
968
969   for (const auto &I : DbgValues) {
970     DIVariable DV(I.first);
971     if (Processed.count(DV))
972       continue;
973
974     // Instruction ranges, specifying where DV is accessible.
975     const auto &Ranges = I.second;
976     if (Ranges.empty())
977       continue;
978
979     LexicalScope *Scope = nullptr;
980     if (MDNode *IA = DV.getInlinedAt()) {
981       DebugLoc DL = DebugLoc::getFromDILocation(IA);
982       Scope = LScopes.findInlinedScope(DebugLoc::get(
983           DL.getLine(), DL.getCol(), DV.getContext(), IA));
984     } else
985       Scope = LScopes.findLexicalScope(DV.getContext());
986     // If variable scope is not found then skip this variable.
987     if (!Scope)
988       continue;
989
990     Processed.insert(DV);
991     const MachineInstr *MInsn = Ranges.front().first;
992     assert(MInsn->isDebugValue() && "History must begin with debug value");
993     ensureAbstractVariableIsCreatedIfScoped(DV, Scope->getScopeNode());
994     ConcreteVariables.push_back(make_unique<DbgVariable>(MInsn, this));
995     DbgVariable *RegVar = ConcreteVariables.back().get();
996     addScopeVariable(Scope, RegVar);
997
998     // Check if the first DBG_VALUE is valid for the rest of the function.
999     if (Ranges.size() == 1 && Ranges.front().second == nullptr)
1000       continue;
1001
1002     // Handle multiple DBG_VALUE instructions describing one variable.
1003     RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1004
1005     DotDebugLocEntries.resize(DotDebugLocEntries.size() + 1);
1006     DebugLocList &LocList = DotDebugLocEntries.back();
1007     LocList.CU = &TheCU;
1008     LocList.Label =
1009         Asm->GetTempSymbol("debug_loc", DotDebugLocEntries.size() - 1);
1010
1011     // Build the location list for this variable.
1012     buildLocationList(LocList.List, Ranges);
1013   }
1014
1015   // Collect info for variables that were optimized out.
1016   DIArray Variables = SP.getVariables();
1017   for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1018     DIVariable DV(Variables.getElement(i));
1019     assert(DV.isVariable());
1020     if (!Processed.insert(DV))
1021       continue;
1022     if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext())) {
1023       ensureAbstractVariableIsCreatedIfScoped(DV, Scope->getScopeNode());
1024       DIExpression NoExpr;
1025       ConcreteVariables.push_back(make_unique<DbgVariable>(DV, NoExpr, this));
1026       addScopeVariable(Scope, ConcreteVariables.back().get());
1027     }
1028   }
1029 }
1030
1031 // Return Label preceding the instruction.
1032 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1033   MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1034   assert(Label && "Didn't insert label before instruction");
1035   return Label;
1036 }
1037
1038 // Return Label immediately following the instruction.
1039 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1040   return LabelsAfterInsn.lookup(MI);
1041 }
1042
1043 // Process beginning of an instruction.
1044 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1045   assert(CurMI == nullptr);
1046   CurMI = MI;
1047   // Check if source location changes, but ignore DBG_VALUE locations.
1048   if (!MI->isDebugValue()) {
1049     DebugLoc DL = MI->getDebugLoc();
1050     if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1051       unsigned Flags = 0;
1052       PrevInstLoc = DL;
1053       if (DL == PrologEndLoc) {
1054         Flags |= DWARF2_FLAG_PROLOGUE_END;
1055         PrologEndLoc = DebugLoc();
1056       }
1057       if (PrologEndLoc.isUnknown())
1058         Flags |= DWARF2_FLAG_IS_STMT;
1059
1060       if (!DL.isUnknown()) {
1061         const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1062         recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1063       } else
1064         recordSourceLine(0, 0, nullptr, 0);
1065     }
1066   }
1067
1068   // Insert labels where requested.
1069   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
1070       LabelsBeforeInsn.find(MI);
1071
1072   // No label needed.
1073   if (I == LabelsBeforeInsn.end())
1074     return;
1075
1076   // Label already assigned.
1077   if (I->second)
1078     return;
1079
1080   if (!PrevLabel) {
1081     PrevLabel = MMI->getContext().CreateTempSymbol();
1082     Asm->OutStreamer.EmitLabel(PrevLabel);
1083   }
1084   I->second = PrevLabel;
1085 }
1086
1087 // Process end of an instruction.
1088 void DwarfDebug::endInstruction() {
1089   assert(CurMI != nullptr);
1090   // Don't create a new label after DBG_VALUE instructions.
1091   // They don't generate code.
1092   if (!CurMI->isDebugValue())
1093     PrevLabel = nullptr;
1094
1095   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
1096       LabelsAfterInsn.find(CurMI);
1097   CurMI = nullptr;
1098
1099   // No label needed.
1100   if (I == LabelsAfterInsn.end())
1101     return;
1102
1103   // Label already assigned.
1104   if (I->second)
1105     return;
1106
1107   // We need a label after this instruction.
1108   if (!PrevLabel) {
1109     PrevLabel = MMI->getContext().CreateTempSymbol();
1110     Asm->OutStreamer.EmitLabel(PrevLabel);
1111   }
1112   I->second = PrevLabel;
1113 }
1114
1115 // Each LexicalScope has first instruction and last instruction to mark
1116 // beginning and end of a scope respectively. Create an inverse map that list
1117 // scopes starts (and ends) with an instruction. One instruction may start (or
1118 // end) multiple scopes. Ignore scopes that are not reachable.
1119 void DwarfDebug::identifyScopeMarkers() {
1120   SmallVector<LexicalScope *, 4> WorkList;
1121   WorkList.push_back(LScopes.getCurrentFunctionScope());
1122   while (!WorkList.empty()) {
1123     LexicalScope *S = WorkList.pop_back_val();
1124
1125     const SmallVectorImpl<LexicalScope *> &Children = S->getChildren();
1126     if (!Children.empty())
1127       WorkList.append(Children.begin(), Children.end());
1128
1129     if (S->isAbstractScope())
1130       continue;
1131
1132     for (const InsnRange &R : S->getRanges()) {
1133       assert(R.first && "InsnRange does not have first instruction!");
1134       assert(R.second && "InsnRange does not have second instruction!");
1135       requestLabelBeforeInsn(R.first);
1136       requestLabelAfterInsn(R.second);
1137     }
1138   }
1139 }
1140
1141 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) {
1142   // First known non-DBG_VALUE and non-frame setup location marks
1143   // the beginning of the function body.
1144   for (const auto &MBB : *MF)
1145     for (const auto &MI : MBB)
1146       if (!MI.isDebugValue() && !MI.getFlag(MachineInstr::FrameSetup) &&
1147           !MI.getDebugLoc().isUnknown())
1148         return MI.getDebugLoc();
1149   return DebugLoc();
1150 }
1151
1152 // Gather pre-function debug information.  Assumes being called immediately
1153 // after the function entry point has been emitted.
1154 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1155   CurFn = MF;
1156
1157   // If there's no debug info for the function we're not going to do anything.
1158   if (!MMI->hasDebugInfo())
1159     return;
1160
1161   auto DI = FunctionDIs.find(MF->getFunction());
1162   if (DI == FunctionDIs.end())
1163     return;
1164
1165   // Grab the lexical scopes for the function, if we don't have any of those
1166   // then we're not going to be able to do anything.
1167   LScopes.initialize(*MF);
1168   if (LScopes.empty())
1169     return;
1170
1171   assert(DbgValues.empty() && "DbgValues map wasn't cleaned!");
1172
1173   // Make sure that each lexical scope will have a begin/end label.
1174   identifyScopeMarkers();
1175
1176   // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
1177   // belongs to so that we add to the correct per-cu line table in the
1178   // non-asm case.
1179   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1180   // FnScope->getScopeNode() and DI->second should represent the same function,
1181   // though they may not be the same MDNode due to inline functions merged in
1182   // LTO where the debug info metadata still differs (either due to distinct
1183   // written differences - two versions of a linkonce_odr function
1184   // written/copied into two separate files, or some sub-optimal metadata that
1185   // isn't structurally identical (see: file path/name info from clang, which
1186   // includes the directory of the cpp file being built, even when the file name
1187   // is absolute (such as an <> lookup header)))
1188   DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1189   assert(TheCU && "Unable to find compile unit!");
1190   if (Asm->OutStreamer.hasRawTextSupport())
1191     // Use a single line table if we are generating assembly.
1192     Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1193   else
1194     Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1195
1196   // Emit a label for the function so that we have a beginning address.
1197   FunctionBeginSym = Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber());
1198   // Assumes in correct section after the entry point.
1199   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1200
1201   // Calculate history for local variables.
1202   calculateDbgValueHistory(MF, Asm->TM.getSubtargetImpl()->getRegisterInfo(),
1203                            DbgValues);
1204
1205   // Request labels for the full history.
1206   for (const auto &I : DbgValues) {
1207     const auto &Ranges = I.second;
1208     if (Ranges.empty())
1209       continue;
1210
1211     // The first mention of a function argument gets the FunctionBeginSym
1212     // label, so arguments are visible when breaking at function entry.
1213     DIVariable DIVar(Ranges.front().first->getDebugVariable());
1214     if (DIVar.isVariable() && DIVar.getTag() == dwarf::DW_TAG_arg_variable &&
1215         getDISubprogram(DIVar.getContext()).describes(MF->getFunction())) {
1216       LabelsBeforeInsn[Ranges.front().first] = FunctionBeginSym;
1217       if (Ranges.front().first->getDebugExpression().isVariablePiece()) {
1218         // Mark all non-overlapping initial pieces.
1219         for (auto I = Ranges.begin(); I != Ranges.end(); ++I) {
1220           DIExpression Piece = I->first->getDebugExpression();
1221           if (std::all_of(Ranges.begin(), I,
1222                           [&](DbgValueHistoryMap::InstrRange Pred) {
1223                 return !piecesOverlap(Piece, Pred.first->getDebugExpression());
1224               }))
1225             LabelsBeforeInsn[I->first] = FunctionBeginSym;
1226           else
1227             break;
1228         }
1229       }
1230     }
1231
1232     for (const auto &Range : Ranges) {
1233       requestLabelBeforeInsn(Range.first);
1234       if (Range.second)
1235         requestLabelAfterInsn(Range.second);
1236     }
1237   }
1238
1239   PrevInstLoc = DebugLoc();
1240   PrevLabel = FunctionBeginSym;
1241
1242   // Record beginning of function.
1243   PrologEndLoc = findPrologueEndLoc(MF);
1244   if (!PrologEndLoc.isUnknown()) {
1245     DebugLoc FnStartDL =
1246         PrologEndLoc.getFnDebugLoc(MF->getFunction()->getContext());
1247     recordSourceLine(
1248         FnStartDL.getLine(), FnStartDL.getCol(),
1249         FnStartDL.getScope(MF->getFunction()->getContext()),
1250         // We'd like to list the prologue as "not statements" but GDB behaves
1251         // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1252         DWARF2_FLAG_IS_STMT);
1253   }
1254 }
1255
1256 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1257   InfoHolder.addNonArgumentScopeVariable(LS, Var);
1258 }
1259
1260 // Gather and emit post-function debug information.
1261 void DwarfDebug::endFunction(const MachineFunction *MF) {
1262   assert(CurFn == MF &&
1263       "endFunction should be called with the same function as beginFunction");
1264
1265   if (!MMI->hasDebugInfo() || LScopes.empty() ||
1266       !FunctionDIs.count(MF->getFunction())) {
1267     // If we don't have a lexical scope for this function then there will
1268     // be a hole in the range information. Keep note of this by setting the
1269     // previously used section to nullptr.
1270     PrevCU = nullptr;
1271     CurFn = nullptr;
1272     return;
1273   }
1274
1275   // Define end label for subprogram.
1276   FunctionEndSym = Asm->GetTempSymbol("func_end", Asm->getFunctionNumber());
1277   // Assumes in correct section after the entry point.
1278   Asm->OutStreamer.EmitLabel(FunctionEndSym);
1279
1280   // Set DwarfDwarfCompileUnitID in MCContext to default value.
1281   Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1282
1283   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1284   DISubprogram SP(FnScope->getScopeNode());
1285   DwarfCompileUnit &TheCU = *SPMap.lookup(SP);
1286
1287   SmallPtrSet<const MDNode *, 16> ProcessedVars;
1288   collectVariableInfo(TheCU, SP, ProcessedVars);
1289
1290   // Add the range of this function to the list of ranges for the CU.
1291   TheCU.addRange(RangeSpan(FunctionBeginSym, FunctionEndSym));
1292
1293   // Under -gmlt, skip building the subprogram if there are no inlined
1294   // subroutines inside it.
1295   if (TheCU.getCUNode().getEmissionKind() == DIBuilder::LineTablesOnly &&
1296       LScopes.getAbstractScopesList().empty() && !IsDarwin) {
1297     assert(ScopeVariables.empty());
1298     assert(DbgValues.empty());
1299     // FIXME: This wouldn't be true in LTO with a -g (with inlining) CU followed
1300     // by a -gmlt CU. Add a test and remove this assertion.
1301     assert(AbstractVariables.empty());
1302     LabelsBeforeInsn.clear();
1303     LabelsAfterInsn.clear();
1304     PrevLabel = nullptr;
1305     CurFn = nullptr;
1306     return;
1307   }
1308
1309 #ifndef NDEBUG
1310   size_t NumAbstractScopes = LScopes.getAbstractScopesList().size();
1311 #endif
1312   // Construct abstract scopes.
1313   for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
1314     DISubprogram SP(AScope->getScopeNode());
1315     assert(SP.isSubprogram());
1316     // Collect info for variables that were optimized out.
1317     DIArray Variables = SP.getVariables();
1318     for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1319       DIVariable DV(Variables.getElement(i));
1320       assert(DV && DV.isVariable());
1321       if (!ProcessedVars.insert(DV))
1322         continue;
1323       ensureAbstractVariableIsCreated(DV, DV.getContext());
1324       assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
1325              && "ensureAbstractVariableIsCreated inserted abstract scopes");
1326     }
1327     constructAbstractSubprogramScopeDIE(AScope);
1328   }
1329
1330   TheCU.constructSubprogramScopeDIE(FnScope);
1331
1332   // Clear debug info
1333   // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the
1334   // DbgVariables except those that are also in AbstractVariables (since they
1335   // can be used cross-function)
1336   ScopeVariables.clear();
1337   DbgValues.clear();
1338   LabelsBeforeInsn.clear();
1339   LabelsAfterInsn.clear();
1340   PrevLabel = nullptr;
1341   CurFn = nullptr;
1342 }
1343
1344 // Register a source line with debug info. Returns the  unique label that was
1345 // emitted and which provides correspondence to the source line list.
1346 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1347                                   unsigned Flags) {
1348   StringRef Fn;
1349   StringRef Dir;
1350   unsigned Src = 1;
1351   unsigned Discriminator = 0;
1352   if (DIScope Scope = DIScope(S)) {
1353     assert(Scope.isScope());
1354     Fn = Scope.getFilename();
1355     Dir = Scope.getDirectory();
1356     if (Scope.isLexicalBlockFile())
1357       Discriminator = DILexicalBlockFile(S).getDiscriminator();
1358
1359     unsigned CUID = Asm->OutStreamer.getContext().getDwarfCompileUnitID();
1360     Src = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID])
1361               .getOrCreateSourceID(Fn, Dir);
1362   }
1363   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0,
1364                                          Discriminator, Fn);
1365 }
1366
1367 //===----------------------------------------------------------------------===//
1368 // Emit Methods
1369 //===----------------------------------------------------------------------===//
1370
1371 // Emit initial Dwarf sections with a label at the start of each one.
1372 void DwarfDebug::emitSectionLabels() {
1373   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1374
1375   // Dwarf sections base addresses.
1376   DwarfInfoSectionSym =
1377       emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1378   if (useSplitDwarf()) {
1379     DwarfInfoDWOSectionSym =
1380         emitSectionSym(Asm, TLOF.getDwarfInfoDWOSection(), "section_info_dwo");
1381     DwarfTypesDWOSectionSym =
1382         emitSectionSym(Asm, TLOF.getDwarfTypesDWOSection(), "section_types_dwo");
1383   }
1384   DwarfAbbrevSectionSym =
1385       emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1386   if (useSplitDwarf())
1387     DwarfAbbrevDWOSectionSym = emitSectionSym(
1388         Asm, TLOF.getDwarfAbbrevDWOSection(), "section_abbrev_dwo");
1389   if (GenerateARangeSection)
1390     emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1391
1392   DwarfLineSectionSym =
1393       emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1394   if (GenerateGnuPubSections) {
1395     DwarfGnuPubNamesSectionSym =
1396         emitSectionSym(Asm, TLOF.getDwarfGnuPubNamesSection());
1397     DwarfGnuPubTypesSectionSym =
1398         emitSectionSym(Asm, TLOF.getDwarfGnuPubTypesSection());
1399   } else if (HasDwarfPubSections) {
1400     emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1401     emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1402   }
1403
1404   DwarfStrSectionSym =
1405       emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
1406   if (useSplitDwarf()) {
1407     DwarfStrDWOSectionSym =
1408         emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
1409     DwarfAddrSectionSym =
1410         emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
1411     DwarfDebugLocSectionSym =
1412         emitSectionSym(Asm, TLOF.getDwarfLocDWOSection(), "skel_loc");
1413   } else
1414     DwarfDebugLocSectionSym =
1415         emitSectionSym(Asm, TLOF.getDwarfLocSection(), "section_debug_loc");
1416   DwarfDebugRangeSectionSym =
1417       emitSectionSym(Asm, TLOF.getDwarfRangesSection(), "debug_range");
1418 }
1419
1420 // Recursively emits a debug information entry.
1421 void DwarfDebug::emitDIE(DIE &Die) {
1422   // Get the abbreviation for this DIE.
1423   const DIEAbbrev &Abbrev = Die.getAbbrev();
1424
1425   // Emit the code (index) for the abbreviation.
1426   if (Asm->isVerbose())
1427     Asm->OutStreamer.AddComment("Abbrev [" + Twine(Abbrev.getNumber()) +
1428                                 "] 0x" + Twine::utohexstr(Die.getOffset()) +
1429                                 ":0x" + Twine::utohexstr(Die.getSize()) + " " +
1430                                 dwarf::TagString(Abbrev.getTag()));
1431   Asm->EmitULEB128(Abbrev.getNumber());
1432
1433   const SmallVectorImpl<DIEValue *> &Values = Die.getValues();
1434   const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
1435
1436   // Emit the DIE attribute values.
1437   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1438     dwarf::Attribute Attr = AbbrevData[i].getAttribute();
1439     dwarf::Form Form = AbbrevData[i].getForm();
1440     assert(Form && "Too many attributes for DIE (check abbreviation)");
1441
1442     if (Asm->isVerbose()) {
1443       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1444       if (Attr == dwarf::DW_AT_accessibility)
1445         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(
1446             cast<DIEInteger>(Values[i])->getValue()));
1447     }
1448
1449     // Emit an attribute using the defined form.
1450     Values[i]->EmitValue(Asm, Form);
1451   }
1452
1453   // Emit the DIE children if any.
1454   if (Abbrev.hasChildren()) {
1455     for (auto &Child : Die.getChildren())
1456       emitDIE(*Child);
1457
1458     Asm->OutStreamer.AddComment("End Of Children Mark");
1459     Asm->EmitInt8(0);
1460   }
1461 }
1462
1463 // Emit the debug info section.
1464 void DwarfDebug::emitDebugInfo() {
1465   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1466
1467   Holder.emitUnits(DwarfAbbrevSectionSym);
1468 }
1469
1470 // Emit the abbreviation section.
1471 void DwarfDebug::emitAbbreviations() {
1472   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1473
1474   Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1475 }
1476
1477 // Emit the last address of the section and the end of the line matrix.
1478 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1479   // Define last address of section.
1480   Asm->OutStreamer.AddComment("Extended Op");
1481   Asm->EmitInt8(0);
1482
1483   Asm->OutStreamer.AddComment("Op size");
1484   Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
1485   Asm->OutStreamer.AddComment("DW_LNE_set_address");
1486   Asm->EmitInt8(dwarf::DW_LNE_set_address);
1487
1488   Asm->OutStreamer.AddComment("Section end label");
1489
1490   Asm->OutStreamer.EmitSymbolValue(
1491       Asm->GetTempSymbol("section_end", SectionEnd),
1492       Asm->getDataLayout().getPointerSize());
1493
1494   // Mark end of matrix.
1495   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1496   Asm->EmitInt8(0);
1497   Asm->EmitInt8(1);
1498   Asm->EmitInt8(1);
1499 }
1500
1501 void DwarfDebug::emitAccel(DwarfAccelTable &Accel, const MCSection *Section,
1502                            StringRef TableName, StringRef SymName) {
1503   Accel.FinalizeTable(Asm, TableName);
1504   Asm->OutStreamer.SwitchSection(Section);
1505   auto *SectionBegin = Asm->GetTempSymbol(SymName);
1506   Asm->OutStreamer.EmitLabel(SectionBegin);
1507
1508   // Emit the full data.
1509   Accel.Emit(Asm, SectionBegin, &InfoHolder, DwarfStrSectionSym);
1510 }
1511
1512 // Emit visible names into a hashed accelerator table section.
1513 void DwarfDebug::emitAccelNames() {
1514   emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(),
1515             "Names", "names_begin");
1516 }
1517
1518 // Emit objective C classes and categories into a hashed accelerator table
1519 // section.
1520 void DwarfDebug::emitAccelObjC() {
1521   emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(),
1522             "ObjC", "objc_begin");
1523 }
1524
1525 // Emit namespace dies into a hashed accelerator table.
1526 void DwarfDebug::emitAccelNamespaces() {
1527   emitAccel(AccelNamespace,
1528             Asm->getObjFileLowering().getDwarfAccelNamespaceSection(),
1529             "namespac", "namespac_begin");
1530 }
1531
1532 // Emit type dies into a hashed accelerator table.
1533 void DwarfDebug::emitAccelTypes() {
1534   emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(),
1535             "types", "types_begin");
1536 }
1537
1538 // Public name handling.
1539 // The format for the various pubnames:
1540 //
1541 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
1542 // for the DIE that is named.
1543 //
1544 // gnu pubnames - offset/index value/name tuples where the offset is the offset
1545 // into the CU and the index value is computed according to the type of value
1546 // for the DIE that is named.
1547 //
1548 // For type units the offset is the offset of the skeleton DIE. For split dwarf
1549 // it's the offset within the debug_info/debug_types dwo section, however, the
1550 // reference in the pubname header doesn't change.
1551
1552 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
1553 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU,
1554                                                         const DIE *Die) {
1555   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
1556
1557   // We could have a specification DIE that has our most of our knowledge,
1558   // look for that now.
1559   DIEValue *SpecVal = Die->findAttribute(dwarf::DW_AT_specification);
1560   if (SpecVal) {
1561     DIE &SpecDIE = cast<DIEEntry>(SpecVal)->getEntry();
1562     if (SpecDIE.findAttribute(dwarf::DW_AT_external))
1563       Linkage = dwarf::GIEL_EXTERNAL;
1564   } else if (Die->findAttribute(dwarf::DW_AT_external))
1565     Linkage = dwarf::GIEL_EXTERNAL;
1566
1567   switch (Die->getTag()) {
1568   case dwarf::DW_TAG_class_type:
1569   case dwarf::DW_TAG_structure_type:
1570   case dwarf::DW_TAG_union_type:
1571   case dwarf::DW_TAG_enumeration_type:
1572     return dwarf::PubIndexEntryDescriptor(
1573         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
1574                               ? dwarf::GIEL_STATIC
1575                               : dwarf::GIEL_EXTERNAL);
1576   case dwarf::DW_TAG_typedef:
1577   case dwarf::DW_TAG_base_type:
1578   case dwarf::DW_TAG_subrange_type:
1579     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
1580   case dwarf::DW_TAG_namespace:
1581     return dwarf::GIEK_TYPE;
1582   case dwarf::DW_TAG_subprogram:
1583     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
1584   case dwarf::DW_TAG_constant:
1585   case dwarf::DW_TAG_variable:
1586     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
1587   case dwarf::DW_TAG_enumerator:
1588     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
1589                                           dwarf::GIEL_STATIC);
1590   default:
1591     return dwarf::GIEK_NONE;
1592   }
1593 }
1594
1595 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
1596 ///
1597 void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
1598   const MCSection *PSec =
1599       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
1600                : Asm->getObjFileLowering().getDwarfPubNamesSection();
1601
1602   emitDebugPubSection(GnuStyle, PSec, "Names", &DwarfUnit::getGlobalNames);
1603 }
1604
1605 void DwarfDebug::emitDebugPubSection(
1606     bool GnuStyle, const MCSection *PSec, StringRef Name,
1607     const StringMap<const DIE *> &(DwarfUnit::*Accessor)() const) {
1608   for (const auto &NU : CUMap) {
1609     DwarfCompileUnit *TheU = NU.second;
1610
1611     const auto &Globals = (TheU->*Accessor)();
1612
1613     if (Globals.empty())
1614       continue;
1615
1616     if (auto Skeleton = static_cast<DwarfCompileUnit *>(TheU->getSkeleton()))
1617       TheU = Skeleton;
1618     unsigned ID = TheU->getUniqueID();
1619
1620     // Start the dwarf pubnames section.
1621     Asm->OutStreamer.SwitchSection(PSec);
1622
1623     // Emit the header.
1624     Asm->OutStreamer.AddComment("Length of Public " + Name + " Info");
1625     MCSymbol *BeginLabel = Asm->GetTempSymbol("pub" + Name + "_begin", ID);
1626     MCSymbol *EndLabel = Asm->GetTempSymbol("pub" + Name + "_end", ID);
1627     Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);
1628
1629     Asm->OutStreamer.EmitLabel(BeginLabel);
1630
1631     Asm->OutStreamer.AddComment("DWARF Version");
1632     Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION);
1633
1634     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1635     Asm->EmitSectionOffset(TheU->getLabelBegin(), TheU->getSectionSym());
1636
1637     Asm->OutStreamer.AddComment("Compilation Unit Length");
1638     Asm->EmitLabelDifference(TheU->getLabelEnd(), TheU->getLabelBegin(), 4);
1639
1640     // Emit the pubnames for this compilation unit.
1641     for (const auto &GI : Globals) {
1642       const char *Name = GI.getKeyData();
1643       const DIE *Entity = GI.second;
1644
1645       Asm->OutStreamer.AddComment("DIE offset");
1646       Asm->EmitInt32(Entity->getOffset());
1647
1648       if (GnuStyle) {
1649         dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity);
1650         Asm->OutStreamer.AddComment(
1651             Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
1652             dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
1653         Asm->EmitInt8(Desc.toBits());
1654       }
1655
1656       Asm->OutStreamer.AddComment("External Name");
1657       Asm->OutStreamer.EmitBytes(StringRef(Name, GI.getKeyLength() + 1));
1658     }
1659
1660     Asm->OutStreamer.AddComment("End Mark");
1661     Asm->EmitInt32(0);
1662     Asm->OutStreamer.EmitLabel(EndLabel);
1663   }
1664 }
1665
1666 void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
1667   const MCSection *PSec =
1668       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
1669                : Asm->getObjFileLowering().getDwarfPubTypesSection();
1670
1671   emitDebugPubSection(GnuStyle, PSec, "Types", &DwarfUnit::getGlobalTypes);
1672 }
1673
1674 // Emit visible names into a debug str section.
1675 void DwarfDebug::emitDebugStr() {
1676   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1677   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
1678 }
1679
1680 /// Emits an optimal (=sorted) sequence of DW_OP_pieces.
1681 void DwarfDebug::emitLocPieces(ByteStreamer &Streamer,
1682                                const DITypeIdentifierMap &Map,
1683                                ArrayRef<DebugLocEntry::Value> Values) {
1684   assert(std::all_of(Values.begin(), Values.end(), [](DebugLocEntry::Value P) {
1685         return P.isVariablePiece();
1686       }) && "all values are expected to be pieces");
1687   assert(std::is_sorted(Values.begin(), Values.end()) &&
1688          "pieces are expected to be sorted");
1689
1690   unsigned Offset = 0;
1691   for (auto Piece : Values) {
1692     DIExpression Expr = Piece.getExpression();
1693     unsigned PieceOffset = Expr.getPieceOffset();
1694     unsigned PieceSize = Expr.getPieceSize();
1695     assert(Offset <= PieceOffset && "overlapping or duplicate pieces");
1696     if (Offset < PieceOffset) {
1697       // The DWARF spec seriously mandates pieces with no locations for gaps.
1698       Asm->EmitDwarfOpPiece(Streamer, (PieceOffset-Offset)*8);
1699       Offset += PieceOffset-Offset;
1700     }
1701
1702     Offset += PieceSize;
1703
1704     const unsigned SizeOfByte = 8;
1705 #ifndef NDEBUG
1706     DIVariable Var = Piece.getVariable();
1707     assert(!Var.isIndirect() && "indirect address for piece");
1708     unsigned VarSize = Var.getSizeInBits(Map);
1709     assert(PieceSize+PieceOffset <= VarSize/SizeOfByte
1710            && "piece is larger than or outside of variable");
1711     assert(PieceSize*SizeOfByte != VarSize
1712            && "piece covers entire variable");
1713 #endif
1714     if (Piece.isLocation() && Piece.getLoc().isReg())
1715       Asm->EmitDwarfRegOpPiece(Streamer,
1716                                Piece.getLoc(),
1717                                PieceSize*SizeOfByte);
1718     else {
1719       emitDebugLocValue(Streamer, Piece);
1720       Asm->EmitDwarfOpPiece(Streamer, PieceSize*SizeOfByte);
1721     }
1722   }
1723 }
1724
1725
1726 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer,
1727                                    const DebugLocEntry &Entry) {
1728   const DebugLocEntry::Value Value = Entry.getValues()[0];
1729   if (Value.isVariablePiece())
1730     // Emit all pieces that belong to the same variable and range.
1731     return emitLocPieces(Streamer, TypeIdentifierMap, Entry.getValues());
1732
1733   assert(Entry.getValues().size() == 1 && "only pieces may have >1 value");
1734   emitDebugLocValue(Streamer, Value);
1735 }
1736
1737 void DwarfDebug::emitDebugLocValue(ByteStreamer &Streamer,
1738                                    const DebugLocEntry::Value &Value) {
1739   DIVariable DV = Value.getVariable();
1740   // Regular entry.
1741   if (Value.isInt()) {
1742     DIBasicType BTy(resolve(DV.getType()));
1743     if (BTy.Verify() && (BTy.getEncoding() == dwarf::DW_ATE_signed ||
1744                          BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
1745       Streamer.EmitInt8(dwarf::DW_OP_consts, "DW_OP_consts");
1746       Streamer.EmitSLEB128(Value.getInt());
1747     } else {
1748       Streamer.EmitInt8(dwarf::DW_OP_constu, "DW_OP_constu");
1749       Streamer.EmitULEB128(Value.getInt());
1750     }
1751   } else if (Value.isLocation()) {
1752     MachineLocation Loc = Value.getLoc();
1753     DIExpression Expr = Value.getExpression();
1754     if (!Expr)
1755       // Regular entry.
1756       Asm->EmitDwarfRegOp(Streamer, Loc, DV.isIndirect());
1757     else {
1758       // Complex address entry.
1759       unsigned N = Expr.getNumElements();
1760       unsigned i = 0;
1761       if (N >= 2 && Expr.getElement(0) == dwarf::DW_OP_plus) {
1762         if (Loc.getOffset()) {
1763           i = 2;
1764           Asm->EmitDwarfRegOp(Streamer, Loc, DV.isIndirect());
1765           Streamer.EmitInt8(dwarf::DW_OP_deref, "DW_OP_deref");
1766           Streamer.EmitInt8(dwarf::DW_OP_plus_uconst, "DW_OP_plus_uconst");
1767           Streamer.EmitSLEB128(Expr.getElement(1));
1768         } else {
1769           // If first address element is OpPlus then emit
1770           // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
1771           MachineLocation TLoc(Loc.getReg(), Expr.getElement(1));
1772           Asm->EmitDwarfRegOp(Streamer, TLoc, DV.isIndirect());
1773           i = 2;
1774         }
1775       } else {
1776         Asm->EmitDwarfRegOp(Streamer, Loc, DV.isIndirect());
1777       }
1778
1779       // Emit remaining complex address elements.
1780       for (; i < N; ++i) {
1781         uint64_t Element = Expr.getElement(i);
1782         if (Element == dwarf::DW_OP_plus) {
1783           Streamer.EmitInt8(dwarf::DW_OP_plus_uconst, "DW_OP_plus_uconst");
1784           Streamer.EmitULEB128(Expr.getElement(++i));
1785         } else if (Element == dwarf::DW_OP_deref) {
1786           if (!Loc.isReg())
1787             Streamer.EmitInt8(dwarf::DW_OP_deref, "DW_OP_deref");
1788         } else if (Element == dwarf::DW_OP_piece) {
1789           i += 3;
1790           // handled in emitDebugLocEntry.
1791         } else
1792           llvm_unreachable("unknown Opcode found in complex address");
1793       }
1794     }
1795   }
1796   // else ... ignore constant fp. There is not any good way to
1797   // to represent them here in dwarf.
1798   // FIXME: ^
1799 }
1800
1801 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocEntry &Entry) {
1802   Asm->OutStreamer.AddComment("Loc expr size");
1803   MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
1804   MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
1805   Asm->EmitLabelDifference(end, begin, 2);
1806   Asm->OutStreamer.EmitLabel(begin);
1807   // Emit the entry.
1808   APByteStreamer Streamer(*Asm);
1809   emitDebugLocEntry(Streamer, Entry);
1810   // Close the range.
1811   Asm->OutStreamer.EmitLabel(end);
1812 }
1813
1814 // Emit locations into the debug loc section.
1815 void DwarfDebug::emitDebugLoc() {
1816   // Start the dwarf loc section.
1817   Asm->OutStreamer.SwitchSection(
1818       Asm->getObjFileLowering().getDwarfLocSection());
1819   unsigned char Size = Asm->getDataLayout().getPointerSize();
1820   for (const auto &DebugLoc : DotDebugLocEntries) {
1821     Asm->OutStreamer.EmitLabel(DebugLoc.Label);
1822     const DwarfCompileUnit *CU = DebugLoc.CU;
1823     assert(!CU->getRanges().empty());
1824     for (const auto &Entry : DebugLoc.List) {
1825       // Set up the range. This range is relative to the entry point of the
1826       // compile unit. This is a hard coded 0 for low_pc when we're emitting
1827       // ranges, or the DW_AT_low_pc on the compile unit otherwise.
1828       if (CU->getRanges().size() == 1) {
1829         // Grab the begin symbol from the first range as our base.
1830         const MCSymbol *Base = CU->getRanges()[0].getStart();
1831         Asm->EmitLabelDifference(Entry.getBeginSym(), Base, Size);
1832         Asm->EmitLabelDifference(Entry.getEndSym(), Base, Size);
1833       } else {
1834         Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size);
1835         Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size);
1836       }
1837
1838       emitDebugLocEntryLocation(Entry);
1839     }
1840     Asm->OutStreamer.EmitIntValue(0, Size);
1841     Asm->OutStreamer.EmitIntValue(0, Size);
1842   }
1843 }
1844
1845 void DwarfDebug::emitDebugLocDWO() {
1846   Asm->OutStreamer.SwitchSection(
1847       Asm->getObjFileLowering().getDwarfLocDWOSection());
1848   for (const auto &DebugLoc : DotDebugLocEntries) {
1849     Asm->OutStreamer.EmitLabel(DebugLoc.Label);
1850     for (const auto &Entry : DebugLoc.List) {
1851       // Just always use start_length for now - at least that's one address
1852       // rather than two. We could get fancier and try to, say, reuse an
1853       // address we know we've emitted elsewhere (the start of the function?
1854       // The start of the CU or CU subrange that encloses this range?)
1855       Asm->EmitInt8(dwarf::DW_LLE_start_length_entry);
1856       unsigned idx = AddrPool.getIndex(Entry.getBeginSym());
1857       Asm->EmitULEB128(idx);
1858       Asm->EmitLabelDifference(Entry.getEndSym(), Entry.getBeginSym(), 4);
1859
1860       emitDebugLocEntryLocation(Entry);
1861     }
1862     Asm->EmitInt8(dwarf::DW_LLE_end_of_list_entry);
1863   }
1864 }
1865
1866 struct ArangeSpan {
1867   const MCSymbol *Start, *End;
1868 };
1869
1870 // Emit a debug aranges section, containing a CU lookup for any
1871 // address we can tie back to a CU.
1872 void DwarfDebug::emitDebugARanges() {
1873   // Start the dwarf aranges section.
1874   Asm->OutStreamer.SwitchSection(
1875       Asm->getObjFileLowering().getDwarfARangesSection());
1876
1877   typedef DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> SpansType;
1878
1879   SpansType Spans;
1880
1881   // Build a list of sections used.
1882   std::vector<const MCSection *> Sections;
1883   for (const auto &it : SectionMap) {
1884     const MCSection *Section = it.first;
1885     Sections.push_back(Section);
1886   }
1887
1888   // Sort the sections into order.
1889   // This is only done to ensure consistent output order across different runs.
1890   std::sort(Sections.begin(), Sections.end(), SectionSort);
1891
1892   // Build a set of address spans, sorted by CU.
1893   for (const MCSection *Section : Sections) {
1894     SmallVector<SymbolCU, 8> &List = SectionMap[Section];
1895     if (List.size() < 2)
1896       continue;
1897
1898     // Sort the symbols by offset within the section.
1899     std::sort(List.begin(), List.end(),
1900               [&](const SymbolCU &A, const SymbolCU &B) {
1901       unsigned IA = A.Sym ? Asm->OutStreamer.GetSymbolOrder(A.Sym) : 0;
1902       unsigned IB = B.Sym ? Asm->OutStreamer.GetSymbolOrder(B.Sym) : 0;
1903
1904       // Symbols with no order assigned should be placed at the end.
1905       // (e.g. section end labels)
1906       if (IA == 0)
1907         return false;
1908       if (IB == 0)
1909         return true;
1910       return IA < IB;
1911     });
1912
1913     // If we have no section (e.g. common), just write out
1914     // individual spans for each symbol.
1915     if (!Section) {
1916       for (const SymbolCU &Cur : List) {
1917         ArangeSpan Span;
1918         Span.Start = Cur.Sym;
1919         Span.End = nullptr;
1920         if (Cur.CU)
1921           Spans[Cur.CU].push_back(Span);
1922       }
1923     } else {
1924       // Build spans between each label.
1925       const MCSymbol *StartSym = List[0].Sym;
1926       for (size_t n = 1, e = List.size(); n < e; n++) {
1927         const SymbolCU &Prev = List[n - 1];
1928         const SymbolCU &Cur = List[n];
1929
1930         // Try and build the longest span we can within the same CU.
1931         if (Cur.CU != Prev.CU) {
1932           ArangeSpan Span;
1933           Span.Start = StartSym;
1934           Span.End = Cur.Sym;
1935           Spans[Prev.CU].push_back(Span);
1936           StartSym = Cur.Sym;
1937         }
1938       }
1939     }
1940   }
1941
1942   unsigned PtrSize = Asm->getDataLayout().getPointerSize();
1943
1944   // Build a list of CUs used.
1945   std::vector<DwarfCompileUnit *> CUs;
1946   for (const auto &it : Spans) {
1947     DwarfCompileUnit *CU = it.first;
1948     CUs.push_back(CU);
1949   }
1950
1951   // Sort the CU list (again, to ensure consistent output order).
1952   std::sort(CUs.begin(), CUs.end(), [](const DwarfUnit *A, const DwarfUnit *B) {
1953     return A->getUniqueID() < B->getUniqueID();
1954   });
1955
1956   // Emit an arange table for each CU we used.
1957   for (DwarfCompileUnit *CU : CUs) {
1958     std::vector<ArangeSpan> &List = Spans[CU];
1959
1960     // Emit size of content not including length itself.
1961     unsigned ContentSize =
1962         sizeof(int16_t) + // DWARF ARange version number
1963         sizeof(int32_t) + // Offset of CU in the .debug_info section
1964         sizeof(int8_t) +  // Pointer Size (in bytes)
1965         sizeof(int8_t);   // Segment Size (in bytes)
1966
1967     unsigned TupleSize = PtrSize * 2;
1968
1969     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
1970     unsigned Padding =
1971         OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize);
1972
1973     ContentSize += Padding;
1974     ContentSize += (List.size() + 1) * TupleSize;
1975
1976     // For each compile unit, write the list of spans it covers.
1977     Asm->OutStreamer.AddComment("Length of ARange Set");
1978     Asm->EmitInt32(ContentSize);
1979     Asm->OutStreamer.AddComment("DWARF Arange version number");
1980     Asm->EmitInt16(dwarf::DW_ARANGES_VERSION);
1981     Asm->OutStreamer.AddComment("Offset Into Debug Info Section");
1982     Asm->EmitSectionOffset(CU->getLocalLabelBegin(), CU->getLocalSectionSym());
1983     Asm->OutStreamer.AddComment("Address Size (in bytes)");
1984     Asm->EmitInt8(PtrSize);
1985     Asm->OutStreamer.AddComment("Segment Size (in bytes)");
1986     Asm->EmitInt8(0);
1987
1988     Asm->OutStreamer.EmitFill(Padding, 0xff);
1989
1990     for (const ArangeSpan &Span : List) {
1991       Asm->EmitLabelReference(Span.Start, PtrSize);
1992
1993       // Calculate the size as being from the span start to it's end.
1994       if (Span.End) {
1995         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
1996       } else {
1997         // For symbols without an end marker (e.g. common), we
1998         // write a single arange entry containing just that one symbol.
1999         uint64_t Size = SymSize[Span.Start];
2000         if (Size == 0)
2001           Size = 1;
2002
2003         Asm->OutStreamer.EmitIntValue(Size, PtrSize);
2004       }
2005     }
2006
2007     Asm->OutStreamer.AddComment("ARange terminator");
2008     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2009     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2010   }
2011 }
2012
2013 // Emit visible names into a debug ranges section.
2014 void DwarfDebug::emitDebugRanges() {
2015   // Start the dwarf ranges section.
2016   Asm->OutStreamer.SwitchSection(
2017       Asm->getObjFileLowering().getDwarfRangesSection());
2018
2019   // Size for our labels.
2020   unsigned char Size = Asm->getDataLayout().getPointerSize();
2021
2022   // Grab the specific ranges for the compile units in the module.
2023   for (const auto &I : CUMap) {
2024     DwarfCompileUnit *TheCU = I.second;
2025
2026     // Iterate over the misc ranges for the compile units in the module.
2027     for (const RangeSpanList &List : TheCU->getRangeLists()) {
2028       // Emit our symbol so we can find the beginning of the range.
2029       Asm->OutStreamer.EmitLabel(List.getSym());
2030
2031       for (const RangeSpan &Range : List.getRanges()) {
2032         const MCSymbol *Begin = Range.getStart();
2033         const MCSymbol *End = Range.getEnd();
2034         assert(Begin && "Range without a begin symbol?");
2035         assert(End && "Range without an end symbol?");
2036         if (TheCU->getRanges().size() == 1) {
2037           // Grab the begin symbol from the first range as our base.
2038           const MCSymbol *Base = TheCU->getRanges()[0].getStart();
2039           Asm->EmitLabelDifference(Begin, Base, Size);
2040           Asm->EmitLabelDifference(End, Base, Size);
2041         } else {
2042           Asm->OutStreamer.EmitSymbolValue(Begin, Size);
2043           Asm->OutStreamer.EmitSymbolValue(End, Size);
2044         }
2045       }
2046
2047       // And terminate the list with two 0 values.
2048       Asm->OutStreamer.EmitIntValue(0, Size);
2049       Asm->OutStreamer.EmitIntValue(0, Size);
2050     }
2051
2052     // Now emit a range for the CU itself.
2053     if (TheCU->getRanges().size() > 1) {
2054       Asm->OutStreamer.EmitLabel(
2055           Asm->GetTempSymbol("cu_ranges", TheCU->getUniqueID()));
2056       for (const RangeSpan &Range : TheCU->getRanges()) {
2057         const MCSymbol *Begin = Range.getStart();
2058         const MCSymbol *End = Range.getEnd();
2059         assert(Begin && "Range without a begin symbol?");
2060         assert(End && "Range without an end symbol?");
2061         Asm->OutStreamer.EmitSymbolValue(Begin, Size);
2062         Asm->OutStreamer.EmitSymbolValue(End, Size);
2063       }
2064       // And terminate the list with two 0 values.
2065       Asm->OutStreamer.EmitIntValue(0, Size);
2066       Asm->OutStreamer.EmitIntValue(0, Size);
2067     }
2068   }
2069 }
2070
2071 // DWARF5 Experimental Separate Dwarf emitters.
2072
2073 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die,
2074                                   std::unique_ptr<DwarfUnit> NewU) {
2075   NewU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2076                        U.getCUNode().getSplitDebugFilename());
2077
2078   if (!CompilationDir.empty())
2079     NewU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2080
2081   addGnuPubAttributes(*NewU, Die);
2082
2083   SkeletonHolder.addUnit(std::move(NewU));
2084 }
2085
2086 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2087 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2088 // DW_AT_addr_base, DW_AT_ranges_base.
2089 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) {
2090
2091   auto OwnedUnit = make_unique<DwarfCompileUnit>(
2092       CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder);
2093   DwarfCompileUnit &NewCU = *OwnedUnit;
2094   NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
2095                     DwarfInfoSectionSym);
2096
2097   NewCU.initStmtList(DwarfLineSectionSym);
2098
2099   initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit));
2100
2101   return NewCU;
2102 }
2103
2104 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2105 // compile units that would normally be in debug_info.
2106 void DwarfDebug::emitDebugInfoDWO() {
2107   assert(useSplitDwarf() && "No split dwarf debug info?");
2108   // Don't pass an abbrev symbol, using a constant zero instead so as not to
2109   // emit relocations into the dwo file.
2110   InfoHolder.emitUnits(/* AbbrevSymbol */ nullptr);
2111 }
2112
2113 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2114 // abbreviations for the .debug_info.dwo section.
2115 void DwarfDebug::emitDebugAbbrevDWO() {
2116   assert(useSplitDwarf() && "No split dwarf?");
2117   InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
2118 }
2119
2120 void DwarfDebug::emitDebugLineDWO() {
2121   assert(useSplitDwarf() && "No split dwarf?");
2122   Asm->OutStreamer.SwitchSection(
2123       Asm->getObjFileLowering().getDwarfLineDWOSection());
2124   SplitTypeUnitFileTable.Emit(Asm->OutStreamer);
2125 }
2126
2127 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2128 // string section and is identical in format to traditional .debug_str
2129 // sections.
2130 void DwarfDebug::emitDebugStrDWO() {
2131   assert(useSplitDwarf() && "No split dwarf?");
2132   const MCSection *OffSec =
2133       Asm->getObjFileLowering().getDwarfStrOffDWOSection();
2134   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
2135                          OffSec);
2136 }
2137
2138 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) {
2139   if (!useSplitDwarf())
2140     return nullptr;
2141   if (SingleCU)
2142     SplitTypeUnitFileTable.setCompilationDir(CU.getCUNode().getDirectory());
2143   return &SplitTypeUnitFileTable;
2144 }
2145
2146 static uint64_t makeTypeSignature(StringRef Identifier) {
2147   MD5 Hash;
2148   Hash.update(Identifier);
2149   // ... take the least significant 8 bytes and return those. Our MD5
2150   // implementation always returns its results in little endian, swap bytes
2151   // appropriately.
2152   MD5::MD5Result Result;
2153   Hash.final(Result);
2154   return *reinterpret_cast<support::ulittle64_t *>(Result + 8);
2155 }
2156
2157 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
2158                                       StringRef Identifier, DIE &RefDie,
2159                                       DICompositeType CTy) {
2160   // Fast path if we're building some type units and one has already used the
2161   // address pool we know we're going to throw away all this work anyway, so
2162   // don't bother building dependent types.
2163   if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed())
2164     return;
2165
2166   const DwarfTypeUnit *&TU = DwarfTypeUnits[CTy];
2167   if (TU) {
2168     CU.addDIETypeSignature(RefDie, *TU);
2169     return;
2170   }
2171
2172   bool TopLevelType = TypeUnitsUnderConstruction.empty();
2173   AddrPool.resetUsedFlag();
2174
2175   auto OwnedUnit = make_unique<DwarfTypeUnit>(
2176       InfoHolder.getUnits().size() + TypeUnitsUnderConstruction.size(), CU, Asm,
2177       this, &InfoHolder, getDwoLineTable(CU));
2178   DwarfTypeUnit &NewTU = *OwnedUnit;
2179   DIE &UnitDie = NewTU.getUnitDie();
2180   TU = &NewTU;
2181   TypeUnitsUnderConstruction.push_back(
2182       std::make_pair(std::move(OwnedUnit), CTy));
2183
2184   NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
2185                 CU.getLanguage());
2186
2187   uint64_t Signature = makeTypeSignature(Identifier);
2188   NewTU.setTypeSignature(Signature);
2189
2190   if (useSplitDwarf())
2191     NewTU.initSection(Asm->getObjFileLowering().getDwarfTypesDWOSection(),
2192                       DwarfTypesDWOSectionSym);
2193   else {
2194     CU.applyStmtList(UnitDie);
2195     NewTU.initSection(
2196         Asm->getObjFileLowering().getDwarfTypesSection(Signature));
2197   }
2198
2199   NewTU.setType(NewTU.createTypeDIE(CTy));
2200
2201   if (TopLevelType) {
2202     auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction);
2203     TypeUnitsUnderConstruction.clear();
2204
2205     // Types referencing entries in the address table cannot be placed in type
2206     // units.
2207     if (AddrPool.hasBeenUsed()) {
2208
2209       // Remove all the types built while building this type.
2210       // This is pessimistic as some of these types might not be dependent on
2211       // the type that used an address.
2212       for (const auto &TU : TypeUnitsToAdd)
2213         DwarfTypeUnits.erase(TU.second);
2214
2215       // Construct this type in the CU directly.
2216       // This is inefficient because all the dependent types will be rebuilt
2217       // from scratch, including building them in type units, discovering that
2218       // they depend on addresses, throwing them out and rebuilding them.
2219       CU.constructTypeDIE(RefDie, CTy);
2220       return;
2221     }
2222
2223     // If the type wasn't dependent on fission addresses, finish adding the type
2224     // and all its dependent types.
2225     for (auto &TU : TypeUnitsToAdd)
2226       InfoHolder.addUnit(std::move(TU.first));
2227   }
2228   CU.addDIETypeSignature(RefDie, NewTU);
2229 }
2230
2231 // Accelerator table mutators - add each name along with its companion
2232 // DIE to the proper table while ensuring that the name that we're going
2233 // to reference is in the string table. We do this since the names we
2234 // add may not only be identical to the names in the DIE.
2235 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) {
2236   if (!useDwarfAccelTables())
2237     return;
2238   AccelNames.AddName(Name, InfoHolder.getStringPool().getSymbol(*Asm, Name),
2239                      &Die);
2240 }
2241
2242 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) {
2243   if (!useDwarfAccelTables())
2244     return;
2245   AccelObjC.AddName(Name, InfoHolder.getStringPool().getSymbol(*Asm, Name),
2246                     &Die);
2247 }
2248
2249 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) {
2250   if (!useDwarfAccelTables())
2251     return;
2252   AccelNamespace.AddName(Name, InfoHolder.getStringPool().getSymbol(*Asm, Name),
2253                          &Die);
2254 }
2255
2256 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) {
2257   if (!useDwarfAccelTables())
2258     return;
2259   AccelTypes.AddName(Name, InfoHolder.getStringPool().getSymbol(*Asm, Name),
2260                      &Die);
2261 }