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