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