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