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