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