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