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