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 "DwarfCompileUnit.h"
18 #include "llvm/Constants.h"
19 #include "llvm/Module.h"
20 #include "llvm/Instructions.h"
21 #include "llvm/CodeGen/MachineFunction.h"
22 #include "llvm/CodeGen/MachineModuleInfo.h"
23 #include "llvm/MC/MCAsmInfo.h"
24 #include "llvm/MC/MCSection.h"
25 #include "llvm/MC/MCStreamer.h"
26 #include "llvm/MC/MCSymbol.h"
27 #include "llvm/Target/Mangler.h"
28 #include "llvm/Target/TargetData.h"
29 #include "llvm/Target/TargetFrameLowering.h"
30 #include "llvm/Target/TargetLoweringObjectFile.h"
31 #include "llvm/Target/TargetMachine.h"
32 #include "llvm/Target/TargetRegisterInfo.h"
33 #include "llvm/Target/TargetOptions.h"
34 #include "llvm/Analysis/DebugInfo.h"
35 #include "llvm/Analysis/DIBuilder.h"
36 #include "llvm/ADT/Statistic.h"
37 #include "llvm/ADT/STLExtras.h"
38 #include "llvm/ADT/StringExtras.h"
39 #include "llvm/Support/CommandLine.h"
40 #include "llvm/Support/Debug.h"
41 #include "llvm/Support/ErrorHandling.h"
42 #include "llvm/Support/ValueHandle.h"
43 #include "llvm/Support/FormattedStream.h"
44 #include "llvm/Support/Timer.h"
45 #include "llvm/Support/Path.h"
46 using namespace llvm;
47 
48 static cl::opt<bool> PrintDbgScope("print-dbgscope", cl::Hidden,
49      cl::desc("Print DbgScope information for each machine instruction"));
50 
51 static cl::opt<bool> DisableDebugInfoPrinting("disable-debug-info-print",
52                                               cl::Hidden,
53      cl::desc("Disable debug info printing"));
54 
55 static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
56      cl::desc("Make an absence of debug location information explicit."),
57      cl::init(false));
58 
59 namespace {
60   const char *DWARFGroupName = "DWARF Emission";
61   const char *DbgTimerName = "DWARF Debug Writer";
62 } // end anonymous namespace
63 
64 //===----------------------------------------------------------------------===//
65 
66 /// Configuration values for initial hash set sizes (log2).
67 ///
68 static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
69 
70 namespace llvm {
71 
72 DIType DbgVariable::getType()               const {
73   DIType Ty = Var.getType();
74   // FIXME: isBlockByrefVariable should be reformulated in terms of complex
75   // addresses instead.
76   if (Var.isBlockByrefVariable()) {
77     /* Byref variables, in Blocks, are declared by the programmer as
78        "SomeType VarName;", but the compiler creates a
79        __Block_byref_x_VarName struct, and gives the variable VarName
80        either the struct, or a pointer to the struct, as its type.  This
81        is necessary for various behind-the-scenes things the compiler
82        needs to do with by-reference variables in blocks.
83 
84        However, as far as the original *programmer* is concerned, the
85        variable should still have type 'SomeType', as originally declared.
86 
87        The following function dives into the __Block_byref_x_VarName
88        struct to find the original type of the variable.  This will be
89        passed back to the code generating the type for the Debug
90        Information Entry for the variable 'VarName'.  'VarName' will then
91        have the original type 'SomeType' in its debug information.
92 
93        The original type 'SomeType' will be the type of the field named
94        'VarName' inside the __Block_byref_x_VarName struct.
95 
96        NOTE: In order for this to not completely fail on the debugger
97        side, the Debug Information Entry for the variable VarName needs to
98        have a DW_AT_location that tells the debugger how to unwind through
99        the pointers and __Block_byref_x_VarName struct to find the actual
100        value of the variable.  The function addBlockByrefType does this.  */
101     DIType subType = Ty;
102     unsigned tag = Ty.getTag();
103 
104     if (tag == dwarf::DW_TAG_pointer_type) {
105       DIDerivedType DTy = DIDerivedType(Ty);
106       subType = DTy.getTypeDerivedFrom();
107     }
108 
109     DICompositeType blockStruct = DICompositeType(subType);
110     DIArray Elements = blockStruct.getTypeArray();
111 
112     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
113       DIDescriptor Element = Elements.getElement(i);
114       DIDerivedType DT = DIDerivedType(Element);
115       if (getName() == DT.getName())
116         return (DT.getTypeDerivedFrom());
117     }
118     return Ty;
119   }
120   return Ty;
121 }
122 
123 //===----------------------------------------------------------------------===//
124 /// DbgRange - This is used to track range of instructions with identical
125 /// debug info scope.
126 ///
127 typedef std::pair<const MachineInstr *, const MachineInstr *> DbgRange;
128 
129 //===----------------------------------------------------------------------===//
130 /// DbgScope - This class is used to track scope information.
131 ///
132 class DbgScope {
133   DbgScope *Parent;                   // Parent to this scope.
134   DIDescriptor Desc;                  // Debug info descriptor for scope.
135   // Location at which this scope is inlined.
136   AssertingVH<const MDNode> InlinedAtLocation;
137   bool AbstractScope;                 // Abstract Scope
138   const MachineInstr *LastInsn;       // Last instruction of this scope.
139   const MachineInstr *FirstInsn;      // First instruction of this scope.
140   unsigned DFSIn, DFSOut;
141   // Scopes defined in scope.  Contents not owned.
142   SmallVector<DbgScope *, 4> Scopes;
143   // Variables declared in scope.  Contents owned.
144   SmallVector<DbgVariable *, 8> Variables;
145   SmallVector<DbgRange, 4> Ranges;
146   // Private state for dump()
147   mutable unsigned IndentLevel;
148 public:
149   DbgScope(DbgScope *P, DIDescriptor D, const MDNode *I = 0)
150     : Parent(P), Desc(D), InlinedAtLocation(I), AbstractScope(false),
151       LastInsn(0), FirstInsn(0),
152       DFSIn(0), DFSOut(0), IndentLevel(0) {}
153   virtual ~DbgScope();
154 
155   // Accessors.
156   DbgScope *getParent()          const { return Parent; }
157   void setParent(DbgScope *P)          { Parent = P; }
158   DIDescriptor getDesc()         const { return Desc; }
159   const MDNode *getInlinedAt()         const { return InlinedAtLocation; }
160   const MDNode *getScopeNode()         const { return Desc; }
161   const SmallVector<DbgScope *, 4> &getScopes() { return Scopes; }
162   const SmallVector<DbgVariable *, 8> &getDbgVariables() { return Variables; }
163   const SmallVector<DbgRange, 4> &getRanges() { return Ranges; }
164 
165   /// openInsnRange - This scope covers instruction range starting from MI.
166   void openInsnRange(const MachineInstr *MI) {
167     if (!FirstInsn)
168       FirstInsn = MI;
169 
170     if (Parent)
171       Parent->openInsnRange(MI);
172   }
173 
174   /// extendInsnRange - Extend the current instruction range covered by
175   /// this scope.
176   void extendInsnRange(const MachineInstr *MI) {
177     assert (FirstInsn && "MI Range is not open!");
178     LastInsn = MI;
179     if (Parent)
180       Parent->extendInsnRange(MI);
181   }
182 
183   /// closeInsnRange - Create a range based on FirstInsn and LastInsn collected
184   /// until now. This is used when a new scope is encountered while walking
185   /// machine instructions.
186   void closeInsnRange(DbgScope *NewScope = NULL) {
187     assert (LastInsn && "Last insn missing!");
188     Ranges.push_back(DbgRange(FirstInsn, LastInsn));
189     FirstInsn = NULL;
190     LastInsn = NULL;
191     // If Parent dominates NewScope then do not close Parent's instruction
192     // range.
193     if (Parent && (!NewScope || !Parent->dominates(NewScope)))
194       Parent->closeInsnRange(NewScope);
195   }
196 
197   void setAbstractScope() { AbstractScope = true; }
198   bool isAbstractScope() const { return AbstractScope; }
199 
200   // Depth First Search support to walk and mainpluate DbgScope hierarchy.
201   unsigned getDFSOut() const { return DFSOut; }
202   void setDFSOut(unsigned O) { DFSOut = O; }
203   unsigned getDFSIn() const  { return DFSIn; }
204   void setDFSIn(unsigned I)  { DFSIn = I; }
205   bool dominates(const DbgScope *S) {
206     if (S == this)
207       return true;
208     if (DFSIn < S->getDFSIn() && DFSOut > S->getDFSOut())
209       return true;
210     return false;
211   }
212 
213   /// addScope - Add a scope to the scope.
214   ///
215   void addScope(DbgScope *S) { Scopes.push_back(S); }
216 
217   /// addVariable - Add a variable to the scope.
218   ///
219   void addVariable(DbgVariable *V) { Variables.push_back(V); }
220 
221 #ifndef NDEBUG
222   void dump() const;
223 #endif
224 };
225 
226 } // end llvm namespace
227 
228 #ifndef NDEBUG
229 void DbgScope::dump() const {
230   raw_ostream &err = dbgs();
231   err.indent(IndentLevel);
232   const MDNode *N = Desc;
233   N->dump();
234   if (AbstractScope)
235     err << "Abstract Scope\n";
236 
237   IndentLevel += 2;
238   if (!Scopes.empty())
239     err << "Children ...\n";
240   for (unsigned i = 0, e = Scopes.size(); i != e; ++i)
241     if (Scopes[i] != this)
242       Scopes[i]->dump();
243 
244   IndentLevel -= 2;
245 }
246 #endif
247 
248 DbgScope::~DbgScope() {
249   for (unsigned j = 0, M = Variables.size(); j < M; ++j)
250     delete Variables[j];
251 }
252 
253 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
254   : Asm(A), MMI(Asm->MMI), FirstCU(0),
255     AbbreviationsSet(InitAbbreviationsSetSize),
256     CurrentFnDbgScope(0), PrevLabel(NULL) {
257   NextStringPoolNumber = 0;
258 
259   DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
260   DwarfStrSectionSym = TextSectionSym = 0;
261   DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
262   FunctionBeginSym = FunctionEndSym = 0;
263   {
264     NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
265     beginModule(M);
266   }
267 }
268 DwarfDebug::~DwarfDebug() {
269 }
270 
271 MCSymbol *DwarfDebug::getStringPoolEntry(StringRef Str) {
272   std::pair<MCSymbol*, unsigned> &Entry = StringPool[Str];
273   if (Entry.first) return Entry.first;
274 
275   Entry.second = NextStringPoolNumber++;
276   return Entry.first = Asm->GetTempSymbol("string", Entry.second);
277 }
278 
279 
280 /// assignAbbrevNumber - Define a unique number for the abbreviation.
281 ///
282 void DwarfDebug::assignAbbrevNumber(DIEAbbrev &Abbrev) {
283   // Profile the node so that we can make it unique.
284   FoldingSetNodeID ID;
285   Abbrev.Profile(ID);
286 
287   // Check the set for priors.
288   DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
289 
290   // If it's newly added.
291   if (InSet == &Abbrev) {
292     // Add to abbreviation list.
293     Abbreviations.push_back(&Abbrev);
294 
295     // Assign the vector position + 1 as its number.
296     Abbrev.setNumber(Abbreviations.size());
297   } else {
298     // Assign existing abbreviation number.
299     Abbrev.setNumber(InSet->getNumber());
300   }
301 }
302 
303 /// getRealLinkageName - If special LLVM prefix that is used to inform the asm
304 /// printer to not emit usual symbol prefix before the symbol name is used then
305 /// return linkage name after skipping this special LLVM prefix.
306 static StringRef getRealLinkageName(StringRef LinkageName) {
307   char One = '\1';
308   if (LinkageName.startswith(StringRef(&One, 1)))
309     return LinkageName.substr(1);
310   return LinkageName;
311 }
312 
313 /// createSubprogramDIE - Create new DIE using SP.
314 DIE *DwarfDebug::createSubprogramDIE(DISubprogram SP) {
315   CompileUnit *SPCU = getCompileUnit(SP);
316   DIE *SPDie = SPCU->getDIE(SP);
317   if (SPDie)
318     return SPDie;
319 
320   SPDie = new DIE(dwarf::DW_TAG_subprogram);
321 
322   // DW_TAG_inlined_subroutine may refer to this DIE.
323   SPCU->insertDIE(SP, SPDie);
324 
325   // Add to context owner.
326   SPCU->addToContextOwner(SPDie, SP.getContext());
327 
328   // Add function template parameters.
329   SPCU->addTemplateParams(*SPDie, SP.getTemplateParams());
330 
331   StringRef LinkageName = SP.getLinkageName();
332   if (!LinkageName.empty())
333     SPCU->addString(SPDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string,
334                     getRealLinkageName(LinkageName));
335 
336   // If this DIE is going to refer declaration info using AT_specification
337   // then there is no need to add other attributes.
338   if (SP.getFunctionDeclaration().isSubprogram())
339     return SPDie;
340 
341   // Constructors and operators for anonymous aggregates do not have names.
342   if (!SP.getName().empty())
343     SPCU->addString(SPDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
344                     SP.getName());
345 
346   SPCU->addSourceLine(SPDie, SP);
347 
348   if (SP.isPrototyped())
349     SPCU->addUInt(SPDie, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1);
350 
351   // Add Return Type.
352   DICompositeType SPTy = SP.getType();
353   DIArray Args = SPTy.getTypeArray();
354   unsigned SPTag = SPTy.getTag();
355 
356   if (Args.getNumElements() == 0 || SPTag != dwarf::DW_TAG_subroutine_type)
357     SPCU->addType(SPDie, SPTy);
358   else
359     SPCU->addType(SPDie, DIType(Args.getElement(0)));
360 
361   unsigned VK = SP.getVirtuality();
362   if (VK) {
363     SPCU->addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_flag, VK);
364     DIEBlock *Block = SPCU->getDIEBlock();
365     SPCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
366     SPCU->addUInt(Block, 0, dwarf::DW_FORM_udata, SP.getVirtualIndex());
367     SPCU->addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
368     ContainingTypeMap.insert(std::make_pair(SPDie,
369                                             SP.getContainingType()));
370   }
371 
372   if (!SP.isDefinition()) {
373     SPCU->addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
374 
375     // Add arguments. Do not add arguments for subprogram definition. They will
376     // be handled while processing variables.
377     DICompositeType SPTy = SP.getType();
378     DIArray Args = SPTy.getTypeArray();
379     unsigned SPTag = SPTy.getTag();
380 
381     if (SPTag == dwarf::DW_TAG_subroutine_type)
382       for (unsigned i = 1, N =  Args.getNumElements(); i < N; ++i) {
383         DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
384         DIType ATy = DIType(DIType(Args.getElement(i)));
385         SPCU->addType(Arg, ATy);
386         if (ATy.isArtificial())
387           SPCU->addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
388         SPDie->addChild(Arg);
389       }
390   }
391 
392   if (SP.isArtificial())
393     SPCU->addUInt(SPDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
394 
395   if (!SP.isLocalToUnit())
396     SPCU->addUInt(SPDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
397 
398   if (SP.isOptimized())
399     SPCU->addUInt(SPDie, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
400 
401   if (unsigned isa = Asm->getISAEncoding()) {
402     SPCU->addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
403   }
404 
405   return SPDie;
406 }
407 
408 DbgScope *DwarfDebug::getOrCreateAbstractScope(const MDNode *N) {
409   assert(N && "Invalid Scope encoding!");
410 
411   DbgScope *AScope = AbstractScopes.lookup(N);
412   if (AScope)
413     return AScope;
414 
415   DbgScope *Parent = NULL;
416 
417   DIDescriptor Scope(N);
418   if (Scope.isLexicalBlock()) {
419     DILexicalBlock DB(N);
420     DIDescriptor ParentDesc = DB.getContext();
421     Parent = getOrCreateAbstractScope(ParentDesc);
422   }
423 
424   AScope = new DbgScope(Parent, DIDescriptor(N), NULL);
425 
426   if (Parent)
427     Parent->addScope(AScope);
428   AScope->setAbstractScope();
429   AbstractScopes[N] = AScope;
430   if (DIDescriptor(N).isSubprogram())
431     AbstractScopesList.push_back(AScope);
432   return AScope;
433 }
434 
435 /// isSubprogramContext - Return true if Context is either a subprogram
436 /// or another context nested inside a subprogram.
437 static bool isSubprogramContext(const MDNode *Context) {
438   if (!Context)
439     return false;
440   DIDescriptor D(Context);
441   if (D.isSubprogram())
442     return true;
443   if (D.isType())
444     return isSubprogramContext(DIType(Context).getContext());
445   return false;
446 }
447 
448 /// updateSubprogramScopeDIE - Find DIE for the given subprogram and
449 /// attach appropriate DW_AT_low_pc and DW_AT_high_pc attributes.
450 /// If there are global variables in this scope then create and insert
451 /// DIEs for these variables.
452 DIE *DwarfDebug::updateSubprogramScopeDIE(const MDNode *SPNode) {
453   CompileUnit *SPCU = getCompileUnit(SPNode);
454   DIE *SPDie = SPCU->getDIE(SPNode);
455 
456   assert(SPDie && "Unable to find subprogram DIE!");
457   DISubprogram SP(SPNode);
458 
459   DISubprogram SPDecl = SP.getFunctionDeclaration();
460   if (SPDecl.isSubprogram())
461     // Refer function declaration directly.
462     SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
463                       createSubprogramDIE(SPDecl));
464   else {
465     // There is not any need to generate specification DIE for a function
466     // defined at compile unit level. If a function is defined inside another
467     // function then gdb prefers the definition at top level and but does not
468     // expect specification DIE in parent function. So avoid creating
469     // specification DIE for a function defined inside a function.
470     if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
471         !SP.getContext().isFile() &&
472         !isSubprogramContext(SP.getContext())) {
473       SPCU-> addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
474 
475       // Add arguments.
476       DICompositeType SPTy = SP.getType();
477       DIArray Args = SPTy.getTypeArray();
478       unsigned SPTag = SPTy.getTag();
479       if (SPTag == dwarf::DW_TAG_subroutine_type)
480         for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
481           DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
482           DIType ATy = DIType(DIType(Args.getElement(i)));
483           SPCU->addType(Arg, ATy);
484           if (ATy.isArtificial())
485             SPCU->addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
486           SPDie->addChild(Arg);
487         }
488       DIE *SPDeclDie = SPDie;
489       SPDie = new DIE(dwarf::DW_TAG_subprogram);
490       SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
491                         SPDeclDie);
492       SPCU->addDie(SPDie);
493     }
494   }
495   // Pick up abstract subprogram DIE.
496   if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
497     SPDie = new DIE(dwarf::DW_TAG_subprogram);
498     SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
499                       dwarf::DW_FORM_ref4, AbsSPDIE);
500     SPCU->addDie(SPDie);
501   }
502 
503   SPCU->addLabel(SPDie, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
504                  Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber()));
505   SPCU->addLabel(SPDie, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
506                  Asm->GetTempSymbol("func_end", Asm->getFunctionNumber()));
507   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
508   MachineLocation Location(RI->getFrameRegister(*Asm->MF));
509   SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
510 
511   return SPDie;
512 }
513 
514 /// constructLexicalScope - Construct new DW_TAG_lexical_block
515 /// for this scope and attach DW_AT_low_pc/DW_AT_high_pc labels.
516 DIE *DwarfDebug::constructLexicalScopeDIE(DbgScope *Scope) {
517 
518   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
519   if (Scope->isAbstractScope())
520     return ScopeDIE;
521 
522   const SmallVector<DbgRange, 4> &Ranges = Scope->getRanges();
523   if (Ranges.empty())
524     return 0;
525 
526   CompileUnit *TheCU = getCompileUnit(Scope->getScopeNode());
527   SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin();
528   if (Ranges.size() > 1) {
529     // .debug_range section has not been laid out yet. Emit offset in
530     // .debug_range as a uint, size 4, for now. emitDIE will handle
531     // DW_AT_ranges appropriately.
532     TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
533                    DebugRangeSymbols.size() * Asm->getTargetData().getPointerSize());
534     for (SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin(),
535          RE = Ranges.end(); RI != RE; ++RI) {
536       DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
537       DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
538     }
539     DebugRangeSymbols.push_back(NULL);
540     DebugRangeSymbols.push_back(NULL);
541     return ScopeDIE;
542   }
543 
544   const MCSymbol *Start = getLabelBeforeInsn(RI->first);
545   const MCSymbol *End = getLabelAfterInsn(RI->second);
546 
547   if (End == 0) return 0;
548 
549   assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
550   assert(End->isDefined() && "Invalid end label for an inlined scope!");
551 
552   TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, Start);
553   TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, End);
554 
555   return ScopeDIE;
556 }
557 
558 /// constructInlinedScopeDIE - This scope represents inlined body of
559 /// a function. Construct DIE to represent this concrete inlined copy
560 /// of the function.
561 DIE *DwarfDebug::constructInlinedScopeDIE(DbgScope *Scope) {
562 
563   const SmallVector<DbgRange, 4> &Ranges = Scope->getRanges();
564   assert (Ranges.empty() == false
565           && "DbgScope does not have instruction markers!");
566 
567   // FIXME : .debug_inlined section specification does not clearly state how
568   // to emit inlined scope that is split into multiple instruction ranges.
569   // For now, use first instruction range and emit low_pc/high_pc pair and
570   // corresponding .debug_inlined section entry for this pair.
571   SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin();
572   const MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
573   const MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
574 
575   if (StartLabel == 0 || EndLabel == 0) {
576     assert (0 && "Unexpected Start and End  labels for a inlined scope!");
577     return 0;
578   }
579   assert(StartLabel->isDefined() &&
580          "Invalid starting label for an inlined scope!");
581   assert(EndLabel->isDefined() &&
582          "Invalid end label for an inlined scope!");
583 
584   if (!Scope->getScopeNode())
585     return NULL;
586   DIScope DS(Scope->getScopeNode());
587   DISubprogram InlinedSP = getDISubprogram(DS);
588   CompileUnit *TheCU = getCompileUnit(InlinedSP);
589   DIE *OriginDIE = TheCU->getDIE(InlinedSP);
590   if (!OriginDIE) {
591     DEBUG(dbgs() << "Unable to find original DIE for inlined subprogram.");
592     return NULL;
593   }
594   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
595   TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
596                      dwarf::DW_FORM_ref4, OriginDIE);
597 
598   TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, StartLabel);
599   TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, EndLabel);
600 
601   InlinedSubprogramDIEs.insert(OriginDIE);
602 
603   // Track the start label for this inlined function.
604   DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
605     I = InlineInfo.find(InlinedSP);
606 
607   if (I == InlineInfo.end()) {
608     InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel,
609                                                              ScopeDIE));
610     InlinedSPNodes.push_back(InlinedSP);
611   } else
612     I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
613 
614   DILocation DL(Scope->getInlinedAt());
615   TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0, TheCU->getID());
616   TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
617 
618   return ScopeDIE;
619 }
620 
621 
622 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
623 DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
624   StringRef Name = DV->getName();
625   if (Name.empty())
626     return NULL;
627 
628   // Translate tag to proper Dwarf tag.  The result variable is dropped for
629   // now.
630   unsigned Tag;
631   switch (DV->getTag()) {
632   case dwarf::DW_TAG_return_variable:
633     return NULL;
634   case dwarf::DW_TAG_arg_variable:
635     Tag = dwarf::DW_TAG_formal_parameter;
636     break;
637   case dwarf::DW_TAG_auto_variable:    // fall thru
638   default:
639     Tag = dwarf::DW_TAG_variable;
640     break;
641   }
642 
643   // Define variable debug information entry.
644   DIE *VariableDie = new DIE(Tag);
645   CompileUnit *VariableCU = getCompileUnit(DV->getVariable());
646   DIE *AbsDIE = NULL;
647   DenseMap<const DbgVariable *, const DbgVariable *>::iterator
648     V2AVI = VarToAbstractVarMap.find(DV);
649   if (V2AVI != VarToAbstractVarMap.end())
650     AbsDIE = V2AVI->second->getDIE();
651 
652   if (AbsDIE)
653     VariableCU->addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
654                        dwarf::DW_FORM_ref4, AbsDIE);
655   else {
656     VariableCU->addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
657                           Name);
658     VariableCU->addSourceLine(VariableDie, DV->getVariable());
659 
660     // Add variable type.
661     VariableCU->addType(VariableDie, DV->getType());
662   }
663 
664   if (Tag == dwarf::DW_TAG_formal_parameter && DV->getType().isArtificial())
665     VariableCU->addUInt(VariableDie, dwarf::DW_AT_artificial,
666                         dwarf::DW_FORM_flag, 1);
667   else if (DIVariable(DV->getVariable()).isArtificial())
668     VariableCU->addUInt(VariableDie, dwarf::DW_AT_artificial,
669                         dwarf::DW_FORM_flag, 1);
670 
671   if (Scope->isAbstractScope()) {
672     DV->setDIE(VariableDie);
673     return VariableDie;
674   }
675 
676   // Add variable address.
677 
678   unsigned Offset = DV->getDotDebugLocOffset();
679   if (Offset != ~0U) {
680     VariableCU->addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
681              Asm->GetTempSymbol("debug_loc", Offset));
682     DV->setDIE(VariableDie);
683     UseDotDebugLocEntry.insert(VariableDie);
684     return VariableDie;
685   }
686 
687   // Check if variable is described by a  DBG_VALUE instruction.
688   DenseMap<const DbgVariable *, const MachineInstr *>::iterator DVI =
689     DbgVariableToDbgInstMap.find(DV);
690   if (DVI != DbgVariableToDbgInstMap.end()) {
691     const MachineInstr *DVInsn = DVI->second;
692     bool updated = false;
693     // FIXME : Handle getNumOperands != 3
694     if (DVInsn->getNumOperands() == 3) {
695       if (DVInsn->getOperand(0).isReg()) {
696         const MachineOperand RegOp = DVInsn->getOperand(0);
697         const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
698         if (DVInsn->getOperand(1).isImm() &&
699             TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) {
700           unsigned FrameReg = 0;
701           const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
702           int Offset =
703             TFI->getFrameIndexReference(*Asm->MF,
704                                         DVInsn->getOperand(1).getImm(),
705                                         FrameReg);
706           MachineLocation Location(FrameReg, Offset);
707           VariableCU->addVariableAddress(DV, VariableDie, Location);
708 
709         } else if (RegOp.getReg())
710           VariableCU->addVariableAddress(DV, VariableDie,
711                                          MachineLocation(RegOp.getReg()));
712         updated = true;
713       }
714       else if (DVInsn->getOperand(0).isImm())
715         updated =
716           VariableCU->addConstantValue(VariableDie, DVInsn->getOperand(0),
717                                        DV->getType());
718       else if (DVInsn->getOperand(0).isFPImm())
719         updated =
720           VariableCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0));
721     } else {
722       VariableCU->addVariableAddress(DV, VariableDie,
723                                      Asm->getDebugValueLocation(DVInsn));
724       updated = true;
725     }
726     if (!updated) {
727       // If variableDie is not updated then DBG_VALUE instruction does not
728       // have valid variable info.
729       delete VariableDie;
730       return NULL;
731     }
732     DV->setDIE(VariableDie);
733     return VariableDie;
734   }
735 
736   // .. else use frame index, if available.
737   int FI = 0;
738   if (findVariableFrameIndex(DV, &FI)) {
739     unsigned FrameReg = 0;
740     const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
741     int Offset =
742       TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
743     MachineLocation Location(FrameReg, Offset);
744     VariableCU->addVariableAddress(DV, VariableDie, Location);
745   }
746 
747   DV->setDIE(VariableDie);
748   return VariableDie;
749 
750 }
751 
752 /// constructScopeDIE - Construct a DIE for this scope.
753 DIE *DwarfDebug::constructScopeDIE(DbgScope *Scope) {
754   if (!Scope || !Scope->getScopeNode())
755     return NULL;
756 
757   SmallVector <DIE *, 8> Children;
758 
759   // Collect arguments for current function.
760   if (Scope == CurrentFnDbgScope)
761     for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
762       if (DbgVariable *ArgDV = CurrentFnArguments[i])
763         if (DIE *Arg = constructVariableDIE(ArgDV, Scope))
764           Children.push_back(Arg);
765 
766   // Collect lexical scope childrens first.
767   const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
768   for (unsigned i = 0, N = Variables.size(); i < N; ++i)
769     if (DIE *Variable = constructVariableDIE(Variables[i], Scope))
770       Children.push_back(Variable);
771   const SmallVector<DbgScope *, 4> &Scopes = Scope->getScopes();
772   for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
773     if (DIE *Nested = constructScopeDIE(Scopes[j]))
774       Children.push_back(Nested);
775   DIScope DS(Scope->getScopeNode());
776   DIE *ScopeDIE = NULL;
777   if (Scope->getInlinedAt())
778     ScopeDIE = constructInlinedScopeDIE(Scope);
779   else if (DS.isSubprogram()) {
780     ProcessedSPNodes.insert(DS);
781     if (Scope->isAbstractScope()) {
782       ScopeDIE = getCompileUnit(DS)->getDIE(DS);
783       // Note down abstract DIE.
784       if (ScopeDIE)
785         AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
786     }
787     else
788       ScopeDIE = updateSubprogramScopeDIE(DS);
789   }
790   else {
791     // There is no need to emit empty lexical block DIE.
792     if (Children.empty())
793       return NULL;
794     ScopeDIE = constructLexicalScopeDIE(Scope);
795   }
796 
797   if (!ScopeDIE) return NULL;
798 
799   // Add children
800   for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
801          E = Children.end(); I != E; ++I)
802     ScopeDIE->addChild(*I);
803 
804   if (DS.isSubprogram())
805     getCompileUnit(DS)->addPubTypes(DISubprogram(DS));
806 
807  return ScopeDIE;
808 }
809 
810 /// GetOrCreateSourceID - Look up the source id with the given directory and
811 /// source file names. If none currently exists, create a new id and insert it
812 /// in the SourceIds map. This can update DirectoryNames and SourceFileNames
813 /// maps as well.
814 
815 unsigned DwarfDebug::GetOrCreateSourceID(StringRef FileName,
816                                          StringRef DirName) {
817   // If FE did not provide a file name, then assume stdin.
818   if (FileName.empty())
819     return GetOrCreateSourceID("<stdin>", StringRef());
820 
821   // MCStream expects full path name as filename.
822   if (!DirName.empty() && !FileName.startswith("/")) {
823     std::string FullPathName(DirName.data());
824     if (!DirName.endswith("/"))
825       FullPathName += "/";
826     FullPathName += FileName.data();
827     // Here FullPathName will be copied into StringMap by GetOrCreateSourceID.
828     return GetOrCreateSourceID(StringRef(FullPathName), StringRef());
829   }
830 
831   StringMapEntry<unsigned> &Entry = SourceIdMap.GetOrCreateValue(FileName);
832   if (Entry.getValue())
833     return Entry.getValue();
834 
835   unsigned SrcId = SourceIdMap.size();
836   Entry.setValue(SrcId);
837 
838   // Print out a .file directive to specify files for .loc directives.
839   Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.getKey());
840 
841   return SrcId;
842 }
843 
844 /// constructCompileUnit - Create new CompileUnit for the given
845 /// metadata node with tag DW_TAG_compile_unit.
846 void DwarfDebug::constructCompileUnit(const MDNode *N) {
847   DICompileUnit DIUnit(N);
848   StringRef FN = DIUnit.getFilename();
849   StringRef Dir = DIUnit.getDirectory();
850   unsigned ID = GetOrCreateSourceID(FN, Dir);
851 
852   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
853   CompileUnit *NewCU = new CompileUnit(ID, Die, Asm, this);
854   NewCU->addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
855                    DIUnit.getProducer());
856   NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
857                  DIUnit.getLanguage());
858   NewCU->addString(Die, dwarf::DW_AT_name, dwarf::DW_FORM_string, FN);
859   // Use DW_AT_entry_pc instead of DW_AT_low_pc/DW_AT_high_pc pair. This
860   // simplifies debug range entries.
861   NewCU->addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
862   // DW_AT_stmt_list is a offset of line number information for this
863   // compile unit in debug_line section.
864   if(Asm->MAI->doesDwarfRequireRelocationForSectionOffset())
865     NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
866                     Asm->GetTempSymbol("section_line"));
867   else
868     NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
869 
870   if (!Dir.empty())
871     NewCU->addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
872   if (DIUnit.isOptimized())
873     NewCU->addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
874 
875   StringRef Flags = DIUnit.getFlags();
876   if (!Flags.empty())
877     NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, dwarf::DW_FORM_string, Flags);
878 
879   unsigned RVer = DIUnit.getRunTimeVersion();
880   if (RVer)
881     NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
882             dwarf::DW_FORM_data1, RVer);
883 
884   if (!FirstCU)
885     FirstCU = NewCU;
886   CUMap.insert(std::make_pair(N, NewCU));
887 }
888 
889 /// getCompielUnit - Get CompileUnit DIE.
890 CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
891   assert (N && "Invalid DwarfDebug::getCompileUnit argument!");
892   DIDescriptor D(N);
893   const MDNode *CUNode = NULL;
894   if (D.isCompileUnit())
895     CUNode = N;
896   else if (D.isSubprogram())
897     CUNode = DISubprogram(N).getCompileUnit();
898   else if (D.isType())
899     CUNode = DIType(N).getCompileUnit();
900   else if (D.isGlobalVariable())
901     CUNode = DIGlobalVariable(N).getCompileUnit();
902   else if (D.isVariable())
903     CUNode = DIVariable(N).getCompileUnit();
904   else if (D.isNameSpace())
905     CUNode = DINameSpace(N).getCompileUnit();
906   else if (D.isFile())
907     CUNode = DIFile(N).getCompileUnit();
908   else
909     return FirstCU;
910 
911   DenseMap<const MDNode *, CompileUnit *>::const_iterator I
912     = CUMap.find(CUNode);
913   if (I == CUMap.end())
914     return FirstCU;
915   return I->second;
916 }
917 
918 /// isUnsignedDIType - Return true if type encoding is unsigned.
919 static bool isUnsignedDIType(DIType Ty) {
920   DIDerivedType DTy(Ty);
921   if (DTy.Verify())
922     return isUnsignedDIType(DTy.getTypeDerivedFrom());
923 
924   DIBasicType BTy(Ty);
925   if (BTy.Verify()) {
926     unsigned Encoding = BTy.getEncoding();
927     if (Encoding == dwarf::DW_ATE_unsigned ||
928         Encoding == dwarf::DW_ATE_unsigned_char)
929       return true;
930   }
931   return false;
932 }
933 
934 // Return const exprssion if value is a GEP to access merged global
935 // constant. e.g.
936 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
937 static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
938   const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
939   if (!CE || CE->getNumOperands() != 3 ||
940       CE->getOpcode() != Instruction::GetElementPtr)
941     return NULL;
942 
943   // First operand points to a global value.
944   if (!isa<GlobalValue>(CE->getOperand(0)))
945     return NULL;
946 
947   // Second operand is zero.
948   const ConstantInt *CI =
949     dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
950   if (!CI || !CI->isZero())
951     return NULL;
952 
953   // Third operand is offset.
954   if (!isa<ConstantInt>(CE->getOperand(2)))
955     return NULL;
956 
957   return CE;
958 }
959 
960 /// constructGlobalVariableDIE - Construct global variable DIE.
961 void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
962   DIGlobalVariable GV(N);
963 
964   // If debug information is malformed then ignore it.
965   if (GV.Verify() == false)
966     return;
967 
968   // Check for pre-existence.
969   CompileUnit *TheCU = getCompileUnit(N);
970   if (TheCU->getDIE(GV))
971     return;
972 
973   DIType GTy = GV.getType();
974   DIE *VariableDIE = new DIE(GV.getTag());
975 
976   bool isGlobalVariable = GV.getGlobal() != NULL;
977 
978   // Add name.
979   TheCU->addString(VariableDIE, dwarf::DW_AT_name, dwarf::DW_FORM_string,
980                    GV.getDisplayName());
981   StringRef LinkageName = GV.getLinkageName();
982   if (!LinkageName.empty() && isGlobalVariable)
983     TheCU->addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
984                      dwarf::DW_FORM_string,
985                      getRealLinkageName(LinkageName));
986   // Add type.
987   TheCU->addType(VariableDIE, GTy);
988 
989   // Add scoping info.
990   if (!GV.isLocalToUnit()) {
991     TheCU->addUInt(VariableDIE, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
992     // Expose as global.
993     TheCU->addGlobal(GV.getName(), VariableDIE);
994   }
995   // Add line number info.
996   TheCU->addSourceLine(VariableDIE, GV);
997   // Add to map.
998   TheCU->insertDIE(N, VariableDIE);
999   // Add to context owner.
1000   DIDescriptor GVContext = GV.getContext();
1001   TheCU->addToContextOwner(VariableDIE, GVContext);
1002   // Add location.
1003   if (isGlobalVariable) {
1004     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1005     TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1006     TheCU->addLabel(Block, 0, dwarf::DW_FORM_udata,
1007              Asm->Mang->getSymbol(GV.getGlobal()));
1008     // Do not create specification DIE if context is either compile unit
1009     // or a subprogram.
1010     if (GV.isDefinition() && !GVContext.isCompileUnit() &&
1011         !GVContext.isFile() && !isSubprogramContext(GVContext)) {
1012       // Create specification DIE.
1013       DIE *VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1014       TheCU->addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1015                   dwarf::DW_FORM_ref4, VariableDIE);
1016       TheCU->addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1017       TheCU->addUInt(VariableDIE, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1018       TheCU->addDie(VariableSpecDIE);
1019     } else {
1020       TheCU->addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1021     }
1022   } else if (ConstantInt *CI =
1023              dyn_cast_or_null<ConstantInt>(GV.getConstant()))
1024     TheCU->addConstantValue(VariableDIE, CI, isUnsignedDIType(GTy));
1025   else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
1026     // GV is a merged global.
1027     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1028     TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1029     TheCU->addLabel(Block, 0, dwarf::DW_FORM_udata,
1030                     Asm->Mang->getSymbol(cast<GlobalValue>(CE->getOperand(0))));
1031     ConstantInt *CII = cast<ConstantInt>(CE->getOperand(2));
1032     TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1033     TheCU->addUInt(Block, 0, dwarf::DW_FORM_udata, CII->getZExtValue());
1034     TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1035     TheCU->addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1036   }
1037 
1038   return;
1039 }
1040 
1041 /// construct SubprogramDIE - Construct subprogram DIE.
1042 void DwarfDebug::constructSubprogramDIE(const MDNode *N) {
1043   DISubprogram SP(N);
1044 
1045   // Check for pre-existence.
1046   CompileUnit *TheCU = getCompileUnit(N);
1047   if (TheCU->getDIE(N))
1048     return;
1049 
1050   if (!SP.isDefinition())
1051     // This is a method declaration which will be handled while constructing
1052     // class type.
1053     return;
1054 
1055   DIE *SubprogramDie = createSubprogramDIE(SP);
1056 
1057   // Add to map.
1058   TheCU->insertDIE(N, SubprogramDie);
1059 
1060   // Add to context owner.
1061   TheCU->addToContextOwner(SubprogramDie, SP.getContext());
1062 
1063   // Expose as global.
1064   TheCU->addGlobal(SP.getName(), SubprogramDie);
1065 
1066   return;
1067 }
1068 
1069 /// beginModule - Emit all Dwarf sections that should come prior to the
1070 /// content. Create global DIEs and emit initial debug info sections.
1071 /// This is inovked by the target AsmPrinter.
1072 void DwarfDebug::beginModule(Module *M) {
1073   if (DisableDebugInfoPrinting)
1074     return;
1075 
1076   // If module has named metadata anchors then use them, otherwise scan the module
1077   // using debug info finder to collect debug info.
1078   NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
1079   if (CU_Nodes) {
1080 
1081     NamedMDNode *GV_Nodes = M->getNamedMetadata("llvm.dbg.gv");
1082     NamedMDNode *SP_Nodes = M->getNamedMetadata("llvm.dbg.sp");
1083     if (!GV_Nodes && !SP_Nodes)
1084       // If there are not any global variables or any functions then
1085       // there is not any debug info in this module.
1086       return;
1087 
1088     for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)
1089       constructCompileUnit(CU_Nodes->getOperand(i));
1090 
1091     if (GV_Nodes)
1092       for (unsigned i = 0, e = GV_Nodes->getNumOperands(); i != e; ++i)
1093         constructGlobalVariableDIE(GV_Nodes->getOperand(i));
1094 
1095     if (SP_Nodes)
1096       for (unsigned i = 0, e = SP_Nodes->getNumOperands(); i != e; ++i)
1097         constructSubprogramDIE(SP_Nodes->getOperand(i));
1098 
1099   } else {
1100 
1101     DebugInfoFinder DbgFinder;
1102     DbgFinder.processModule(*M);
1103 
1104     bool HasDebugInfo = false;
1105     // Scan all the compile-units to see if there are any marked as the main unit.
1106     // if not, we do not generate debug info.
1107     for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1108            E = DbgFinder.compile_unit_end(); I != E; ++I) {
1109       if (DICompileUnit(*I).isMain()) {
1110         HasDebugInfo = true;
1111         break;
1112       }
1113     }
1114     if (!HasDebugInfo) return;
1115 
1116     // Create all the compile unit DIEs.
1117     for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1118            E = DbgFinder.compile_unit_end(); I != E; ++I)
1119       constructCompileUnit(*I);
1120 
1121     // Create DIEs for each global variable.
1122     for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
1123            E = DbgFinder.global_variable_end(); I != E; ++I)
1124       constructGlobalVariableDIE(*I);
1125 
1126     // Create DIEs for each subprogram.
1127     for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
1128            E = DbgFinder.subprogram_end(); I != E; ++I)
1129       constructSubprogramDIE(*I);
1130   }
1131 
1132   // Tell MMI that we have debug info.
1133   MMI->setDebugInfoAvailability(true);
1134 
1135   // Emit initial sections.
1136   EmitSectionLabels();
1137 
1138   //getOrCreateTypeDIE
1139   if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
1140     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1141       DIType Ty(NMD->getOperand(i));
1142       getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
1143     }
1144 
1145   if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
1146     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1147       DIType Ty(NMD->getOperand(i));
1148       getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
1149     }
1150 
1151   // Prime section data.
1152   SectionMap.insert(Asm->getObjFileLowering().getTextSection());
1153 }
1154 
1155 /// endModule - Emit all Dwarf sections that should come after the content.
1156 ///
1157 void DwarfDebug::endModule() {
1158   if (!FirstCU) return;
1159   const Module *M = MMI->getModule();
1160   DenseMap<const MDNode *, DbgScope *> DeadFnScopeMap;
1161   if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
1162     for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
1163       if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
1164       DISubprogram SP(AllSPs->getOperand(SI));
1165       if (!SP.Verify()) continue;
1166 
1167       // Collect info for variables that were optimized out.
1168       if (!SP.isDefinition()) continue;
1169       StringRef FName = SP.getLinkageName();
1170       if (FName.empty())
1171         FName = SP.getName();
1172       NamedMDNode *NMD = getFnSpecificMDNode(*(MMI->getModule()), FName);
1173       if (!NMD) continue;
1174       unsigned E = NMD->getNumOperands();
1175       if (!E) continue;
1176       DbgScope *Scope = new DbgScope(NULL, DIDescriptor(SP), NULL);
1177       DeadFnScopeMap[SP] = Scope;
1178       for (unsigned I = 0; I != E; ++I) {
1179         DIVariable DV(NMD->getOperand(I));
1180         if (!DV.Verify()) continue;
1181         Scope->addVariable(new DbgVariable(DV));
1182       }
1183 
1184       // Construct subprogram DIE and add variables DIEs.
1185       constructSubprogramDIE(SP);
1186       DIE *ScopeDIE = getCompileUnit(SP)->getDIE(SP);
1187       const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
1188       for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
1189         DIE *VariableDIE = constructVariableDIE(Variables[i], Scope);
1190         if (VariableDIE)
1191           ScopeDIE->addChild(VariableDIE);
1192       }
1193     }
1194   }
1195 
1196   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
1197   for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
1198          AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
1199     DIE *ISP = *AI;
1200     FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
1201   }
1202 
1203   for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1204          CE = ContainingTypeMap.end(); CI != CE; ++CI) {
1205     DIE *SPDie = CI->first;
1206     const MDNode *N = dyn_cast_or_null<MDNode>(CI->second);
1207     if (!N) continue;
1208     DIE *NDie = getCompileUnit(N)->getDIE(N);
1209     if (!NDie) continue;
1210     getCompileUnit(N)->addDIEEntry(SPDie, dwarf::DW_AT_containing_type,
1211                                    dwarf::DW_FORM_ref4, NDie);
1212   }
1213 
1214   // Standard sections final addresses.
1215   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
1216   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
1217   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
1218   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
1219 
1220   // End text sections.
1221   for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
1222     Asm->OutStreamer.SwitchSection(SectionMap[i]);
1223     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
1224   }
1225 
1226   // Compute DIE offsets and sizes.
1227   computeSizeAndOffsets();
1228 
1229   // Emit all the DIEs into a debug info section
1230   emitDebugInfo();
1231 
1232   // Corresponding abbreviations into a abbrev section.
1233   emitAbbreviations();
1234 
1235   // Emit info into a debug pubnames section.
1236   emitDebugPubNames();
1237 
1238   // Emit info into a debug pubtypes section.
1239   emitDebugPubTypes();
1240 
1241   // Emit info into a debug loc section.
1242   emitDebugLoc();
1243 
1244   // Emit info into a debug aranges section.
1245   EmitDebugARanges();
1246 
1247   // Emit info into a debug ranges section.
1248   emitDebugRanges();
1249 
1250   // Emit info into a debug macinfo section.
1251   emitDebugMacInfo();
1252 
1253   // Emit inline info.
1254   emitDebugInlineInfo();
1255 
1256   // Emit info into a debug str section.
1257   emitDebugStr();
1258 
1259   // clean up.
1260   DeleteContainerSeconds(DeadFnScopeMap);
1261   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1262          E = CUMap.end(); I != E; ++I)
1263     delete I->second;
1264   FirstCU = NULL;  // Reset for the next Module, if any.
1265 }
1266 
1267 /// findAbstractVariable - Find abstract variable, if any, associated with Var.
1268 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &Var,
1269                                               DebugLoc ScopeLoc) {
1270 
1271   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1272   if (AbsDbgVariable)
1273     return AbsDbgVariable;
1274 
1275   LLVMContext &Ctx = Var->getContext();
1276   DbgScope *Scope = AbstractScopes.lookup(ScopeLoc.getScope(Ctx));
1277   if (!Scope)
1278     return NULL;
1279 
1280   AbsDbgVariable = new DbgVariable(Var);
1281   Scope->addVariable(AbsDbgVariable);
1282   AbstractVariables[Var] = AbsDbgVariable;
1283   return AbsDbgVariable;
1284 }
1285 
1286 /// addCurrentFnArgument - If Var is an current function argument that add
1287 /// it in CurrentFnArguments list.
1288 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1289                                       DbgVariable *Var, DbgScope *Scope) {
1290   if (Scope != CurrentFnDbgScope)
1291     return false;
1292   DIVariable DV = Var->getVariable();
1293   if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1294     return false;
1295   unsigned ArgNo = DV.getArgNumber();
1296   if (ArgNo == 0)
1297     return false;
1298 
1299   size_t Size = CurrentFnArguments.size();
1300   if (Size == 0)
1301     CurrentFnArguments.resize(MF->getFunction()->arg_size());
1302   // llvm::Function argument size is not good indicator of how many
1303   // arguments does the function have at source level.
1304   if (ArgNo > Size)
1305     CurrentFnArguments.resize(ArgNo * 2);
1306   CurrentFnArguments[ArgNo - 1] = Var;
1307   return true;
1308 }
1309 
1310 /// collectVariableInfoFromMMITable - Collect variable information from
1311 /// side table maintained by MMI.
1312 void
1313 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction * MF,
1314                                    SmallPtrSet<const MDNode *, 16> &Processed) {
1315   const LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
1316   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1317   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1318          VE = VMap.end(); VI != VE; ++VI) {
1319     const MDNode *Var = VI->first;
1320     if (!Var) continue;
1321     Processed.insert(Var);
1322     DIVariable DV(Var);
1323     const std::pair<unsigned, DebugLoc> &VP = VI->second;
1324 
1325     DbgScope *Scope = 0;
1326     if (const MDNode *IA = VP.second.getInlinedAt(Ctx))
1327       Scope = ConcreteScopes.lookup(IA);
1328     if (Scope == 0)
1329       Scope = DbgScopeMap.lookup(VP.second.getScope(Ctx));
1330 
1331     // If variable scope is not found then skip this variable.
1332     if (Scope == 0)
1333       continue;
1334 
1335     DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1336     DbgVariable *RegVar = new DbgVariable(DV);
1337     recordVariableFrameIndex(RegVar, VP.first);
1338     if (!addCurrentFnArgument(MF, RegVar, Scope))
1339       Scope->addVariable(RegVar);
1340     if (AbsDbgVariable) {
1341       recordVariableFrameIndex(AbsDbgVariable, VP.first);
1342       VarToAbstractVarMap[RegVar] = AbsDbgVariable;
1343     }
1344   }
1345 }
1346 
1347 /// isDbgValueInDefinedReg - Return true if debug value, encoded by
1348 /// DBG_VALUE instruction, is in a defined reg.
1349 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1350   assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1351   return MI->getNumOperands() == 3 &&
1352          MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1353          MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1354 }
1355 
1356 /// collectVariableInfo - Populate DbgScope entries with variables' info.
1357 void
1358 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1359                                 SmallPtrSet<const MDNode *, 16> &Processed) {
1360 
1361   /// collection info from MMI table.
1362   collectVariableInfoFromMMITable(MF, Processed);
1363 
1364   for (SmallVectorImpl<const MDNode*>::const_iterator
1365          UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1366          ++UVI) {
1367     const MDNode *Var = *UVI;
1368     if (Processed.count(Var))
1369       continue;
1370 
1371     // History contains relevant DBG_VALUE instructions for Var and instructions
1372     // clobbering it.
1373     SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1374     if (History.empty())
1375       continue;
1376     const MachineInstr *MInsn = History.front();
1377 
1378     DIVariable DV(Var);
1379     DbgScope *Scope = NULL;
1380     if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1381         DISubprogram(DV.getContext()).describes(MF->getFunction()))
1382       Scope = CurrentFnDbgScope;
1383     else
1384       Scope = findDbgScope(MInsn);
1385     // If variable scope is not found then skip this variable.
1386     if (!Scope)
1387       continue;
1388 
1389     Processed.insert(DV);
1390     assert(MInsn->isDebugValue() && "History must begin with debug value");
1391     DbgVariable *RegVar = new DbgVariable(DV);
1392     if (!addCurrentFnArgument(MF, RegVar, Scope))
1393       Scope->addVariable(RegVar);
1394     if (DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc())) {
1395       DbgVariableToDbgInstMap[AbsVar] = MInsn;
1396       VarToAbstractVarMap[RegVar] = AbsVar;
1397     }
1398 
1399     // Simple ranges that are fully coalesced.
1400     if (History.size() <= 1 || (History.size() == 2 &&
1401                                 MInsn->isIdenticalTo(History.back()))) {
1402       DbgVariableToDbgInstMap[RegVar] = MInsn;
1403       continue;
1404     }
1405 
1406     // handle multiple DBG_VALUE instructions describing one variable.
1407     RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1408 
1409     for (SmallVectorImpl<const MachineInstr*>::const_iterator
1410            HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1411       const MachineInstr *Begin = *HI;
1412       assert(Begin->isDebugValue() && "Invalid History entry");
1413 
1414       // Check if DBG_VALUE is truncating a range.
1415       if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1416           && !Begin->getOperand(0).getReg())
1417         continue;
1418 
1419       // Compute the range for a register location.
1420       const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1421       const MCSymbol *SLabel = 0;
1422 
1423       if (HI + 1 == HE)
1424         // If Begin is the last instruction in History then its value is valid
1425         // until the end of the function.
1426         SLabel = FunctionEndSym;
1427       else {
1428         const MachineInstr *End = HI[1];
1429         if (End->isDebugValue())
1430           SLabel = getLabelBeforeInsn(End);
1431         else {
1432           // End is a normal instruction clobbering the range.
1433           SLabel = getLabelAfterInsn(End);
1434           assert(SLabel && "Forgot label after clobber instruction");
1435           ++HI;
1436         }
1437       }
1438 
1439       // The value is valid until the next DBG_VALUE or clobber.
1440       MachineLocation MLoc;
1441       if (Begin->getNumOperands() == 3) {
1442         if (Begin->getOperand(0).isReg() && Begin->getOperand(1).isImm()) {
1443           MLoc.set(Begin->getOperand(0).getReg(),
1444                    Begin->getOperand(1).getImm());
1445           DotDebugLocEntries.
1446             push_back(DotDebugLocEntry(FLabel, SLabel, MLoc, Var));
1447         }
1448         // FIXME: Handle isFPImm also.
1449         else if (Begin->getOperand(0).isImm()) {
1450           DotDebugLocEntries.
1451             push_back(DotDebugLocEntry(FLabel, SLabel,
1452                                        Begin->getOperand(0).getImm()));
1453         }
1454       } else {
1455         MLoc = Asm->getDebugValueLocation(Begin);
1456         DotDebugLocEntries.
1457           push_back(DotDebugLocEntry(FLabel, SLabel, MLoc, Var));
1458       }
1459     }
1460     DotDebugLocEntries.push_back(DotDebugLocEntry());
1461   }
1462 
1463   // Collect info for variables that were optimized out.
1464   const Function *F = MF->getFunction();
1465   if (NamedMDNode *NMD = getFnSpecificMDNode(*(F->getParent()), F->getName())) {
1466     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1467       DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
1468       if (!DV || !Processed.insert(DV))
1469         continue;
1470       DbgScope *Scope = DbgScopeMap.lookup(DV.getContext());
1471       if (Scope)
1472         Scope->addVariable(new DbgVariable(DV));
1473     }
1474   }
1475 }
1476 
1477 /// getLabelBeforeInsn - Return Label preceding the instruction.
1478 const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1479   MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1480   assert(Label && "Didn't insert label before instruction");
1481   return Label;
1482 }
1483 
1484 /// getLabelAfterInsn - Return Label immediately following the instruction.
1485 const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1486   return LabelsAfterInsn.lookup(MI);
1487 }
1488 
1489 /// beginInstruction - Process beginning of an instruction.
1490 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1491   // Check if source location changes, but ignore DBG_VALUE locations.
1492   if (!MI->isDebugValue()) {
1493     DebugLoc DL = MI->getDebugLoc();
1494     if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1495       unsigned Flags = DWARF2_FLAG_IS_STMT;
1496       PrevInstLoc = DL;
1497       if (DL == PrologEndLoc) {
1498         Flags |= DWARF2_FLAG_PROLOGUE_END;
1499         PrologEndLoc = DebugLoc();
1500       }
1501       if (!DL.isUnknown()) {
1502         const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1503         recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1504       } else
1505         recordSourceLine(0, 0, 0, 0);
1506     }
1507   }
1508 
1509   // Insert labels where requested.
1510   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1511     LabelsBeforeInsn.find(MI);
1512 
1513   // No label needed.
1514   if (I == LabelsBeforeInsn.end())
1515     return;
1516 
1517   // Label already assigned.
1518   if (I->second)
1519     return;
1520 
1521   if (!PrevLabel) {
1522     PrevLabel = MMI->getContext().CreateTempSymbol();
1523     Asm->OutStreamer.EmitLabel(PrevLabel);
1524   }
1525   I->second = PrevLabel;
1526 }
1527 
1528 /// endInstruction - Process end of an instruction.
1529 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1530   // Don't create a new label after DBG_VALUE instructions.
1531   // They don't generate code.
1532   if (!MI->isDebugValue())
1533     PrevLabel = 0;
1534 
1535   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1536     LabelsAfterInsn.find(MI);
1537 
1538   // No label needed.
1539   if (I == LabelsAfterInsn.end())
1540     return;
1541 
1542   // Label already assigned.
1543   if (I->second)
1544     return;
1545 
1546   // We need a label after this instruction.
1547   if (!PrevLabel) {
1548     PrevLabel = MMI->getContext().CreateTempSymbol();
1549     Asm->OutStreamer.EmitLabel(PrevLabel);
1550   }
1551   I->second = PrevLabel;
1552 }
1553 
1554 /// getOrCreateDbgScope - Create DbgScope for the scope.
1555 DbgScope *DwarfDebug::getOrCreateDbgScope(const MDNode *Scope,
1556                                           const MDNode *InlinedAt) {
1557   if (!InlinedAt) {
1558     DbgScope *WScope = DbgScopeMap.lookup(Scope);
1559     if (WScope)
1560       return WScope;
1561     WScope = new DbgScope(NULL, DIDescriptor(Scope), NULL);
1562     DbgScopeMap.insert(std::make_pair(Scope, WScope));
1563     if (DIDescriptor(Scope).isLexicalBlock()) {
1564       DbgScope *Parent =
1565         getOrCreateDbgScope(DILexicalBlock(Scope).getContext(), NULL);
1566       WScope->setParent(Parent);
1567       Parent->addScope(WScope);
1568     }
1569 
1570     if (!WScope->getParent()) {
1571       StringRef SPName = DISubprogram(Scope).getLinkageName();
1572       // We used to check only for a linkage name, but that fails
1573       // since we began omitting the linkage name for private
1574       // functions.  The new way is to check for the name in metadata,
1575       // but that's not supported in old .ll test cases.  Ergo, we
1576       // check both.
1577       if (SPName == Asm->MF->getFunction()->getName() ||
1578           DISubprogram(Scope).getFunction() == Asm->MF->getFunction())
1579         CurrentFnDbgScope = WScope;
1580     }
1581 
1582     return WScope;
1583   }
1584 
1585   getOrCreateAbstractScope(Scope);
1586   DbgScope *WScope = DbgScopeMap.lookup(InlinedAt);
1587   if (WScope)
1588     return WScope;
1589 
1590   WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt);
1591   DbgScopeMap.insert(std::make_pair(InlinedAt, WScope));
1592   DILocation DL(InlinedAt);
1593   DbgScope *Parent =
1594     getOrCreateDbgScope(DL.getScope(), DL.getOrigLocation());
1595   WScope->setParent(Parent);
1596   Parent->addScope(WScope);
1597 
1598   ConcreteScopes[InlinedAt] = WScope;
1599 
1600   return WScope;
1601 }
1602 
1603 /// hasValidLocation - Return true if debug location entry attached with
1604 /// machine instruction encodes valid location info.
1605 static bool hasValidLocation(LLVMContext &Ctx,
1606                              const MachineInstr *MInsn,
1607                              const MDNode *&Scope, const MDNode *&InlinedAt) {
1608   DebugLoc DL = MInsn->getDebugLoc();
1609   if (DL.isUnknown()) return false;
1610 
1611   const MDNode *S = DL.getScope(Ctx);
1612 
1613   // There is no need to create another DIE for compile unit. For all
1614   // other scopes, create one DbgScope now. This will be translated
1615   // into a scope DIE at the end.
1616   if (DIScope(S).isCompileUnit()) return false;
1617 
1618   Scope = S;
1619   InlinedAt = DL.getInlinedAt(Ctx);
1620   return true;
1621 }
1622 
1623 /// calculateDominanceGraph - Calculate dominance graph for DbgScope
1624 /// hierarchy.
1625 static void calculateDominanceGraph(DbgScope *Scope) {
1626   assert (Scope && "Unable to calculate scop edominance graph!");
1627   SmallVector<DbgScope *, 4> WorkStack;
1628   WorkStack.push_back(Scope);
1629   unsigned Counter = 0;
1630   while (!WorkStack.empty()) {
1631     DbgScope *WS = WorkStack.back();
1632     const SmallVector<DbgScope *, 4> &Children = WS->getScopes();
1633     bool visitedChildren = false;
1634     for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
1635            SE = Children.end(); SI != SE; ++SI) {
1636       DbgScope *ChildScope = *SI;
1637       if (!ChildScope->getDFSOut()) {
1638         WorkStack.push_back(ChildScope);
1639         visitedChildren = true;
1640         ChildScope->setDFSIn(++Counter);
1641         break;
1642       }
1643     }
1644     if (!visitedChildren) {
1645       WorkStack.pop_back();
1646       WS->setDFSOut(++Counter);
1647     }
1648   }
1649 }
1650 
1651 /// printDbgScopeInfo - Print DbgScope info for each machine instruction.
1652 static
1653 void printDbgScopeInfo(LLVMContext &Ctx, const MachineFunction *MF,
1654                        DenseMap<const MachineInstr *, DbgScope *> &MI2ScopeMap)
1655 {
1656 #ifndef NDEBUG
1657   unsigned PrevDFSIn = 0;
1658   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1659        I != E; ++I) {
1660     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1661          II != IE; ++II) {
1662       const MachineInstr *MInsn = II;
1663       const MDNode *Scope = NULL;
1664       const MDNode *InlinedAt = NULL;
1665 
1666       // Check if instruction has valid location information.
1667       if (hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
1668         dbgs() << " [ ";
1669         if (InlinedAt)
1670           dbgs() << "*";
1671         DenseMap<const MachineInstr *, DbgScope *>::iterator DI =
1672           MI2ScopeMap.find(MInsn);
1673         if (DI != MI2ScopeMap.end()) {
1674           DbgScope *S = DI->second;
1675           dbgs() << S->getDFSIn();
1676           PrevDFSIn = S->getDFSIn();
1677         } else
1678           dbgs() << PrevDFSIn;
1679       } else
1680         dbgs() << " [ x" << PrevDFSIn;
1681       dbgs() << " ]";
1682       MInsn->dump();
1683     }
1684     dbgs() << "\n";
1685   }
1686 #endif
1687 }
1688 /// extractScopeInformation - Scan machine instructions in this function
1689 /// and collect DbgScopes. Return true, if at least one scope was found.
1690 bool DwarfDebug::extractScopeInformation() {
1691   // If scope information was extracted using .dbg intrinsics then there is not
1692   // any need to extract these information by scanning each instruction.
1693   if (!DbgScopeMap.empty())
1694     return false;
1695 
1696   // Scan each instruction and create scopes. First build working set of scopes.
1697   LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
1698   SmallVector<DbgRange, 4> MIRanges;
1699   DenseMap<const MachineInstr *, DbgScope *> MI2ScopeMap;
1700   const MDNode *PrevScope = NULL;
1701   const MDNode *PrevInlinedAt = NULL;
1702   const MachineInstr *RangeBeginMI = NULL;
1703   const MachineInstr *PrevMI = NULL;
1704   for (MachineFunction::const_iterator I = Asm->MF->begin(), E = Asm->MF->end();
1705        I != E; ++I) {
1706     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1707          II != IE; ++II) {
1708       const MachineInstr *MInsn = II;
1709       const MDNode *Scope = NULL;
1710       const MDNode *InlinedAt = NULL;
1711 
1712       // Check if instruction has valid location information.
1713       if (!hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
1714         PrevMI = MInsn;
1715         continue;
1716       }
1717 
1718       // If scope has not changed then skip this instruction.
1719       if (Scope == PrevScope && PrevInlinedAt == InlinedAt) {
1720         PrevMI = MInsn;
1721         continue;
1722       }
1723 
1724       // Ignore DBG_VALUE. It does not contribute any instruction in output.
1725       if (MInsn->isDebugValue())
1726         continue;
1727 
1728       if (RangeBeginMI) {
1729         // If we have alread seen a beginning of a instruction range and
1730         // current instruction scope does not match scope of first instruction
1731         // in this range then create a new instruction range.
1732         DbgRange R(RangeBeginMI, PrevMI);
1733         MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope,
1734                                                         PrevInlinedAt);
1735         MIRanges.push_back(R);
1736       }
1737 
1738       // This is a beginning of a new instruction range.
1739       RangeBeginMI = MInsn;
1740 
1741       // Reset previous markers.
1742       PrevMI = MInsn;
1743       PrevScope = Scope;
1744       PrevInlinedAt = InlinedAt;
1745     }
1746   }
1747 
1748   // Create last instruction range.
1749   if (RangeBeginMI && PrevMI && PrevScope) {
1750     DbgRange R(RangeBeginMI, PrevMI);
1751     MIRanges.push_back(R);
1752     MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope, PrevInlinedAt);
1753   }
1754 
1755   if (!CurrentFnDbgScope)
1756     return false;
1757 
1758   calculateDominanceGraph(CurrentFnDbgScope);
1759   if (PrintDbgScope)
1760     printDbgScopeInfo(Ctx, Asm->MF, MI2ScopeMap);
1761 
1762   // Find ranges of instructions covered by each DbgScope;
1763   DbgScope *PrevDbgScope = NULL;
1764   for (SmallVector<DbgRange, 4>::const_iterator RI = MIRanges.begin(),
1765          RE = MIRanges.end(); RI != RE; ++RI) {
1766     const DbgRange &R = *RI;
1767     DbgScope *S = MI2ScopeMap.lookup(R.first);
1768     assert (S && "Lost DbgScope for a machine instruction!");
1769     if (PrevDbgScope && !PrevDbgScope->dominates(S))
1770       PrevDbgScope->closeInsnRange(S);
1771     S->openInsnRange(R.first);
1772     S->extendInsnRange(R.second);
1773     PrevDbgScope = S;
1774   }
1775 
1776   if (PrevDbgScope)
1777     PrevDbgScope->closeInsnRange();
1778 
1779   identifyScopeMarkers();
1780 
1781   return !DbgScopeMap.empty();
1782 }
1783 
1784 /// identifyScopeMarkers() -
1785 /// Each DbgScope has first instruction and last instruction to mark beginning
1786 /// and end of a scope respectively. Create an inverse map that list scopes
1787 /// starts (and ends) with an instruction. One instruction may start (or end)
1788 /// multiple scopes. Ignore scopes that are not reachable.
1789 void DwarfDebug::identifyScopeMarkers() {
1790   SmallVector<DbgScope *, 4> WorkList;
1791   WorkList.push_back(CurrentFnDbgScope);
1792   while (!WorkList.empty()) {
1793     DbgScope *S = WorkList.pop_back_val();
1794 
1795     const SmallVector<DbgScope *, 4> &Children = S->getScopes();
1796     if (!Children.empty())
1797       for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
1798              SE = Children.end(); SI != SE; ++SI)
1799         WorkList.push_back(*SI);
1800 
1801     if (S->isAbstractScope())
1802       continue;
1803 
1804     const SmallVector<DbgRange, 4> &Ranges = S->getRanges();
1805     if (Ranges.empty())
1806       continue;
1807     for (SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin(),
1808            RE = Ranges.end(); RI != RE; ++RI) {
1809       assert(RI->first && "DbgRange does not have first instruction!");
1810       assert(RI->second && "DbgRange does not have second instruction!");
1811       requestLabelBeforeInsn(RI->first);
1812       requestLabelAfterInsn(RI->second);
1813     }
1814   }
1815 }
1816 
1817 /// getScopeNode - Get MDNode for DebugLoc's scope.
1818 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1819   if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1820     return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1821   return DL.getScope(Ctx);
1822 }
1823 
1824 /// getFnDebugLoc - Walk up the scope chain of given debug loc and find
1825 /// line number  info for the function.
1826 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1827   const MDNode *Scope = getScopeNode(DL, Ctx);
1828   DISubprogram SP = getDISubprogram(Scope);
1829   if (SP.Verify())
1830     return DebugLoc::get(SP.getLineNumber(), 0, SP);
1831   return DebugLoc();
1832 }
1833 
1834 /// beginFunction - Gather pre-function debug information.  Assumes being
1835 /// emitted immediately after the function entry point.
1836 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1837   if (!MMI->hasDebugInfo()) return;
1838   if (!extractScopeInformation()) return;
1839 
1840   FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1841                                         Asm->getFunctionNumber());
1842   // Assumes in correct section after the entry point.
1843   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1844 
1845   assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1846 
1847   /// ProcessedArgs - Collection of arguments already processed.
1848   SmallPtrSet<const MDNode *, 8> ProcessedArgs;
1849   const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1850   /// LiveUserVar - Map physreg numbers to the MDNode they contain.
1851   std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1852 
1853   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1854        I != E; ++I) {
1855     bool AtBlockEntry = true;
1856     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1857          II != IE; ++II) {
1858       const MachineInstr *MI = II;
1859 
1860       if (MI->isDebugValue()) {
1861         assert (MI->getNumOperands() > 1 && "Invalid machine instruction!");
1862 
1863         // Keep track of user variables.
1864         const MDNode *Var =
1865           MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1866 
1867         // Variable is in a register, we need to check for clobbers.
1868         if (isDbgValueInDefinedReg(MI))
1869           LiveUserVar[MI->getOperand(0).getReg()] = Var;
1870 
1871         // Check the history of this variable.
1872         SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1873         if (History.empty()) {
1874           UserVariables.push_back(Var);
1875           // The first mention of a function argument gets the FunctionBeginSym
1876           // label, so arguments are visible when breaking at function entry.
1877           DIVariable DV(Var);
1878           if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1879               DISubprogram(getDISubprogram(DV.getContext()))
1880                 .describes(MF->getFunction()))
1881             LabelsBeforeInsn[MI] = FunctionBeginSym;
1882         } else {
1883           // We have seen this variable before. Try to coalesce DBG_VALUEs.
1884           const MachineInstr *Prev = History.back();
1885           if (Prev->isDebugValue()) {
1886             // Coalesce identical entries at the end of History.
1887             if (History.size() >= 2 &&
1888                 Prev->isIdenticalTo(History[History.size() - 2]))
1889               History.pop_back();
1890 
1891             // Terminate old register assignments that don't reach MI;
1892             MachineFunction::const_iterator PrevMBB = Prev->getParent();
1893             if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1894                 isDbgValueInDefinedReg(Prev)) {
1895               // Previous register assignment needs to terminate at the end of
1896               // its basic block.
1897               MachineBasicBlock::const_iterator LastMI =
1898                 PrevMBB->getLastNonDebugInstr();
1899               if (LastMI == PrevMBB->end())
1900                 // Drop DBG_VALUE for empty range.
1901                 History.pop_back();
1902               else {
1903                 // Terminate after LastMI.
1904                 History.push_back(LastMI);
1905               }
1906             }
1907           }
1908         }
1909         History.push_back(MI);
1910       } else {
1911         // Not a DBG_VALUE instruction.
1912         if (!MI->isLabel())
1913           AtBlockEntry = false;
1914 
1915         // First known non DBG_VALUE location marks beginning of function
1916         // body.
1917         if (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown())
1918           PrologEndLoc = MI->getDebugLoc();
1919 
1920         // Check if the instruction clobbers any registers with debug vars.
1921         for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1922                MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1923           if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1924             continue;
1925           for (const unsigned *AI = TRI->getOverlaps(MOI->getReg());
1926                unsigned Reg = *AI; ++AI) {
1927             const MDNode *Var = LiveUserVar[Reg];
1928             if (!Var)
1929               continue;
1930             // Reg is now clobbered.
1931             LiveUserVar[Reg] = 0;
1932 
1933             // Was MD last defined by a DBG_VALUE referring to Reg?
1934             DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1935             if (HistI == DbgValues.end())
1936               continue;
1937             SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1938             if (History.empty())
1939               continue;
1940             const MachineInstr *Prev = History.back();
1941             // Sanity-check: Register assignments are terminated at the end of
1942             // their block.
1943             if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1944               continue;
1945             // Is the variable still in Reg?
1946             if (!isDbgValueInDefinedReg(Prev) ||
1947                 Prev->getOperand(0).getReg() != Reg)
1948               continue;
1949             // Var is clobbered. Make sure the next instruction gets a label.
1950             History.push_back(MI);
1951           }
1952         }
1953       }
1954     }
1955   }
1956 
1957   for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1958        I != E; ++I) {
1959     SmallVectorImpl<const MachineInstr*> &History = I->second;
1960     if (History.empty())
1961       continue;
1962 
1963     // Make sure the final register assignments are terminated.
1964     const MachineInstr *Prev = History.back();
1965     if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1966       const MachineBasicBlock *PrevMBB = Prev->getParent();
1967       MachineBasicBlock::const_iterator LastMI = PrevMBB->getLastNonDebugInstr();
1968       if (LastMI == PrevMBB->end())
1969         // Drop DBG_VALUE for empty range.
1970         History.pop_back();
1971       else {
1972         // Terminate after LastMI.
1973         History.push_back(LastMI);
1974       }
1975     }
1976     // Request labels for the full history.
1977     for (unsigned i = 0, e = History.size(); i != e; ++i) {
1978       const MachineInstr *MI = History[i];
1979       if (MI->isDebugValue())
1980         requestLabelBeforeInsn(MI);
1981       else
1982         requestLabelAfterInsn(MI);
1983     }
1984   }
1985 
1986   PrevInstLoc = DebugLoc();
1987   PrevLabel = FunctionBeginSym;
1988 
1989   // Record beginning of function.
1990   if (!PrologEndLoc.isUnknown()) {
1991     DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1992                                        MF->getFunction()->getContext());
1993     recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1994                      FnStartDL.getScope(MF->getFunction()->getContext()),
1995                      DWARF2_FLAG_IS_STMT);
1996   }
1997 }
1998 
1999 /// endFunction - Gather and emit post-function debug information.
2000 ///
2001 void DwarfDebug::endFunction(const MachineFunction *MF) {
2002   if (!MMI->hasDebugInfo() || DbgScopeMap.empty()) return;
2003 
2004   if (CurrentFnDbgScope) {
2005 
2006     // Define end label for subprogram.
2007     FunctionEndSym = Asm->GetTempSymbol("func_end",
2008                                         Asm->getFunctionNumber());
2009     // Assumes in correct section after the entry point.
2010     Asm->OutStreamer.EmitLabel(FunctionEndSym);
2011 
2012     SmallPtrSet<const MDNode *, 16> ProcessedVars;
2013     collectVariableInfo(MF, ProcessedVars);
2014 
2015     // Construct abstract scopes.
2016     for (SmallVector<DbgScope *, 4>::iterator AI = AbstractScopesList.begin(),
2017            AE = AbstractScopesList.end(); AI != AE; ++AI) {
2018       DISubprogram SP((*AI)->getScopeNode());
2019       if (SP.Verify()) {
2020         // Collect info for variables that were optimized out.
2021         StringRef FName = SP.getLinkageName();
2022         if (FName.empty())
2023           FName = SP.getName();
2024         if (NamedMDNode *NMD =
2025             getFnSpecificMDNode(*(MF->getFunction()->getParent()), FName)) {
2026           for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
2027           DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
2028           if (!DV || !ProcessedVars.insert(DV))
2029             continue;
2030           DbgScope *Scope = AbstractScopes.lookup(DV.getContext());
2031           if (Scope)
2032             Scope->addVariable(new DbgVariable(DV));
2033           }
2034         }
2035       }
2036       if (ProcessedSPNodes.count((*AI)->getScopeNode()) == 0)
2037         constructScopeDIE(*AI);
2038     }
2039 
2040     DIE *CurFnDIE = constructScopeDIE(CurrentFnDbgScope);
2041 
2042     if (!DisableFramePointerElim(*MF))
2043       getCompileUnit(CurrentFnDbgScope->getScopeNode())->addUInt(CurFnDIE,
2044                                                                  dwarf::DW_AT_APPLE_omit_frame_ptr,
2045                                                                  dwarf::DW_FORM_flag, 1);
2046 
2047 
2048     DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
2049                                                  MMI->getFrameMoves()));
2050   }
2051 
2052   // Clear debug info
2053   CurrentFnDbgScope = NULL;
2054   DeleteContainerPointers(CurrentFnArguments);
2055   DbgVariableToFrameIndexMap.clear();
2056   VarToAbstractVarMap.clear();
2057   DbgVariableToDbgInstMap.clear();
2058   DeleteContainerSeconds(DbgScopeMap);
2059   UserVariables.clear();
2060   DbgValues.clear();
2061   ConcreteScopes.clear();
2062   DeleteContainerSeconds(AbstractScopes);
2063   AbstractScopesList.clear();
2064   AbstractVariables.clear();
2065   LabelsBeforeInsn.clear();
2066   LabelsAfterInsn.clear();
2067   PrevLabel = NULL;
2068 }
2069 
2070 /// recordVariableFrameIndex - Record a variable's index.
2071 void DwarfDebug::recordVariableFrameIndex(const DbgVariable *V, int Index) {
2072   assert (V && "Invalid DbgVariable!");
2073   DbgVariableToFrameIndexMap[V] = Index;
2074 }
2075 
2076 /// findVariableFrameIndex - Return true if frame index for the variable
2077 /// is found. Update FI to hold value of the index.
2078 bool DwarfDebug::findVariableFrameIndex(const DbgVariable *V, int *FI) {
2079   assert (V && "Invalid DbgVariable!");
2080   DenseMap<const DbgVariable *, int>::iterator I =
2081     DbgVariableToFrameIndexMap.find(V);
2082   if (I == DbgVariableToFrameIndexMap.end())
2083     return false;
2084   *FI = I->second;
2085   return true;
2086 }
2087 
2088 /// findDbgScope - Find DbgScope for the debug loc attached with an
2089 /// instruction.
2090 DbgScope *DwarfDebug::findDbgScope(const MachineInstr *MInsn) {
2091   DbgScope *Scope = NULL;
2092   LLVMContext &Ctx =
2093     MInsn->getParent()->getParent()->getFunction()->getContext();
2094   DebugLoc DL = MInsn->getDebugLoc();
2095 
2096   if (DL.isUnknown())
2097     return Scope;
2098 
2099   if (const MDNode *IA = DL.getInlinedAt(Ctx))
2100     Scope = ConcreteScopes.lookup(IA);
2101   if (Scope == 0)
2102     Scope = DbgScopeMap.lookup(DL.getScope(Ctx));
2103 
2104   return Scope;
2105 }
2106 
2107 
2108 /// recordSourceLine - Register a source line with debug info. Returns the
2109 /// unique label that was emitted and which provides correspondence to
2110 /// the source line list.
2111 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
2112                                   unsigned Flags) {
2113   StringRef Fn;
2114   StringRef Dir;
2115   unsigned Src = 1;
2116   if (S) {
2117     DIDescriptor Scope(S);
2118 
2119     if (Scope.isCompileUnit()) {
2120       DICompileUnit CU(S);
2121       Fn = CU.getFilename();
2122       Dir = CU.getDirectory();
2123     } else if (Scope.isFile()) {
2124       DIFile F(S);
2125       Fn = F.getFilename();
2126       Dir = F.getDirectory();
2127     } else if (Scope.isSubprogram()) {
2128       DISubprogram SP(S);
2129       Fn = SP.getFilename();
2130       Dir = SP.getDirectory();
2131     } else if (Scope.isLexicalBlock()) {
2132       DILexicalBlock DB(S);
2133       Fn = DB.getFilename();
2134       Dir = DB.getDirectory();
2135     } else
2136       assert(0 && "Unexpected scope info");
2137 
2138     Src = GetOrCreateSourceID(Fn, Dir);
2139   }
2140   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags,
2141                                          0, 0, Fn);
2142 }
2143 
2144 //===----------------------------------------------------------------------===//
2145 // Emit Methods
2146 //===----------------------------------------------------------------------===//
2147 
2148 /// computeSizeAndOffset - Compute the size and offset of a DIE.
2149 ///
2150 unsigned
2151 DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
2152   // Get the children.
2153   const std::vector<DIE *> &Children = Die->getChildren();
2154 
2155   // If not last sibling and has children then add sibling offset attribute.
2156   if (!Last && !Children.empty())
2157     Die->addSiblingOffset(DIEValueAllocator);
2158 
2159   // Record the abbreviation.
2160   assignAbbrevNumber(Die->getAbbrev());
2161 
2162   // Get the abbreviation for this DIE.
2163   unsigned AbbrevNumber = Die->getAbbrevNumber();
2164   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2165 
2166   // Set DIE offset
2167   Die->setOffset(Offset);
2168 
2169   // Start the size with the size of abbreviation code.
2170   Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
2171 
2172   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2173   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2174 
2175   // Size the DIE attribute values.
2176   for (unsigned i = 0, N = Values.size(); i < N; ++i)
2177     // Size attribute value.
2178     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
2179 
2180   // Size the DIE children if any.
2181   if (!Children.empty()) {
2182     assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
2183            "Children flag not set");
2184 
2185     for (unsigned j = 0, M = Children.size(); j < M; ++j)
2186       Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
2187 
2188     // End of children marker.
2189     Offset += sizeof(int8_t);
2190   }
2191 
2192   Die->setSize(Offset - Die->getOffset());
2193   return Offset;
2194 }
2195 
2196 /// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
2197 ///
2198 void DwarfDebug::computeSizeAndOffsets() {
2199   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2200          E = CUMap.end(); I != E; ++I) {
2201     // Compute size of compile unit header.
2202     unsigned Offset =
2203       sizeof(int32_t) + // Length of Compilation Unit Info
2204       sizeof(int16_t) + // DWARF version number
2205       sizeof(int32_t) + // Offset Into Abbrev. Section
2206       sizeof(int8_t);   // Pointer Size (in bytes)
2207     computeSizeAndOffset(I->second->getCUDie(), Offset, true);
2208   }
2209 }
2210 
2211 /// EmitSectionSym - Switch to the specified MCSection and emit an assembler
2212 /// temporary label to it if SymbolStem is specified.
2213 static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
2214                                 const char *SymbolStem = 0) {
2215   Asm->OutStreamer.SwitchSection(Section);
2216   if (!SymbolStem) return 0;
2217 
2218   MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
2219   Asm->OutStreamer.EmitLabel(TmpSym);
2220   return TmpSym;
2221 }
2222 
2223 /// EmitSectionLabels - Emit initial Dwarf sections with a label at
2224 /// the start of each one.
2225 void DwarfDebug::EmitSectionLabels() {
2226   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
2227 
2228   // Dwarf sections base addresses.
2229   DwarfInfoSectionSym =
2230     EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
2231   DwarfAbbrevSectionSym =
2232     EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
2233   EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
2234 
2235   if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
2236     EmitSectionSym(Asm, MacroInfo);
2237 
2238   EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
2239   EmitSectionSym(Asm, TLOF.getDwarfLocSection());
2240   EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
2241   EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
2242   DwarfStrSectionSym =
2243     EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
2244   DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
2245                                              "debug_range");
2246 
2247   DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
2248                                            "section_debug_loc");
2249 
2250   TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
2251   EmitSectionSym(Asm, TLOF.getDataSection());
2252 }
2253 
2254 /// emitDIE - Recusively Emits a debug information entry.
2255 ///
2256 void DwarfDebug::emitDIE(DIE *Die) {
2257   // Get the abbreviation for this DIE.
2258   unsigned AbbrevNumber = Die->getAbbrevNumber();
2259   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2260 
2261   // Emit the code (index) for the abbreviation.
2262   if (Asm->isVerbose())
2263     Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
2264                                 Twine::utohexstr(Die->getOffset()) + ":0x" +
2265                                 Twine::utohexstr(Die->getSize()) + " " +
2266                                 dwarf::TagString(Abbrev->getTag()));
2267   Asm->EmitULEB128(AbbrevNumber);
2268 
2269   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2270   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2271 
2272   // Emit the DIE attribute values.
2273   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
2274     unsigned Attr = AbbrevData[i].getAttribute();
2275     unsigned Form = AbbrevData[i].getForm();
2276     assert(Form && "Too many attributes for DIE (check abbreviation)");
2277 
2278     if (Asm->isVerbose())
2279       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
2280 
2281     switch (Attr) {
2282     case dwarf::DW_AT_sibling:
2283       Asm->EmitInt32(Die->getSiblingOffset());
2284       break;
2285     case dwarf::DW_AT_abstract_origin: {
2286       DIEEntry *E = cast<DIEEntry>(Values[i]);
2287       DIE *Origin = E->getEntry();
2288       unsigned Addr = Origin->getOffset();
2289       Asm->EmitInt32(Addr);
2290       break;
2291     }
2292     case dwarf::DW_AT_ranges: {
2293       // DW_AT_range Value encodes offset in debug_range section.
2294       DIEInteger *V = cast<DIEInteger>(Values[i]);
2295 
2296       if (Asm->MAI->doesDwarfUsesLabelOffsetForRanges()) {
2297         Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
2298                                  V->getValue(),
2299                                  4);
2300       } else {
2301         Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
2302                                        V->getValue(),
2303                                        DwarfDebugRangeSectionSym,
2304                                        4);
2305       }
2306       break;
2307     }
2308     case dwarf::DW_AT_location: {
2309       if (UseDotDebugLocEntry.count(Die) != 0) {
2310         DIELabel *L = cast<DIELabel>(Values[i]);
2311         Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
2312       } else
2313         Values[i]->EmitValue(Asm, Form);
2314       break;
2315     }
2316     case dwarf::DW_AT_accessibility: {
2317       if (Asm->isVerbose()) {
2318         DIEInteger *V = cast<DIEInteger>(Values[i]);
2319         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
2320       }
2321       Values[i]->EmitValue(Asm, Form);
2322       break;
2323     }
2324     default:
2325       // Emit an attribute using the defined form.
2326       Values[i]->EmitValue(Asm, Form);
2327       break;
2328     }
2329   }
2330 
2331   // Emit the DIE children if any.
2332   if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
2333     const std::vector<DIE *> &Children = Die->getChildren();
2334 
2335     for (unsigned j = 0, M = Children.size(); j < M; ++j)
2336       emitDIE(Children[j]);
2337 
2338     if (Asm->isVerbose())
2339       Asm->OutStreamer.AddComment("End Of Children Mark");
2340     Asm->EmitInt8(0);
2341   }
2342 }
2343 
2344 /// emitDebugInfo - Emit the debug info section.
2345 ///
2346 void DwarfDebug::emitDebugInfo() {
2347   // Start debug info section.
2348   Asm->OutStreamer.SwitchSection(
2349                             Asm->getObjFileLowering().getDwarfInfoSection());
2350   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2351          E = CUMap.end(); I != E; ++I) {
2352     CompileUnit *TheCU = I->second;
2353     DIE *Die = TheCU->getCUDie();
2354 
2355     // Emit the compile units header.
2356     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
2357                                                   TheCU->getID()));
2358 
2359     // Emit size of content not including length itself
2360     unsigned ContentSize = Die->getSize() +
2361       sizeof(int16_t) + // DWARF version number
2362       sizeof(int32_t) + // Offset Into Abbrev. Section
2363       sizeof(int8_t);   // Pointer Size (in bytes)
2364 
2365     Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
2366     Asm->EmitInt32(ContentSize);
2367     Asm->OutStreamer.AddComment("DWARF version number");
2368     Asm->EmitInt16(dwarf::DWARF_VERSION);
2369     Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2370     Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
2371                            DwarfAbbrevSectionSym);
2372     Asm->OutStreamer.AddComment("Address Size (in bytes)");
2373     Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2374 
2375     emitDIE(Die);
2376     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
2377   }
2378 }
2379 
2380 /// emitAbbreviations - Emit the abbreviation section.
2381 ///
2382 void DwarfDebug::emitAbbreviations() const {
2383   // Check to see if it is worth the effort.
2384   if (!Abbreviations.empty()) {
2385     // Start the debug abbrev section.
2386     Asm->OutStreamer.SwitchSection(
2387                             Asm->getObjFileLowering().getDwarfAbbrevSection());
2388 
2389     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
2390 
2391     // For each abbrevation.
2392     for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
2393       // Get abbreviation data
2394       const DIEAbbrev *Abbrev = Abbreviations[i];
2395 
2396       // Emit the abbrevations code (base 1 index.)
2397       Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2398 
2399       // Emit the abbreviations data.
2400       Abbrev->Emit(Asm);
2401     }
2402 
2403     // Mark end of abbreviations.
2404     Asm->EmitULEB128(0, "EOM(3)");
2405 
2406     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
2407   }
2408 }
2409 
2410 /// emitEndOfLineMatrix - Emit the last address of the section and the end of
2411 /// the line matrix.
2412 ///
2413 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2414   // Define last address of section.
2415   Asm->OutStreamer.AddComment("Extended Op");
2416   Asm->EmitInt8(0);
2417 
2418   Asm->OutStreamer.AddComment("Op size");
2419   Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
2420   Asm->OutStreamer.AddComment("DW_LNE_set_address");
2421   Asm->EmitInt8(dwarf::DW_LNE_set_address);
2422 
2423   Asm->OutStreamer.AddComment("Section end label");
2424 
2425   Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2426                                    Asm->getTargetData().getPointerSize(),
2427                                    0/*AddrSpace*/);
2428 
2429   // Mark end of matrix.
2430   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2431   Asm->EmitInt8(0);
2432   Asm->EmitInt8(1);
2433   Asm->EmitInt8(1);
2434 }
2435 
2436 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
2437 ///
2438 void DwarfDebug::emitDebugPubNames() {
2439   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2440          E = CUMap.end(); I != E; ++I) {
2441     CompileUnit *TheCU = I->second;
2442     // Start the dwarf pubnames section.
2443     Asm->OutStreamer.SwitchSection(
2444       Asm->getObjFileLowering().getDwarfPubNamesSection());
2445 
2446     Asm->OutStreamer.AddComment("Length of Public Names Info");
2447     Asm->EmitLabelDifference(
2448       Asm->GetTempSymbol("pubnames_end", TheCU->getID()),
2449       Asm->GetTempSymbol("pubnames_begin", TheCU->getID()), 4);
2450 
2451     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin",
2452                                                   TheCU->getID()));
2453 
2454     Asm->OutStreamer.AddComment("DWARF Version");
2455     Asm->EmitInt16(dwarf::DWARF_VERSION);
2456 
2457     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2458     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
2459                            DwarfInfoSectionSym);
2460 
2461     Asm->OutStreamer.AddComment("Compilation Unit Length");
2462     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
2463                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
2464                              4);
2465 
2466     const StringMap<DIE*> &Globals = TheCU->getGlobals();
2467     for (StringMap<DIE*>::const_iterator
2468            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2469       const char *Name = GI->getKeyData();
2470       DIE *Entity = GI->second;
2471 
2472       Asm->OutStreamer.AddComment("DIE offset");
2473       Asm->EmitInt32(Entity->getOffset());
2474 
2475       if (Asm->isVerbose())
2476         Asm->OutStreamer.AddComment("External Name");
2477       Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
2478     }
2479 
2480     Asm->OutStreamer.AddComment("End Mark");
2481     Asm->EmitInt32(0);
2482     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end",
2483                                                 TheCU->getID()));
2484   }
2485 }
2486 
2487 void DwarfDebug::emitDebugPubTypes() {
2488   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2489          E = CUMap.end(); I != E; ++I) {
2490     CompileUnit *TheCU = I->second;
2491     // Start the dwarf pubnames section.
2492     Asm->OutStreamer.SwitchSection(
2493       Asm->getObjFileLowering().getDwarfPubTypesSection());
2494     Asm->OutStreamer.AddComment("Length of Public Types Info");
2495     Asm->EmitLabelDifference(
2496       Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
2497       Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
2498 
2499     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2500                                                   TheCU->getID()));
2501 
2502     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2503     Asm->EmitInt16(dwarf::DWARF_VERSION);
2504 
2505     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2506     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
2507                            DwarfInfoSectionSym);
2508 
2509     Asm->OutStreamer.AddComment("Compilation Unit Length");
2510     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
2511                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
2512                              4);
2513 
2514     const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2515     for (StringMap<DIE*>::const_iterator
2516            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2517       const char *Name = GI->getKeyData();
2518       DIE * Entity = GI->second;
2519 
2520       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2521       Asm->EmitInt32(Entity->getOffset());
2522 
2523       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2524       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
2525     }
2526 
2527     Asm->OutStreamer.AddComment("End Mark");
2528     Asm->EmitInt32(0);
2529     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2530                                                   TheCU->getID()));
2531   }
2532 }
2533 
2534 /// emitDebugStr - Emit visible names into a debug str section.
2535 ///
2536 void DwarfDebug::emitDebugStr() {
2537   // Check to see if it is worth the effort.
2538   if (StringPool.empty()) return;
2539 
2540   // Start the dwarf str section.
2541   Asm->OutStreamer.SwitchSection(
2542                                 Asm->getObjFileLowering().getDwarfStrSection());
2543 
2544   // Get all of the string pool entries and put them in an array by their ID so
2545   // we can sort them.
2546   SmallVector<std::pair<unsigned,
2547       StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2548 
2549   for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2550        I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
2551     Entries.push_back(std::make_pair(I->second.second, &*I));
2552 
2553   array_pod_sort(Entries.begin(), Entries.end());
2554 
2555   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2556     // Emit a label for reference from debug information entries.
2557     Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2558 
2559     // Emit the string itself.
2560     Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
2561   }
2562 }
2563 
2564 /// emitDebugLoc - Emit visible names into a debug loc section.
2565 ///
2566 void DwarfDebug::emitDebugLoc() {
2567   if (DotDebugLocEntries.empty())
2568     return;
2569 
2570   for (SmallVector<DotDebugLocEntry, 4>::iterator
2571          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2572        I != E; ++I) {
2573     DotDebugLocEntry &Entry = *I;
2574     if (I + 1 != DotDebugLocEntries.end())
2575       Entry.Merge(I+1);
2576   }
2577 
2578   // Start the dwarf loc section.
2579   Asm->OutStreamer.SwitchSection(
2580     Asm->getObjFileLowering().getDwarfLocSection());
2581   unsigned char Size = Asm->getTargetData().getPointerSize();
2582   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2583   unsigned index = 1;
2584   for (SmallVector<DotDebugLocEntry, 4>::iterator
2585          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2586        I != E; ++I, ++index) {
2587     DotDebugLocEntry &Entry = *I;
2588     if (Entry.isMerged()) continue;
2589     if (Entry.isEmpty()) {
2590       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2591       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2592       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2593     } else {
2594       Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
2595       Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
2596       DIVariable DV(Entry.Variable);
2597       Asm->OutStreamer.AddComment("Loc expr size");
2598       MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2599       MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2600       Asm->EmitLabelDifference(end, begin, 2);
2601       Asm->OutStreamer.EmitLabel(begin);
2602       if (Entry.isConstant()) {
2603         DIBasicType BTy(DV.getType());
2604         if (BTy.Verify() &&
2605             (BTy.getEncoding()  == dwarf::DW_ATE_signed
2606              || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2607           Asm->OutStreamer.AddComment("DW_OP_consts");
2608           Asm->EmitInt8(dwarf::DW_OP_consts);
2609           Asm->EmitSLEB128(Entry.getConstant());
2610         } else {
2611           Asm->OutStreamer.AddComment("DW_OP_constu");
2612           Asm->EmitInt8(dwarf::DW_OP_constu);
2613           Asm->EmitULEB128(Entry.getConstant());
2614         }
2615       } else if (DV.hasComplexAddress()) {
2616         unsigned N = DV.getNumAddrElements();
2617         unsigned i = 0;
2618         if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2619           if (Entry.Loc.getOffset()) {
2620             i = 2;
2621             Asm->EmitDwarfRegOp(Entry.Loc);
2622             Asm->OutStreamer.AddComment("DW_OP_deref");
2623             Asm->EmitInt8(dwarf::DW_OP_deref);
2624             Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2625             Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2626             Asm->EmitSLEB128(DV.getAddrElement(1));
2627           } else {
2628             // If first address element is OpPlus then emit
2629             // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2630             MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2631             Asm->EmitDwarfRegOp(Loc);
2632             i = 2;
2633           }
2634         } else {
2635           Asm->EmitDwarfRegOp(Entry.Loc);
2636         }
2637 
2638         // Emit remaining complex address elements.
2639         for (; i < N; ++i) {
2640           uint64_t Element = DV.getAddrElement(i);
2641           if (Element == DIBuilder::OpPlus) {
2642             Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2643             Asm->EmitULEB128(DV.getAddrElement(++i));
2644           } else if (Element == DIBuilder::OpDeref)
2645             Asm->EmitInt8(dwarf::DW_OP_deref);
2646           else llvm_unreachable("unknown Opcode found in complex address");
2647         }
2648       } else {
2649         // Regular entry.
2650         Asm->EmitDwarfRegOp(Entry.Loc);
2651       }
2652       Asm->OutStreamer.EmitLabel(end);
2653     }
2654   }
2655 }
2656 
2657 /// EmitDebugARanges - Emit visible names into a debug aranges section.
2658 ///
2659 void DwarfDebug::EmitDebugARanges() {
2660   // Start the dwarf aranges section.
2661   Asm->OutStreamer.SwitchSection(
2662                           Asm->getObjFileLowering().getDwarfARangesSection());
2663 }
2664 
2665 /// emitDebugRanges - Emit visible names into a debug ranges section.
2666 ///
2667 void DwarfDebug::emitDebugRanges() {
2668   // Start the dwarf ranges section.
2669   Asm->OutStreamer.SwitchSection(
2670     Asm->getObjFileLowering().getDwarfRangesSection());
2671   unsigned char Size = Asm->getTargetData().getPointerSize();
2672   for (SmallVector<const MCSymbol *, 8>::iterator
2673          I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2674        I != E; ++I) {
2675     if (*I)
2676       Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2677     else
2678       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2679   }
2680 }
2681 
2682 /// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2683 ///
2684 void DwarfDebug::emitDebugMacInfo() {
2685   if (const MCSection *LineInfo =
2686       Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2687     // Start the dwarf macinfo section.
2688     Asm->OutStreamer.SwitchSection(LineInfo);
2689   }
2690 }
2691 
2692 /// emitDebugInlineInfo - Emit inline info using following format.
2693 /// Section Header:
2694 /// 1. length of section
2695 /// 2. Dwarf version number
2696 /// 3. address size.
2697 ///
2698 /// Entries (one "entry" for each function that was inlined):
2699 ///
2700 /// 1. offset into __debug_str section for MIPS linkage name, if exists;
2701 ///   otherwise offset into __debug_str for regular function name.
2702 /// 2. offset into __debug_str section for regular function name.
2703 /// 3. an unsigned LEB128 number indicating the number of distinct inlining
2704 /// instances for the function.
2705 ///
2706 /// The rest of the entry consists of a {die_offset, low_pc} pair for each
2707 /// inlined instance; the die_offset points to the inlined_subroutine die in the
2708 /// __debug_info section, and the low_pc is the starting address for the
2709 /// inlining instance.
2710 void DwarfDebug::emitDebugInlineInfo() {
2711   if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
2712     return;
2713 
2714   if (!FirstCU)
2715     return;
2716 
2717   Asm->OutStreamer.SwitchSection(
2718                         Asm->getObjFileLowering().getDwarfDebugInlineSection());
2719 
2720   Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2721   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2722                            Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2723 
2724   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2725 
2726   Asm->OutStreamer.AddComment("Dwarf Version");
2727   Asm->EmitInt16(dwarf::DWARF_VERSION);
2728   Asm->OutStreamer.AddComment("Address Size (in bytes)");
2729   Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2730 
2731   for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2732          E = InlinedSPNodes.end(); I != E; ++I) {
2733 
2734     const MDNode *Node = *I;
2735     DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2736       = InlineInfo.find(Node);
2737     SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2738     DISubprogram SP(Node);
2739     StringRef LName = SP.getLinkageName();
2740     StringRef Name = SP.getName();
2741 
2742     Asm->OutStreamer.AddComment("MIPS linkage name");
2743     if (LName.empty()) {
2744       Asm->OutStreamer.EmitBytes(Name, 0);
2745       Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
2746     } else
2747       Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2748                              DwarfStrSectionSym);
2749 
2750     Asm->OutStreamer.AddComment("Function name");
2751     Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2752     Asm->EmitULEB128(Labels.size(), "Inline count");
2753 
2754     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2755            LE = Labels.end(); LI != LE; ++LI) {
2756       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2757       Asm->EmitInt32(LI->second->getOffset());
2758 
2759       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2760       Asm->OutStreamer.EmitSymbolValue(LI->first,
2761                                        Asm->getTargetData().getPointerSize(),0);
2762     }
2763   }
2764 
2765   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2766 }
2767