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