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