[DebugInfo] Sink DwarfDebug::addCurrentFnArgument down into DwarfFile.
[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   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   if (InfoHolder.addCurrentFnArgument(Var, LS))
1258     return;
1259   addNonArgumentScopeVariable(LS, Var);
1260 }
1261
1262 void DwarfDebug::addNonArgumentScopeVariable(LexicalScope *LS,
1263                                              DbgVariable *Var) {
1264   SmallVectorImpl<DbgVariable *> &Vars = ScopeVariables[LS];
1265   DIVariable DV = Var->getVariable();
1266   // Variables with positive arg numbers are parameters.
1267   if (unsigned ArgNum = DV.getArgNumber()) {
1268     // Keep all parameters in order at the start of the variable list to ensure
1269     // function types are correct (no out-of-order parameters)
1270     //
1271     // This could be improved by only doing it for optimized builds (unoptimized
1272     // builds have the right order to begin with), searching from the back (this
1273     // would catch the unoptimized case quickly), or doing a binary search
1274     // rather than linear search.
1275     SmallVectorImpl<DbgVariable *>::iterator I = Vars.begin();
1276     while (I != Vars.end()) {
1277       unsigned CurNum = (*I)->getVariable().getArgNumber();
1278       // A local (non-parameter) variable has been found, insert immediately
1279       // before it.
1280       if (CurNum == 0)
1281         break;
1282       // A later indexed parameter has been found, insert immediately before it.
1283       if (CurNum > ArgNum)
1284         break;
1285       ++I;
1286     }
1287     Vars.insert(I, Var);
1288     return;
1289   }
1290
1291   Vars.push_back(Var);
1292 }
1293
1294 // Gather and emit post-function debug information.
1295 void DwarfDebug::endFunction(const MachineFunction *MF) {
1296   assert(CurFn == MF &&
1297       "endFunction should be called with the same function as beginFunction");
1298
1299   if (!MMI->hasDebugInfo() || LScopes.empty() ||
1300       !FunctionDIs.count(MF->getFunction())) {
1301     // If we don't have a lexical scope for this function then there will
1302     // be a hole in the range information. Keep note of this by setting the
1303     // previously used section to nullptr.
1304     PrevCU = nullptr;
1305     CurFn = nullptr;
1306     return;
1307   }
1308
1309   // Define end label for subprogram.
1310   FunctionEndSym = Asm->GetTempSymbol("func_end", Asm->getFunctionNumber());
1311   // Assumes in correct section after the entry point.
1312   Asm->OutStreamer.EmitLabel(FunctionEndSym);
1313
1314   // Set DwarfDwarfCompileUnitID in MCContext to default value.
1315   Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1316
1317   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1318   DISubprogram SP(FnScope->getScopeNode());
1319   DwarfCompileUnit &TheCU = *SPMap.lookup(SP);
1320
1321   SmallPtrSet<const MDNode *, 16> ProcessedVars;
1322   collectVariableInfo(TheCU, SP, ProcessedVars);
1323
1324   // Add the range of this function to the list of ranges for the CU.
1325   TheCU.addRange(RangeSpan(FunctionBeginSym, FunctionEndSym));
1326
1327   // Under -gmlt, skip building the subprogram if there are no inlined
1328   // subroutines inside it.
1329   if (TheCU.getCUNode().getEmissionKind() == DIBuilder::LineTablesOnly &&
1330       LScopes.getAbstractScopesList().empty() && !IsDarwin) {
1331     assert(ScopeVariables.empty());
1332     assert(CurrentFnArguments.empty());
1333     assert(DbgValues.empty());
1334     // FIXME: This wouldn't be true in LTO with a -g (with inlining) CU followed
1335     // by a -gmlt CU. Add a test and remove this assertion.
1336     assert(AbstractVariables.empty());
1337     LabelsBeforeInsn.clear();
1338     LabelsAfterInsn.clear();
1339     PrevLabel = nullptr;
1340     CurFn = nullptr;
1341     return;
1342   }
1343
1344 #ifndef NDEBUG
1345   size_t NumAbstractScopes = LScopes.getAbstractScopesList().size();
1346 #endif
1347   // Construct abstract scopes.
1348   for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
1349     DISubprogram SP(AScope->getScopeNode());
1350     assert(SP.isSubprogram());
1351     // Collect info for variables that were optimized out.
1352     DIArray Variables = SP.getVariables();
1353     for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1354       DIVariable DV(Variables.getElement(i));
1355       assert(DV && DV.isVariable());
1356       if (!ProcessedVars.insert(DV))
1357         continue;
1358       ensureAbstractVariableIsCreated(DV, DV.getContext());
1359       assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
1360              && "ensureAbstractVariableIsCreated inserted abstract scopes");
1361     }
1362     constructAbstractSubprogramScopeDIE(AScope);
1363   }
1364
1365   TheCU.constructSubprogramScopeDIE(FnScope);
1366
1367   // Clear debug info
1368   // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the
1369   // DbgVariables except those that are also in AbstractVariables (since they
1370   // can be used cross-function)
1371   ScopeVariables.clear();
1372   CurrentFnArguments.clear();
1373   DbgValues.clear();
1374   LabelsBeforeInsn.clear();
1375   LabelsAfterInsn.clear();
1376   PrevLabel = nullptr;
1377   CurFn = nullptr;
1378 }
1379
1380 // Register a source line with debug info. Returns the  unique label that was
1381 // emitted and which provides correspondence to the source line list.
1382 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1383                                   unsigned Flags) {
1384   StringRef Fn;
1385   StringRef Dir;
1386   unsigned Src = 1;
1387   unsigned Discriminator = 0;
1388   if (DIScope Scope = DIScope(S)) {
1389     assert(Scope.isScope());
1390     Fn = Scope.getFilename();
1391     Dir = Scope.getDirectory();
1392     if (Scope.isLexicalBlockFile())
1393       Discriminator = DILexicalBlockFile(S).getDiscriminator();
1394
1395     unsigned CUID = Asm->OutStreamer.getContext().getDwarfCompileUnitID();
1396     Src = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID])
1397               .getOrCreateSourceID(Fn, Dir);
1398   }
1399   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0,
1400                                          Discriminator, Fn);
1401 }
1402
1403 //===----------------------------------------------------------------------===//
1404 // Emit Methods
1405 //===----------------------------------------------------------------------===//
1406
1407 // Emit initial Dwarf sections with a label at the start of each one.
1408 void DwarfDebug::emitSectionLabels() {
1409   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1410
1411   // Dwarf sections base addresses.
1412   DwarfInfoSectionSym =
1413       emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1414   if (useSplitDwarf()) {
1415     DwarfInfoDWOSectionSym =
1416         emitSectionSym(Asm, TLOF.getDwarfInfoDWOSection(), "section_info_dwo");
1417     DwarfTypesDWOSectionSym =
1418         emitSectionSym(Asm, TLOF.getDwarfTypesDWOSection(), "section_types_dwo");
1419   }
1420   DwarfAbbrevSectionSym =
1421       emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1422   if (useSplitDwarf())
1423     DwarfAbbrevDWOSectionSym = emitSectionSym(
1424         Asm, TLOF.getDwarfAbbrevDWOSection(), "section_abbrev_dwo");
1425   if (GenerateARangeSection)
1426     emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1427
1428   DwarfLineSectionSym =
1429       emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1430   if (GenerateGnuPubSections) {
1431     DwarfGnuPubNamesSectionSym =
1432         emitSectionSym(Asm, TLOF.getDwarfGnuPubNamesSection());
1433     DwarfGnuPubTypesSectionSym =
1434         emitSectionSym(Asm, TLOF.getDwarfGnuPubTypesSection());
1435   } else if (HasDwarfPubSections) {
1436     emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1437     emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1438   }
1439
1440   DwarfStrSectionSym =
1441       emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
1442   if (useSplitDwarf()) {
1443     DwarfStrDWOSectionSym =
1444         emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
1445     DwarfAddrSectionSym =
1446         emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
1447     DwarfDebugLocSectionSym =
1448         emitSectionSym(Asm, TLOF.getDwarfLocDWOSection(), "skel_loc");
1449   } else
1450     DwarfDebugLocSectionSym =
1451         emitSectionSym(Asm, TLOF.getDwarfLocSection(), "section_debug_loc");
1452   DwarfDebugRangeSectionSym =
1453       emitSectionSym(Asm, TLOF.getDwarfRangesSection(), "debug_range");
1454 }
1455
1456 // Recursively emits a debug information entry.
1457 void DwarfDebug::emitDIE(DIE &Die) {
1458   // Get the abbreviation for this DIE.
1459   const DIEAbbrev &Abbrev = Die.getAbbrev();
1460
1461   // Emit the code (index) for the abbreviation.
1462   if (Asm->isVerbose())
1463     Asm->OutStreamer.AddComment("Abbrev [" + Twine(Abbrev.getNumber()) +
1464                                 "] 0x" + Twine::utohexstr(Die.getOffset()) +
1465                                 ":0x" + Twine::utohexstr(Die.getSize()) + " " +
1466                                 dwarf::TagString(Abbrev.getTag()));
1467   Asm->EmitULEB128(Abbrev.getNumber());
1468
1469   const SmallVectorImpl<DIEValue *> &Values = Die.getValues();
1470   const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData();
1471
1472   // Emit the DIE attribute values.
1473   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1474     dwarf::Attribute Attr = AbbrevData[i].getAttribute();
1475     dwarf::Form Form = AbbrevData[i].getForm();
1476     assert(Form && "Too many attributes for DIE (check abbreviation)");
1477
1478     if (Asm->isVerbose()) {
1479       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1480       if (Attr == dwarf::DW_AT_accessibility)
1481         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(
1482             cast<DIEInteger>(Values[i])->getValue()));
1483     }
1484
1485     // Emit an attribute using the defined form.
1486     Values[i]->EmitValue(Asm, Form);
1487   }
1488
1489   // Emit the DIE children if any.
1490   if (Abbrev.hasChildren()) {
1491     for (auto &Child : Die.getChildren())
1492       emitDIE(*Child);
1493
1494     Asm->OutStreamer.AddComment("End Of Children Mark");
1495     Asm->EmitInt8(0);
1496   }
1497 }
1498
1499 // Emit the debug info section.
1500 void DwarfDebug::emitDebugInfo() {
1501   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1502
1503   Holder.emitUnits(DwarfAbbrevSectionSym);
1504 }
1505
1506 // Emit the abbreviation section.
1507 void DwarfDebug::emitAbbreviations() {
1508   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1509
1510   Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1511 }
1512
1513 // Emit the last address of the section and the end of the line matrix.
1514 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1515   // Define last address of section.
1516   Asm->OutStreamer.AddComment("Extended Op");
1517   Asm->EmitInt8(0);
1518
1519   Asm->OutStreamer.AddComment("Op size");
1520   Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
1521   Asm->OutStreamer.AddComment("DW_LNE_set_address");
1522   Asm->EmitInt8(dwarf::DW_LNE_set_address);
1523
1524   Asm->OutStreamer.AddComment("Section end label");
1525
1526   Asm->OutStreamer.EmitSymbolValue(
1527       Asm->GetTempSymbol("section_end", SectionEnd),
1528       Asm->getDataLayout().getPointerSize());
1529
1530   // Mark end of matrix.
1531   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1532   Asm->EmitInt8(0);
1533   Asm->EmitInt8(1);
1534   Asm->EmitInt8(1);
1535 }
1536
1537 void DwarfDebug::emitAccel(DwarfAccelTable &Accel, const MCSection *Section,
1538                            StringRef TableName, StringRef SymName) {
1539   Accel.FinalizeTable(Asm, TableName);
1540   Asm->OutStreamer.SwitchSection(Section);
1541   auto *SectionBegin = Asm->GetTempSymbol(SymName);
1542   Asm->OutStreamer.EmitLabel(SectionBegin);
1543
1544   // Emit the full data.
1545   Accel.Emit(Asm, SectionBegin, &InfoHolder, DwarfStrSectionSym);
1546 }
1547
1548 // Emit visible names into a hashed accelerator table section.
1549 void DwarfDebug::emitAccelNames() {
1550   emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(),
1551             "Names", "names_begin");
1552 }
1553
1554 // Emit objective C classes and categories into a hashed accelerator table
1555 // section.
1556 void DwarfDebug::emitAccelObjC() {
1557   emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(),
1558             "ObjC", "objc_begin");
1559 }
1560
1561 // Emit namespace dies into a hashed accelerator table.
1562 void DwarfDebug::emitAccelNamespaces() {
1563   emitAccel(AccelNamespace,
1564             Asm->getObjFileLowering().getDwarfAccelNamespaceSection(),
1565             "namespac", "namespac_begin");
1566 }
1567
1568 // Emit type dies into a hashed accelerator table.
1569 void DwarfDebug::emitAccelTypes() {
1570   emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(),
1571             "types", "types_begin");
1572 }
1573
1574 // Public name handling.
1575 // The format for the various pubnames:
1576 //
1577 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
1578 // for the DIE that is named.
1579 //
1580 // gnu pubnames - offset/index value/name tuples where the offset is the offset
1581 // into the CU and the index value is computed according to the type of value
1582 // for the DIE that is named.
1583 //
1584 // For type units the offset is the offset of the skeleton DIE. For split dwarf
1585 // it's the offset within the debug_info/debug_types dwo section, however, the
1586 // reference in the pubname header doesn't change.
1587
1588 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
1589 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU,
1590                                                         const DIE *Die) {
1591   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
1592
1593   // We could have a specification DIE that has our most of our knowledge,
1594   // look for that now.
1595   DIEValue *SpecVal = Die->findAttribute(dwarf::DW_AT_specification);
1596   if (SpecVal) {
1597     DIE &SpecDIE = cast<DIEEntry>(SpecVal)->getEntry();
1598     if (SpecDIE.findAttribute(dwarf::DW_AT_external))
1599       Linkage = dwarf::GIEL_EXTERNAL;
1600   } else if (Die->findAttribute(dwarf::DW_AT_external))
1601     Linkage = dwarf::GIEL_EXTERNAL;
1602
1603   switch (Die->getTag()) {
1604   case dwarf::DW_TAG_class_type:
1605   case dwarf::DW_TAG_structure_type:
1606   case dwarf::DW_TAG_union_type:
1607   case dwarf::DW_TAG_enumeration_type:
1608     return dwarf::PubIndexEntryDescriptor(
1609         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
1610                               ? dwarf::GIEL_STATIC
1611                               : dwarf::GIEL_EXTERNAL);
1612   case dwarf::DW_TAG_typedef:
1613   case dwarf::DW_TAG_base_type:
1614   case dwarf::DW_TAG_subrange_type:
1615     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
1616   case dwarf::DW_TAG_namespace:
1617     return dwarf::GIEK_TYPE;
1618   case dwarf::DW_TAG_subprogram:
1619     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
1620   case dwarf::DW_TAG_constant:
1621   case dwarf::DW_TAG_variable:
1622     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
1623   case dwarf::DW_TAG_enumerator:
1624     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
1625                                           dwarf::GIEL_STATIC);
1626   default:
1627     return dwarf::GIEK_NONE;
1628   }
1629 }
1630
1631 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
1632 ///
1633 void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
1634   const MCSection *PSec =
1635       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
1636                : Asm->getObjFileLowering().getDwarfPubNamesSection();
1637
1638   emitDebugPubSection(GnuStyle, PSec, "Names", &DwarfUnit::getGlobalNames);
1639 }
1640
1641 void DwarfDebug::emitDebugPubSection(
1642     bool GnuStyle, const MCSection *PSec, StringRef Name,
1643     const StringMap<const DIE *> &(DwarfUnit::*Accessor)() const) {
1644   for (const auto &NU : CUMap) {
1645     DwarfCompileUnit *TheU = NU.second;
1646
1647     const auto &Globals = (TheU->*Accessor)();
1648
1649     if (Globals.empty())
1650       continue;
1651
1652     if (auto Skeleton = static_cast<DwarfCompileUnit *>(TheU->getSkeleton()))
1653       TheU = Skeleton;
1654     unsigned ID = TheU->getUniqueID();
1655
1656     // Start the dwarf pubnames section.
1657     Asm->OutStreamer.SwitchSection(PSec);
1658
1659     // Emit the header.
1660     Asm->OutStreamer.AddComment("Length of Public " + Name + " Info");
1661     MCSymbol *BeginLabel = Asm->GetTempSymbol("pub" + Name + "_begin", ID);
1662     MCSymbol *EndLabel = Asm->GetTempSymbol("pub" + Name + "_end", ID);
1663     Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);
1664
1665     Asm->OutStreamer.EmitLabel(BeginLabel);
1666
1667     Asm->OutStreamer.AddComment("DWARF Version");
1668     Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION);
1669
1670     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1671     Asm->EmitSectionOffset(TheU->getLabelBegin(), TheU->getSectionSym());
1672
1673     Asm->OutStreamer.AddComment("Compilation Unit Length");
1674     Asm->EmitLabelDifference(TheU->getLabelEnd(), TheU->getLabelBegin(), 4);
1675
1676     // Emit the pubnames for this compilation unit.
1677     for (const auto &GI : Globals) {
1678       const char *Name = GI.getKeyData();
1679       const DIE *Entity = GI.second;
1680
1681       Asm->OutStreamer.AddComment("DIE offset");
1682       Asm->EmitInt32(Entity->getOffset());
1683
1684       if (GnuStyle) {
1685         dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity);
1686         Asm->OutStreamer.AddComment(
1687             Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
1688             dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
1689         Asm->EmitInt8(Desc.toBits());
1690       }
1691
1692       Asm->OutStreamer.AddComment("External Name");
1693       Asm->OutStreamer.EmitBytes(StringRef(Name, GI.getKeyLength() + 1));
1694     }
1695
1696     Asm->OutStreamer.AddComment("End Mark");
1697     Asm->EmitInt32(0);
1698     Asm->OutStreamer.EmitLabel(EndLabel);
1699   }
1700 }
1701
1702 void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
1703   const MCSection *PSec =
1704       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
1705                : Asm->getObjFileLowering().getDwarfPubTypesSection();
1706
1707   emitDebugPubSection(GnuStyle, PSec, "Types", &DwarfUnit::getGlobalTypes);
1708 }
1709
1710 // Emit visible names into a debug str section.
1711 void DwarfDebug::emitDebugStr() {
1712   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1713   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
1714 }
1715
1716 /// Emits an optimal (=sorted) sequence of DW_OP_pieces.
1717 void DwarfDebug::emitLocPieces(ByteStreamer &Streamer,
1718                                const DITypeIdentifierMap &Map,
1719                                ArrayRef<DebugLocEntry::Value> Values) {
1720   assert(std::all_of(Values.begin(), Values.end(), [](DebugLocEntry::Value P) {
1721         return P.isVariablePiece();
1722       }) && "all values are expected to be pieces");
1723   assert(std::is_sorted(Values.begin(), Values.end()) &&
1724          "pieces are expected to be sorted");
1725
1726   unsigned Offset = 0;
1727   for (auto Piece : Values) {
1728     DIExpression Expr = Piece.getExpression();
1729     unsigned PieceOffset = Expr.getPieceOffset();
1730     unsigned PieceSize = Expr.getPieceSize();
1731     assert(Offset <= PieceOffset && "overlapping or duplicate pieces");
1732     if (Offset < PieceOffset) {
1733       // The DWARF spec seriously mandates pieces with no locations for gaps.
1734       Asm->EmitDwarfOpPiece(Streamer, (PieceOffset-Offset)*8);
1735       Offset += PieceOffset-Offset;
1736     }
1737
1738     Offset += PieceSize;
1739
1740     const unsigned SizeOfByte = 8;
1741 #ifndef NDEBUG
1742     DIVariable Var = Piece.getVariable();
1743     assert(!Var.isIndirect() && "indirect address for piece");
1744     unsigned VarSize = Var.getSizeInBits(Map);
1745     assert(PieceSize+PieceOffset <= VarSize/SizeOfByte
1746            && "piece is larger than or outside of variable");
1747     assert(PieceSize*SizeOfByte != VarSize
1748            && "piece covers entire variable");
1749 #endif
1750     if (Piece.isLocation() && Piece.getLoc().isReg())
1751       Asm->EmitDwarfRegOpPiece(Streamer,
1752                                Piece.getLoc(),
1753                                PieceSize*SizeOfByte);
1754     else {
1755       emitDebugLocValue(Streamer, Piece);
1756       Asm->EmitDwarfOpPiece(Streamer, PieceSize*SizeOfByte);
1757     }
1758   }
1759 }
1760
1761
1762 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer,
1763                                    const DebugLocEntry &Entry) {
1764   const DebugLocEntry::Value Value = Entry.getValues()[0];
1765   if (Value.isVariablePiece())
1766     // Emit all pieces that belong to the same variable and range.
1767     return emitLocPieces(Streamer, TypeIdentifierMap, Entry.getValues());
1768
1769   assert(Entry.getValues().size() == 1 && "only pieces may have >1 value");
1770   emitDebugLocValue(Streamer, Value);
1771 }
1772
1773 void DwarfDebug::emitDebugLocValue(ByteStreamer &Streamer,
1774                                    const DebugLocEntry::Value &Value) {
1775   DIVariable DV = Value.getVariable();
1776   // Regular entry.
1777   if (Value.isInt()) {
1778     DIBasicType BTy(resolve(DV.getType()));
1779     if (BTy.Verify() && (BTy.getEncoding() == dwarf::DW_ATE_signed ||
1780                          BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
1781       Streamer.EmitInt8(dwarf::DW_OP_consts, "DW_OP_consts");
1782       Streamer.EmitSLEB128(Value.getInt());
1783     } else {
1784       Streamer.EmitInt8(dwarf::DW_OP_constu, "DW_OP_constu");
1785       Streamer.EmitULEB128(Value.getInt());
1786     }
1787   } else if (Value.isLocation()) {
1788     MachineLocation Loc = Value.getLoc();
1789     DIExpression Expr = Value.getExpression();
1790     if (!Expr)
1791       // Regular entry.
1792       Asm->EmitDwarfRegOp(Streamer, Loc, DV.isIndirect());
1793     else {
1794       // Complex address entry.
1795       unsigned N = Expr.getNumElements();
1796       unsigned i = 0;
1797       if (N >= 2 && Expr.getElement(0) == dwarf::DW_OP_plus) {
1798         if (Loc.getOffset()) {
1799           i = 2;
1800           Asm->EmitDwarfRegOp(Streamer, Loc, DV.isIndirect());
1801           Streamer.EmitInt8(dwarf::DW_OP_deref, "DW_OP_deref");
1802           Streamer.EmitInt8(dwarf::DW_OP_plus_uconst, "DW_OP_plus_uconst");
1803           Streamer.EmitSLEB128(Expr.getElement(1));
1804         } else {
1805           // If first address element is OpPlus then emit
1806           // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
1807           MachineLocation TLoc(Loc.getReg(), Expr.getElement(1));
1808           Asm->EmitDwarfRegOp(Streamer, TLoc, DV.isIndirect());
1809           i = 2;
1810         }
1811       } else {
1812         Asm->EmitDwarfRegOp(Streamer, Loc, DV.isIndirect());
1813       }
1814
1815       // Emit remaining complex address elements.
1816       for (; i < N; ++i) {
1817         uint64_t Element = Expr.getElement(i);
1818         if (Element == dwarf::DW_OP_plus) {
1819           Streamer.EmitInt8(dwarf::DW_OP_plus_uconst, "DW_OP_plus_uconst");
1820           Streamer.EmitULEB128(Expr.getElement(++i));
1821         } else if (Element == dwarf::DW_OP_deref) {
1822           if (!Loc.isReg())
1823             Streamer.EmitInt8(dwarf::DW_OP_deref, "DW_OP_deref");
1824         } else if (Element == dwarf::DW_OP_piece) {
1825           i += 3;
1826           // handled in emitDebugLocEntry.
1827         } else
1828           llvm_unreachable("unknown Opcode found in complex address");
1829       }
1830     }
1831   }
1832   // else ... ignore constant fp. There is not any good way to
1833   // to represent them here in dwarf.
1834   // FIXME: ^
1835 }
1836
1837 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocEntry &Entry) {
1838   Asm->OutStreamer.AddComment("Loc expr size");
1839   MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
1840   MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
1841   Asm->EmitLabelDifference(end, begin, 2);
1842   Asm->OutStreamer.EmitLabel(begin);
1843   // Emit the entry.
1844   APByteStreamer Streamer(*Asm);
1845   emitDebugLocEntry(Streamer, Entry);
1846   // Close the range.
1847   Asm->OutStreamer.EmitLabel(end);
1848 }
1849
1850 // Emit locations into the debug loc section.
1851 void DwarfDebug::emitDebugLoc() {
1852   // Start the dwarf loc section.
1853   Asm->OutStreamer.SwitchSection(
1854       Asm->getObjFileLowering().getDwarfLocSection());
1855   unsigned char Size = Asm->getDataLayout().getPointerSize();
1856   for (const auto &DebugLoc : DotDebugLocEntries) {
1857     Asm->OutStreamer.EmitLabel(DebugLoc.Label);
1858     const DwarfCompileUnit *CU = DebugLoc.CU;
1859     assert(!CU->getRanges().empty());
1860     for (const auto &Entry : DebugLoc.List) {
1861       // Set up the range. This range is relative to the entry point of the
1862       // compile unit. This is a hard coded 0 for low_pc when we're emitting
1863       // ranges, or the DW_AT_low_pc on the compile unit otherwise.
1864       if (CU->getRanges().size() == 1) {
1865         // Grab the begin symbol from the first range as our base.
1866         const MCSymbol *Base = CU->getRanges()[0].getStart();
1867         Asm->EmitLabelDifference(Entry.getBeginSym(), Base, Size);
1868         Asm->EmitLabelDifference(Entry.getEndSym(), Base, Size);
1869       } else {
1870         Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size);
1871         Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size);
1872       }
1873
1874       emitDebugLocEntryLocation(Entry);
1875     }
1876     Asm->OutStreamer.EmitIntValue(0, Size);
1877     Asm->OutStreamer.EmitIntValue(0, Size);
1878   }
1879 }
1880
1881 void DwarfDebug::emitDebugLocDWO() {
1882   Asm->OutStreamer.SwitchSection(
1883       Asm->getObjFileLowering().getDwarfLocDWOSection());
1884   for (const auto &DebugLoc : DotDebugLocEntries) {
1885     Asm->OutStreamer.EmitLabel(DebugLoc.Label);
1886     for (const auto &Entry : DebugLoc.List) {
1887       // Just always use start_length for now - at least that's one address
1888       // rather than two. We could get fancier and try to, say, reuse an
1889       // address we know we've emitted elsewhere (the start of the function?
1890       // The start of the CU or CU subrange that encloses this range?)
1891       Asm->EmitInt8(dwarf::DW_LLE_start_length_entry);
1892       unsigned idx = AddrPool.getIndex(Entry.getBeginSym());
1893       Asm->EmitULEB128(idx);
1894       Asm->EmitLabelDifference(Entry.getEndSym(), Entry.getBeginSym(), 4);
1895
1896       emitDebugLocEntryLocation(Entry);
1897     }
1898     Asm->EmitInt8(dwarf::DW_LLE_end_of_list_entry);
1899   }
1900 }
1901
1902 struct ArangeSpan {
1903   const MCSymbol *Start, *End;
1904 };
1905
1906 // Emit a debug aranges section, containing a CU lookup for any
1907 // address we can tie back to a CU.
1908 void DwarfDebug::emitDebugARanges() {
1909   // Start the dwarf aranges section.
1910   Asm->OutStreamer.SwitchSection(
1911       Asm->getObjFileLowering().getDwarfARangesSection());
1912
1913   typedef DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> SpansType;
1914
1915   SpansType Spans;
1916
1917   // Build a list of sections used.
1918   std::vector<const MCSection *> Sections;
1919   for (const auto &it : SectionMap) {
1920     const MCSection *Section = it.first;
1921     Sections.push_back(Section);
1922   }
1923
1924   // Sort the sections into order.
1925   // This is only done to ensure consistent output order across different runs.
1926   std::sort(Sections.begin(), Sections.end(), SectionSort);
1927
1928   // Build a set of address spans, sorted by CU.
1929   for (const MCSection *Section : Sections) {
1930     SmallVector<SymbolCU, 8> &List = SectionMap[Section];
1931     if (List.size() < 2)
1932       continue;
1933
1934     // Sort the symbols by offset within the section.
1935     std::sort(List.begin(), List.end(),
1936               [&](const SymbolCU &A, const SymbolCU &B) {
1937       unsigned IA = A.Sym ? Asm->OutStreamer.GetSymbolOrder(A.Sym) : 0;
1938       unsigned IB = B.Sym ? Asm->OutStreamer.GetSymbolOrder(B.Sym) : 0;
1939
1940       // Symbols with no order assigned should be placed at the end.
1941       // (e.g. section end labels)
1942       if (IA == 0)
1943         return false;
1944       if (IB == 0)
1945         return true;
1946       return IA < IB;
1947     });
1948
1949     // If we have no section (e.g. common), just write out
1950     // individual spans for each symbol.
1951     if (!Section) {
1952       for (const SymbolCU &Cur : List) {
1953         ArangeSpan Span;
1954         Span.Start = Cur.Sym;
1955         Span.End = nullptr;
1956         if (Cur.CU)
1957           Spans[Cur.CU].push_back(Span);
1958       }
1959     } else {
1960       // Build spans between each label.
1961       const MCSymbol *StartSym = List[0].Sym;
1962       for (size_t n = 1, e = List.size(); n < e; n++) {
1963         const SymbolCU &Prev = List[n - 1];
1964         const SymbolCU &Cur = List[n];
1965
1966         // Try and build the longest span we can within the same CU.
1967         if (Cur.CU != Prev.CU) {
1968           ArangeSpan Span;
1969           Span.Start = StartSym;
1970           Span.End = Cur.Sym;
1971           Spans[Prev.CU].push_back(Span);
1972           StartSym = Cur.Sym;
1973         }
1974       }
1975     }
1976   }
1977
1978   unsigned PtrSize = Asm->getDataLayout().getPointerSize();
1979
1980   // Build a list of CUs used.
1981   std::vector<DwarfCompileUnit *> CUs;
1982   for (const auto &it : Spans) {
1983     DwarfCompileUnit *CU = it.first;
1984     CUs.push_back(CU);
1985   }
1986
1987   // Sort the CU list (again, to ensure consistent output order).
1988   std::sort(CUs.begin(), CUs.end(), [](const DwarfUnit *A, const DwarfUnit *B) {
1989     return A->getUniqueID() < B->getUniqueID();
1990   });
1991
1992   // Emit an arange table for each CU we used.
1993   for (DwarfCompileUnit *CU : CUs) {
1994     std::vector<ArangeSpan> &List = Spans[CU];
1995
1996     // Emit size of content not including length itself.
1997     unsigned ContentSize =
1998         sizeof(int16_t) + // DWARF ARange version number
1999         sizeof(int32_t) + // Offset of CU in the .debug_info section
2000         sizeof(int8_t) +  // Pointer Size (in bytes)
2001         sizeof(int8_t);   // Segment Size (in bytes)
2002
2003     unsigned TupleSize = PtrSize * 2;
2004
2005     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
2006     unsigned Padding =
2007         OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize);
2008
2009     ContentSize += Padding;
2010     ContentSize += (List.size() + 1) * TupleSize;
2011
2012     // For each compile unit, write the list of spans it covers.
2013     Asm->OutStreamer.AddComment("Length of ARange Set");
2014     Asm->EmitInt32(ContentSize);
2015     Asm->OutStreamer.AddComment("DWARF Arange version number");
2016     Asm->EmitInt16(dwarf::DW_ARANGES_VERSION);
2017     Asm->OutStreamer.AddComment("Offset Into Debug Info Section");
2018     Asm->EmitSectionOffset(CU->getLocalLabelBegin(), CU->getLocalSectionSym());
2019     Asm->OutStreamer.AddComment("Address Size (in bytes)");
2020     Asm->EmitInt8(PtrSize);
2021     Asm->OutStreamer.AddComment("Segment Size (in bytes)");
2022     Asm->EmitInt8(0);
2023
2024     Asm->OutStreamer.EmitFill(Padding, 0xff);
2025
2026     for (const ArangeSpan &Span : List) {
2027       Asm->EmitLabelReference(Span.Start, PtrSize);
2028
2029       // Calculate the size as being from the span start to it's end.
2030       if (Span.End) {
2031         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
2032       } else {
2033         // For symbols without an end marker (e.g. common), we
2034         // write a single arange entry containing just that one symbol.
2035         uint64_t Size = SymSize[Span.Start];
2036         if (Size == 0)
2037           Size = 1;
2038
2039         Asm->OutStreamer.EmitIntValue(Size, PtrSize);
2040       }
2041     }
2042
2043     Asm->OutStreamer.AddComment("ARange terminator");
2044     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2045     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2046   }
2047 }
2048
2049 // Emit visible names into a debug ranges section.
2050 void DwarfDebug::emitDebugRanges() {
2051   // Start the dwarf ranges section.
2052   Asm->OutStreamer.SwitchSection(
2053       Asm->getObjFileLowering().getDwarfRangesSection());
2054
2055   // Size for our labels.
2056   unsigned char Size = Asm->getDataLayout().getPointerSize();
2057
2058   // Grab the specific ranges for the compile units in the module.
2059   for (const auto &I : CUMap) {
2060     DwarfCompileUnit *TheCU = I.second;
2061
2062     // Iterate over the misc ranges for the compile units in the module.
2063     for (const RangeSpanList &List : TheCU->getRangeLists()) {
2064       // Emit our symbol so we can find the beginning of the range.
2065       Asm->OutStreamer.EmitLabel(List.getSym());
2066
2067       for (const RangeSpan &Range : List.getRanges()) {
2068         const MCSymbol *Begin = Range.getStart();
2069         const MCSymbol *End = Range.getEnd();
2070         assert(Begin && "Range without a begin symbol?");
2071         assert(End && "Range without an end symbol?");
2072         if (TheCU->getRanges().size() == 1) {
2073           // Grab the begin symbol from the first range as our base.
2074           const MCSymbol *Base = TheCU->getRanges()[0].getStart();
2075           Asm->EmitLabelDifference(Begin, Base, Size);
2076           Asm->EmitLabelDifference(End, Base, Size);
2077         } else {
2078           Asm->OutStreamer.EmitSymbolValue(Begin, Size);
2079           Asm->OutStreamer.EmitSymbolValue(End, Size);
2080         }
2081       }
2082
2083       // And terminate the list with two 0 values.
2084       Asm->OutStreamer.EmitIntValue(0, Size);
2085       Asm->OutStreamer.EmitIntValue(0, Size);
2086     }
2087
2088     // Now emit a range for the CU itself.
2089     if (TheCU->getRanges().size() > 1) {
2090       Asm->OutStreamer.EmitLabel(
2091           Asm->GetTempSymbol("cu_ranges", TheCU->getUniqueID()));
2092       for (const RangeSpan &Range : TheCU->getRanges()) {
2093         const MCSymbol *Begin = Range.getStart();
2094         const MCSymbol *End = Range.getEnd();
2095         assert(Begin && "Range without a begin symbol?");
2096         assert(End && "Range without an end symbol?");
2097         Asm->OutStreamer.EmitSymbolValue(Begin, Size);
2098         Asm->OutStreamer.EmitSymbolValue(End, Size);
2099       }
2100       // And terminate the list with two 0 values.
2101       Asm->OutStreamer.EmitIntValue(0, Size);
2102       Asm->OutStreamer.EmitIntValue(0, Size);
2103     }
2104   }
2105 }
2106
2107 // DWARF5 Experimental Separate Dwarf emitters.
2108
2109 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die,
2110                                   std::unique_ptr<DwarfUnit> NewU) {
2111   NewU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2112                        U.getCUNode().getSplitDebugFilename());
2113
2114   if (!CompilationDir.empty())
2115     NewU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2116
2117   addGnuPubAttributes(*NewU, Die);
2118
2119   SkeletonHolder.addUnit(std::move(NewU));
2120 }
2121
2122 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2123 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2124 // DW_AT_addr_base, DW_AT_ranges_base.
2125 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) {
2126
2127   auto OwnedUnit = make_unique<DwarfCompileUnit>(
2128       CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder);
2129   DwarfCompileUnit &NewCU = *OwnedUnit;
2130   NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
2131                     DwarfInfoSectionSym);
2132
2133   NewCU.initStmtList(DwarfLineSectionSym);
2134
2135   initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit));
2136
2137   return NewCU;
2138 }
2139
2140 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2141 // compile units that would normally be in debug_info.
2142 void DwarfDebug::emitDebugInfoDWO() {
2143   assert(useSplitDwarf() && "No split dwarf debug info?");
2144   // Don't pass an abbrev symbol, using a constant zero instead so as not to
2145   // emit relocations into the dwo file.
2146   InfoHolder.emitUnits(/* AbbrevSymbol */ nullptr);
2147 }
2148
2149 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2150 // abbreviations for the .debug_info.dwo section.
2151 void DwarfDebug::emitDebugAbbrevDWO() {
2152   assert(useSplitDwarf() && "No split dwarf?");
2153   InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
2154 }
2155
2156 void DwarfDebug::emitDebugLineDWO() {
2157   assert(useSplitDwarf() && "No split dwarf?");
2158   Asm->OutStreamer.SwitchSection(
2159       Asm->getObjFileLowering().getDwarfLineDWOSection());
2160   SplitTypeUnitFileTable.Emit(Asm->OutStreamer);
2161 }
2162
2163 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2164 // string section and is identical in format to traditional .debug_str
2165 // sections.
2166 void DwarfDebug::emitDebugStrDWO() {
2167   assert(useSplitDwarf() && "No split dwarf?");
2168   const MCSection *OffSec =
2169       Asm->getObjFileLowering().getDwarfStrOffDWOSection();
2170   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
2171                          OffSec);
2172 }
2173
2174 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) {
2175   if (!useSplitDwarf())
2176     return nullptr;
2177   if (SingleCU)
2178     SplitTypeUnitFileTable.setCompilationDir(CU.getCUNode().getDirectory());
2179   return &SplitTypeUnitFileTable;
2180 }
2181
2182 static uint64_t makeTypeSignature(StringRef Identifier) {
2183   MD5 Hash;
2184   Hash.update(Identifier);
2185   // ... take the least significant 8 bytes and return those. Our MD5
2186   // implementation always returns its results in little endian, swap bytes
2187   // appropriately.
2188   MD5::MD5Result Result;
2189   Hash.final(Result);
2190   return *reinterpret_cast<support::ulittle64_t *>(Result + 8);
2191 }
2192
2193 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
2194                                       StringRef Identifier, DIE &RefDie,
2195                                       DICompositeType CTy) {
2196   // Fast path if we're building some type units and one has already used the
2197   // address pool we know we're going to throw away all this work anyway, so
2198   // don't bother building dependent types.
2199   if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed())
2200     return;
2201
2202   const DwarfTypeUnit *&TU = DwarfTypeUnits[CTy];
2203   if (TU) {
2204     CU.addDIETypeSignature(RefDie, *TU);
2205     return;
2206   }
2207
2208   bool TopLevelType = TypeUnitsUnderConstruction.empty();
2209   AddrPool.resetUsedFlag();
2210
2211   auto OwnedUnit = make_unique<DwarfTypeUnit>(
2212       InfoHolder.getUnits().size() + TypeUnitsUnderConstruction.size(), CU, Asm,
2213       this, &InfoHolder, getDwoLineTable(CU));
2214   DwarfTypeUnit &NewTU = *OwnedUnit;
2215   DIE &UnitDie = NewTU.getUnitDie();
2216   TU = &NewTU;
2217   TypeUnitsUnderConstruction.push_back(
2218       std::make_pair(std::move(OwnedUnit), CTy));
2219
2220   NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
2221                 CU.getLanguage());
2222
2223   uint64_t Signature = makeTypeSignature(Identifier);
2224   NewTU.setTypeSignature(Signature);
2225
2226   if (useSplitDwarf())
2227     NewTU.initSection(Asm->getObjFileLowering().getDwarfTypesDWOSection(),
2228                       DwarfTypesDWOSectionSym);
2229   else {
2230     CU.applyStmtList(UnitDie);
2231     NewTU.initSection(
2232         Asm->getObjFileLowering().getDwarfTypesSection(Signature));
2233   }
2234
2235   NewTU.setType(NewTU.createTypeDIE(CTy));
2236
2237   if (TopLevelType) {
2238     auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction);
2239     TypeUnitsUnderConstruction.clear();
2240
2241     // Types referencing entries in the address table cannot be placed in type
2242     // units.
2243     if (AddrPool.hasBeenUsed()) {
2244
2245       // Remove all the types built while building this type.
2246       // This is pessimistic as some of these types might not be dependent on
2247       // the type that used an address.
2248       for (const auto &TU : TypeUnitsToAdd)
2249         DwarfTypeUnits.erase(TU.second);
2250
2251       // Construct this type in the CU directly.
2252       // This is inefficient because all the dependent types will be rebuilt
2253       // from scratch, including building them in type units, discovering that
2254       // they depend on addresses, throwing them out and rebuilding them.
2255       CU.constructTypeDIE(RefDie, CTy);
2256       return;
2257     }
2258
2259     // If the type wasn't dependent on fission addresses, finish adding the type
2260     // and all its dependent types.
2261     for (auto &TU : TypeUnitsToAdd)
2262       InfoHolder.addUnit(std::move(TU.first));
2263   }
2264   CU.addDIETypeSignature(RefDie, NewTU);
2265 }
2266
2267 // Accelerator table mutators - add each name along with its companion
2268 // DIE to the proper table while ensuring that the name that we're going
2269 // to reference is in the string table. We do this since the names we
2270 // add may not only be identical to the names in the DIE.
2271 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) {
2272   if (!useDwarfAccelTables())
2273     return;
2274   AccelNames.AddName(Name, InfoHolder.getStringPool().getSymbol(*Asm, Name),
2275                      &Die);
2276 }
2277
2278 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) {
2279   if (!useDwarfAccelTables())
2280     return;
2281   AccelObjC.AddName(Name, InfoHolder.getStringPool().getSymbol(*Asm, Name),
2282                     &Die);
2283 }
2284
2285 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) {
2286   if (!useDwarfAccelTables())
2287     return;
2288   AccelNamespace.AddName(Name, InfoHolder.getStringPool().getSymbol(*Asm, Name),
2289                          &Die);
2290 }
2291
2292 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) {
2293   if (!useDwarfAccelTables())
2294     return;
2295   AccelTypes.AddName(Name, InfoHolder.getStringPool().getSymbol(*Asm, Name),
2296                      &Die);
2297 }