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   DwarfFrameSectionSym = 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 = VariableCU->addConstantValue(VariableDie,
716                                                DVInsn->getOperand(0));
717       else if (DVInsn->getOperand(0).isFPImm())
718         updated =
719           VariableCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0));
720     } else {
721       VariableCU->addVariableAddress(DV, VariableDie,
722                                      Asm->getDebugValueLocation(DVInsn));
723       updated = true;
724     }
725     if (!updated) {
726       // If variableDie is not updated then DBG_VALUE instruction does not
727       // have valid variable info.
728       delete VariableDie;
729       return NULL;
730     }
731     DV->setDIE(VariableDie);
732     return VariableDie;
733   }
734 
735   // .. else use frame index, if available.
736   int FI = 0;
737   if (findVariableFrameIndex(DV, &FI)) {
738     unsigned FrameReg = 0;
739     const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
740     int Offset =
741       TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
742     MachineLocation Location(FrameReg, Offset);
743     VariableCU->addVariableAddress(DV, VariableDie, Location);
744   }
745 
746   DV->setDIE(VariableDie);
747   return VariableDie;
748 
749 }
750 
751 void CompileUnit::addPubTypes(DISubprogram SP) {
752   DICompositeType SPTy = SP.getType();
753   unsigned SPTag = SPTy.getTag();
754   if (SPTag != dwarf::DW_TAG_subroutine_type)
755     return;
756 
757   DIArray Args = SPTy.getTypeArray();
758   for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
759     DIType ATy(Args.getElement(i));
760     if (!ATy.Verify())
761       continue;
762     DICompositeType CATy = getDICompositeType(ATy);
763     if (DIDescriptor(CATy).Verify() && !CATy.getName().empty()
764         && !CATy.isForwardDecl()) {
765       if (DIEEntry *Entry = getDIEEntry(CATy))
766         addGlobalType(CATy.getName(), Entry->getEntry());
767     }
768   }
769 }
770 
771 /// constructScopeDIE - Construct a DIE for this scope.
772 DIE *DwarfDebug::constructScopeDIE(DbgScope *Scope) {
773   if (!Scope || !Scope->getScopeNode())
774     return NULL;
775 
776   SmallVector <DIE *, 8> Children;
777 
778   // Collect arguments for current function.
779   if (Scope == CurrentFnDbgScope)
780     for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
781       if (DbgVariable *ArgDV = CurrentFnArguments[i])
782         if (DIE *Arg = constructVariableDIE(ArgDV, Scope))
783           Children.push_back(Arg);
784 
785   // Collect lexical scope childrens first.
786   const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
787   for (unsigned i = 0, N = Variables.size(); i < N; ++i)
788     if (DIE *Variable = constructVariableDIE(Variables[i], Scope))
789       Children.push_back(Variable);
790   const SmallVector<DbgScope *, 4> &Scopes = Scope->getScopes();
791   for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
792     if (DIE *Nested = constructScopeDIE(Scopes[j]))
793       Children.push_back(Nested);
794   DIScope DS(Scope->getScopeNode());
795   DIE *ScopeDIE = NULL;
796   if (Scope->getInlinedAt())
797     ScopeDIE = constructInlinedScopeDIE(Scope);
798   else if (DS.isSubprogram()) {
799     ProcessedSPNodes.insert(DS);
800     if (Scope->isAbstractScope()) {
801       ScopeDIE = getCompileUnit(DS)->getDIE(DS);
802       // Note down abstract DIE.
803       if (ScopeDIE)
804         AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
805     }
806     else
807       ScopeDIE = updateSubprogramScopeDIE(DS);
808   }
809   else {
810     // There is no need to emit empty lexical block DIE.
811     if (Children.empty())
812       return NULL;
813     ScopeDIE = constructLexicalScopeDIE(Scope);
814   }
815 
816   if (!ScopeDIE) return NULL;
817 
818   // Add children
819   for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
820          E = Children.end(); I != E; ++I)
821     ScopeDIE->addChild(*I);
822 
823   if (DS.isSubprogram())
824     getCompileUnit(DS)->addPubTypes(DISubprogram(DS));
825 
826  return ScopeDIE;
827 }
828 
829 /// GetOrCreateSourceID - Look up the source id with the given directory and
830 /// source file names. If none currently exists, create a new id and insert it
831 /// in the SourceIds map. This can update DirectoryNames and SourceFileNames
832 /// maps as well.
833 
834 unsigned DwarfDebug::GetOrCreateSourceID(StringRef FileName,
835                                          StringRef DirName) {
836   // If FE did not provide a file name, then assume stdin.
837   if (FileName.empty())
838     return GetOrCreateSourceID("<stdin>", StringRef());
839 
840   // MCStream expects full path name as filename.
841   if (!DirName.empty() && !FileName.startswith("/")) {
842     std::string FullPathName(DirName.data());
843     if (!DirName.endswith("/"))
844       FullPathName += "/";
845     FullPathName += FileName.data();
846     // Here FullPathName will be copied into StringMap by GetOrCreateSourceID.
847     return GetOrCreateSourceID(StringRef(FullPathName), StringRef());
848   }
849 
850   StringMapEntry<unsigned> &Entry = SourceIdMap.GetOrCreateValue(FileName);
851   if (Entry.getValue())
852     return Entry.getValue();
853 
854   unsigned SrcId = SourceIdMap.size();
855   Entry.setValue(SrcId);
856 
857   // Print out a .file directive to specify files for .loc directives.
858   Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.getKey());
859 
860   return SrcId;
861 }
862 
863 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
864 DIE *CompileUnit::getOrCreateNameSpace(DINameSpace NS) {
865   DIE *NDie = getDIE(NS);
866   if (NDie)
867     return NDie;
868   NDie = new DIE(dwarf::DW_TAG_namespace);
869   insertDIE(NS, NDie);
870   if (!NS.getName().empty())
871     addString(NDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, NS.getName());
872   addSourceLine(NDie, NS);
873   addToContextOwner(NDie, NS.getContext());
874   return NDie;
875 }
876 
877 /// constructCompileUnit - Create new CompileUnit for the given
878 /// metadata node with tag DW_TAG_compile_unit.
879 void DwarfDebug::constructCompileUnit(const MDNode *N) {
880   DICompileUnit DIUnit(N);
881   StringRef FN = DIUnit.getFilename();
882   StringRef Dir = DIUnit.getDirectory();
883   unsigned ID = GetOrCreateSourceID(FN, Dir);
884 
885   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
886   CompileUnit *NewCU = new CompileUnit(ID, Die, Asm, this);
887   NewCU->addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
888                    DIUnit.getProducer());
889   NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
890                  DIUnit.getLanguage());
891   NewCU->addString(Die, dwarf::DW_AT_name, dwarf::DW_FORM_string, FN);
892   // Use DW_AT_entry_pc instead of DW_AT_low_pc/DW_AT_high_pc pair. This
893   // simplifies debug range entries.
894   NewCU->addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
895   // DW_AT_stmt_list is a offset of line number information for this
896   // compile unit in debug_line section.
897   if(Asm->MAI->doesDwarfRequireRelocationForStmtList())
898     NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
899                     Asm->GetTempSymbol("section_line"));
900   else
901     NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
902 
903   if (!Dir.empty())
904     NewCU->addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
905   if (DIUnit.isOptimized())
906     NewCU->addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
907 
908   StringRef Flags = DIUnit.getFlags();
909   if (!Flags.empty())
910     NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, dwarf::DW_FORM_string, Flags);
911 
912   unsigned RVer = DIUnit.getRunTimeVersion();
913   if (RVer)
914     NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
915             dwarf::DW_FORM_data1, RVer);
916 
917   if (!FirstCU)
918     FirstCU = NewCU;
919   CUMap.insert(std::make_pair(N, NewCU));
920 }
921 
922 /// getCompielUnit - Get CompileUnit DIE.
923 CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
924   assert (N && "Invalid DwarfDebug::getCompileUnit argument!");
925   DIDescriptor D(N);
926   const MDNode *CUNode = NULL;
927   if (D.isCompileUnit())
928     CUNode = N;
929   else if (D.isSubprogram())
930     CUNode = DISubprogram(N).getCompileUnit();
931   else if (D.isType())
932     CUNode = DIType(N).getCompileUnit();
933   else if (D.isGlobalVariable())
934     CUNode = DIGlobalVariable(N).getCompileUnit();
935   else if (D.isVariable())
936     CUNode = DIVariable(N).getCompileUnit();
937   else if (D.isNameSpace())
938     CUNode = DINameSpace(N).getCompileUnit();
939   else if (D.isFile())
940     CUNode = DIFile(N).getCompileUnit();
941   else
942     return FirstCU;
943 
944   DenseMap<const MDNode *, CompileUnit *>::const_iterator I
945     = CUMap.find(CUNode);
946   if (I == CUMap.end())
947     return FirstCU;
948   return I->second;
949 }
950 
951 /// isUnsignedDIType - Return true if type encoding is unsigned.
952 static bool isUnsignedDIType(DIType Ty) {
953   DIDerivedType DTy(Ty);
954   if (DTy.Verify())
955     return isUnsignedDIType(DTy.getTypeDerivedFrom());
956 
957   DIBasicType BTy(Ty);
958   if (BTy.Verify()) {
959     unsigned Encoding = BTy.getEncoding();
960     if (Encoding == dwarf::DW_ATE_unsigned ||
961         Encoding == dwarf::DW_ATE_unsigned_char)
962       return true;
963   }
964   return false;
965 }
966 
967 // Return const exprssion if value is a GEP to access merged global
968 // constant. e.g.
969 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
970 static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
971   const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
972   if (!CE || CE->getNumOperands() != 3 ||
973       CE->getOpcode() != Instruction::GetElementPtr)
974     return NULL;
975 
976   // First operand points to a global value.
977   if (!isa<GlobalValue>(CE->getOperand(0)))
978     return NULL;
979 
980   // Second operand is zero.
981   const ConstantInt *CI =
982     dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
983   if (!CI || !CI->isZero())
984     return NULL;
985 
986   // Third operand is offset.
987   if (!isa<ConstantInt>(CE->getOperand(2)))
988     return NULL;
989 
990   return CE;
991 }
992 
993 /// constructGlobalVariableDIE - Construct global variable DIE.
994 void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
995   DIGlobalVariable GV(N);
996 
997   // If debug information is malformed then ignore it.
998   if (GV.Verify() == false)
999     return;
1000 
1001   // Check for pre-existence.
1002   CompileUnit *TheCU = getCompileUnit(N);
1003   if (TheCU->getDIE(GV))
1004     return;
1005 
1006   DIType GTy = GV.getType();
1007   DIE *VariableDIE = new DIE(GV.getTag());
1008 
1009   bool isGlobalVariable = GV.getGlobal() != NULL;
1010 
1011   // Add name.
1012   TheCU->addString(VariableDIE, dwarf::DW_AT_name, dwarf::DW_FORM_string,
1013                    GV.getDisplayName());
1014   StringRef LinkageName = GV.getLinkageName();
1015   if (!LinkageName.empty() && isGlobalVariable)
1016     TheCU->addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
1017                      dwarf::DW_FORM_string,
1018                      getRealLinkageName(LinkageName));
1019   // Add type.
1020   TheCU->addType(VariableDIE, GTy);
1021   if (GTy.isCompositeType() && !GTy.getName().empty()
1022       && !GTy.isForwardDecl()) {
1023     DIEEntry *Entry = TheCU->getDIEEntry(GTy);
1024     assert(Entry && "Missing global type!");
1025     TheCU->addGlobalType(GTy.getName(), Entry->getEntry());
1026   }
1027   // Add scoping info.
1028   if (!GV.isLocalToUnit()) {
1029     TheCU->addUInt(VariableDIE, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
1030     // Expose as global.
1031     TheCU->addGlobal(GV.getName(), VariableDIE);
1032   }
1033   // Add line number info.
1034   TheCU->addSourceLine(VariableDIE, GV);
1035   // Add to map.
1036   TheCU->insertDIE(N, VariableDIE);
1037   // Add to context owner.
1038   DIDescriptor GVContext = GV.getContext();
1039   TheCU->addToContextOwner(VariableDIE, GVContext);
1040   // Add location.
1041   if (isGlobalVariable) {
1042     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1043     TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1044     TheCU->addLabel(Block, 0, dwarf::DW_FORM_udata,
1045              Asm->Mang->getSymbol(GV.getGlobal()));
1046     // Do not create specification DIE if context is either compile unit
1047     // or a subprogram.
1048     if (GV.isDefinition() && !GVContext.isCompileUnit() &&
1049         !GVContext.isFile() && !isSubprogramContext(GVContext)) {
1050       // Create specification DIE.
1051       DIE *VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1052       TheCU->addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1053                   dwarf::DW_FORM_ref4, VariableDIE);
1054       TheCU->addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1055       TheCU->addUInt(VariableDIE, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1056       TheCU->addDie(VariableSpecDIE);
1057     } else {
1058       TheCU->addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1059     }
1060   } else if (ConstantInt *CI =
1061              dyn_cast_or_null<ConstantInt>(GV.getConstant()))
1062     TheCU->addConstantValue(VariableDIE, CI, isUnsignedDIType(GTy));
1063   else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
1064     // GV is a merged global.
1065     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1066     TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1067     TheCU->addLabel(Block, 0, dwarf::DW_FORM_udata,
1068                     Asm->Mang->getSymbol(cast<GlobalValue>(CE->getOperand(0))));
1069     ConstantInt *CII = cast<ConstantInt>(CE->getOperand(2));
1070     TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1071     TheCU->addUInt(Block, 0, dwarf::DW_FORM_udata, CII->getZExtValue());
1072     TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1073     TheCU->addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1074   }
1075 
1076   return;
1077 }
1078 
1079 /// construct SubprogramDIE - Construct subprogram DIE.
1080 void DwarfDebug::constructSubprogramDIE(const MDNode *N) {
1081   DISubprogram SP(N);
1082 
1083   // Check for pre-existence.
1084   CompileUnit *TheCU = getCompileUnit(N);
1085   if (TheCU->getDIE(N))
1086     return;
1087 
1088   if (!SP.isDefinition())
1089     // This is a method declaration which will be handled while constructing
1090     // class type.
1091     return;
1092 
1093   DIE *SubprogramDie = createSubprogramDIE(SP);
1094 
1095   // Add to map.
1096   TheCU->insertDIE(N, SubprogramDie);
1097 
1098   // Add to context owner.
1099   TheCU->addToContextOwner(SubprogramDie, SP.getContext());
1100 
1101   // Expose as global.
1102   TheCU->addGlobal(SP.getName(), SubprogramDie);
1103 
1104   return;
1105 }
1106 
1107 /// beginModule - Emit all Dwarf sections that should come prior to the
1108 /// content. Create global DIEs and emit initial debug info sections.
1109 /// This is inovked by the target AsmPrinter.
1110 void DwarfDebug::beginModule(Module *M) {
1111   if (DisableDebugInfoPrinting)
1112     return;
1113 
1114   // If module has named metadata anchors then use them, otherwise scan the module
1115   // using debug info finder to collect debug info.
1116   NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
1117   if (CU_Nodes) {
1118 
1119     NamedMDNode *GV_Nodes = M->getNamedMetadata("llvm.dbg.gv");
1120     NamedMDNode *SP_Nodes = M->getNamedMetadata("llvm.dbg.sp");
1121     if (!GV_Nodes && !SP_Nodes)
1122       // If there are not any global variables or any functions then
1123       // there is not any debug info in this module.
1124       return;
1125 
1126     for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)
1127       constructCompileUnit(CU_Nodes->getOperand(i));
1128 
1129     if (GV_Nodes)
1130       for (unsigned i = 0, e = GV_Nodes->getNumOperands(); i != e; ++i)
1131         constructGlobalVariableDIE(GV_Nodes->getOperand(i));
1132 
1133     if (SP_Nodes)
1134       for (unsigned i = 0, e = SP_Nodes->getNumOperands(); i != e; ++i)
1135         constructSubprogramDIE(SP_Nodes->getOperand(i));
1136 
1137   } else {
1138 
1139     DebugInfoFinder DbgFinder;
1140     DbgFinder.processModule(*M);
1141 
1142     bool HasDebugInfo = false;
1143     // Scan all the compile-units to see if there are any marked as the main unit.
1144     // if not, we do not generate debug info.
1145     for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1146            E = DbgFinder.compile_unit_end(); I != E; ++I) {
1147       if (DICompileUnit(*I).isMain()) {
1148         HasDebugInfo = true;
1149         break;
1150       }
1151     }
1152     if (!HasDebugInfo) return;
1153 
1154     // Create all the compile unit DIEs.
1155     for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1156            E = DbgFinder.compile_unit_end(); I != E; ++I)
1157       constructCompileUnit(*I);
1158 
1159     // Create DIEs for each global variable.
1160     for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
1161            E = DbgFinder.global_variable_end(); I != E; ++I)
1162       constructGlobalVariableDIE(*I);
1163 
1164     // Create DIEs for each subprogram.
1165     for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
1166            E = DbgFinder.subprogram_end(); I != E; ++I)
1167       constructSubprogramDIE(*I);
1168   }
1169 
1170   // Tell MMI that we have debug info.
1171   MMI->setDebugInfoAvailability(true);
1172 
1173   // Emit initial sections.
1174   EmitSectionLabels();
1175 
1176   //getOrCreateTypeDIE
1177   if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
1178     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1179       DIType Ty(NMD->getOperand(i));
1180       getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
1181     }
1182 
1183   if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
1184     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1185       DIType Ty(NMD->getOperand(i));
1186       getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
1187     }
1188 
1189   // Prime section data.
1190   SectionMap.insert(Asm->getObjFileLowering().getTextSection());
1191 }
1192 
1193 /// endModule - Emit all Dwarf sections that should come after the content.
1194 ///
1195 void DwarfDebug::endModule() {
1196   if (!FirstCU) return;
1197   const Module *M = MMI->getModule();
1198   DenseMap<const MDNode *, DbgScope *> DeadFnScopeMap;
1199   if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
1200     for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
1201       if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
1202       DISubprogram SP(AllSPs->getOperand(SI));
1203       if (!SP.Verify()) continue;
1204 
1205       // Collect info for variables that were optimized out.
1206       if (!SP.isDefinition()) continue;
1207       StringRef FName = SP.getLinkageName();
1208       if (FName.empty())
1209         FName = SP.getName();
1210       NamedMDNode *NMD = getFnSpecificMDNode(*(MMI->getModule()), FName);
1211       if (!NMD) continue;
1212       unsigned E = NMD->getNumOperands();
1213       if (!E) continue;
1214       DbgScope *Scope = new DbgScope(NULL, DIDescriptor(SP), NULL);
1215       DeadFnScopeMap[SP] = Scope;
1216       for (unsigned I = 0; I != E; ++I) {
1217         DIVariable DV(NMD->getOperand(I));
1218         if (!DV.Verify()) continue;
1219         Scope->addVariable(new DbgVariable(DV));
1220       }
1221 
1222       // Construct subprogram DIE and add variables DIEs.
1223       constructSubprogramDIE(SP);
1224       DIE *ScopeDIE = getCompileUnit(SP)->getDIE(SP);
1225       const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
1226       for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
1227         DIE *VariableDIE = constructVariableDIE(Variables[i], Scope);
1228         if (VariableDIE)
1229           ScopeDIE->addChild(VariableDIE);
1230       }
1231     }
1232   }
1233 
1234   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
1235   for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
1236          AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
1237     DIE *ISP = *AI;
1238     FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
1239   }
1240 
1241   for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1242          CE = ContainingTypeMap.end(); CI != CE; ++CI) {
1243     DIE *SPDie = CI->first;
1244     const MDNode *N = dyn_cast_or_null<MDNode>(CI->second);
1245     if (!N) continue;
1246     DIE *NDie = getCompileUnit(N)->getDIE(N);
1247     if (!NDie) continue;
1248     getCompileUnit(N)->addDIEEntry(SPDie, dwarf::DW_AT_containing_type,
1249                                    dwarf::DW_FORM_ref4, NDie);
1250   }
1251 
1252   // Standard sections final addresses.
1253   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
1254   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
1255   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
1256   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
1257 
1258   // End text sections.
1259   for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
1260     Asm->OutStreamer.SwitchSection(SectionMap[i]);
1261     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
1262   }
1263 
1264   // Emit common frame information.
1265   emitCommonDebugFrame();
1266 
1267   // Emit function debug frame information
1268   for (std::vector<FunctionDebugFrameInfo>::iterator I = DebugFrames.begin(),
1269          E = DebugFrames.end(); I != E; ++I)
1270     emitFunctionDebugFrame(*I);
1271 
1272   // Compute DIE offsets and sizes.
1273   computeSizeAndOffsets();
1274 
1275   // Emit all the DIEs into a debug info section
1276   emitDebugInfo();
1277 
1278   // Corresponding abbreviations into a abbrev section.
1279   emitAbbreviations();
1280 
1281   // Emit info into a debug pubnames section.
1282   emitDebugPubNames();
1283 
1284   // Emit info into a debug pubtypes section.
1285   emitDebugPubTypes();
1286 
1287   // Emit info into a debug loc section.
1288   emitDebugLoc();
1289 
1290   // Emit info into a debug aranges section.
1291   EmitDebugARanges();
1292 
1293   // Emit info into a debug ranges section.
1294   emitDebugRanges();
1295 
1296   // Emit info into a debug macinfo section.
1297   emitDebugMacInfo();
1298 
1299   // Emit inline info.
1300   emitDebugInlineInfo();
1301 
1302   // Emit info into a debug str section.
1303   emitDebugStr();
1304 
1305   // clean up.
1306   DeleteContainerSeconds(DeadFnScopeMap);
1307   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1308          E = CUMap.end(); I != E; ++I)
1309     delete I->second;
1310   FirstCU = NULL;  // Reset for the next Module, if any.
1311 }
1312 
1313 /// findAbstractVariable - Find abstract variable, if any, associated with Var.
1314 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &Var,
1315                                               DebugLoc ScopeLoc) {
1316 
1317   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1318   if (AbsDbgVariable)
1319     return AbsDbgVariable;
1320 
1321   LLVMContext &Ctx = Var->getContext();
1322   DbgScope *Scope = AbstractScopes.lookup(ScopeLoc.getScope(Ctx));
1323   if (!Scope)
1324     return NULL;
1325 
1326   AbsDbgVariable = new DbgVariable(Var);
1327   Scope->addVariable(AbsDbgVariable);
1328   AbstractVariables[Var] = AbsDbgVariable;
1329   return AbsDbgVariable;
1330 }
1331 
1332 /// addCurrentFnArgument - If Var is an current function argument that add
1333 /// it in CurrentFnArguments list.
1334 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1335                                       DbgVariable *Var, DbgScope *Scope) {
1336   if (Scope != CurrentFnDbgScope)
1337     return false;
1338   DIVariable DV = Var->getVariable();
1339   if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1340     return false;
1341   unsigned ArgNo = DV.getArgNumber();
1342   if (ArgNo == 0)
1343     return false;
1344 
1345   size_t Size = CurrentFnArguments.size();
1346   if (Size == 0)
1347     CurrentFnArguments.resize(MF->getFunction()->arg_size());
1348   // llvm::Function argument size is not good indicator of how many
1349   // arguments does the function have at source level.
1350   if (ArgNo > Size)
1351     CurrentFnArguments.resize(ArgNo * 2);
1352   CurrentFnArguments[ArgNo - 1] = Var;
1353   return true;
1354 }
1355 
1356 /// collectVariableInfoFromMMITable - Collect variable information from
1357 /// side table maintained by MMI.
1358 void
1359 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction * MF,
1360                                    SmallPtrSet<const MDNode *, 16> &Processed) {
1361   const LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
1362   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1363   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1364          VE = VMap.end(); VI != VE; ++VI) {
1365     const MDNode *Var = VI->first;
1366     if (!Var) continue;
1367     Processed.insert(Var);
1368     DIVariable DV(Var);
1369     const std::pair<unsigned, DebugLoc> &VP = VI->second;
1370 
1371     DbgScope *Scope = 0;
1372     if (const MDNode *IA = VP.second.getInlinedAt(Ctx))
1373       Scope = ConcreteScopes.lookup(IA);
1374     if (Scope == 0)
1375       Scope = DbgScopeMap.lookup(VP.second.getScope(Ctx));
1376 
1377     // If variable scope is not found then skip this variable.
1378     if (Scope == 0)
1379       continue;
1380 
1381     DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1382     DbgVariable *RegVar = new DbgVariable(DV);
1383     recordVariableFrameIndex(RegVar, VP.first);
1384     if (!addCurrentFnArgument(MF, RegVar, Scope))
1385       Scope->addVariable(RegVar);
1386     if (AbsDbgVariable) {
1387       recordVariableFrameIndex(AbsDbgVariable, VP.first);
1388       VarToAbstractVarMap[RegVar] = AbsDbgVariable;
1389     }
1390   }
1391 }
1392 
1393 /// isDbgValueInDefinedReg - Return true if debug value, encoded by
1394 /// DBG_VALUE instruction, is in a defined reg.
1395 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1396   assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1397   return MI->getNumOperands() == 3 &&
1398          MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1399          MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1400 }
1401 
1402 /// collectVariableInfo - Populate DbgScope entries with variables' info.
1403 void
1404 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1405                                 SmallPtrSet<const MDNode *, 16> &Processed) {
1406 
1407   /// collection info from MMI table.
1408   collectVariableInfoFromMMITable(MF, Processed);
1409 
1410   for (SmallVectorImpl<const MDNode*>::const_iterator
1411          UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1412          ++UVI) {
1413     const MDNode *Var = *UVI;
1414     if (Processed.count(Var))
1415       continue;
1416 
1417     // History contains relevant DBG_VALUE instructions for Var and instructions
1418     // clobbering it.
1419     SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1420     if (History.empty())
1421       continue;
1422     const MachineInstr *MInsn = History.front();
1423 
1424     DIVariable DV(Var);
1425     DbgScope *Scope = NULL;
1426     if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1427         DISubprogram(DV.getContext()).describes(MF->getFunction()))
1428       Scope = CurrentFnDbgScope;
1429     else
1430       Scope = findDbgScope(MInsn);
1431     // If variable scope is not found then skip this variable.
1432     if (!Scope)
1433       continue;
1434 
1435     Processed.insert(DV);
1436     assert(MInsn->isDebugValue() && "History must begin with debug value");
1437     DbgVariable *RegVar = new DbgVariable(DV);
1438     if (!addCurrentFnArgument(MF, RegVar, Scope))
1439       Scope->addVariable(RegVar);
1440     if (DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc())) {
1441       DbgVariableToDbgInstMap[AbsVar] = MInsn;
1442       VarToAbstractVarMap[RegVar] = AbsVar;
1443     }
1444 
1445     // Simple ranges that are fully coalesced.
1446     if (History.size() <= 1 || (History.size() == 2 &&
1447                                 MInsn->isIdenticalTo(History.back()))) {
1448       DbgVariableToDbgInstMap[RegVar] = MInsn;
1449       continue;
1450     }
1451 
1452     // handle multiple DBG_VALUE instructions describing one variable.
1453     RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1454 
1455     for (SmallVectorImpl<const MachineInstr*>::const_iterator
1456            HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1457       const MachineInstr *Begin = *HI;
1458       assert(Begin->isDebugValue() && "Invalid History entry");
1459       MachineLocation MLoc;
1460       if (Begin->getNumOperands() == 3) {
1461         if (Begin->getOperand(0).isReg() && Begin->getOperand(1).isImm())
1462           MLoc.set(Begin->getOperand(0).getReg(), Begin->getOperand(1).getImm());
1463       } else
1464         MLoc = Asm->getDebugValueLocation(Begin);
1465 
1466       // FIXME: emitDebugLoc only understands registers.
1467       if (!MLoc.getReg())
1468         continue;
1469 
1470       // Compute the range for a register location.
1471       const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1472       const MCSymbol *SLabel = 0;
1473 
1474       if (HI + 1 == HE)
1475         // If Begin is the last instruction in History then its value is valid
1476         // until the end of the function.
1477         SLabel = FunctionEndSym;
1478       else {
1479         const MachineInstr *End = HI[1];
1480         if (End->isDebugValue())
1481           SLabel = getLabelBeforeInsn(End);
1482         else {
1483           // End is a normal instruction clobbering the range.
1484           SLabel = getLabelAfterInsn(End);
1485           assert(SLabel && "Forgot label after clobber instruction");
1486           ++HI;
1487         }
1488       }
1489 
1490       // The value is valid until the next DBG_VALUE or clobber.
1491       DotDebugLocEntries.push_back(DotDebugLocEntry(FLabel, SLabel, MLoc, Var));
1492     }
1493     DotDebugLocEntries.push_back(DotDebugLocEntry());
1494   }
1495 
1496   // Collect info for variables that were optimized out.
1497   const Function *F = MF->getFunction();
1498   if (NamedMDNode *NMD = getFnSpecificMDNode(*(F->getParent()), F->getName())) {
1499     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1500       DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
1501       if (!DV || !Processed.insert(DV))
1502         continue;
1503       DbgScope *Scope = DbgScopeMap.lookup(DV.getContext());
1504       if (Scope)
1505         Scope->addVariable(new DbgVariable(DV));
1506     }
1507   }
1508 }
1509 
1510 /// getLabelBeforeInsn - Return Label preceding the instruction.
1511 const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1512   MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1513   assert(Label && "Didn't insert label before instruction");
1514   return Label;
1515 }
1516 
1517 /// getLabelAfterInsn - Return Label immediately following the instruction.
1518 const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1519   return LabelsAfterInsn.lookup(MI);
1520 }
1521 
1522 /// beginInstruction - Process beginning of an instruction.
1523 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1524   // Check if source location changes, but ignore DBG_VALUE locations.
1525   if (!MI->isDebugValue()) {
1526     DebugLoc DL = MI->getDebugLoc();
1527     if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1528       PrevInstLoc = DL;
1529       if (!DL.isUnknown()) {
1530         const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1531         recordSourceLine(DL.getLine(), DL.getCol(), Scope);
1532       } else
1533         recordSourceLine(0, 0, 0);
1534     }
1535   }
1536 
1537   // Insert labels where requested.
1538   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1539     LabelsBeforeInsn.find(MI);
1540 
1541   // No label needed.
1542   if (I == LabelsBeforeInsn.end())
1543     return;
1544 
1545   // Label already assigned.
1546   if (I->second)
1547     return;
1548 
1549   if (!PrevLabel) {
1550     PrevLabel = MMI->getContext().CreateTempSymbol();
1551     Asm->OutStreamer.EmitLabel(PrevLabel);
1552   }
1553   I->second = PrevLabel;
1554 }
1555 
1556 /// endInstruction - Process end of an instruction.
1557 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1558   // Don't create a new label after DBG_VALUE instructions.
1559   // They don't generate code.
1560   if (!MI->isDebugValue())
1561     PrevLabel = 0;
1562 
1563   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1564     LabelsAfterInsn.find(MI);
1565 
1566   // No label needed.
1567   if (I == LabelsAfterInsn.end())
1568     return;
1569 
1570   // Label already assigned.
1571   if (I->second)
1572     return;
1573 
1574   // We need a label after this instruction.
1575   if (!PrevLabel) {
1576     PrevLabel = MMI->getContext().CreateTempSymbol();
1577     Asm->OutStreamer.EmitLabel(PrevLabel);
1578   }
1579   I->second = PrevLabel;
1580 }
1581 
1582 /// getOrCreateDbgScope - Create DbgScope for the scope.
1583 DbgScope *DwarfDebug::getOrCreateDbgScope(const MDNode *Scope,
1584                                           const MDNode *InlinedAt) {
1585   if (!InlinedAt) {
1586     DbgScope *WScope = DbgScopeMap.lookup(Scope);
1587     if (WScope)
1588       return WScope;
1589     WScope = new DbgScope(NULL, DIDescriptor(Scope), NULL);
1590     DbgScopeMap.insert(std::make_pair(Scope, WScope));
1591     if (DIDescriptor(Scope).isLexicalBlock()) {
1592       DbgScope *Parent =
1593         getOrCreateDbgScope(DILexicalBlock(Scope).getContext(), NULL);
1594       WScope->setParent(Parent);
1595       Parent->addScope(WScope);
1596     }
1597 
1598     if (!WScope->getParent()) {
1599       StringRef SPName = DISubprogram(Scope).getLinkageName();
1600       // We used to check only for a linkage name, but that fails
1601       // since we began omitting the linkage name for private
1602       // functions.  The new way is to check for the name in metadata,
1603       // but that's not supported in old .ll test cases.  Ergo, we
1604       // check both.
1605       if (SPName == Asm->MF->getFunction()->getName() ||
1606           DISubprogram(Scope).getFunction() == Asm->MF->getFunction())
1607         CurrentFnDbgScope = WScope;
1608     }
1609 
1610     return WScope;
1611   }
1612 
1613   getOrCreateAbstractScope(Scope);
1614   DbgScope *WScope = DbgScopeMap.lookup(InlinedAt);
1615   if (WScope)
1616     return WScope;
1617 
1618   WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt);
1619   DbgScopeMap.insert(std::make_pair(InlinedAt, WScope));
1620   DILocation DL(InlinedAt);
1621   DbgScope *Parent =
1622     getOrCreateDbgScope(DL.getScope(), DL.getOrigLocation());
1623   WScope->setParent(Parent);
1624   Parent->addScope(WScope);
1625 
1626   ConcreteScopes[InlinedAt] = WScope;
1627 
1628   return WScope;
1629 }
1630 
1631 /// hasValidLocation - Return true if debug location entry attached with
1632 /// machine instruction encodes valid location info.
1633 static bool hasValidLocation(LLVMContext &Ctx,
1634                              const MachineInstr *MInsn,
1635                              const MDNode *&Scope, const MDNode *&InlinedAt) {
1636   DebugLoc DL = MInsn->getDebugLoc();
1637   if (DL.isUnknown()) return false;
1638 
1639   const MDNode *S = DL.getScope(Ctx);
1640 
1641   // There is no need to create another DIE for compile unit. For all
1642   // other scopes, create one DbgScope now. This will be translated
1643   // into a scope DIE at the end.
1644   if (DIScope(S).isCompileUnit()) return false;
1645 
1646   Scope = S;
1647   InlinedAt = DL.getInlinedAt(Ctx);
1648   return true;
1649 }
1650 
1651 /// calculateDominanceGraph - Calculate dominance graph for DbgScope
1652 /// hierarchy.
1653 static void calculateDominanceGraph(DbgScope *Scope) {
1654   assert (Scope && "Unable to calculate scop edominance graph!");
1655   SmallVector<DbgScope *, 4> WorkStack;
1656   WorkStack.push_back(Scope);
1657   unsigned Counter = 0;
1658   while (!WorkStack.empty()) {
1659     DbgScope *WS = WorkStack.back();
1660     const SmallVector<DbgScope *, 4> &Children = WS->getScopes();
1661     bool visitedChildren = false;
1662     for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
1663            SE = Children.end(); SI != SE; ++SI) {
1664       DbgScope *ChildScope = *SI;
1665       if (!ChildScope->getDFSOut()) {
1666         WorkStack.push_back(ChildScope);
1667         visitedChildren = true;
1668         ChildScope->setDFSIn(++Counter);
1669         break;
1670       }
1671     }
1672     if (!visitedChildren) {
1673       WorkStack.pop_back();
1674       WS->setDFSOut(++Counter);
1675     }
1676   }
1677 }
1678 
1679 /// printDbgScopeInfo - Print DbgScope info for each machine instruction.
1680 static
1681 void printDbgScopeInfo(LLVMContext &Ctx, const MachineFunction *MF,
1682                        DenseMap<const MachineInstr *, DbgScope *> &MI2ScopeMap)
1683 {
1684 #ifndef NDEBUG
1685   unsigned PrevDFSIn = 0;
1686   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1687        I != E; ++I) {
1688     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1689          II != IE; ++II) {
1690       const MachineInstr *MInsn = II;
1691       const MDNode *Scope = NULL;
1692       const MDNode *InlinedAt = NULL;
1693 
1694       // Check if instruction has valid location information.
1695       if (hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
1696         dbgs() << " [ ";
1697         if (InlinedAt)
1698           dbgs() << "*";
1699         DenseMap<const MachineInstr *, DbgScope *>::iterator DI =
1700           MI2ScopeMap.find(MInsn);
1701         if (DI != MI2ScopeMap.end()) {
1702           DbgScope *S = DI->second;
1703           dbgs() << S->getDFSIn();
1704           PrevDFSIn = S->getDFSIn();
1705         } else
1706           dbgs() << PrevDFSIn;
1707       } else
1708         dbgs() << " [ x" << PrevDFSIn;
1709       dbgs() << " ]";
1710       MInsn->dump();
1711     }
1712     dbgs() << "\n";
1713   }
1714 #endif
1715 }
1716 /// extractScopeInformation - Scan machine instructions in this function
1717 /// and collect DbgScopes. Return true, if at least one scope was found.
1718 bool DwarfDebug::extractScopeInformation() {
1719   // If scope information was extracted using .dbg intrinsics then there is not
1720   // any need to extract these information by scanning each instruction.
1721   if (!DbgScopeMap.empty())
1722     return false;
1723 
1724   // Scan each instruction and create scopes. First build working set of scopes.
1725   LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
1726   SmallVector<DbgRange, 4> MIRanges;
1727   DenseMap<const MachineInstr *, DbgScope *> MI2ScopeMap;
1728   const MDNode *PrevScope = NULL;
1729   const MDNode *PrevInlinedAt = NULL;
1730   const MachineInstr *RangeBeginMI = NULL;
1731   const MachineInstr *PrevMI = NULL;
1732   for (MachineFunction::const_iterator I = Asm->MF->begin(), E = Asm->MF->end();
1733        I != E; ++I) {
1734     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1735          II != IE; ++II) {
1736       const MachineInstr *MInsn = II;
1737       const MDNode *Scope = NULL;
1738       const MDNode *InlinedAt = NULL;
1739 
1740       // Check if instruction has valid location information.
1741       if (!hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
1742         PrevMI = MInsn;
1743         continue;
1744       }
1745 
1746       // If scope has not changed then skip this instruction.
1747       if (Scope == PrevScope && PrevInlinedAt == InlinedAt) {
1748         PrevMI = MInsn;
1749         continue;
1750       }
1751 
1752       // Ignore DBG_VALUE. It does not contribute any instruction in output.
1753       if (MInsn->isDebugValue())
1754         continue;
1755 
1756       if (RangeBeginMI) {
1757         // If we have alread seen a beginning of a instruction range and
1758         // current instruction scope does not match scope of first instruction
1759         // in this range then create a new instruction range.
1760         DbgRange R(RangeBeginMI, PrevMI);
1761         MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope,
1762                                                         PrevInlinedAt);
1763         MIRanges.push_back(R);
1764       }
1765 
1766       // This is a beginning of a new instruction range.
1767       RangeBeginMI = MInsn;
1768 
1769       // Reset previous markers.
1770       PrevMI = MInsn;
1771       PrevScope = Scope;
1772       PrevInlinedAt = InlinedAt;
1773     }
1774   }
1775 
1776   // Create last instruction range.
1777   if (RangeBeginMI && PrevMI && PrevScope) {
1778     DbgRange R(RangeBeginMI, PrevMI);
1779     MIRanges.push_back(R);
1780     MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope, PrevInlinedAt);
1781   }
1782 
1783   if (!CurrentFnDbgScope)
1784     return false;
1785 
1786   calculateDominanceGraph(CurrentFnDbgScope);
1787   if (PrintDbgScope)
1788     printDbgScopeInfo(Ctx, Asm->MF, MI2ScopeMap);
1789 
1790   // Find ranges of instructions covered by each DbgScope;
1791   DbgScope *PrevDbgScope = NULL;
1792   for (SmallVector<DbgRange, 4>::const_iterator RI = MIRanges.begin(),
1793          RE = MIRanges.end(); RI != RE; ++RI) {
1794     const DbgRange &R = *RI;
1795     DbgScope *S = MI2ScopeMap.lookup(R.first);
1796     assert (S && "Lost DbgScope for a machine instruction!");
1797     if (PrevDbgScope && !PrevDbgScope->dominates(S))
1798       PrevDbgScope->closeInsnRange(S);
1799     S->openInsnRange(R.first);
1800     S->extendInsnRange(R.second);
1801     PrevDbgScope = S;
1802   }
1803 
1804   if (PrevDbgScope)
1805     PrevDbgScope->closeInsnRange();
1806 
1807   identifyScopeMarkers();
1808 
1809   return !DbgScopeMap.empty();
1810 }
1811 
1812 /// identifyScopeMarkers() -
1813 /// Each DbgScope has first instruction and last instruction to mark beginning
1814 /// and end of a scope respectively. Create an inverse map that list scopes
1815 /// starts (and ends) with an instruction. One instruction may start (or end)
1816 /// multiple scopes. Ignore scopes that are not reachable.
1817 void DwarfDebug::identifyScopeMarkers() {
1818   SmallVector<DbgScope *, 4> WorkList;
1819   WorkList.push_back(CurrentFnDbgScope);
1820   while (!WorkList.empty()) {
1821     DbgScope *S = WorkList.pop_back_val();
1822 
1823     const SmallVector<DbgScope *, 4> &Children = S->getScopes();
1824     if (!Children.empty())
1825       for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
1826              SE = Children.end(); SI != SE; ++SI)
1827         WorkList.push_back(*SI);
1828 
1829     if (S->isAbstractScope())
1830       continue;
1831 
1832     const SmallVector<DbgRange, 4> &Ranges = S->getRanges();
1833     if (Ranges.empty())
1834       continue;
1835     for (SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin(),
1836            RE = Ranges.end(); RI != RE; ++RI) {
1837       assert(RI->first && "DbgRange does not have first instruction!");
1838       assert(RI->second && "DbgRange does not have second instruction!");
1839       requestLabelBeforeInsn(RI->first);
1840       requestLabelAfterInsn(RI->second);
1841     }
1842   }
1843 }
1844 
1845 /// FindFirstDebugLoc - Find the first debug location in the function. This
1846 /// is intended to be an approximation for the source position of the
1847 /// beginning of the function.
1848 static DebugLoc FindFirstDebugLoc(const MachineFunction *MF) {
1849   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1850        I != E; ++I)
1851     for (MachineBasicBlock::const_iterator MBBI = I->begin(), MBBE = I->end();
1852          MBBI != MBBE; ++MBBI) {
1853       DebugLoc DL = MBBI->getDebugLoc();
1854       if (!DL.isUnknown())
1855         return DL;
1856     }
1857   return DebugLoc();
1858 }
1859 
1860 /// beginFunction - Gather pre-function debug information.  Assumes being
1861 /// emitted immediately after the function entry point.
1862 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1863   if (!MMI->hasDebugInfo()) return;
1864   if (!extractScopeInformation()) return;
1865 
1866   FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1867                                         Asm->getFunctionNumber());
1868   // Assumes in correct section after the entry point.
1869   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1870 
1871   // Emit label for the implicitly defined dbg.stoppoint at the start of the
1872   // function.
1873   DebugLoc FDL = FindFirstDebugLoc(MF);
1874   if (FDL.isUnknown()) return;
1875 
1876   const MDNode *Scope = FDL.getScope(MF->getFunction()->getContext());
1877   const MDNode *TheScope = 0;
1878 
1879   DISubprogram SP = getDISubprogram(Scope);
1880   unsigned Line, Col;
1881   if (SP.Verify()) {
1882     Line = SP.getLineNumber();
1883     Col = 0;
1884     TheScope = SP;
1885   } else {
1886     Line = FDL.getLine();
1887     Col = FDL.getCol();
1888     TheScope = Scope;
1889   }
1890 
1891   recordSourceLine(Line, Col, TheScope);
1892 
1893   assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1894 
1895   /// ProcessedArgs - Collection of arguments already processed.
1896   SmallPtrSet<const MDNode *, 8> ProcessedArgs;
1897 
1898   const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1899 
1900   /// LiveUserVar - Map physreg numbers to the MDNode they contain.
1901   std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1902 
1903   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1904        I != E; ++I) {
1905     bool AtBlockEntry = true;
1906     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1907          II != IE; ++II) {
1908       const MachineInstr *MI = II;
1909 
1910       if (MI->isDebugValue()) {
1911         assert (MI->getNumOperands() > 1 && "Invalid machine instruction!");
1912 
1913         // Keep track of user variables.
1914         const MDNode *Var =
1915           MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1916 
1917         // Variable is in a register, we need to check for clobbers.
1918         if (isDbgValueInDefinedReg(MI))
1919           LiveUserVar[MI->getOperand(0).getReg()] = Var;
1920 
1921         // Check the history of this variable.
1922         SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1923         if (History.empty()) {
1924           UserVariables.push_back(Var);
1925           // The first mention of a function argument gets the FunctionBeginSym
1926           // label, so arguments are visible when breaking at function entry.
1927           DIVariable DV(Var);
1928           if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1929               DISubprogram(getDISubprogram(DV.getContext()))
1930                 .describes(MF->getFunction()))
1931             LabelsBeforeInsn[MI] = FunctionBeginSym;
1932         } else {
1933           // We have seen this variable before. Try to coalesce DBG_VALUEs.
1934           const MachineInstr *Prev = History.back();
1935           if (Prev->isDebugValue()) {
1936             // Coalesce identical entries at the end of History.
1937             if (History.size() >= 2 &&
1938                 Prev->isIdenticalTo(History[History.size() - 2]))
1939               History.pop_back();
1940 
1941             // Terminate old register assignments that don't reach MI;
1942             MachineFunction::const_iterator PrevMBB = Prev->getParent();
1943             if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1944                 isDbgValueInDefinedReg(Prev)) {
1945               // Previous register assignment needs to terminate at the end of
1946               // its basic block.
1947               MachineBasicBlock::const_iterator LastMI =
1948                 PrevMBB->getLastNonDebugInstr();
1949               if (LastMI == PrevMBB->end())
1950                 // Drop DBG_VALUE for empty range.
1951                 History.pop_back();
1952               else {
1953                 // Terminate after LastMI.
1954                 History.push_back(LastMI);
1955               }
1956             }
1957           }
1958         }
1959         History.push_back(MI);
1960       } else {
1961         // Not a DBG_VALUE instruction.
1962         if (!MI->isLabel())
1963           AtBlockEntry = false;
1964 
1965         // Check if the instruction clobbers any registers with debug vars.
1966         for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1967                MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1968           if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1969             continue;
1970           for (const unsigned *AI = TRI->getOverlaps(MOI->getReg());
1971                unsigned Reg = *AI; ++AI) {
1972             const MDNode *Var = LiveUserVar[Reg];
1973             if (!Var)
1974               continue;
1975             // Reg is now clobbered.
1976             LiveUserVar[Reg] = 0;
1977 
1978             // Was MD last defined by a DBG_VALUE referring to Reg?
1979             DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1980             if (HistI == DbgValues.end())
1981               continue;
1982             SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1983             if (History.empty())
1984               continue;
1985             const MachineInstr *Prev = History.back();
1986             // Sanity-check: Register assignments are terminated at the end of
1987             // their block.
1988             if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1989               continue;
1990             // Is the variable still in Reg?
1991             if (!isDbgValueInDefinedReg(Prev) ||
1992                 Prev->getOperand(0).getReg() != Reg)
1993               continue;
1994             // Var is clobbered. Make sure the next instruction gets a label.
1995             History.push_back(MI);
1996           }
1997         }
1998       }
1999     }
2000   }
2001 
2002   for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
2003        I != E; ++I) {
2004     SmallVectorImpl<const MachineInstr*> &History = I->second;
2005     if (History.empty())
2006       continue;
2007 
2008     // Make sure the final register assignments are terminated.
2009     const MachineInstr *Prev = History.back();
2010     if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
2011       const MachineBasicBlock *PrevMBB = Prev->getParent();
2012       MachineBasicBlock::const_iterator LastMI = PrevMBB->getLastNonDebugInstr();
2013       if (LastMI == PrevMBB->end())
2014         // Drop DBG_VALUE for empty range.
2015         History.pop_back();
2016       else {
2017         // Terminate after LastMI.
2018         History.push_back(LastMI);
2019       }
2020     }
2021     // Request labels for the full history.
2022     for (unsigned i = 0, e = History.size(); i != e; ++i) {
2023       const MachineInstr *MI = History[i];
2024       if (MI->isDebugValue())
2025         requestLabelBeforeInsn(MI);
2026       else
2027         requestLabelAfterInsn(MI);
2028     }
2029   }
2030 
2031   PrevInstLoc = DebugLoc();
2032   PrevLabel = FunctionBeginSym;
2033 }
2034 
2035 /// endFunction - Gather and emit post-function debug information.
2036 ///
2037 void DwarfDebug::endFunction(const MachineFunction *MF) {
2038   if (!MMI->hasDebugInfo() || DbgScopeMap.empty()) return;
2039 
2040   if (CurrentFnDbgScope) {
2041 
2042     // Define end label for subprogram.
2043     FunctionEndSym = Asm->GetTempSymbol("func_end",
2044                                         Asm->getFunctionNumber());
2045     // Assumes in correct section after the entry point.
2046     Asm->OutStreamer.EmitLabel(FunctionEndSym);
2047 
2048     SmallPtrSet<const MDNode *, 16> ProcessedVars;
2049     collectVariableInfo(MF, ProcessedVars);
2050 
2051     // Construct abstract scopes.
2052     for (SmallVector<DbgScope *, 4>::iterator AI = AbstractScopesList.begin(),
2053            AE = AbstractScopesList.end(); AI != AE; ++AI) {
2054       DISubprogram SP((*AI)->getScopeNode());
2055       if (SP.Verify()) {
2056         // Collect info for variables that were optimized out.
2057         StringRef FName = SP.getLinkageName();
2058         if (FName.empty())
2059           FName = SP.getName();
2060         if (NamedMDNode *NMD =
2061             getFnSpecificMDNode(*(MF->getFunction()->getParent()), FName)) {
2062           for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
2063           DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
2064           if (!DV || !ProcessedVars.insert(DV))
2065             continue;
2066           DbgScope *Scope = AbstractScopes.lookup(DV.getContext());
2067           if (Scope)
2068             Scope->addVariable(new DbgVariable(DV));
2069           }
2070         }
2071       }
2072       if (ProcessedSPNodes.count((*AI)->getScopeNode()) == 0)
2073         constructScopeDIE(*AI);
2074     }
2075 
2076     DIE *CurFnDIE = constructScopeDIE(CurrentFnDbgScope);
2077 
2078     if (!DisableFramePointerElim(*MF))
2079       getCompileUnit(CurrentFnDbgScope->getScopeNode())->addUInt(CurFnDIE,
2080                                                                  dwarf::DW_AT_APPLE_omit_frame_ptr,
2081                                                                  dwarf::DW_FORM_flag, 1);
2082 
2083 
2084     DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
2085                                                  MMI->getFrameMoves()));
2086   }
2087 
2088   // Clear debug info
2089   CurrentFnDbgScope = NULL;
2090   DeleteContainerPointers(CurrentFnArguments);
2091   DbgVariableToFrameIndexMap.clear();
2092   VarToAbstractVarMap.clear();
2093   DbgVariableToDbgInstMap.clear();
2094   DeleteContainerSeconds(DbgScopeMap);
2095   UserVariables.clear();
2096   DbgValues.clear();
2097   ConcreteScopes.clear();
2098   DeleteContainerSeconds(AbstractScopes);
2099   AbstractScopesList.clear();
2100   AbstractVariables.clear();
2101   LabelsBeforeInsn.clear();
2102   LabelsAfterInsn.clear();
2103   PrevLabel = NULL;
2104 }
2105 
2106 /// recordVariableFrameIndex - Record a variable's index.
2107 void DwarfDebug::recordVariableFrameIndex(const DbgVariable *V, int Index) {
2108   assert (V && "Invalid DbgVariable!");
2109   DbgVariableToFrameIndexMap[V] = Index;
2110 }
2111 
2112 /// findVariableFrameIndex - Return true if frame index for the variable
2113 /// is found. Update FI to hold value of the index.
2114 bool DwarfDebug::findVariableFrameIndex(const DbgVariable *V, int *FI) {
2115   assert (V && "Invalid DbgVariable!");
2116   DenseMap<const DbgVariable *, int>::iterator I =
2117     DbgVariableToFrameIndexMap.find(V);
2118   if (I == DbgVariableToFrameIndexMap.end())
2119     return false;
2120   *FI = I->second;
2121   return true;
2122 }
2123 
2124 /// findDbgScope - Find DbgScope for the debug loc attached with an
2125 /// instruction.
2126 DbgScope *DwarfDebug::findDbgScope(const MachineInstr *MInsn) {
2127   DbgScope *Scope = NULL;
2128   LLVMContext &Ctx =
2129     MInsn->getParent()->getParent()->getFunction()->getContext();
2130   DebugLoc DL = MInsn->getDebugLoc();
2131 
2132   if (DL.isUnknown())
2133     return Scope;
2134 
2135   if (const MDNode *IA = DL.getInlinedAt(Ctx))
2136     Scope = ConcreteScopes.lookup(IA);
2137   if (Scope == 0)
2138     Scope = DbgScopeMap.lookup(DL.getScope(Ctx));
2139 
2140   return Scope;
2141 }
2142 
2143 
2144 /// recordSourceLine - Register a source line with debug info. Returns the
2145 /// unique label that was emitted and which provides correspondence to
2146 /// the source line list.
2147 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S){
2148   StringRef Fn;
2149   StringRef Dir;
2150   unsigned Src = 1;
2151   if (S) {
2152     DIDescriptor Scope(S);
2153 
2154     if (Scope.isCompileUnit()) {
2155       DICompileUnit CU(S);
2156       Fn = CU.getFilename();
2157       Dir = CU.getDirectory();
2158     } else if (Scope.isFile()) {
2159       DIFile F(S);
2160       Fn = F.getFilename();
2161       Dir = F.getDirectory();
2162     } else if (Scope.isSubprogram()) {
2163       DISubprogram SP(S);
2164       Fn = SP.getFilename();
2165       Dir = SP.getDirectory();
2166     } else if (Scope.isLexicalBlock()) {
2167       DILexicalBlock DB(S);
2168       Fn = DB.getFilename();
2169       Dir = DB.getDirectory();
2170     } else
2171       assert(0 && "Unexpected scope info");
2172 
2173     Src = GetOrCreateSourceID(Fn, Dir);
2174   }
2175   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, DWARF2_FLAG_IS_STMT,
2176                                          0, 0, Fn);
2177 }
2178 
2179 //===----------------------------------------------------------------------===//
2180 // Emit Methods
2181 //===----------------------------------------------------------------------===//
2182 
2183 /// computeSizeAndOffset - Compute the size and offset of a DIE.
2184 ///
2185 unsigned
2186 DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
2187   // Get the children.
2188   const std::vector<DIE *> &Children = Die->getChildren();
2189 
2190   // If not last sibling and has children then add sibling offset attribute.
2191   if (!Last && !Children.empty())
2192     Die->addSiblingOffset(DIEValueAllocator);
2193 
2194   // Record the abbreviation.
2195   assignAbbrevNumber(Die->getAbbrev());
2196 
2197   // Get the abbreviation for this DIE.
2198   unsigned AbbrevNumber = Die->getAbbrevNumber();
2199   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2200 
2201   // Set DIE offset
2202   Die->setOffset(Offset);
2203 
2204   // Start the size with the size of abbreviation code.
2205   Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
2206 
2207   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2208   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2209 
2210   // Size the DIE attribute values.
2211   for (unsigned i = 0, N = Values.size(); i < N; ++i)
2212     // Size attribute value.
2213     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
2214 
2215   // Size the DIE children if any.
2216   if (!Children.empty()) {
2217     assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
2218            "Children flag not set");
2219 
2220     for (unsigned j = 0, M = Children.size(); j < M; ++j)
2221       Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
2222 
2223     // End of children marker.
2224     Offset += sizeof(int8_t);
2225   }
2226 
2227   Die->setSize(Offset - Die->getOffset());
2228   return Offset;
2229 }
2230 
2231 /// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
2232 ///
2233 void DwarfDebug::computeSizeAndOffsets() {
2234   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2235          E = CUMap.end(); I != E; ++I) {
2236     // Compute size of compile unit header.
2237     unsigned Offset =
2238       sizeof(int32_t) + // Length of Compilation Unit Info
2239       sizeof(int16_t) + // DWARF version number
2240       sizeof(int32_t) + // Offset Into Abbrev. Section
2241       sizeof(int8_t);   // Pointer Size (in bytes)
2242     computeSizeAndOffset(I->second->getCUDie(), Offset, true);
2243   }
2244 }
2245 
2246 /// EmitSectionSym - Switch to the specified MCSection and emit an assembler
2247 /// temporary label to it if SymbolStem is specified.
2248 static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
2249                                 const char *SymbolStem = 0) {
2250   Asm->OutStreamer.SwitchSection(Section);
2251   if (!SymbolStem) return 0;
2252 
2253   MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
2254   Asm->OutStreamer.EmitLabel(TmpSym);
2255   return TmpSym;
2256 }
2257 
2258 /// EmitSectionLabels - Emit initial Dwarf sections with a label at
2259 /// the start of each one.
2260 void DwarfDebug::EmitSectionLabels() {
2261   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
2262 
2263   // Dwarf sections base addresses.
2264   if (Asm->MAI->doesDwarfRequireFrameSection()) {
2265     DwarfFrameSectionSym =
2266       EmitSectionSym(Asm, TLOF.getDwarfFrameSection(), "section_debug_frame");
2267    }
2268 
2269   DwarfInfoSectionSym =
2270     EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
2271   DwarfAbbrevSectionSym =
2272     EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
2273   EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
2274 
2275   if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
2276     EmitSectionSym(Asm, MacroInfo);
2277 
2278   EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
2279   EmitSectionSym(Asm, TLOF.getDwarfLocSection());
2280   EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
2281   EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
2282   DwarfStrSectionSym =
2283     EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
2284   DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
2285                                              "debug_range");
2286 
2287   DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
2288                                            "section_debug_loc");
2289 
2290   TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
2291   EmitSectionSym(Asm, TLOF.getDataSection());
2292 }
2293 
2294 /// emitDIE - Recusively Emits a debug information entry.
2295 ///
2296 void DwarfDebug::emitDIE(DIE *Die) {
2297   // Get the abbreviation for this DIE.
2298   unsigned AbbrevNumber = Die->getAbbrevNumber();
2299   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2300 
2301   // Emit the code (index) for the abbreviation.
2302   if (Asm->isVerbose())
2303     Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
2304                                 Twine::utohexstr(Die->getOffset()) + ":0x" +
2305                                 Twine::utohexstr(Die->getSize()) + " " +
2306                                 dwarf::TagString(Abbrev->getTag()));
2307   Asm->EmitULEB128(AbbrevNumber);
2308 
2309   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2310   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2311 
2312   // Emit the DIE attribute values.
2313   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
2314     unsigned Attr = AbbrevData[i].getAttribute();
2315     unsigned Form = AbbrevData[i].getForm();
2316     assert(Form && "Too many attributes for DIE (check abbreviation)");
2317 
2318     if (Asm->isVerbose())
2319       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
2320 
2321     switch (Attr) {
2322     case dwarf::DW_AT_sibling:
2323       Asm->EmitInt32(Die->getSiblingOffset());
2324       break;
2325     case dwarf::DW_AT_abstract_origin: {
2326       DIEEntry *E = cast<DIEEntry>(Values[i]);
2327       DIE *Origin = E->getEntry();
2328       unsigned Addr = Origin->getOffset();
2329       Asm->EmitInt32(Addr);
2330       break;
2331     }
2332     case dwarf::DW_AT_ranges: {
2333       // DW_AT_range Value encodes offset in debug_range section.
2334       DIEInteger *V = cast<DIEInteger>(Values[i]);
2335 
2336       if (Asm->MAI->doesDwarfUsesLabelOffsetForRanges()) {
2337         Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
2338                                  V->getValue(),
2339                                  4);
2340       } else {
2341         Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
2342                                        V->getValue(),
2343                                        DwarfDebugRangeSectionSym,
2344                                        4);
2345       }
2346       break;
2347     }
2348     case dwarf::DW_AT_location: {
2349       if (UseDotDebugLocEntry.count(Die) != 0) {
2350         DIELabel *L = cast<DIELabel>(Values[i]);
2351         Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
2352       } else
2353         Values[i]->EmitValue(Asm, Form);
2354       break;
2355     }
2356     case dwarf::DW_AT_accessibility: {
2357       if (Asm->isVerbose()) {
2358         DIEInteger *V = cast<DIEInteger>(Values[i]);
2359         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
2360       }
2361       Values[i]->EmitValue(Asm, Form);
2362       break;
2363     }
2364     default:
2365       // Emit an attribute using the defined form.
2366       Values[i]->EmitValue(Asm, Form);
2367       break;
2368     }
2369   }
2370 
2371   // Emit the DIE children if any.
2372   if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
2373     const std::vector<DIE *> &Children = Die->getChildren();
2374 
2375     for (unsigned j = 0, M = Children.size(); j < M; ++j)
2376       emitDIE(Children[j]);
2377 
2378     if (Asm->isVerbose())
2379       Asm->OutStreamer.AddComment("End Of Children Mark");
2380     Asm->EmitInt8(0);
2381   }
2382 }
2383 
2384 /// emitDebugInfo - Emit the debug info section.
2385 ///
2386 void DwarfDebug::emitDebugInfo() {
2387   // Start debug info section.
2388   Asm->OutStreamer.SwitchSection(
2389                             Asm->getObjFileLowering().getDwarfInfoSection());
2390   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2391          E = CUMap.end(); I != E; ++I) {
2392     CompileUnit *TheCU = I->second;
2393     DIE *Die = TheCU->getCUDie();
2394 
2395     // Emit the compile units header.
2396     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
2397                                                   TheCU->getID()));
2398 
2399     // Emit size of content not including length itself
2400     unsigned ContentSize = Die->getSize() +
2401       sizeof(int16_t) + // DWARF version number
2402       sizeof(int32_t) + // Offset Into Abbrev. Section
2403       sizeof(int8_t);   // Pointer Size (in bytes)
2404 
2405     Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
2406     Asm->EmitInt32(ContentSize);
2407     Asm->OutStreamer.AddComment("DWARF version number");
2408     Asm->EmitInt16(dwarf::DWARF_VERSION);
2409     Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2410     Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
2411                            DwarfAbbrevSectionSym);
2412     Asm->OutStreamer.AddComment("Address Size (in bytes)");
2413     Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2414 
2415     emitDIE(Die);
2416     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
2417   }
2418 }
2419 
2420 /// emitAbbreviations - Emit the abbreviation section.
2421 ///
2422 void DwarfDebug::emitAbbreviations() const {
2423   // Check to see if it is worth the effort.
2424   if (!Abbreviations.empty()) {
2425     // Start the debug abbrev section.
2426     Asm->OutStreamer.SwitchSection(
2427                             Asm->getObjFileLowering().getDwarfAbbrevSection());
2428 
2429     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
2430 
2431     // For each abbrevation.
2432     for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
2433       // Get abbreviation data
2434       const DIEAbbrev *Abbrev = Abbreviations[i];
2435 
2436       // Emit the abbrevations code (base 1 index.)
2437       Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2438 
2439       // Emit the abbreviations data.
2440       Abbrev->Emit(Asm);
2441     }
2442 
2443     // Mark end of abbreviations.
2444     Asm->EmitULEB128(0, "EOM(3)");
2445 
2446     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
2447   }
2448 }
2449 
2450 /// emitEndOfLineMatrix - Emit the last address of the section and the end of
2451 /// the line matrix.
2452 ///
2453 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2454   // Define last address of section.
2455   Asm->OutStreamer.AddComment("Extended Op");
2456   Asm->EmitInt8(0);
2457 
2458   Asm->OutStreamer.AddComment("Op size");
2459   Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
2460   Asm->OutStreamer.AddComment("DW_LNE_set_address");
2461   Asm->EmitInt8(dwarf::DW_LNE_set_address);
2462 
2463   Asm->OutStreamer.AddComment("Section end label");
2464 
2465   Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2466                                    Asm->getTargetData().getPointerSize(),
2467                                    0/*AddrSpace*/);
2468 
2469   // Mark end of matrix.
2470   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2471   Asm->EmitInt8(0);
2472   Asm->EmitInt8(1);
2473   Asm->EmitInt8(1);
2474 }
2475 
2476 /// emitCommonDebugFrame - Emit common frame info into a debug frame section.
2477 ///
2478 void DwarfDebug::emitCommonDebugFrame() {
2479   if (!Asm->MAI->doesDwarfRequireFrameSection())
2480     return;
2481 
2482   int stackGrowth = Asm->getTargetData().getPointerSize();
2483   if (Asm->TM.getFrameLowering()->getStackGrowthDirection() ==
2484       TargetFrameLowering::StackGrowsDown)
2485     stackGrowth *= -1;
2486 
2487   // Start the dwarf frame section.
2488   Asm->OutStreamer.SwitchSection(
2489                               Asm->getObjFileLowering().getDwarfFrameSection());
2490 
2491   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common"));
2492   Asm->OutStreamer.AddComment("Length of Common Information Entry");
2493   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_frame_common_end"),
2494                            Asm->GetTempSymbol("debug_frame_common_begin"), 4);
2495 
2496   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common_begin"));
2497   Asm->OutStreamer.AddComment("CIE Identifier Tag");
2498   Asm->EmitInt32((int)dwarf::DW_CIE_ID);
2499   Asm->OutStreamer.AddComment("CIE Version");
2500   Asm->EmitInt8(dwarf::DW_CIE_VERSION);
2501   Asm->OutStreamer.AddComment("CIE Augmentation");
2502   Asm->OutStreamer.EmitIntValue(0, 1, /*addrspace*/0); // nul terminator.
2503   Asm->EmitULEB128(1, "CIE Code Alignment Factor");
2504   Asm->EmitSLEB128(stackGrowth, "CIE Data Alignment Factor");
2505   Asm->OutStreamer.AddComment("CIE RA Column");
2506   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
2507   const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
2508   Asm->EmitInt8(RI->getDwarfRegNum(RI->getRARegister(), false));
2509 
2510   std::vector<MachineMove> Moves;
2511   TFI->getInitialFrameState(Moves);
2512 
2513   Asm->EmitFrameMoves(Moves, 0, false);
2514 
2515   Asm->EmitAlignment(2);
2516   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common_end"));
2517 }
2518 
2519 /// emitFunctionDebugFrame - Emit per function frame info into a debug frame
2520 /// section.
2521 void DwarfDebug::
2522 emitFunctionDebugFrame(const FunctionDebugFrameInfo &DebugFrameInfo) {
2523   if (!Asm->MAI->doesDwarfRequireFrameSection())
2524     return;
2525 
2526   // Start the dwarf frame section.
2527   Asm->OutStreamer.SwitchSection(
2528                               Asm->getObjFileLowering().getDwarfFrameSection());
2529 
2530   Asm->OutStreamer.AddComment("Length of Frame Information Entry");
2531   MCSymbol *DebugFrameBegin =
2532     Asm->GetTempSymbol("debug_frame_begin", DebugFrameInfo.Number);
2533   MCSymbol *DebugFrameEnd =
2534     Asm->GetTempSymbol("debug_frame_end", DebugFrameInfo.Number);
2535   Asm->EmitLabelDifference(DebugFrameEnd, DebugFrameBegin, 4);
2536 
2537   Asm->OutStreamer.EmitLabel(DebugFrameBegin);
2538 
2539   Asm->OutStreamer.AddComment("FDE CIE offset");
2540   Asm->EmitSectionOffset(Asm->GetTempSymbol("debug_frame_common"),
2541                          DwarfFrameSectionSym);
2542 
2543   Asm->OutStreamer.AddComment("FDE initial location");
2544   MCSymbol *FuncBeginSym =
2545     Asm->GetTempSymbol("func_begin", DebugFrameInfo.Number);
2546   Asm->OutStreamer.EmitSymbolValue(FuncBeginSym,
2547                                    Asm->getTargetData().getPointerSize(),
2548                                    0/*AddrSpace*/);
2549 
2550 
2551   Asm->OutStreamer.AddComment("FDE address range");
2552   Asm->EmitLabelDifference(Asm->GetTempSymbol("func_end",DebugFrameInfo.Number),
2553                            FuncBeginSym, Asm->getTargetData().getPointerSize());
2554 
2555   Asm->EmitFrameMoves(DebugFrameInfo.Moves, FuncBeginSym, false);
2556 
2557   Asm->EmitAlignment(2);
2558   Asm->OutStreamer.EmitLabel(DebugFrameEnd);
2559 }
2560 
2561 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
2562 ///
2563 void DwarfDebug::emitDebugPubNames() {
2564   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2565          E = CUMap.end(); I != E; ++I) {
2566     CompileUnit *TheCU = I->second;
2567     // Start the dwarf pubnames section.
2568     Asm->OutStreamer.SwitchSection(
2569       Asm->getObjFileLowering().getDwarfPubNamesSection());
2570 
2571     Asm->OutStreamer.AddComment("Length of Public Names Info");
2572     Asm->EmitLabelDifference(
2573       Asm->GetTempSymbol("pubnames_end", TheCU->getID()),
2574       Asm->GetTempSymbol("pubnames_begin", TheCU->getID()), 4);
2575 
2576     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin",
2577                                                   TheCU->getID()));
2578 
2579     Asm->OutStreamer.AddComment("DWARF Version");
2580     Asm->EmitInt16(dwarf::DWARF_VERSION);
2581 
2582     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2583     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
2584                            DwarfInfoSectionSym);
2585 
2586     Asm->OutStreamer.AddComment("Compilation Unit Length");
2587     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
2588                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
2589                              4);
2590 
2591     const StringMap<DIE*> &Globals = TheCU->getGlobals();
2592     for (StringMap<DIE*>::const_iterator
2593            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2594       const char *Name = GI->getKeyData();
2595       DIE *Entity = GI->second;
2596 
2597       Asm->OutStreamer.AddComment("DIE offset");
2598       Asm->EmitInt32(Entity->getOffset());
2599 
2600       if (Asm->isVerbose())
2601         Asm->OutStreamer.AddComment("External Name");
2602       Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
2603     }
2604 
2605     Asm->OutStreamer.AddComment("End Mark");
2606     Asm->EmitInt32(0);
2607     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end",
2608                                                 TheCU->getID()));
2609   }
2610 }
2611 
2612 void DwarfDebug::emitDebugPubTypes() {
2613   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2614          E = CUMap.end(); I != E; ++I) {
2615     CompileUnit *TheCU = I->second;
2616     // Start the dwarf pubnames section.
2617     Asm->OutStreamer.SwitchSection(
2618       Asm->getObjFileLowering().getDwarfPubTypesSection());
2619     Asm->OutStreamer.AddComment("Length of Public Types Info");
2620     Asm->EmitLabelDifference(
2621       Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
2622       Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
2623 
2624     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2625                                                   TheCU->getID()));
2626 
2627     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2628     Asm->EmitInt16(dwarf::DWARF_VERSION);
2629 
2630     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2631     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
2632                            DwarfInfoSectionSym);
2633 
2634     Asm->OutStreamer.AddComment("Compilation Unit Length");
2635     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
2636                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
2637                              4);
2638 
2639     const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2640     for (StringMap<DIE*>::const_iterator
2641            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2642       const char *Name = GI->getKeyData();
2643       DIE * Entity = GI->second;
2644 
2645       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2646       Asm->EmitInt32(Entity->getOffset());
2647 
2648       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2649       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
2650     }
2651 
2652     Asm->OutStreamer.AddComment("End Mark");
2653     Asm->EmitInt32(0);
2654     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2655                                                   TheCU->getID()));
2656   }
2657 }
2658 
2659 /// emitDebugStr - Emit visible names into a debug str section.
2660 ///
2661 void DwarfDebug::emitDebugStr() {
2662   // Check to see if it is worth the effort.
2663   if (StringPool.empty()) return;
2664 
2665   // Start the dwarf str section.
2666   Asm->OutStreamer.SwitchSection(
2667                                 Asm->getObjFileLowering().getDwarfStrSection());
2668 
2669   // Get all of the string pool entries and put them in an array by their ID so
2670   // we can sort them.
2671   SmallVector<std::pair<unsigned,
2672       StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2673 
2674   for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2675        I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
2676     Entries.push_back(std::make_pair(I->second.second, &*I));
2677 
2678   array_pod_sort(Entries.begin(), Entries.end());
2679 
2680   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2681     // Emit a label for reference from debug information entries.
2682     Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2683 
2684     // Emit the string itself.
2685     Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
2686   }
2687 }
2688 
2689 /// emitDebugLoc - Emit visible names into a debug loc section.
2690 ///
2691 void DwarfDebug::emitDebugLoc() {
2692   if (DotDebugLocEntries.empty())
2693     return;
2694 
2695   for (SmallVector<DotDebugLocEntry, 4>::iterator
2696          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2697        I != E; ++I) {
2698     DotDebugLocEntry &Entry = *I;
2699     if (I + 1 != DotDebugLocEntries.end())
2700       Entry.Merge(I+1);
2701   }
2702 
2703   // Start the dwarf loc section.
2704   Asm->OutStreamer.SwitchSection(
2705     Asm->getObjFileLowering().getDwarfLocSection());
2706   unsigned char Size = Asm->getTargetData().getPointerSize();
2707   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2708   unsigned index = 1;
2709   for (SmallVector<DotDebugLocEntry, 4>::iterator
2710          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2711        I != E; ++I, ++index) {
2712     DotDebugLocEntry &Entry = *I;
2713     if (Entry.isMerged()) continue;
2714     if (Entry.isEmpty()) {
2715       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2716       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2717       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2718     } else {
2719       Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
2720       Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
2721       DIVariable DV(Entry.Variable);
2722       if (DV.hasComplexAddress()) {
2723         unsigned N = DV.getNumAddrElements();
2724         unsigned i = 0;
2725         Asm->OutStreamer.AddComment("Loc expr size");
2726         if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2727           // If first address element is OpPlus then emit
2728           // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2729           MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2730           Asm->EmitInt16(Asm->getDwarfRegOpSize(Loc) + N - 2);
2731           Asm->EmitDwarfRegOp(Loc);
2732 //          Asm->EmitULEB128(DV.getAddrElement(1));
2733           i = 2;
2734         } else {
2735           Asm->EmitInt16(Asm->getDwarfRegOpSize(Entry.Loc) + N);
2736           Asm->EmitDwarfRegOp(Entry.Loc);
2737         }
2738 
2739         // Emit remaining complex address elements.
2740         for (; i < N; ++i) {
2741           uint64_t Element = DV.getAddrElement(i);
2742           if (Element == DIBuilder::OpPlus) {
2743             Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2744             Asm->EmitULEB128(DV.getAddrElement(++i));
2745           } else if (Element == DIBuilder::OpDeref)
2746             Asm->EmitInt8(dwarf::DW_OP_deref);
2747           else llvm_unreachable("unknown Opcode found in complex address");
2748         }
2749       } else {
2750         Asm->OutStreamer.AddComment("Loc expr size");
2751         Asm->EmitInt16(Asm->getDwarfRegOpSize(Entry.Loc));
2752         Asm->EmitDwarfRegOp(Entry.Loc);
2753       }
2754     }
2755   }
2756 }
2757 
2758 /// EmitDebugARanges - Emit visible names into a debug aranges section.
2759 ///
2760 void DwarfDebug::EmitDebugARanges() {
2761   // Start the dwarf aranges section.
2762   Asm->OutStreamer.SwitchSection(
2763                           Asm->getObjFileLowering().getDwarfARangesSection());
2764 }
2765 
2766 /// emitDebugRanges - Emit visible names into a debug ranges section.
2767 ///
2768 void DwarfDebug::emitDebugRanges() {
2769   // Start the dwarf ranges section.
2770   Asm->OutStreamer.SwitchSection(
2771     Asm->getObjFileLowering().getDwarfRangesSection());
2772   unsigned char Size = Asm->getTargetData().getPointerSize();
2773   for (SmallVector<const MCSymbol *, 8>::iterator
2774          I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2775        I != E; ++I) {
2776     if (*I)
2777       Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2778     else
2779       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2780   }
2781 }
2782 
2783 /// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2784 ///
2785 void DwarfDebug::emitDebugMacInfo() {
2786   if (const MCSection *LineInfo =
2787       Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2788     // Start the dwarf macinfo section.
2789     Asm->OutStreamer.SwitchSection(LineInfo);
2790   }
2791 }
2792 
2793 /// emitDebugInlineInfo - Emit inline info using following format.
2794 /// Section Header:
2795 /// 1. length of section
2796 /// 2. Dwarf version number
2797 /// 3. address size.
2798 ///
2799 /// Entries (one "entry" for each function that was inlined):
2800 ///
2801 /// 1. offset into __debug_str section for MIPS linkage name, if exists;
2802 ///   otherwise offset into __debug_str for regular function name.
2803 /// 2. offset into __debug_str section for regular function name.
2804 /// 3. an unsigned LEB128 number indicating the number of distinct inlining
2805 /// instances for the function.
2806 ///
2807 /// The rest of the entry consists of a {die_offset, low_pc} pair for each
2808 /// inlined instance; the die_offset points to the inlined_subroutine die in the
2809 /// __debug_info section, and the low_pc is the starting address for the
2810 /// inlining instance.
2811 void DwarfDebug::emitDebugInlineInfo() {
2812   if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
2813     return;
2814 
2815   if (!FirstCU)
2816     return;
2817 
2818   Asm->OutStreamer.SwitchSection(
2819                         Asm->getObjFileLowering().getDwarfDebugInlineSection());
2820 
2821   Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2822   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2823                            Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2824 
2825   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2826 
2827   Asm->OutStreamer.AddComment("Dwarf Version");
2828   Asm->EmitInt16(dwarf::DWARF_VERSION);
2829   Asm->OutStreamer.AddComment("Address Size (in bytes)");
2830   Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2831 
2832   for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2833          E = InlinedSPNodes.end(); I != E; ++I) {
2834 
2835     const MDNode *Node = *I;
2836     DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2837       = InlineInfo.find(Node);
2838     SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2839     DISubprogram SP(Node);
2840     StringRef LName = SP.getLinkageName();
2841     StringRef Name = SP.getName();
2842 
2843     Asm->OutStreamer.AddComment("MIPS linkage name");
2844     if (LName.empty()) {
2845       Asm->OutStreamer.EmitBytes(Name, 0);
2846       Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
2847     } else
2848       Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2849                              DwarfStrSectionSym);
2850 
2851     Asm->OutStreamer.AddComment("Function name");
2852     Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2853     Asm->EmitULEB128(Labels.size(), "Inline count");
2854 
2855     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2856            LE = Labels.end(); LI != LE; ++LI) {
2857       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2858       Asm->EmitInt32(LI->second->getOffset());
2859 
2860       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2861       Asm->OutStreamer.EmitSymbolValue(LI->first,
2862                                        Asm->getTargetData().getPointerSize(),0);
2863     }
2864   }
2865 
2866   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2867 }
2868