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