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