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