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