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