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