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