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