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