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