Refactor.
[oota-llvm.git] / lib / CodeGen / AsmPrinter / DwarfDebug.cpp
1 //===-- llvm/CodeGen/DwarfDebug.cpp - Dwarf Debug Framework ---------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains support for writing dwarf debug info into asm files.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #define DEBUG_TYPE "dwarfdebug"
15 #include "DwarfDebug.h"
16 #include "DIE.h"
17 #include "llvm/Constants.h"
18 #include "llvm/Module.h"
19 #include "llvm/CodeGen/MachineFunction.h"
20 #include "llvm/CodeGen/MachineModuleInfo.h"
21 #include "llvm/MC/MCAsmInfo.h"
22 #include "llvm/MC/MCSection.h"
23 #include "llvm/MC/MCStreamer.h"
24 #include "llvm/MC/MCSymbol.h"
25 #include "llvm/Target/Mangler.h"
26 #include "llvm/Target/TargetData.h"
27 #include "llvm/Target/TargetFrameInfo.h"
28 #include "llvm/Target/TargetLoweringObjectFile.h"
29 #include "llvm/Target/TargetMachine.h"
30 #include "llvm/Target/TargetRegisterInfo.h"
31 #include "llvm/Target/TargetOptions.h"
32 #include "llvm/Analysis/DebugInfo.h"
33 #include "llvm/ADT/STLExtras.h"
34 #include "llvm/ADT/StringExtras.h"
35 #include "llvm/Support/CommandLine.h"
36 #include "llvm/Support/Debug.h"
37 #include "llvm/Support/ErrorHandling.h"
38 #include "llvm/Support/ValueHandle.h"
39 #include "llvm/Support/FormattedStream.h"
40 #include "llvm/Support/Timer.h"
41 #include "llvm/System/Path.h"
42 using namespace llvm;
43
44 static cl::opt<bool> PrintDbgScope("print-dbgscope", cl::Hidden,
45      cl::desc("Print DbgScope information for each machine instruction"));
46
47 static cl::opt<bool> DisableDebugInfoPrinting("disable-debug-info-print",
48                                               cl::Hidden,
49      cl::desc("Disable debug info printing"));
50
51 static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
52      cl::desc("Make an absense of debug location information explicit."),
53      cl::init(false));
54
55 namespace {
56   const char *DWARFGroupName = "DWARF Emission";
57   const char *DbgTimerName = "DWARF Debug Writer";
58 } // end anonymous namespace
59
60 //===----------------------------------------------------------------------===//
61
62 /// Configuration values for initial hash set sizes (log2).
63 ///
64 static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
65
66 namespace llvm {
67
68 //===----------------------------------------------------------------------===//
69 /// CompileUnit - This dwarf writer support class manages information associate
70 /// with a source file.
71 class CompileUnit {
72   /// ID - File identifier for source.
73   ///
74   unsigned ID;
75
76   /// Die - Compile unit debug information entry.
77   ///
78   const OwningPtr<DIE> CUDie;
79
80   /// IndexTyDie - An anonymous type for index type.  Owned by CUDie.
81   DIE *IndexTyDie;
82
83   /// MDNodeToDieMap - Tracks the mapping of unit level debug informaton
84   /// variables to debug information entries.
85   DenseMap<const MDNode *, DIE *> MDNodeToDieMap;
86
87   /// MDNodeToDIEEntryMap - Tracks the mapping of unit level debug informaton
88   /// descriptors to debug information entries using a DIEEntry proxy.
89   DenseMap<const MDNode *, DIEEntry *> MDNodeToDIEEntryMap;
90
91   /// Globals - A map of globally visible named entities for this unit.
92   ///
93   StringMap<DIE*> Globals;
94
95   /// GlobalTypes - A map of globally visible types for this unit.
96   ///
97   StringMap<DIE*> GlobalTypes;
98
99 public:
100   CompileUnit(unsigned I, DIE *D)
101     : ID(I), CUDie(D), IndexTyDie(0) {}
102
103   // Accessors.
104   unsigned getID()                  const { return ID; }
105   DIE* getCUDie()                   const { return CUDie.get(); }
106   const StringMap<DIE*> &getGlobals()     const { return Globals; }
107   const StringMap<DIE*> &getGlobalTypes() const { return GlobalTypes; }
108
109   /// hasContent - Return true if this compile unit has something to write out.
110   ///
111   bool hasContent() const { return !CUDie->getChildren().empty(); }
112
113   /// addGlobal - Add a new global entity to the compile unit.
114   ///
115   void addGlobal(StringRef Name, DIE *Die) { Globals[Name] = Die; }
116
117   /// addGlobalType - Add a new global type to the compile unit.
118   ///
119   void addGlobalType(StringRef Name, DIE *Die) {
120     GlobalTypes[Name] = Die;
121   }
122
123   /// getDIE - Returns the debug information entry map slot for the
124   /// specified debug variable.
125   DIE *getDIE(const MDNode *N) { return MDNodeToDieMap.lookup(N); }
126
127   /// insertDIE - Insert DIE into the map.
128   void insertDIE(const MDNode *N, DIE *D) {
129     MDNodeToDieMap.insert(std::make_pair(N, D));
130   }
131
132   /// getDIEEntry - Returns the debug information entry for the speciefied
133   /// debug variable.
134   DIEEntry *getDIEEntry(const MDNode *N) {
135     DenseMap<const MDNode *, DIEEntry *>::iterator I =
136       MDNodeToDIEEntryMap.find(N);
137     if (I == MDNodeToDIEEntryMap.end())
138       return NULL;
139     return I->second;
140   }
141
142   /// insertDIEEntry - Insert debug information entry into the map.
143   void insertDIEEntry(const MDNode *N, DIEEntry *E) {
144     MDNodeToDIEEntryMap.insert(std::make_pair(N, E));
145   }
146
147   /// addDie - Adds or interns the DIE to the compile unit.
148   ///
149   void addDie(DIE *Buffer) {
150     this->CUDie->addChild(Buffer);
151   }
152
153   // getIndexTyDie - Get an anonymous type for index type.
154   DIE *getIndexTyDie() {
155     return IndexTyDie;
156   }
157
158   // setIndexTyDie - Set D as anonymous type for index which can be reused
159   // later.
160   void setIndexTyDie(DIE *D) {
161     IndexTyDie = D;
162   }
163
164 };
165
166 //===----------------------------------------------------------------------===//
167 /// DbgVariable - This class is used to track local variable information.
168 ///
169 class DbgVariable {
170   DIVariable Var;                    // Variable Descriptor.
171   DIE *TheDIE;                       // Variable DIE.
172   unsigned DotDebugLocOffset;        // Offset in DotDebugLocEntries.
173 public:
174   // AbsVar may be NULL.
175   DbgVariable(DIVariable V) : Var(V), TheDIE(0), DotDebugLocOffset(~0U) {}
176
177   // Accessors.
178   DIVariable getVariable()           const { return Var; }
179   void setDIE(DIE *D)                      { TheDIE = D; }
180   DIE *getDIE()                      const { return TheDIE; }
181   void setDotDebugLocOffset(unsigned O)    { DotDebugLocOffset = O; }
182   unsigned getDotDebugLocOffset()    const { return DotDebugLocOffset; }
183   StringRef getName()                const { return Var.getName(); }
184   unsigned getTag()                  const { return Var.getTag(); }
185   bool variableHasComplexAddress()   const {
186     assert(Var.Verify() && "Invalid complex DbgVariable!");
187     return Var.hasComplexAddress();
188   }
189   bool isBlockByrefVariable()        const {
190     assert(Var.Verify() && "Invalid complex DbgVariable!");
191     return Var.isBlockByrefVariable();
192   }
193   unsigned getNumAddrElements()      const { 
194     assert(Var.Verify() && "Invalid complex DbgVariable!");
195     return Var.getNumAddrElements();
196   }
197   uint64_t getAddrElement(unsigned i) const {
198     return Var.getAddrElement(i);
199   }
200   DIType getType()               const {
201     DIType Ty = Var.getType();
202     // FIXME: isBlockByrefVariable should be reformulated in terms of complex
203     // addresses instead.
204     if (Var.isBlockByrefVariable()) {
205       /* Byref variables, in Blocks, are declared by the programmer as
206          "SomeType VarName;", but the compiler creates a
207          __Block_byref_x_VarName struct, and gives the variable VarName
208          either the struct, or a pointer to the struct, as its type.  This
209          is necessary for various behind-the-scenes things the compiler
210          needs to do with by-reference variables in blocks.
211          
212          However, as far as the original *programmer* is concerned, the
213          variable should still have type 'SomeType', as originally declared.
214          
215          The following function dives into the __Block_byref_x_VarName
216          struct to find the original type of the variable.  This will be
217          passed back to the code generating the type for the Debug
218          Information Entry for the variable 'VarName'.  'VarName' will then
219          have the original type 'SomeType' in its debug information.
220          
221          The original type 'SomeType' will be the type of the field named
222          'VarName' inside the __Block_byref_x_VarName struct.
223          
224          NOTE: In order for this to not completely fail on the debugger
225          side, the Debug Information Entry for the variable VarName needs to
226          have a DW_AT_location that tells the debugger how to unwind through
227          the pointers and __Block_byref_x_VarName struct to find the actual
228          value of the variable.  The function addBlockByrefType does this.  */
229       DIType subType = Ty;
230       unsigned tag = Ty.getTag();
231       
232       if (tag == dwarf::DW_TAG_pointer_type) {
233         DIDerivedType DTy = DIDerivedType(Ty);
234         subType = DTy.getTypeDerivedFrom();
235       }
236       
237       DICompositeType blockStruct = DICompositeType(subType);
238       DIArray Elements = blockStruct.getTypeArray();
239       
240       for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
241         DIDescriptor Element = Elements.getElement(i);
242         DIDerivedType DT = DIDerivedType(Element);
243         if (getName() == DT.getName())
244           return (DT.getTypeDerivedFrom());
245       }
246       return Ty;
247     }
248     return Ty;
249   }
250 };
251
252 //===----------------------------------------------------------------------===//
253 /// DbgRange - This is used to track range of instructions with identical
254 /// debug info scope.
255 ///
256 typedef std::pair<const MachineInstr *, const MachineInstr *> DbgRange;
257
258 //===----------------------------------------------------------------------===//
259 /// DbgScope - This class is used to track scope information.
260 ///
261 class DbgScope {
262   DbgScope *Parent;                   // Parent to this scope.
263   DIDescriptor Desc;                  // Debug info descriptor for scope.
264   // Location at which this scope is inlined.
265   AssertingVH<const MDNode> InlinedAtLocation;
266   bool AbstractScope;                 // Abstract Scope
267   const MachineInstr *LastInsn;       // Last instruction of this scope.
268   const MachineInstr *FirstInsn;      // First instruction of this scope.
269   unsigned DFSIn, DFSOut;
270   // Scopes defined in scope.  Contents not owned.
271   SmallVector<DbgScope *, 4> Scopes;
272   // Variables declared in scope.  Contents owned.
273   SmallVector<DbgVariable *, 8> Variables;
274   SmallVector<DbgRange, 4> Ranges;
275   // Private state for dump()
276   mutable unsigned IndentLevel;
277 public:
278   DbgScope(DbgScope *P, DIDescriptor D, const MDNode *I = 0)
279     : Parent(P), Desc(D), InlinedAtLocation(I), AbstractScope(false),
280       LastInsn(0), FirstInsn(0),
281       DFSIn(0), DFSOut(0), IndentLevel(0) {}
282   virtual ~DbgScope();
283
284   // Accessors.
285   DbgScope *getParent()          const { return Parent; }
286   void setParent(DbgScope *P)          { Parent = P; }
287   DIDescriptor getDesc()         const { return Desc; }
288   const MDNode *getInlinedAt()         const { return InlinedAtLocation; }
289   const MDNode *getScopeNode()         const { return Desc; }
290   const SmallVector<DbgScope *, 4> &getScopes() { return Scopes; }
291   const SmallVector<DbgVariable *, 8> &getDbgVariables() { return Variables; }
292   const SmallVector<DbgRange, 4> &getRanges() { return Ranges; }
293
294   /// openInsnRange - This scope covers instruction range starting from MI.
295   void openInsnRange(const MachineInstr *MI) {
296     if (!FirstInsn)
297       FirstInsn = MI;
298
299     if (Parent)
300       Parent->openInsnRange(MI);
301   }
302
303   /// extendInsnRange - Extend the current instruction range covered by
304   /// this scope.
305   void extendInsnRange(const MachineInstr *MI) {
306     assert (FirstInsn && "MI Range is not open!");
307     LastInsn = MI;
308     if (Parent)
309       Parent->extendInsnRange(MI);
310   }
311
312   /// closeInsnRange - Create a range based on FirstInsn and LastInsn collected
313   /// until now. This is used when a new scope is encountered while walking
314   /// machine instructions.
315   void closeInsnRange(DbgScope *NewScope = NULL) {
316     assert (LastInsn && "Last insn missing!");
317     Ranges.push_back(DbgRange(FirstInsn, LastInsn));
318     FirstInsn = NULL;
319     LastInsn = NULL;
320     // If Parent dominates NewScope then do not close Parent's instruction
321     // range.
322     if (Parent && (!NewScope || !Parent->dominates(NewScope)))
323       Parent->closeInsnRange(NewScope);
324   }
325
326   void setAbstractScope() { AbstractScope = true; }
327   bool isAbstractScope() const { return AbstractScope; }
328
329   // Depth First Search support to walk and mainpluate DbgScope hierarchy.
330   unsigned getDFSOut() const { return DFSOut; }
331   void setDFSOut(unsigned O) { DFSOut = O; }
332   unsigned getDFSIn() const  { return DFSIn; }
333   void setDFSIn(unsigned I)  { DFSIn = I; }
334   bool dominates(const DbgScope *S) {
335     if (S == this)
336       return true;
337     if (DFSIn < S->getDFSIn() && DFSOut > S->getDFSOut())
338       return true;
339     return false;
340   }
341
342   /// addScope - Add a scope to the scope.
343   ///
344   void addScope(DbgScope *S) { Scopes.push_back(S); }
345
346   /// addVariable - Add a variable to the scope.
347   ///
348   void addVariable(DbgVariable *V) { Variables.push_back(V); }
349
350 #ifndef NDEBUG
351   void dump() const;
352 #endif
353 };
354
355 } // end llvm namespace
356
357 #ifndef NDEBUG
358 void DbgScope::dump() const {
359   raw_ostream &err = dbgs();
360   err.indent(IndentLevel);
361   const MDNode *N = Desc;
362   N->dump();
363   if (AbstractScope)
364     err << "Abstract Scope\n";
365
366   IndentLevel += 2;
367   if (!Scopes.empty())
368     err << "Children ...\n";
369   for (unsigned i = 0, e = Scopes.size(); i != e; ++i)
370     if (Scopes[i] != this)
371       Scopes[i]->dump();
372
373   IndentLevel -= 2;
374 }
375 #endif
376
377 DbgScope::~DbgScope() {
378   for (unsigned j = 0, M = Variables.size(); j < M; ++j)
379     delete Variables[j];
380 }
381
382 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
383   : Asm(A), MMI(Asm->MMI), FirstCU(0),
384     AbbreviationsSet(InitAbbreviationsSetSize),
385     CurrentFnDbgScope(0), PrevLabel(NULL) {
386   NextStringPoolNumber = 0;
387
388   DwarfFrameSectionSym = DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
389   DwarfStrSectionSym = TextSectionSym = 0;
390   DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
391   DwarfDebugLineSectionSym = CurrentLineSectionSym = 0;
392   FunctionBeginSym = FunctionEndSym = 0;
393   DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
394   {
395     NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
396     beginModule(M);
397   }
398 }
399 DwarfDebug::~DwarfDebug() {
400   for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
401     DIEBlocks[j]->~DIEBlock();
402 }
403
404 MCSymbol *DwarfDebug::getStringPoolEntry(StringRef Str) {
405   std::pair<MCSymbol*, unsigned> &Entry = StringPool[Str];
406   if (Entry.first) return Entry.first;
407
408   Entry.second = NextStringPoolNumber++;
409   return Entry.first = Asm->GetTempSymbol("string", Entry.second);
410 }
411
412
413 /// assignAbbrevNumber - Define a unique number for the abbreviation.
414 ///
415 void DwarfDebug::assignAbbrevNumber(DIEAbbrev &Abbrev) {
416   // Profile the node so that we can make it unique.
417   FoldingSetNodeID ID;
418   Abbrev.Profile(ID);
419
420   // Check the set for priors.
421   DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
422
423   // If it's newly added.
424   if (InSet == &Abbrev) {
425     // Add to abbreviation list.
426     Abbreviations.push_back(&Abbrev);
427
428     // Assign the vector position + 1 as its number.
429     Abbrev.setNumber(Abbreviations.size());
430   } else {
431     // Assign existing abbreviation number.
432     Abbrev.setNumber(InSet->getNumber());
433   }
434 }
435
436 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
437 /// information entry.
438 DIEEntry *DwarfDebug::createDIEEntry(DIE *Entry) {
439   DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry);
440   return Value;
441 }
442
443 /// addUInt - Add an unsigned integer attribute data and value.
444 ///
445 void DwarfDebug::addUInt(DIE *Die, unsigned Attribute,
446                          unsigned Form, uint64_t Integer) {
447   if (!Form) Form = DIEInteger::BestForm(false, Integer);
448   DIEValue *Value = Integer == 1 ?
449     DIEIntegerOne : new (DIEValueAllocator) DIEInteger(Integer);
450   Die->addValue(Attribute, Form, Value);
451 }
452
453 /// addSInt - Add an signed integer attribute data and value.
454 ///
455 void DwarfDebug::addSInt(DIE *Die, unsigned Attribute,
456                          unsigned Form, int64_t Integer) {
457   if (!Form) Form = DIEInteger::BestForm(true, Integer);
458   DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
459   Die->addValue(Attribute, Form, Value);
460 }
461
462 /// addString - Add a string attribute data and value. DIEString only
463 /// keeps string reference.
464 void DwarfDebug::addString(DIE *Die, unsigned Attribute, unsigned Form,
465                            StringRef String) {
466   DIEValue *Value = new (DIEValueAllocator) DIEString(String);
467   Die->addValue(Attribute, Form, Value);
468 }
469
470 /// addLabel - Add a Dwarf label attribute data and value.
471 ///
472 void DwarfDebug::addLabel(DIE *Die, unsigned Attribute, unsigned Form,
473                           const MCSymbol *Label) {
474   DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
475   Die->addValue(Attribute, Form, Value);
476 }
477
478 /// addDelta - Add a label delta attribute data and value.
479 ///
480 void DwarfDebug::addDelta(DIE *Die, unsigned Attribute, unsigned Form,
481                           const MCSymbol *Hi, const MCSymbol *Lo) {
482   DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
483   Die->addValue(Attribute, Form, Value);
484 }
485
486 /// addDIEEntry - Add a DIE attribute data and value.
487 ///
488 void DwarfDebug::addDIEEntry(DIE *Die, unsigned Attribute, unsigned Form,
489                              DIE *Entry) {
490   Die->addValue(Attribute, Form, createDIEEntry(Entry));
491 }
492
493
494 /// addBlock - Add block data.
495 ///
496 void DwarfDebug::addBlock(DIE *Die, unsigned Attribute, unsigned Form,
497                           DIEBlock *Block) {
498   Block->ComputeSize(Asm);
499   DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
500   Die->addValue(Attribute, Block->BestForm(), Block);
501 }
502
503 /// addSourceLine - Add location information to specified debug information
504 /// entry.
505 void DwarfDebug::addSourceLine(DIE *Die, const DIVariable V) {
506   // Verify variable.
507   if (!V.Verify())
508     return;
509
510   unsigned Line = V.getLineNumber();
511   unsigned FileID = GetOrCreateSourceID(V.getContext().getDirectory(),
512                                         V.getContext().getFilename());
513   assert(FileID && "Invalid file id");
514   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
515   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
516 }
517
518 /// addSourceLine - Add location information to specified debug information
519 /// entry.
520 void DwarfDebug::addSourceLine(DIE *Die, const DIGlobalVariable G) {
521   // Verify global variable.
522   if (!G.Verify())
523     return;
524
525   unsigned Line = G.getLineNumber();
526   unsigned FileID = GetOrCreateSourceID(G.getContext().getDirectory(),
527                                         G.getContext().getFilename());
528   assert(FileID && "Invalid file id");
529   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
530   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
531 }
532
533 /// addSourceLine - Add location information to specified debug information
534 /// entry.
535 void DwarfDebug::addSourceLine(DIE *Die, const DISubprogram SP) {
536   // Verify subprogram.
537   if (!SP.Verify())
538     return;
539   // If the line number is 0, don't add it.
540   if (SP.getLineNumber() == 0)
541     return;
542
543   unsigned Line = SP.getLineNumber();
544   if (!SP.getContext().Verify())
545     return;
546   unsigned FileID = GetOrCreateSourceID(SP.getDirectory(),
547                                         SP.getFilename());
548   assert(FileID && "Invalid file id");
549   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
550   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
551 }
552
553 /// addSourceLine - Add location information to specified debug information
554 /// entry.
555 void DwarfDebug::addSourceLine(DIE *Die, const DIType Ty) {
556   // Verify type.
557   if (!Ty.Verify())
558     return;
559
560   unsigned Line = Ty.getLineNumber();
561   if (!Ty.getContext().Verify())
562     return;
563   unsigned FileID = GetOrCreateSourceID(Ty.getContext().getDirectory(),
564                                         Ty.getContext().getFilename());
565   assert(FileID && "Invalid file id");
566   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
567   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
568 }
569
570 /// addSourceLine - Add location information to specified debug information
571 /// entry.
572 void DwarfDebug::addSourceLine(DIE *Die, const DINameSpace NS) {
573   // Verify namespace.
574   if (!NS.Verify())
575     return;
576
577   unsigned Line = NS.getLineNumber();
578   StringRef FN = NS.getFilename();
579   StringRef Dir = NS.getDirectory();
580
581   unsigned FileID = GetOrCreateSourceID(Dir, FN);
582   assert(FileID && "Invalid file id");
583   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
584   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
585 }
586
587 /// addVariableAddress - Add DW_AT_location attribute for a DbgVariable.
588 void DwarfDebug::addVariableAddress(DbgVariable *&DV, DIE *Die,
589                                     unsigned Attribute,
590                                     const MachineLocation &Location) {
591   if (DV->variableHasComplexAddress())
592     addComplexAddress(DV, Die, dwarf::DW_AT_location, Location);
593   else if (DV->isBlockByrefVariable())
594     addBlockByrefAddress(DV, Die, dwarf::DW_AT_location, Location);
595   else
596     addAddress(Die, dwarf::DW_AT_location, Location);
597 }
598
599 /// addComplexAddress - Start with the address based on the location provided,
600 /// and generate the DWARF information necessary to find the actual variable
601 /// given the extra address information encoded in the DIVariable, starting from
602 /// the starting location.  Add the DWARF information to the die.
603 ///
604 void DwarfDebug::addComplexAddress(DbgVariable *&DV, DIE *Die,
605                                    unsigned Attribute,
606                                    const MachineLocation &Location) {
607   DIType Ty = DV->getType();
608
609   // Decode the original location, and use that as the start of the byref
610   // variable's location.
611   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
612   unsigned Reg = RI->getDwarfRegNum(Location.getReg(), false);
613   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
614
615   if (Location.isReg()) {
616     if (Reg < 32) {
617       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + Reg);
618     } else {
619       Reg = Reg - dwarf::DW_OP_reg0;
620       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
621       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
622     }
623   } else {
624     if (Reg < 32)
625       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
626     else {
627       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
628       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
629     }
630
631     addUInt(Block, 0, dwarf::DW_FORM_sdata, Location.getOffset());
632   }
633
634   for (unsigned i = 0, N = DV->getNumAddrElements(); i < N; ++i) {
635     uint64_t Element = DV->getAddrElement(i);
636
637     if (Element == DIFactory::OpPlus) {
638       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
639       addUInt(Block, 0, dwarf::DW_FORM_udata, DV->getAddrElement(++i));
640     } else if (Element == DIFactory::OpDeref) {
641       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
642     } else llvm_unreachable("unknown DIFactory Opcode");
643   }
644
645   // Now attach the location information to the DIE.
646   addBlock(Die, Attribute, 0, Block);
647 }
648
649 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
650    VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
651    gives the variable VarName either the struct, or a pointer to the struct, as
652    its type.  This is necessary for various behind-the-scenes things the
653    compiler needs to do with by-reference variables in Blocks.
654
655    However, as far as the original *programmer* is concerned, the variable
656    should still have type 'SomeType', as originally declared.
657
658    The function getBlockByrefType dives into the __Block_byref_x_VarName
659    struct to find the original type of the variable, which is then assigned to
660    the variable's Debug Information Entry as its real type.  So far, so good.
661    However now the debugger will expect the variable VarName to have the type
662    SomeType.  So we need the location attribute for the variable to be an
663    expression that explains to the debugger how to navigate through the
664    pointers and struct to find the actual variable of type SomeType.
665
666    The following function does just that.  We start by getting
667    the "normal" location for the variable. This will be the location
668    of either the struct __Block_byref_x_VarName or the pointer to the
669    struct __Block_byref_x_VarName.
670
671    The struct will look something like:
672
673    struct __Block_byref_x_VarName {
674      ... <various fields>
675      struct __Block_byref_x_VarName *forwarding;
676      ... <various other fields>
677      SomeType VarName;
678      ... <maybe more fields>
679    };
680
681    If we are given the struct directly (as our starting point) we
682    need to tell the debugger to:
683
684    1).  Add the offset of the forwarding field.
685
686    2).  Follow that pointer to get the real __Block_byref_x_VarName
687    struct to use (the real one may have been copied onto the heap).
688
689    3).  Add the offset for the field VarName, to find the actual variable.
690
691    If we started with a pointer to the struct, then we need to
692    dereference that pointer first, before the other steps.
693    Translating this into DWARF ops, we will need to append the following
694    to the current location description for the variable:
695
696    DW_OP_deref                    -- optional, if we start with a pointer
697    DW_OP_plus_uconst <forward_fld_offset>
698    DW_OP_deref
699    DW_OP_plus_uconst <varName_fld_offset>
700
701    That is what this function does.  */
702
703 /// addBlockByrefAddress - Start with the address based on the location
704 /// provided, and generate the DWARF information necessary to find the
705 /// actual Block variable (navigating the Block struct) based on the
706 /// starting location.  Add the DWARF information to the die.  For
707 /// more information, read large comment just above here.
708 ///
709 void DwarfDebug::addBlockByrefAddress(DbgVariable *&DV, DIE *Die,
710                                       unsigned Attribute,
711                                       const MachineLocation &Location) {
712   DIType Ty = DV->getType();
713   DIType TmpTy = Ty;
714   unsigned Tag = Ty.getTag();
715   bool isPointer = false;
716
717   StringRef varName = DV->getName();
718
719   if (Tag == dwarf::DW_TAG_pointer_type) {
720     DIDerivedType DTy = DIDerivedType(Ty);
721     TmpTy = DTy.getTypeDerivedFrom();
722     isPointer = true;
723   }
724
725   DICompositeType blockStruct = DICompositeType(TmpTy);
726
727   // Find the __forwarding field and the variable field in the __Block_byref
728   // struct.
729   DIArray Fields = blockStruct.getTypeArray();
730   DIDescriptor varField = DIDescriptor();
731   DIDescriptor forwardingField = DIDescriptor();
732
733   for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
734     DIDescriptor Element = Fields.getElement(i);
735     DIDerivedType DT = DIDerivedType(Element);
736     StringRef fieldName = DT.getName();
737     if (fieldName == "__forwarding")
738       forwardingField = Element;
739     else if (fieldName == varName)
740       varField = Element;
741   }
742
743   // Get the offsets for the forwarding field and the variable field.
744   unsigned forwardingFieldOffset =
745     DIDerivedType(forwardingField).getOffsetInBits() >> 3;
746   unsigned varFieldOffset =
747     DIDerivedType(varField).getOffsetInBits() >> 3;
748
749   // Decode the original location, and use that as the start of the byref
750   // variable's location.
751   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
752   unsigned Reg = RI->getDwarfRegNum(Location.getReg(), false);
753   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
754
755   if (Location.isReg()) {
756     if (Reg < 32)
757       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + Reg);
758     else {
759       Reg = Reg - dwarf::DW_OP_reg0;
760       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
761       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
762     }
763   } else {
764     if (Reg < 32)
765       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
766     else {
767       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
768       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
769     }
770
771     addUInt(Block, 0, dwarf::DW_FORM_sdata, Location.getOffset());
772   }
773
774   // If we started with a pointer to the __Block_byref... struct, then
775   // the first thing we need to do is dereference the pointer (DW_OP_deref).
776   if (isPointer)
777     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
778
779   // Next add the offset for the '__forwarding' field:
780   // DW_OP_plus_uconst ForwardingFieldOffset.  Note there's no point in
781   // adding the offset if it's 0.
782   if (forwardingFieldOffset > 0) {
783     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
784     addUInt(Block, 0, dwarf::DW_FORM_udata, forwardingFieldOffset);
785   }
786
787   // Now dereference the __forwarding field to get to the real __Block_byref
788   // struct:  DW_OP_deref.
789   addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
790
791   // Now that we've got the real __Block_byref... struct, add the offset
792   // for the variable's field to get to the location of the actual variable:
793   // DW_OP_plus_uconst varFieldOffset.  Again, don't add if it's 0.
794   if (varFieldOffset > 0) {
795     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
796     addUInt(Block, 0, dwarf::DW_FORM_udata, varFieldOffset);
797   }
798
799   // Now attach the location information to the DIE.
800   addBlock(Die, Attribute, 0, Block);
801 }
802
803 /// addAddress - Add an address attribute to a die based on the location
804 /// provided.
805 void DwarfDebug::addAddress(DIE *Die, unsigned Attribute,
806                             const MachineLocation &Location) {
807   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
808   unsigned Reg = RI->getDwarfRegNum(Location.getReg(), false);
809   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
810
811   if (Location.isReg()) {
812     if (Reg < 32) {
813       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + Reg);
814     } else {
815       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
816       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
817     }
818   } else {
819     if (Reg < 32) {
820       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
821     } else {
822       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
823       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
824     }
825
826     addUInt(Block, 0, dwarf::DW_FORM_sdata, Location.getOffset());
827   }
828
829   addBlock(Die, Attribute, 0, Block);
830 }
831
832 /// addRegisterAddress - Add register location entry in variable DIE.
833 bool DwarfDebug::addRegisterAddress(DIE *Die, const MCSymbol *VS,
834                                     const MachineOperand &MO) {
835   assert (MO.isReg() && "Invalid machine operand!");
836   if (!MO.getReg())
837     return false;
838   MachineLocation Location;
839   Location.set(MO.getReg());
840   addAddress(Die, dwarf::DW_AT_location, Location);
841   if (VS)
842     addLabel(Die, dwarf::DW_AT_start_scope, dwarf::DW_FORM_addr, VS);
843   return true;
844 }
845
846 /// addConstantValue - Add constant value entry in variable DIE.
847 bool DwarfDebug::addConstantValue(DIE *Die, const MCSymbol *VS,
848                                   const MachineOperand &MO) {
849   assert (MO.isImm() && "Invalid machine operand!");
850   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
851   unsigned Imm = MO.getImm();
852   addUInt(Block, 0, dwarf::DW_FORM_udata, Imm);
853   addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
854   if (VS)
855     addLabel(Die, dwarf::DW_AT_start_scope, dwarf::DW_FORM_addr, VS);
856   return true;
857 }
858
859 /// addConstantFPValue - Add constant value entry in variable DIE.
860 bool DwarfDebug::addConstantFPValue(DIE *Die, const MCSymbol *VS,
861                                     const MachineOperand &MO) {
862   assert (MO.isFPImm() && "Invalid machine operand!");
863   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
864   APFloat FPImm = MO.getFPImm()->getValueAPF();
865
866   // Get the raw data form of the floating point.
867   const APInt FltVal = FPImm.bitcastToAPInt();
868   const char *FltPtr = (const char*)FltVal.getRawData();
869
870   int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
871   bool LittleEndian = Asm->getTargetData().isLittleEndian();
872   int Incr = (LittleEndian ? 1 : -1);
873   int Start = (LittleEndian ? 0 : NumBytes - 1);
874   int Stop = (LittleEndian ? NumBytes : -1);
875
876   // Output the constant to DWARF one byte at a time.
877   for (; Start != Stop; Start += Incr)
878     addUInt(Block, 0, dwarf::DW_FORM_data1,
879             (unsigned char)0xFF & FltPtr[Start]);
880
881   addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
882   if (VS)
883     addLabel(Die, dwarf::DW_AT_start_scope, dwarf::DW_FORM_addr, VS);
884   return true;
885 }
886
887
888 /// addToContextOwner - Add Die into the list of its context owner's children.
889 void DwarfDebug::addToContextOwner(DIE *Die, DIDescriptor Context) {
890   if (Context.isType()) {
891     DIE *ContextDIE = getOrCreateTypeDIE(DIType(Context));
892     ContextDIE->addChild(Die);
893   } else if (Context.isNameSpace()) {
894     DIE *ContextDIE = getOrCreateNameSpace(DINameSpace(Context));
895     ContextDIE->addChild(Die);
896   } else if (Context.isSubprogram()) {
897     DIE *ContextDIE = createSubprogramDIE(DISubprogram(Context),
898                                           /*MakeDecl=*/false);
899     ContextDIE->addChild(Die);
900   } else if (DIE *ContextDIE = getCompileUnit(Context)->getDIE(Context))
901     ContextDIE->addChild(Die);
902   else
903     getCompileUnit(Context)->addDie(Die);
904 }
905
906 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
907 /// given DIType.
908 DIE *DwarfDebug::getOrCreateTypeDIE(DIType Ty) {
909   CompileUnit *TypeCU = getCompileUnit(Ty);
910   DIE *TyDIE = TypeCU->getDIE(Ty);
911   if (TyDIE)
912     return TyDIE;
913
914   // Create new type.
915   TyDIE = new DIE(dwarf::DW_TAG_base_type);
916   TypeCU->insertDIE(Ty, TyDIE);
917   if (Ty.isBasicType())
918     constructTypeDIE(*TyDIE, DIBasicType(Ty));
919   else if (Ty.isCompositeType())
920     constructTypeDIE(*TyDIE, DICompositeType(Ty));
921   else {
922     assert(Ty.isDerivedType() && "Unknown kind of DIType");
923     constructTypeDIE(*TyDIE, DIDerivedType(Ty));
924   }
925
926   addToContextOwner(TyDIE, Ty.getContext());
927   return TyDIE;
928 }
929
930 /// addType - Add a new type attribute to the specified entity.
931 void DwarfDebug::addType(DIE *Entity, DIType Ty) {
932   if (!Ty.Verify())
933     return;
934
935   // Check for pre-existence.
936   CompileUnit *TypeCU = getCompileUnit(Ty);
937   DIEEntry *Entry = TypeCU->getDIEEntry(Ty);
938   // If it exists then use the existing value.
939   if (Entry) {
940     Entity->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, Entry);
941     return;
942   }
943
944   // Construct type.
945   DIE *Buffer = getOrCreateTypeDIE(Ty);
946
947   // Set up proxy.
948   Entry = createDIEEntry(Buffer);
949   TypeCU->insertDIEEntry(Ty, Entry);
950
951   Entity->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, Entry);
952 }
953
954 /// constructTypeDIE - Construct basic type die from DIBasicType.
955 void DwarfDebug::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
956   // Get core information.
957   StringRef Name = BTy.getName();
958   Buffer.setTag(dwarf::DW_TAG_base_type);
959   addUInt(&Buffer, dwarf::DW_AT_encoding,  dwarf::DW_FORM_data1,
960           BTy.getEncoding());
961
962   // Add name if not anonymous or intermediate type.
963   if (!Name.empty())
964     addString(&Buffer, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
965   uint64_t Size = BTy.getSizeInBits() >> 3;
966   addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
967 }
968
969 /// constructTypeDIE - Construct derived type die from DIDerivedType.
970 void DwarfDebug::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
971   // Get core information.
972   StringRef Name = DTy.getName();
973   uint64_t Size = DTy.getSizeInBits() >> 3;
974   unsigned Tag = DTy.getTag();
975
976   // FIXME - Workaround for templates.
977   if (Tag == dwarf::DW_TAG_inheritance) Tag = dwarf::DW_TAG_reference_type;
978
979   Buffer.setTag(Tag);
980
981   // Map to main type, void will not have a type.
982   DIType FromTy = DTy.getTypeDerivedFrom();
983   addType(&Buffer, FromTy);
984
985   // Add name if not anonymous or intermediate type.
986   if (!Name.empty())
987     addString(&Buffer, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
988
989   // Add size if non-zero (derived types might be zero-sized.)
990   if (Size)
991     addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
992
993   // Add source line info if available and TyDesc is not a forward declaration.
994   if (!DTy.isForwardDecl())
995     addSourceLine(&Buffer, DTy);
996 }
997
998 /// constructTypeDIE - Construct type DIE from DICompositeType.
999 void DwarfDebug::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
1000   // Get core information.
1001   StringRef Name = CTy.getName();
1002
1003   uint64_t Size = CTy.getSizeInBits() >> 3;
1004   unsigned Tag = CTy.getTag();
1005   Buffer.setTag(Tag);
1006
1007   switch (Tag) {
1008   case dwarf::DW_TAG_vector_type:
1009   case dwarf::DW_TAG_array_type:
1010     constructArrayTypeDIE(Buffer, &CTy);
1011     break;
1012   case dwarf::DW_TAG_enumeration_type: {
1013     DIArray Elements = CTy.getTypeArray();
1014
1015     // Add enumerators to enumeration type.
1016     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1017       DIE *ElemDie = NULL;
1018       DIDescriptor Enum(Elements.getElement(i));
1019       if (Enum.isEnumerator()) {
1020         ElemDie = constructEnumTypeDIE(DIEnumerator(Enum));
1021         Buffer.addChild(ElemDie);
1022       }
1023     }
1024   }
1025     break;
1026   case dwarf::DW_TAG_subroutine_type: {
1027     // Add return type.
1028     DIArray Elements = CTy.getTypeArray();
1029     DIDescriptor RTy = Elements.getElement(0);
1030     addType(&Buffer, DIType(RTy));
1031
1032     // Add prototype flag.
1033     addUInt(&Buffer, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1);
1034
1035     // Add arguments.
1036     for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) {
1037       DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
1038       DIDescriptor Ty = Elements.getElement(i);
1039       addType(Arg, DIType(Ty));
1040       Buffer.addChild(Arg);
1041     }
1042   }
1043     break;
1044   case dwarf::DW_TAG_structure_type:
1045   case dwarf::DW_TAG_union_type:
1046   case dwarf::DW_TAG_class_type: {
1047     // Add elements to structure type.
1048     DIArray Elements = CTy.getTypeArray();
1049
1050     // A forward struct declared type may not have elements available.
1051     unsigned N = Elements.getNumElements();
1052     if (N == 0)
1053       break;
1054
1055     // Add elements to structure type.
1056     for (unsigned i = 0; i < N; ++i) {
1057       DIDescriptor Element = Elements.getElement(i);
1058       DIE *ElemDie = NULL;
1059       if (Element.isSubprogram())
1060         ElemDie = createSubprogramDIE(DISubprogram(Element));
1061       else if (Element.isVariable()) {
1062         DIVariable DV(Element);
1063         ElemDie = new DIE(dwarf::DW_TAG_variable);
1064         addString(ElemDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
1065                   DV.getName());
1066         addType(ElemDie, DV.getType());
1067         addUInt(ElemDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1068         addUInt(ElemDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
1069         addSourceLine(ElemDie, DV);
1070       } else if (Element.isDerivedType())
1071         ElemDie = createMemberDIE(DIDerivedType(Element));
1072       else
1073         continue;
1074       Buffer.addChild(ElemDie);
1075     }
1076
1077     if (CTy.isAppleBlockExtension())
1078       addUInt(&Buffer, dwarf::DW_AT_APPLE_block, dwarf::DW_FORM_flag, 1);
1079
1080     unsigned RLang = CTy.getRunTimeLang();
1081     if (RLang)
1082       addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class,
1083               dwarf::DW_FORM_data1, RLang);
1084
1085     DICompositeType ContainingType = CTy.getContainingType();
1086     if (DIDescriptor(ContainingType).isCompositeType())
1087       addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
1088                   getOrCreateTypeDIE(DIType(ContainingType)));
1089     else {
1090       DIDescriptor Context = CTy.getContext();
1091       addToContextOwner(&Buffer, Context);
1092     }
1093     break;
1094   }
1095   default:
1096     break;
1097   }
1098
1099   // Add name if not anonymous or intermediate type.
1100   if (!Name.empty())
1101     addString(&Buffer, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
1102
1103   if (Tag == dwarf::DW_TAG_enumeration_type || Tag == dwarf::DW_TAG_class_type
1104       || Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type)
1105     {
1106     // Add size if non-zero (derived types might be zero-sized.)
1107     if (Size)
1108       addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
1109     else {
1110       // Add zero size if it is not a forward declaration.
1111       if (CTy.isForwardDecl())
1112         addUInt(&Buffer, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1113       else
1114         addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, 0);
1115     }
1116
1117     // Add source line info if available.
1118     if (!CTy.isForwardDecl())
1119       addSourceLine(&Buffer, CTy);
1120   }
1121 }
1122
1123 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1124 void DwarfDebug::constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy){
1125   int64_t L = SR.getLo();
1126   int64_t H = SR.getHi();
1127   DIE *DW_Subrange = new DIE(dwarf::DW_TAG_subrange_type);
1128
1129   addDIEEntry(DW_Subrange, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IndexTy);
1130   if (L)
1131     addSInt(DW_Subrange, dwarf::DW_AT_lower_bound, 0, L);
1132   addSInt(DW_Subrange, dwarf::DW_AT_upper_bound, 0, H);
1133
1134   Buffer.addChild(DW_Subrange);
1135 }
1136
1137 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1138 void DwarfDebug::constructArrayTypeDIE(DIE &Buffer,
1139                                        DICompositeType *CTy) {
1140   Buffer.setTag(dwarf::DW_TAG_array_type);
1141   if (CTy->getTag() == dwarf::DW_TAG_vector_type)
1142     addUInt(&Buffer, dwarf::DW_AT_GNU_vector, dwarf::DW_FORM_flag, 1);
1143
1144   // Emit derived type.
1145   addType(&Buffer, CTy->getTypeDerivedFrom());
1146   DIArray Elements = CTy->getTypeArray();
1147
1148   // Get an anonymous type for index type.
1149   CompileUnit *TheCU = getCompileUnit(*CTy);
1150   DIE *IdxTy = TheCU->getIndexTyDie();
1151   if (!IdxTy) {
1152     // Construct an anonymous type for index type.
1153     IdxTy = new DIE(dwarf::DW_TAG_base_type);
1154     addUInt(IdxTy, dwarf::DW_AT_byte_size, 0, sizeof(int32_t));
1155     addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1156             dwarf::DW_ATE_signed);
1157     TheCU->addDie(IdxTy);
1158     TheCU->setIndexTyDie(IdxTy);
1159   }
1160
1161   // Add subranges to array type.
1162   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1163     DIDescriptor Element = Elements.getElement(i);
1164     if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1165       constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1166   }
1167 }
1168
1169 /// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator.
1170 DIE *DwarfDebug::constructEnumTypeDIE(DIEnumerator ETy) {
1171   DIE *Enumerator = new DIE(dwarf::DW_TAG_enumerator);
1172   StringRef Name = ETy.getName();
1173   addString(Enumerator, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
1174   int64_t Value = ETy.getEnumValue();
1175   addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value);
1176   return Enumerator;
1177 }
1178
1179 /// getRealLinkageName - If special LLVM prefix that is used to inform the asm
1180 /// printer to not emit usual symbol prefix before the symbol name is used then
1181 /// return linkage name after skipping this special LLVM prefix.
1182 static StringRef getRealLinkageName(StringRef LinkageName) {
1183   char One = '\1';
1184   if (LinkageName.startswith(StringRef(&One, 1)))
1185     return LinkageName.substr(1);
1186   return LinkageName;
1187 }
1188
1189 /// createGlobalVariableDIE - Create new DIE using GV.
1190 DIE *DwarfDebug::createGlobalVariableDIE(const DIGlobalVariable &GV) {
1191   // If the global variable was optmized out then no need to create debug info
1192   // entry.
1193   if (!GV.Verify()) return NULL;
1194   if (GV.getDisplayName().empty()) return NULL;
1195
1196   DIE *GVDie = new DIE(dwarf::DW_TAG_variable);
1197   addString(GVDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
1198             GV.getDisplayName());
1199
1200   StringRef LinkageName = GV.getLinkageName();
1201   if (!LinkageName.empty())
1202     addString(GVDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string,
1203               getRealLinkageName(LinkageName));
1204
1205   addType(GVDie, GV.getType());
1206   if (!GV.isLocalToUnit())
1207     addUInt(GVDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
1208   addSourceLine(GVDie, GV);
1209
1210   return GVDie;
1211 }
1212
1213 /// createMemberDIE - Create new member DIE.
1214 DIE *DwarfDebug::createMemberDIE(const DIDerivedType &DT) {
1215   DIE *MemberDie = new DIE(DT.getTag());
1216   StringRef Name = DT.getName();
1217   if (!Name.empty())
1218     addString(MemberDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
1219
1220   addType(MemberDie, DT.getTypeDerivedFrom());
1221
1222   addSourceLine(MemberDie, DT);
1223
1224   DIEBlock *MemLocationDie = new (DIEValueAllocator) DIEBlock();
1225   addUInt(MemLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1226
1227   uint64_t Size = DT.getSizeInBits();
1228   uint64_t FieldSize = DT.getOriginalTypeSize();
1229
1230   if (Size != FieldSize) {
1231     // Handle bitfield.
1232     addUInt(MemberDie, dwarf::DW_AT_byte_size, 0, DT.getOriginalTypeSize()>>3);
1233     addUInt(MemberDie, dwarf::DW_AT_bit_size, 0, DT.getSizeInBits());
1234
1235     uint64_t Offset = DT.getOffsetInBits();
1236     uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1237     uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1238     uint64_t FieldOffset = (HiMark - FieldSize);
1239     Offset -= FieldOffset;
1240
1241     // Maybe we need to work from the other end.
1242     if (Asm->getTargetData().isLittleEndian())
1243       Offset = FieldSize - (Offset + Size);
1244     addUInt(MemberDie, dwarf::DW_AT_bit_offset, 0, Offset);
1245
1246     // Here WD_AT_data_member_location points to the anonymous
1247     // field that includes this bit field.
1248     addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, FieldOffset >> 3);
1249
1250   } else
1251     // This is not a bitfield.
1252     addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits() >> 3);
1253
1254   if (DT.getTag() == dwarf::DW_TAG_inheritance
1255       && DT.isVirtual()) {
1256
1257     // For C++, virtual base classes are not at fixed offset. Use following
1258     // expression to extract appropriate offset from vtable.
1259     // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1260
1261     DIEBlock *VBaseLocationDie = new (DIEValueAllocator) DIEBlock();
1262     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1263     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1264     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1265     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1266     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1267     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1268     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1269
1270     addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0,
1271              VBaseLocationDie);
1272   } else
1273     addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0, MemLocationDie);
1274
1275   if (DT.isProtected())
1276     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_flag,
1277             dwarf::DW_ACCESS_protected);
1278   else if (DT.isPrivate())
1279     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_flag,
1280             dwarf::DW_ACCESS_private);
1281   else if (DT.getTag() == dwarf::DW_TAG_inheritance)
1282     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_flag,
1283             dwarf::DW_ACCESS_public);
1284   if (DT.isVirtual())
1285     addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_flag,
1286             dwarf::DW_VIRTUALITY_virtual);
1287   return MemberDie;
1288 }
1289
1290 /// createSubprogramDIE - Create new DIE using SP.
1291 DIE *DwarfDebug::createSubprogramDIE(const DISubprogram &SP, bool MakeDecl) {
1292   CompileUnit *SPCU = getCompileUnit(SP);
1293   DIE *SPDie = SPCU->getDIE(SP);
1294   if (SPDie)
1295     return SPDie;
1296
1297   SPDie = new DIE(dwarf::DW_TAG_subprogram);
1298   // Constructors and operators for anonymous aggregates do not have names.
1299   if (!SP.getName().empty())
1300     addString(SPDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, SP.getName());
1301
1302   StringRef LinkageName = SP.getLinkageName();
1303   if (!LinkageName.empty())
1304     addString(SPDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string,
1305               getRealLinkageName(LinkageName));
1306
1307   addSourceLine(SPDie, SP);
1308
1309   // Add prototyped tag, if C or ObjC.
1310   unsigned Lang = SP.getCompileUnit().getLanguage();
1311   if (Lang == dwarf::DW_LANG_C99 || Lang == dwarf::DW_LANG_C89 ||
1312       Lang == dwarf::DW_LANG_ObjC)
1313     addUInt(SPDie, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1);
1314
1315   // Add Return Type.
1316   DICompositeType SPTy = SP.getType();
1317   DIArray Args = SPTy.getTypeArray();
1318   unsigned SPTag = SPTy.getTag();
1319
1320   if (Args.getNumElements() == 0 || SPTag != dwarf::DW_TAG_subroutine_type)
1321     addType(SPDie, SPTy);
1322   else
1323     addType(SPDie, DIType(Args.getElement(0)));
1324
1325   unsigned VK = SP.getVirtuality();
1326   if (VK) {
1327     addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_flag, VK);
1328     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1329     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1330     addUInt(Block, 0, dwarf::DW_FORM_data1, SP.getVirtualIndex());
1331     addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
1332     ContainingTypeMap.insert(std::make_pair(SPDie,
1333                                             SP.getContainingType()));
1334   }
1335
1336   if (MakeDecl || !SP.isDefinition()) {
1337     addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1338
1339     // Add arguments. Do not add arguments for subprogram definition. They will
1340     // be handled while processing variables.
1341     DICompositeType SPTy = SP.getType();
1342     DIArray Args = SPTy.getTypeArray();
1343     unsigned SPTag = SPTy.getTag();
1344
1345     if (SPTag == dwarf::DW_TAG_subroutine_type)
1346       for (unsigned i = 1, N =  Args.getNumElements(); i < N; ++i) {
1347         DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
1348         DIType ATy = DIType(DIType(Args.getElement(i)));
1349         addType(Arg, ATy);
1350         if (ATy.isArtificial())
1351           addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
1352         SPDie->addChild(Arg);
1353       }
1354   }
1355
1356   if (SP.isArtificial())
1357     addUInt(SPDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
1358
1359   if (!SP.isLocalToUnit())
1360     addUInt(SPDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
1361
1362   if (SP.isOptimized())
1363     addUInt(SPDie, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
1364
1365   if (unsigned isa = Asm->getISAEncoding()) {
1366     addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1367   }
1368
1369   // DW_TAG_inlined_subroutine may refer to this DIE.
1370   SPCU->insertDIE(SP, SPDie);
1371
1372   // Add to context owner.
1373   addToContextOwner(SPDie, SP.getContext());
1374
1375   return SPDie;
1376 }
1377
1378 DbgScope *DwarfDebug::getOrCreateAbstractScope(const MDNode *N) {
1379   assert(N && "Invalid Scope encoding!");
1380
1381   DbgScope *AScope = AbstractScopes.lookup(N);
1382   if (AScope)
1383     return AScope;
1384
1385   DbgScope *Parent = NULL;
1386
1387   DIDescriptor Scope(N);
1388   if (Scope.isLexicalBlock()) {
1389     DILexicalBlock DB(N);
1390     DIDescriptor ParentDesc = DB.getContext();
1391     Parent = getOrCreateAbstractScope(ParentDesc);
1392   }
1393
1394   AScope = new DbgScope(Parent, DIDescriptor(N), NULL);
1395
1396   if (Parent)
1397     Parent->addScope(AScope);
1398   AScope->setAbstractScope();
1399   AbstractScopes[N] = AScope;
1400   if (DIDescriptor(N).isSubprogram())
1401     AbstractScopesList.push_back(AScope);
1402   return AScope;
1403 }
1404
1405 /// isSubprogramContext - Return true if Context is either a subprogram
1406 /// or another context nested inside a subprogram.
1407 static bool isSubprogramContext(const MDNode *Context) {
1408   if (!Context)
1409     return false;
1410   DIDescriptor D(Context);
1411   if (D.isSubprogram())
1412     return true;
1413   if (D.isType())
1414     return isSubprogramContext(DIType(Context).getContext());
1415   return false;
1416 }
1417
1418 /// updateSubprogramScopeDIE - Find DIE for the given subprogram and
1419 /// attach appropriate DW_AT_low_pc and DW_AT_high_pc attributes.
1420 /// If there are global variables in this scope then create and insert
1421 /// DIEs for these variables.
1422 DIE *DwarfDebug::updateSubprogramScopeDIE(const MDNode *SPNode) {
1423   CompileUnit *SPCU = getCompileUnit(SPNode);
1424   DIE *SPDie = SPCU->getDIE(SPNode);
1425
1426   assert(SPDie && "Unable to find subprogram DIE!");
1427   DISubprogram SP(SPNode);
1428
1429   // There is not any need to generate specification DIE for a function
1430   // defined at compile unit level. If a function is defined inside another
1431   // function then gdb prefers the definition at top level and but does not
1432   // expect specification DIE in parent function. So avoid creating
1433   // specification DIE for a function defined inside a function.
1434   if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
1435       !SP.getContext().isFile() &&
1436       !isSubprogramContext(SP.getContext())) {
1437     addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1438
1439     // Add arguments.
1440     DICompositeType SPTy = SP.getType();
1441     DIArray Args = SPTy.getTypeArray();
1442     unsigned SPTag = SPTy.getTag();
1443     if (SPTag == dwarf::DW_TAG_subroutine_type)
1444       for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
1445         DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
1446         DIType ATy = DIType(DIType(Args.getElement(i)));
1447         addType(Arg, ATy);
1448         if (ATy.isArtificial())
1449           addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
1450         SPDie->addChild(Arg);
1451       }
1452     DIE *SPDeclDie = SPDie;
1453     SPDie = new DIE(dwarf::DW_TAG_subprogram);
1454     addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
1455                 SPDeclDie);
1456     SPCU->addDie(SPDie);
1457   }
1458
1459   // Pick up abstract subprogram DIE.
1460   if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
1461     SPDie = new DIE(dwarf::DW_TAG_subprogram);
1462     addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
1463                 dwarf::DW_FORM_ref4, AbsSPDIE);
1464     SPCU->addDie(SPDie);
1465   }
1466
1467   addLabel(SPDie, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
1468            Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber()));
1469   addLabel(SPDie, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
1470            Asm->GetTempSymbol("func_end", Asm->getFunctionNumber()));
1471   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
1472   MachineLocation Location(RI->getFrameRegister(*Asm->MF));
1473   addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
1474
1475   return SPDie;
1476 }
1477
1478 /// constructLexicalScope - Construct new DW_TAG_lexical_block
1479 /// for this scope and attach DW_AT_low_pc/DW_AT_high_pc labels.
1480 DIE *DwarfDebug::constructLexicalScopeDIE(DbgScope *Scope) {
1481
1482   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
1483   if (Scope->isAbstractScope())
1484     return ScopeDIE;
1485
1486   const SmallVector<DbgRange, 4> &Ranges = Scope->getRanges();
1487   if (Ranges.empty())
1488     return 0;
1489
1490   SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin();
1491   if (Ranges.size() > 1) {
1492     // .debug_range section has not been laid out yet. Emit offset in
1493     // .debug_range as a uint, size 4, for now. emitDIE will handle
1494     // DW_AT_ranges appropriately.
1495     addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
1496             DebugRangeSymbols.size() * Asm->getTargetData().getPointerSize());
1497     for (SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin(),
1498          RE = Ranges.end(); RI != RE; ++RI) {
1499       DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
1500       DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
1501     }
1502     DebugRangeSymbols.push_back(NULL);
1503     DebugRangeSymbols.push_back(NULL);
1504     return ScopeDIE;
1505   }
1506
1507   const MCSymbol *Start = getLabelBeforeInsn(RI->first);
1508   const MCSymbol *End = getLabelAfterInsn(RI->second);
1509
1510   if (End == 0) return 0;
1511
1512   assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
1513   assert(End->isDefined() && "Invalid end label for an inlined scope!");
1514
1515   addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, Start);
1516   addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, End);
1517
1518   return ScopeDIE;
1519 }
1520
1521 /// constructInlinedScopeDIE - This scope represents inlined body of
1522 /// a function. Construct DIE to represent this concrete inlined copy
1523 /// of the function.
1524 DIE *DwarfDebug::constructInlinedScopeDIE(DbgScope *Scope) {
1525
1526   const SmallVector<DbgRange, 4> &Ranges = Scope->getRanges();
1527   assert (Ranges.empty() == false
1528           && "DbgScope does not have instruction markers!");
1529
1530   // FIXME : .debug_inlined section specification does not clearly state how
1531   // to emit inlined scope that is split into multiple instruction ranges.
1532   // For now, use first instruction range and emit low_pc/high_pc pair and
1533   // corresponding .debug_inlined section entry for this pair.
1534   SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin();
1535   const MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
1536   const MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
1537
1538   if (StartLabel == 0 || EndLabel == 0) {
1539     assert (0 && "Unexpected Start and End  labels for a inlined scope!");
1540     return 0;
1541   }
1542   assert(StartLabel->isDefined() &&
1543          "Invalid starting label for an inlined scope!");
1544   assert(EndLabel->isDefined() &&
1545          "Invalid end label for an inlined scope!");
1546
1547   if (!Scope->getScopeNode())
1548     return NULL;
1549   DIScope DS(Scope->getScopeNode());
1550   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
1551
1552   DISubprogram InlinedSP = getDISubprogram(DS);
1553   CompileUnit *TheCU = getCompileUnit(InlinedSP);
1554   DIE *OriginDIE = TheCU->getDIE(InlinedSP);
1555   assert(OriginDIE && "Unable to find Origin DIE!");
1556   addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
1557               dwarf::DW_FORM_ref4, OriginDIE);
1558
1559   addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, StartLabel);
1560   addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, EndLabel);
1561
1562   InlinedSubprogramDIEs.insert(OriginDIE);
1563
1564   // Track the start label for this inlined function.
1565   DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
1566     I = InlineInfo.find(InlinedSP);
1567
1568   if (I == InlineInfo.end()) {
1569     InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel,
1570                                                              ScopeDIE));
1571     InlinedSPNodes.push_back(InlinedSP);
1572   } else
1573     I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
1574
1575   DILocation DL(Scope->getInlinedAt());
1576   addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0, TheCU->getID());
1577   addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
1578
1579   return ScopeDIE;
1580 }
1581
1582
1583 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
1584 DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
1585   StringRef Name = DV->getName();
1586   if (Name.empty())
1587     return NULL;
1588
1589   // Translate tag to proper Dwarf tag.  The result variable is dropped for
1590   // now.
1591   unsigned Tag;
1592   switch (DV->getTag()) {
1593   case dwarf::DW_TAG_return_variable:
1594     return NULL;
1595   case dwarf::DW_TAG_arg_variable:
1596     Tag = dwarf::DW_TAG_formal_parameter;
1597     break;
1598   case dwarf::DW_TAG_auto_variable:    // fall thru
1599   default:
1600     Tag = dwarf::DW_TAG_variable;
1601     break;
1602   }
1603
1604   // Define variable debug information entry.
1605   DIE *VariableDie = new DIE(Tag);
1606
1607   DIE *AbsDIE = NULL;
1608   DenseMap<const DbgVariable *, const DbgVariable *>::iterator
1609     V2AVI = VarToAbstractVarMap.find(DV);
1610   if (V2AVI != VarToAbstractVarMap.end())
1611     AbsDIE = V2AVI->second->getDIE();
1612
1613   if (AbsDIE)
1614     addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
1615                 dwarf::DW_FORM_ref4, AbsDIE);
1616   else {
1617     addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
1618     addSourceLine(VariableDie, DV->getVariable());
1619
1620     // Add variable type.
1621     addType(VariableDie, DV->getType());
1622   }
1623
1624   if (Tag == dwarf::DW_TAG_formal_parameter && DV->getType().isArtificial())
1625     addUInt(VariableDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
1626
1627   if (Scope->isAbstractScope()) {
1628     DV->setDIE(VariableDie);
1629     return VariableDie;
1630   }
1631
1632   // Add variable address.
1633
1634   unsigned Offset = DV->getDotDebugLocOffset();
1635   if (Offset != ~0U) {
1636     addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
1637              Asm->GetTempSymbol("debug_loc", Offset));
1638     DV->setDIE(VariableDie);
1639     UseDotDebugLocEntry.insert(VariableDie);
1640     return VariableDie;
1641   }
1642
1643   // Check if variable is described by a  DBG_VALUE instruction.
1644   DenseMap<const DbgVariable *, const MachineInstr *>::iterator DVI =
1645     DbgVariableToDbgInstMap.find(DV);
1646   if (DVI != DbgVariableToDbgInstMap.end()) {
1647     const MachineInstr *DVInsn = DVI->second;
1648     const MCSymbol *DVLabel = findVariableLabel(DV);
1649     bool updated = false;
1650     // FIXME : Handle getNumOperands != 3
1651     if (DVInsn->getNumOperands() == 3) {
1652       if (DVInsn->getOperand(0).isReg())
1653         updated =
1654           addRegisterAddress(VariableDie, DVLabel, DVInsn->getOperand(0));
1655       else if (DVInsn->getOperand(0).isImm())
1656         updated = addConstantValue(VariableDie, DVLabel, DVInsn->getOperand(0));
1657       else if (DVInsn->getOperand(0).isFPImm())
1658         updated =
1659           addConstantFPValue(VariableDie, DVLabel, DVInsn->getOperand(0));
1660     } else {
1661       MachineLocation Location = Asm->getDebugValueLocation(DVInsn);
1662       if (Location.getReg()) {
1663         addAddress(VariableDie, dwarf::DW_AT_location, Location);
1664         if (DVLabel)
1665           addLabel(VariableDie, dwarf::DW_AT_start_scope, dwarf::DW_FORM_addr,
1666                    DVLabel);
1667         updated = true;
1668       }
1669     }
1670     if (!updated) {
1671       // If variableDie is not updated then DBG_VALUE instruction does not
1672       // have valid variable info.
1673       delete VariableDie;
1674       return NULL;
1675     }
1676     DV->setDIE(VariableDie);
1677     return VariableDie;
1678   }
1679
1680   // .. else use frame index, if available.
1681   MachineLocation Location;
1682   unsigned FrameReg;
1683   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
1684   int FI = 0;
1685   if (findVariableFrameIndex(DV, &FI)) {
1686     int Offset = RI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
1687     Location.set(FrameReg, Offset);
1688     addVariableAddress(DV, VariableDie, dwarf::DW_AT_location, Location);
1689   }
1690   DV->setDIE(VariableDie);
1691   return VariableDie;
1692
1693 }
1694
1695 void DwarfDebug::addPubTypes(DISubprogram SP) {
1696   DICompositeType SPTy = SP.getType();
1697   unsigned SPTag = SPTy.getTag();
1698   if (SPTag != dwarf::DW_TAG_subroutine_type)
1699     return;
1700
1701   DIArray Args = SPTy.getTypeArray();
1702   for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
1703     DIType ATy(Args.getElement(i));
1704     if (!ATy.Verify())
1705       continue;
1706     DICompositeType CATy = getDICompositeType(ATy);
1707     if (DIDescriptor(CATy).Verify() && !CATy.getName().empty()
1708         && !CATy.isForwardDecl()) {
1709       CompileUnit *TheCU = getCompileUnit(CATy);
1710       if (DIEEntry *Entry = TheCU->getDIEEntry(CATy))
1711         TheCU->addGlobalType(CATy.getName(), Entry->getEntry());
1712     }
1713   }
1714 }
1715
1716 /// constructScopeDIE - Construct a DIE for this scope.
1717 DIE *DwarfDebug::constructScopeDIE(DbgScope *Scope) {
1718   if (!Scope || !Scope->getScopeNode())
1719     return NULL;
1720
1721   DIScope DS(Scope->getScopeNode());
1722   DIE *ScopeDIE = NULL;
1723   if (Scope->getInlinedAt())
1724     ScopeDIE = constructInlinedScopeDIE(Scope);
1725   else if (DS.isSubprogram()) {
1726     ProcessedSPNodes.insert(DS);
1727     if (Scope->isAbstractScope()) {
1728       ScopeDIE = getCompileUnit(DS)->getDIE(DS);
1729       // Note down abstract DIE.
1730       if (ScopeDIE)
1731         AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
1732     }
1733     else
1734       ScopeDIE = updateSubprogramScopeDIE(DS);
1735   }
1736   else
1737     ScopeDIE = constructLexicalScopeDIE(Scope);
1738   if (!ScopeDIE) return NULL;
1739
1740   // Add variables to scope.
1741   const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
1742   for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
1743     DIE *VariableDIE = constructVariableDIE(Variables[i], Scope);
1744     if (VariableDIE)
1745       ScopeDIE->addChild(VariableDIE);
1746   }
1747
1748   // Add nested scopes.
1749   const SmallVector<DbgScope *, 4> &Scopes = Scope->getScopes();
1750   for (unsigned j = 0, M = Scopes.size(); j < M; ++j) {
1751     // Define the Scope debug information entry.
1752     DIE *NestedDIE = constructScopeDIE(Scopes[j]);
1753     if (NestedDIE)
1754       ScopeDIE->addChild(NestedDIE);
1755   }
1756
1757   if (DS.isSubprogram())
1758     addPubTypes(DISubprogram(DS));
1759
1760  return ScopeDIE;
1761 }
1762
1763 /// GetOrCreateSourceID - Look up the source id with the given directory and
1764 /// source file names. If none currently exists, create a new id and insert it
1765 /// in the SourceIds map. This can update DirectoryNames and SourceFileNames
1766 /// maps as well.
1767 unsigned DwarfDebug::GetOrCreateSourceID(StringRef DirName, StringRef FileName){
1768   unsigned DId;
1769   assert (DirName.empty() == false && "Invalid directory name!");
1770
1771   StringMap<unsigned>::iterator DI = DirectoryIdMap.find(DirName);
1772   if (DI != DirectoryIdMap.end()) {
1773     DId = DI->getValue();
1774   } else {
1775     DId = DirectoryNames.size() + 1;
1776     DirectoryIdMap[DirName] = DId;
1777     DirectoryNames.push_back(DirName);
1778   }
1779
1780   unsigned FId;
1781   StringMap<unsigned>::iterator FI = SourceFileIdMap.find(FileName);
1782   if (FI != SourceFileIdMap.end()) {
1783     FId = FI->getValue();
1784   } else {
1785     FId = SourceFileNames.size() + 1;
1786     SourceFileIdMap[FileName] = FId;
1787     SourceFileNames.push_back(FileName);
1788   }
1789
1790   DenseMap<std::pair<unsigned, unsigned>, unsigned>::iterator SI =
1791     SourceIdMap.find(std::make_pair(DId, FId));
1792   if (SI != SourceIdMap.end())
1793     return SI->second;
1794
1795   unsigned SrcId = SourceIds.size() + 1;  // DW_AT_decl_file cannot be 0.
1796   SourceIdMap[std::make_pair(DId, FId)] = SrcId;
1797   SourceIds.push_back(std::make_pair(DId, FId));
1798
1799   return SrcId;
1800 }
1801
1802 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1803 DIE *DwarfDebug::getOrCreateNameSpace(DINameSpace NS) {
1804   CompileUnit *TheCU = getCompileUnit(NS);
1805   DIE *NDie = TheCU->getDIE(NS);
1806   if (NDie)
1807     return NDie;
1808   NDie = new DIE(dwarf::DW_TAG_namespace);
1809   TheCU->insertDIE(NS, NDie);
1810   if (!NS.getName().empty())
1811     addString(NDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, NS.getName());
1812   addSourceLine(NDie, NS);
1813   addToContextOwner(NDie, NS.getContext());
1814   return NDie;
1815 }
1816
1817 /// constructCompileUnit - Create new CompileUnit for the given
1818 /// metadata node with tag DW_TAG_compile_unit.
1819 void DwarfDebug::constructCompileUnit(const MDNode *N) {
1820   DICompileUnit DIUnit(N);
1821   StringRef FN = DIUnit.getFilename();
1822   StringRef Dir = DIUnit.getDirectory();
1823   unsigned ID = GetOrCreateSourceID(Dir, FN);
1824
1825   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
1826   addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
1827             DIUnit.getProducer());
1828   addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data1,
1829           DIUnit.getLanguage());
1830   addString(Die, dwarf::DW_AT_name, dwarf::DW_FORM_string, FN);
1831   // Use DW_AT_entry_pc instead of DW_AT_low_pc/DW_AT_high_pc pair. This
1832   // simplifies debug range entries.
1833   addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
1834   // DW_AT_stmt_list is a offset of line number information for this
1835   // compile unit in debug_line section. This offset is calculated
1836   // during endMoudle().
1837   addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
1838
1839   if (!Dir.empty())
1840     addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
1841   if (DIUnit.isOptimized())
1842     addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
1843
1844   StringRef Flags = DIUnit.getFlags();
1845   if (!Flags.empty())
1846     addString(Die, dwarf::DW_AT_APPLE_flags, dwarf::DW_FORM_string, Flags);
1847
1848   unsigned RVer = DIUnit.getRunTimeVersion();
1849   if (RVer)
1850     addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
1851             dwarf::DW_FORM_data1, RVer);
1852
1853   CompileUnit *NewCU = new CompileUnit(ID, Die);
1854   if (!FirstCU)
1855     FirstCU = NewCU;
1856   CUMap.insert(std::make_pair(N, NewCU));
1857 }
1858
1859 /// getCompielUnit - Get CompileUnit DIE.
1860 CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
1861   assert (N && "Invalid DwarfDebug::getCompileUnit argument!");
1862   DIDescriptor D(N);
1863   const MDNode *CUNode = NULL;
1864   if (D.isCompileUnit())
1865     CUNode = N;
1866   else if (D.isSubprogram())
1867     CUNode = DISubprogram(N).getCompileUnit();
1868   else if (D.isType())
1869     CUNode = DIType(N).getCompileUnit();
1870   else if (D.isGlobalVariable())
1871     CUNode = DIGlobalVariable(N).getCompileUnit();
1872   else if (D.isVariable())
1873     CUNode = DIVariable(N).getCompileUnit();
1874   else if (D.isNameSpace())
1875     CUNode = DINameSpace(N).getCompileUnit();
1876   else if (D.isFile())
1877     CUNode = DIFile(N).getCompileUnit();
1878   else
1879     return FirstCU;
1880
1881   DenseMap<const MDNode *, CompileUnit *>::const_iterator I
1882     = CUMap.find(CUNode);
1883   if (I == CUMap.end())
1884     return FirstCU;
1885   return I->second;
1886 }
1887
1888
1889 /// constructGlobalVariableDIE - Construct global variable DIE.
1890 void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
1891   DIGlobalVariable DI_GV(N);
1892
1893   // If debug information is malformed then ignore it.
1894   if (DI_GV.Verify() == false)
1895     return;
1896
1897   // Check for pre-existence.
1898   CompileUnit *TheCU = getCompileUnit(N);
1899   if (TheCU->getDIE(DI_GV))
1900     return;
1901
1902   DIE *VariableDie = createGlobalVariableDIE(DI_GV);
1903   if (!VariableDie)
1904     return;
1905
1906   // Add to map.
1907   TheCU->insertDIE(N, VariableDie);
1908
1909   // Add to context owner.
1910   DIDescriptor GVContext = DI_GV.getContext();
1911   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1912   addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1913   addLabel(Block, 0, dwarf::DW_FORM_udata,
1914            Asm->Mang->getSymbol(DI_GV.getGlobal()));
1915   // Do not create specification DIE if context is either compile unit
1916   // or a subprogram.
1917   if (DI_GV.isDefinition() && !GVContext.isCompileUnit() &&
1918       !GVContext.isFile() &&
1919       !isSubprogramContext(GVContext)) {
1920     // Create specification DIE.
1921     DIE *VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1922     addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1923                 dwarf::DW_FORM_ref4, VariableDie);
1924     addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1925     addUInt(VariableDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1926     TheCU->addDie(VariableSpecDIE);
1927   } else {
1928     addBlock(VariableDie, dwarf::DW_AT_location, 0, Block);
1929   }
1930   addToContextOwner(VariableDie, GVContext);
1931
1932   // Expose as global. FIXME - need to check external flag.
1933   TheCU->addGlobal(DI_GV.getName(), VariableDie);
1934
1935   DIType GTy = DI_GV.getType();
1936   if (GTy.isCompositeType() && !GTy.getName().empty()
1937       && !GTy.isForwardDecl()) {
1938     DIEEntry *Entry = TheCU->getDIEEntry(GTy);
1939     assert(Entry && "Missing global type!");
1940     TheCU->addGlobalType(GTy.getName(), Entry->getEntry());
1941   }
1942   return;
1943 }
1944
1945 /// construct SubprogramDIE - Construct subprogram DIE.
1946 void DwarfDebug::constructSubprogramDIE(const MDNode *N) {
1947   DISubprogram SP(N);
1948
1949   // Check for pre-existence.
1950   CompileUnit *TheCU = getCompileUnit(N);
1951   if (TheCU->getDIE(N))
1952     return;
1953
1954   if (!SP.isDefinition())
1955     // This is a method declaration which will be handled while constructing
1956     // class type.
1957     return;
1958
1959   DIE *SubprogramDie = createSubprogramDIE(SP);
1960
1961   // Add to map.
1962   TheCU->insertDIE(N, SubprogramDie);
1963
1964   // Add to context owner.
1965   addToContextOwner(SubprogramDie, SP.getContext());
1966
1967   // Expose as global.
1968   TheCU->addGlobal(SP.getName(), SubprogramDie);
1969
1970   return;
1971 }
1972
1973 /// beginModule - Emit all Dwarf sections that should come prior to the
1974 /// content. Create global DIEs and emit initial debug info sections.
1975 /// This is inovked by the target AsmPrinter.
1976 void DwarfDebug::beginModule(Module *M) {
1977   if (DisableDebugInfoPrinting)
1978     return;
1979
1980   DebugInfoFinder DbgFinder;
1981   DbgFinder.processModule(*M);
1982
1983   bool HasDebugInfo = false;
1984
1985   // Scan all the compile-units to see if there are any marked as the main unit.
1986   // if not, we do not generate debug info.
1987   for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1988        E = DbgFinder.compile_unit_end(); I != E; ++I) {
1989     if (DICompileUnit(*I).isMain()) {
1990       HasDebugInfo = true;
1991       break;
1992     }
1993   }
1994
1995   if (!HasDebugInfo) return;
1996
1997   // Tell MMI that we have debug info.
1998   MMI->setDebugInfoAvailability(true);
1999
2000   // Emit initial sections.
2001   EmitSectionLabels();
2002
2003   // Create all the compile unit DIEs.
2004   for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
2005          E = DbgFinder.compile_unit_end(); I != E; ++I)
2006     constructCompileUnit(*I);
2007
2008   // Create DIEs for each subprogram.
2009   for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
2010          E = DbgFinder.subprogram_end(); I != E; ++I)
2011     constructSubprogramDIE(*I);
2012
2013   // Create DIEs for each global variable.
2014   for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
2015          E = DbgFinder.global_variable_end(); I != E; ++I)
2016     constructGlobalVariableDIE(*I);
2017
2018   // Prime section data.
2019   SectionMap.insert(Asm->getObjFileLowering().getTextSection());
2020
2021   // Print out .file directives to specify files for .loc directives. These are
2022   // printed out early so that they precede any .loc directives.
2023   if (Asm->MAI->hasDotLocAndDotFile()) {
2024     for (unsigned i = 1, e = getNumSourceIds()+1; i != e; ++i) {
2025       // Remember source id starts at 1.
2026       std::pair<unsigned, unsigned> Id = getSourceDirectoryAndFileIds(i);
2027       // FIXME: don't use sys::path for this!  This should not depend on the
2028       // host.
2029       sys::Path FullPath(getSourceDirectoryName(Id.first));
2030       bool AppendOk =
2031         FullPath.appendComponent(getSourceFileName(Id.second));
2032       assert(AppendOk && "Could not append filename to directory!");
2033       AppendOk = false;
2034       Asm->OutStreamer.EmitDwarfFileDirective(i, FullPath.str());
2035     }
2036   }
2037 }
2038
2039 /// endModule - Emit all Dwarf sections that should come after the content.
2040 ///
2041 void DwarfDebug::endModule() {
2042   if (!FirstCU) return;
2043   const Module *M = MMI->getModule();
2044   DenseMap<const MDNode *, DbgScope *> DeadFnScopeMap;
2045   if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
2046     for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
2047       if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
2048       DISubprogram SP(AllSPs->getOperand(SI));
2049       if (!SP.Verify()) continue;
2050
2051       // Collect info for variables that were optimized out.
2052       if (!SP.isDefinition()) continue;
2053       StringRef FName = SP.getLinkageName();
2054       if (FName.empty())
2055         FName = SP.getName();
2056       NamedMDNode *NMD =
2057         M->getNamedMetadata(Twine("llvm.dbg.lv.", getRealLinkageName(FName)));
2058       if (!NMD) continue;
2059       unsigned E = NMD->getNumOperands();
2060       if (!E) continue;
2061       DbgScope *Scope = new DbgScope(NULL, DIDescriptor(SP), NULL);
2062       DeadFnScopeMap[SP] = Scope;
2063       for (unsigned I = 0; I != E; ++I) {
2064         DIVariable DV(NMD->getOperand(I));
2065         if (!DV.Verify()) continue;
2066         Scope->addVariable(new DbgVariable(DV));
2067       }
2068
2069       // Construct subprogram DIE and add variables DIEs.
2070       constructSubprogramDIE(SP);
2071       DIE *ScopeDIE = getCompileUnit(SP)->getDIE(SP);
2072       const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
2073       for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
2074         DIE *VariableDIE = constructVariableDIE(Variables[i], Scope);
2075         if (VariableDIE)
2076           ScopeDIE->addChild(VariableDIE);
2077       }
2078     }
2079   }
2080
2081   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
2082   for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
2083          AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
2084     DIE *ISP = *AI;
2085     addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
2086   }
2087
2088   for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
2089          CE = ContainingTypeMap.end(); CI != CE; ++CI) {
2090     DIE *SPDie = CI->first;
2091     const MDNode *N = dyn_cast_or_null<MDNode>(CI->second);
2092     if (!N) continue;
2093     DIE *NDie = getCompileUnit(N)->getDIE(N);
2094     if (!NDie) continue;
2095     addDIEEntry(SPDie, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, NDie);
2096   }
2097
2098   // Standard sections final addresses.
2099   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
2100   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
2101   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
2102   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
2103
2104   // End text sections.
2105   for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
2106     Asm->OutStreamer.SwitchSection(SectionMap[i]);
2107     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
2108   }
2109
2110   // Emit common frame information.
2111   emitCommonDebugFrame();
2112
2113   // Emit function debug frame information
2114   for (std::vector<FunctionDebugFrameInfo>::iterator I = DebugFrames.begin(),
2115          E = DebugFrames.end(); I != E; ++I)
2116     emitFunctionDebugFrame(*I);
2117
2118   // Compute DIE offsets and sizes.
2119   computeSizeAndOffsets();
2120
2121   // Emit source line correspondence into a debug line section.
2122   emitDebugLines();
2123
2124   // Emit all the DIEs into a debug info section
2125   emitDebugInfo();
2126
2127   // Corresponding abbreviations into a abbrev section.
2128   emitAbbreviations();
2129
2130   // Emit info into a debug pubnames section.
2131   emitDebugPubNames();
2132
2133   // Emit info into a debug pubtypes section.
2134   emitDebugPubTypes();
2135
2136   // Emit info into a debug loc section.
2137   emitDebugLoc();
2138
2139   // Emit info into a debug aranges section.
2140   EmitDebugARanges();
2141
2142   // Emit info into a debug ranges section.
2143   emitDebugRanges();
2144
2145   // Emit info into a debug macinfo section.
2146   emitDebugMacInfo();
2147
2148   // Emit inline info.
2149   emitDebugInlineInfo();
2150
2151   // Emit info into a debug str section.
2152   emitDebugStr();
2153
2154   // clean up.
2155   DeleteContainerSeconds(DeadFnScopeMap);
2156   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2157          E = CUMap.end(); I != E; ++I)
2158     delete I->second;
2159   FirstCU = NULL;  // Reset for the next Module, if any.
2160 }
2161
2162 /// findAbstractVariable - Find abstract variable, if any, associated with Var.
2163 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &Var,
2164                                               DebugLoc ScopeLoc) {
2165
2166   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
2167   if (AbsDbgVariable)
2168     return AbsDbgVariable;
2169
2170   LLVMContext &Ctx = Var->getContext();
2171   DbgScope *Scope = AbstractScopes.lookup(ScopeLoc.getScope(Ctx));
2172   if (!Scope)
2173     return NULL;
2174
2175   AbsDbgVariable = new DbgVariable(Var);
2176   Scope->addVariable(AbsDbgVariable);
2177   AbstractVariables[Var] = AbsDbgVariable;
2178   return AbsDbgVariable;
2179 }
2180
2181 /// collectVariableInfoFromMMITable - Collect variable information from
2182 /// side table maintained by MMI.
2183 void
2184 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction * MF,
2185                                    SmallPtrSet<const MDNode *, 16> &Processed) {
2186   const LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
2187   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
2188   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
2189          VE = VMap.end(); VI != VE; ++VI) {
2190     const MDNode *Var = VI->first;
2191     if (!Var) continue;
2192     Processed.insert(Var);
2193     DIVariable DV(Var);
2194     const std::pair<unsigned, DebugLoc> &VP = VI->second;
2195
2196     DbgScope *Scope = 0;
2197     if (const MDNode *IA = VP.second.getInlinedAt(Ctx))
2198       Scope = ConcreteScopes.lookup(IA);
2199     if (Scope == 0)
2200       Scope = DbgScopeMap.lookup(VP.second.getScope(Ctx));
2201
2202     // If variable scope is not found then skip this variable.
2203     if (Scope == 0)
2204       continue;
2205
2206     DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
2207     DbgVariable *RegVar = new DbgVariable(DV);
2208     recordVariableFrameIndex(RegVar, VP.first);
2209     Scope->addVariable(RegVar);
2210     if (AbsDbgVariable) {
2211       recordVariableFrameIndex(AbsDbgVariable, VP.first);
2212       VarToAbstractVarMap[RegVar] = AbsDbgVariable;
2213     }
2214   }
2215 }
2216
2217 /// isDbgValueInUndefinedReg - Return true if debug value, encoded by
2218 /// DBG_VALUE instruction, is in undefined reg.
2219 static bool isDbgValueInUndefinedReg(const MachineInstr *MI) {
2220   assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
2221   if (MI->getOperand(0).isReg() && !MI->getOperand(0).getReg())
2222     return true;
2223   return false;
2224 }
2225
2226 /// isDbgValueInDefinedReg - Return true if debug value, encoded by
2227 /// DBG_VALUE instruction, is in a defined reg.
2228 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
2229   assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
2230   if (MI->getOperand(0).isReg() && MI->getOperand(0).getReg())
2231     return true;
2232   return false;
2233 }
2234
2235 /// collectVariableInfo - Populate DbgScope entries with variables' info.
2236 void
2237 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
2238                                 SmallPtrSet<const MDNode *, 16> &Processed) {
2239
2240   /// collection info from MMI table.
2241   collectVariableInfoFromMMITable(MF, Processed);
2242
2243   SmallVector<const MachineInstr *, 8> DbgValues;
2244   // Collect variable information from DBG_VALUE machine instructions;
2245   for (MachineFunction::const_iterator I = Asm->MF->begin(), E = Asm->MF->end();
2246        I != E; ++I)
2247     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2248          II != IE; ++II) {
2249       const MachineInstr *MInsn = II;
2250       if (!MInsn->isDebugValue() || isDbgValueInUndefinedReg(MInsn))
2251         continue;
2252       DbgValues.push_back(MInsn);
2253     }
2254
2255   // This is a collection of DBV_VALUE instructions describing same variable.
2256   SmallVector<const MachineInstr *, 4> MultipleValues;
2257   for(SmallVector<const MachineInstr *, 8>::iterator I = DbgValues.begin(),
2258         E = DbgValues.end(); I != E; ++I) {
2259     const MachineInstr *MInsn = *I;
2260     MultipleValues.clear();
2261     if (isDbgValueInDefinedReg(MInsn))
2262       MultipleValues.push_back(MInsn);
2263     DIVariable DV(MInsn->getOperand(MInsn->getNumOperands() - 1).getMetadata());
2264     if (Processed.count(DV) != 0)
2265       continue;
2266
2267     const MachineInstr *PrevMI = MInsn;
2268     for (SmallVector<const MachineInstr *, 8>::iterator MI = I+1,
2269            ME = DbgValues.end(); MI != ME; ++MI) {
2270       const MDNode *Var =
2271         (*MI)->getOperand((*MI)->getNumOperands()-1).getMetadata();
2272       if (Var == DV && isDbgValueInDefinedReg(*MI) &&
2273           !PrevMI->isIdenticalTo(*MI))
2274         MultipleValues.push_back(*MI);
2275       PrevMI = *MI;
2276     }
2277
2278     DbgScope *Scope = findDbgScope(MInsn);
2279     bool CurFnArg = false;
2280     if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
2281         DISubprogram(DV.getContext()).describes(MF->getFunction()))
2282       CurFnArg = true;
2283     if (!Scope && CurFnArg)
2284       Scope = CurrentFnDbgScope;
2285     // If variable scope is not found then skip this variable.
2286     if (!Scope)
2287       continue;
2288
2289     Processed.insert(DV);
2290     DbgVariable *RegVar = new DbgVariable(DV);
2291     Scope->addVariable(RegVar);
2292     if (!CurFnArg)
2293       DbgVariableLabelsMap[RegVar] = getLabelBeforeInsn(MInsn);
2294     if (DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc())) {
2295       DbgVariableToDbgInstMap[AbsVar] = MInsn;
2296       VarToAbstractVarMap[RegVar] = AbsVar;
2297     }
2298     if (MultipleValues.size() <= 1) {
2299       DbgVariableToDbgInstMap[RegVar] = MInsn;
2300       continue;
2301     }
2302
2303     // handle multiple DBG_VALUE instructions describing one variable.
2304     if (DotDebugLocEntries.empty())
2305       RegVar->setDotDebugLocOffset(0);
2306     else
2307       RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
2308     const MachineInstr *Begin = NULL;
2309     const MachineInstr *End = NULL;
2310     for (SmallVector<const MachineInstr *, 4>::iterator
2311            MVI = MultipleValues.begin(), MVE = MultipleValues.end();
2312          MVI != MVE; ++MVI) {
2313       if (!Begin) {
2314         Begin = *MVI;
2315         continue;
2316       }
2317       End = *MVI;
2318       MachineLocation MLoc;
2319       if (Begin->getNumOperands() == 3) {
2320         if (Begin->getOperand(0).isReg() && Begin->getOperand(1).isImm())
2321           MLoc.set(Begin->getOperand(0).getReg(), Begin->getOperand(1).getImm());
2322       } else
2323         MLoc = Asm->getDebugValueLocation(Begin);
2324
2325       const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
2326       const MCSymbol *SLabel = getLabelBeforeInsn(End);
2327       if (MLoc.getReg())
2328         DotDebugLocEntries.push_back(DotDebugLocEntry(FLabel, SLabel, MLoc));
2329
2330       Begin = End;
2331       if (MVI + 1 == MVE) {
2332         // If End is the last instruction then its value is valid
2333         // until the end of the funtion.
2334         MachineLocation EMLoc;
2335         if (End->getNumOperands() == 3) {
2336           if (End->getOperand(0).isReg() && Begin->getOperand(1).isImm())
2337           EMLoc.set(Begin->getOperand(0).getReg(), Begin->getOperand(1).getImm());
2338         } else
2339           EMLoc = Asm->getDebugValueLocation(End);
2340         if (EMLoc.getReg()) 
2341           DotDebugLocEntries.
2342             push_back(DotDebugLocEntry(SLabel, FunctionEndSym, EMLoc));
2343       }
2344     }
2345     DotDebugLocEntries.push_back(DotDebugLocEntry());
2346   }
2347
2348   // Collect info for variables that were optimized out.
2349   const Function *F = MF->getFunction();
2350   const Module *M = F->getParent();
2351   if (NamedMDNode *NMD =
2352       M->getNamedMetadata(Twine("llvm.dbg.lv.",
2353                                 getRealLinkageName(F->getName())))) {
2354     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
2355       DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
2356       if (!DV || !Processed.insert(DV))
2357         continue;
2358       DbgScope *Scope = DbgScopeMap.lookup(DV.getContext());
2359       if (Scope)
2360         Scope->addVariable(new DbgVariable(DV));
2361     }
2362   }
2363 }
2364
2365 /// getLabelBeforeInsn - Return Label preceding the instruction.
2366 const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
2367   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
2368     LabelsBeforeInsn.find(MI);
2369   if (I == LabelsBeforeInsn.end())
2370     // FunctionBeginSym always preceeds all the instruction in current function.
2371     return FunctionBeginSym;
2372   return I->second;
2373 }
2374
2375 /// getLabelAfterInsn - Return Label immediately following the instruction.
2376 const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
2377   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
2378     LabelsAfterInsn.find(MI);
2379   if (I == LabelsAfterInsn.end())
2380     return NULL;
2381   return I->second;
2382 }
2383
2384 /// beginScope - Process beginning of a scope.
2385 void DwarfDebug::beginScope(const MachineInstr *MI) {
2386   if (InsnNeedsLabel.count(MI) == 0) {
2387     LabelsBeforeInsn[MI] = PrevLabel;
2388     return;
2389   }
2390
2391   // Check location.
2392   DebugLoc DL = MI->getDebugLoc();
2393   if (!DL.isUnknown()) {
2394     const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
2395     PrevLabel = recordSourceLine(DL.getLine(), DL.getCol(), Scope);
2396     PrevInstLoc = DL;
2397     LabelsBeforeInsn[MI] = PrevLabel;
2398     return;
2399   }
2400
2401   // If location is unknown then use temp label for this DBG_VALUE
2402   // instruction.
2403   if (MI->isDebugValue()) {
2404     PrevLabel = MMI->getContext().CreateTempSymbol();
2405     Asm->OutStreamer.EmitLabel(PrevLabel);
2406     LabelsBeforeInsn[MI] = PrevLabel;
2407     return;
2408   }
2409
2410   if (UnknownLocations) {
2411     PrevLabel = recordSourceLine(0, 0, 0);
2412     LabelsBeforeInsn[MI] = PrevLabel;
2413     return;
2414   }
2415
2416   assert (0 && "Instruction is not processed!");
2417 }
2418
2419 /// endScope - Process end of a scope.
2420 void DwarfDebug::endScope(const MachineInstr *MI) {
2421   if (InsnsEndScopeSet.count(MI) != 0) {
2422     // Emit a label if this instruction ends a scope.
2423     MCSymbol *Label = MMI->getContext().CreateTempSymbol();
2424     Asm->OutStreamer.EmitLabel(Label);
2425     LabelsAfterInsn[MI] = Label;
2426   }
2427 }
2428
2429 /// getOrCreateDbgScope - Create DbgScope for the scope.
2430 DbgScope *DwarfDebug::getOrCreateDbgScope(const MDNode *Scope,
2431                                           const MDNode *InlinedAt) {
2432   if (!InlinedAt) {
2433     DbgScope *WScope = DbgScopeMap.lookup(Scope);
2434     if (WScope)
2435       return WScope;
2436     WScope = new DbgScope(NULL, DIDescriptor(Scope), NULL);
2437     DbgScopeMap.insert(std::make_pair(Scope, WScope));
2438     if (DIDescriptor(Scope).isLexicalBlock()) {
2439       DbgScope *Parent =
2440         getOrCreateDbgScope(DILexicalBlock(Scope).getContext(), NULL);
2441       WScope->setParent(Parent);
2442       Parent->addScope(WScope);
2443     }
2444
2445     if (!WScope->getParent()) {
2446       StringRef SPName = DISubprogram(Scope).getLinkageName();
2447       // We used to check only for a linkage name, but that fails
2448       // since we began omitting the linkage name for private
2449       // functions.  The new way is to check for the name in metadata,
2450       // but that's not supported in old .ll test cases.  Ergo, we
2451       // check both.
2452       if (SPName == Asm->MF->getFunction()->getName() ||
2453           DISubprogram(Scope).getFunction() == Asm->MF->getFunction())
2454         CurrentFnDbgScope = WScope;
2455     }
2456
2457     return WScope;
2458   }
2459
2460   getOrCreateAbstractScope(Scope);
2461   DbgScope *WScope = DbgScopeMap.lookup(InlinedAt);
2462   if (WScope)
2463     return WScope;
2464
2465   WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt);
2466   DbgScopeMap.insert(std::make_pair(InlinedAt, WScope));
2467   DILocation DL(InlinedAt);
2468   DbgScope *Parent =
2469     getOrCreateDbgScope(DL.getScope(), DL.getOrigLocation());
2470   WScope->setParent(Parent);
2471   Parent->addScope(WScope);
2472
2473   ConcreteScopes[InlinedAt] = WScope;
2474
2475   return WScope;
2476 }
2477
2478 /// hasValidLocation - Return true if debug location entry attached with
2479 /// machine instruction encodes valid location info.
2480 static bool hasValidLocation(LLVMContext &Ctx,
2481                              const MachineInstr *MInsn,
2482                              const MDNode *&Scope, const MDNode *&InlinedAt) {
2483   DebugLoc DL = MInsn->getDebugLoc();
2484   if (DL.isUnknown()) return false;
2485
2486   const MDNode *S = DL.getScope(Ctx);
2487
2488   // There is no need to create another DIE for compile unit. For all
2489   // other scopes, create one DbgScope now. This will be translated
2490   // into a scope DIE at the end.
2491   if (DIScope(S).isCompileUnit()) return false;
2492
2493   Scope = S;
2494   InlinedAt = DL.getInlinedAt(Ctx);
2495   return true;
2496 }
2497
2498 /// calculateDominanceGraph - Calculate dominance graph for DbgScope
2499 /// hierarchy.
2500 static void calculateDominanceGraph(DbgScope *Scope) {
2501   assert (Scope && "Unable to calculate scop edominance graph!");
2502   SmallVector<DbgScope *, 4> WorkStack;
2503   WorkStack.push_back(Scope);
2504   unsigned Counter = 0;
2505   while (!WorkStack.empty()) {
2506     DbgScope *WS = WorkStack.back();
2507     const SmallVector<DbgScope *, 4> &Children = WS->getScopes();
2508     bool visitedChildren = false;
2509     for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
2510            SE = Children.end(); SI != SE; ++SI) {
2511       DbgScope *ChildScope = *SI;
2512       if (!ChildScope->getDFSOut()) {
2513         WorkStack.push_back(ChildScope);
2514         visitedChildren = true;
2515         ChildScope->setDFSIn(++Counter);
2516         break;
2517       }
2518     }
2519     if (!visitedChildren) {
2520       WorkStack.pop_back();
2521       WS->setDFSOut(++Counter);
2522     }
2523   }
2524 }
2525
2526 /// printDbgScopeInfo - Print DbgScope info for each machine instruction.
2527 static
2528 void printDbgScopeInfo(LLVMContext &Ctx, const MachineFunction *MF,
2529                        DenseMap<const MachineInstr *, DbgScope *> &MI2ScopeMap)
2530 {
2531 #ifndef NDEBUG
2532   unsigned PrevDFSIn = 0;
2533   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
2534        I != E; ++I) {
2535     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2536          II != IE; ++II) {
2537       const MachineInstr *MInsn = II;
2538       const MDNode *Scope = NULL;
2539       const MDNode *InlinedAt = NULL;
2540
2541       // Check if instruction has valid location information.
2542       if (hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
2543         dbgs() << " [ ";
2544         if (InlinedAt)
2545           dbgs() << "*";
2546         DenseMap<const MachineInstr *, DbgScope *>::iterator DI =
2547           MI2ScopeMap.find(MInsn);
2548         if (DI != MI2ScopeMap.end()) {
2549           DbgScope *S = DI->second;
2550           dbgs() << S->getDFSIn();
2551           PrevDFSIn = S->getDFSIn();
2552         } else
2553           dbgs() << PrevDFSIn;
2554       } else
2555         dbgs() << " [ x" << PrevDFSIn;
2556       dbgs() << " ]";
2557       MInsn->dump();
2558     }
2559     dbgs() << "\n";
2560   }
2561 #endif
2562 }
2563 /// extractScopeInformation - Scan machine instructions in this function
2564 /// and collect DbgScopes. Return true, if at least one scope was found.
2565 bool DwarfDebug::extractScopeInformation() {
2566   // If scope information was extracted using .dbg intrinsics then there is not
2567   // any need to extract these information by scanning each instruction.
2568   if (!DbgScopeMap.empty())
2569     return false;
2570
2571   // Scan each instruction and create scopes. First build working set of scopes.
2572   LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
2573   SmallVector<DbgRange, 4> MIRanges;
2574   DenseMap<const MachineInstr *, DbgScope *> MI2ScopeMap;
2575   const MDNode *PrevScope = NULL;
2576   const MDNode *PrevInlinedAt = NULL;
2577   const MachineInstr *RangeBeginMI = NULL;
2578   const MachineInstr *PrevMI = NULL;
2579   for (MachineFunction::const_iterator I = Asm->MF->begin(), E = Asm->MF->end();
2580        I != E; ++I) {
2581     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2582          II != IE; ++II) {
2583       const MachineInstr *MInsn = II;
2584       const MDNode *Scope = NULL;
2585       const MDNode *InlinedAt = NULL;
2586
2587       // Check if instruction has valid location information.
2588       if (!hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
2589         PrevMI = MInsn;
2590         continue;
2591       }
2592
2593       // If scope has not changed then skip this instruction.
2594       if (Scope == PrevScope && PrevInlinedAt == InlinedAt) {
2595         PrevMI = MInsn;
2596         continue;
2597       }
2598
2599       if (RangeBeginMI) {
2600         // If we have alread seen a beginning of a instruction range and
2601         // current instruction scope does not match scope of first instruction
2602         // in this range then create a new instruction range.
2603         DbgRange R(RangeBeginMI, PrevMI);
2604         MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope,
2605                                                         PrevInlinedAt);
2606         MIRanges.push_back(R);
2607       }
2608
2609       // This is a beginning of a new instruction range.
2610       RangeBeginMI = MInsn;
2611
2612       // Reset previous markers.
2613       PrevMI = MInsn;
2614       PrevScope = Scope;
2615       PrevInlinedAt = InlinedAt;
2616     }
2617   }
2618
2619   // Create last instruction range.
2620   if (RangeBeginMI && PrevMI && PrevScope) {
2621     DbgRange R(RangeBeginMI, PrevMI);
2622     MIRanges.push_back(R);
2623     MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope, PrevInlinedAt);
2624   }
2625
2626   if (!CurrentFnDbgScope)
2627     return false;
2628
2629   calculateDominanceGraph(CurrentFnDbgScope);
2630   if (PrintDbgScope)
2631     printDbgScopeInfo(Ctx, Asm->MF, MI2ScopeMap);
2632
2633   // Find ranges of instructions covered by each DbgScope;
2634   DbgScope *PrevDbgScope = NULL;
2635   for (SmallVector<DbgRange, 4>::const_iterator RI = MIRanges.begin(),
2636          RE = MIRanges.end(); RI != RE; ++RI) {
2637     const DbgRange &R = *RI;
2638     DbgScope *S = MI2ScopeMap.lookup(R.first);
2639     assert (S && "Lost DbgScope for a machine instruction!");
2640     if (PrevDbgScope && !PrevDbgScope->dominates(S))
2641       PrevDbgScope->closeInsnRange(S);
2642     S->openInsnRange(R.first);
2643     S->extendInsnRange(R.second);
2644     PrevDbgScope = S;
2645   }
2646
2647   if (PrevDbgScope)
2648     PrevDbgScope->closeInsnRange();
2649
2650   identifyScopeMarkers();
2651
2652   return !DbgScopeMap.empty();
2653 }
2654
2655 /// identifyScopeMarkers() -
2656 /// Each DbgScope has first instruction and last instruction to mark beginning
2657 /// and end of a scope respectively. Create an inverse map that list scopes
2658 /// starts (and ends) with an instruction. One instruction may start (or end)
2659 /// multiple scopes. Ignore scopes that are not reachable.
2660 void DwarfDebug::identifyScopeMarkers() {
2661   SmallVector<DbgScope *, 4> WorkList;
2662   WorkList.push_back(CurrentFnDbgScope);
2663   while (!WorkList.empty()) {
2664     DbgScope *S = WorkList.pop_back_val();
2665
2666     const SmallVector<DbgScope *, 4> &Children = S->getScopes();
2667     if (!Children.empty())
2668       for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
2669              SE = Children.end(); SI != SE; ++SI)
2670         WorkList.push_back(*SI);
2671
2672     if (S->isAbstractScope())
2673       continue;
2674
2675     const SmallVector<DbgRange, 4> &Ranges = S->getRanges();
2676     if (Ranges.empty())
2677       continue;
2678     for (SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin(),
2679            RE = Ranges.end(); RI != RE; ++RI) {
2680       assert(RI->first && "DbgRange does not have first instruction!");
2681       assert(RI->second && "DbgRange does not have second instruction!");
2682       InsnsEndScopeSet.insert(RI->second);
2683     }
2684   }
2685 }
2686
2687 /// FindFirstDebugLoc - Find the first debug location in the function. This
2688 /// is intended to be an approximation for the source position of the
2689 /// beginning of the function.
2690 static DebugLoc FindFirstDebugLoc(const MachineFunction *MF) {
2691   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
2692        I != E; ++I)
2693     for (MachineBasicBlock::const_iterator MBBI = I->begin(), MBBE = I->end();
2694          MBBI != MBBE; ++MBBI) {
2695       DebugLoc DL = MBBI->getDebugLoc();
2696       if (!DL.isUnknown())
2697         return DL;
2698     }
2699   return DebugLoc();
2700 }
2701
2702 /// beginFunction - Gather pre-function debug information.  Assumes being
2703 /// emitted immediately after the function entry point.
2704 void DwarfDebug::beginFunction(const MachineFunction *MF) {
2705   if (!MMI->hasDebugInfo()) return;
2706   if (!extractScopeInformation()) return;
2707
2708   FunctionBeginSym = Asm->GetTempSymbol("func_begin",
2709                                         Asm->getFunctionNumber());
2710   // Assumes in correct section after the entry point.
2711   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
2712
2713   // Emit label for the implicitly defined dbg.stoppoint at the start of the
2714   // function.
2715   DebugLoc FDL = FindFirstDebugLoc(MF);
2716   if (FDL.isUnknown()) return;
2717
2718   const MDNode *Scope = FDL.getScope(MF->getFunction()->getContext());
2719   const MDNode *TheScope = 0;
2720
2721   DISubprogram SP = getDISubprogram(Scope);
2722   unsigned Line, Col;
2723   if (SP.Verify()) {
2724     Line = SP.getLineNumber();
2725     Col = 0;
2726     TheScope = SP;
2727   } else {
2728     Line = FDL.getLine();
2729     Col = FDL.getCol();
2730     TheScope = Scope;
2731   }
2732
2733   recordSourceLine(Line, Col, TheScope);
2734
2735   /// ProcessedArgs - Collection of arguments already processed.
2736   SmallPtrSet<const MDNode *, 8> ProcessedArgs;
2737
2738   DebugLoc PrevLoc;
2739   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
2740        I != E; ++I)
2741     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2742          II != IE; ++II) {
2743       const MachineInstr *MI = II;
2744       DebugLoc DL = MI->getDebugLoc();
2745       if (MI->isDebugValue()) {
2746         assert (MI->getNumOperands() > 1 && "Invalid machine instruction!");
2747         DIVariable DV(MI->getOperand(MI->getNumOperands() - 1).getMetadata());
2748         if (!DV.Verify()) continue;
2749         // If DBG_VALUE is for a local variable then it needs a label.
2750         if (DV.getTag() != dwarf::DW_TAG_arg_variable
2751             && isDbgValueInUndefinedReg(MI) == false)
2752           InsnNeedsLabel.insert(MI);
2753         // DBG_VALUE for inlined functions argument needs a label.
2754         else if (!DISubprogram(getDISubprogram(DV.getContext())).
2755                  describes(MF->getFunction()))
2756           InsnNeedsLabel.insert(MI);
2757         // DBG_VALUE indicating argument location change needs a label.
2758         else if (isDbgValueInUndefinedReg(MI) == false
2759                  && !ProcessedArgs.insert(DV))
2760           InsnNeedsLabel.insert(MI);
2761       } else {
2762         // If location is unknown then instruction needs a location only if
2763         // UnknownLocations flag is set.
2764         if (DL.isUnknown()) {
2765           if (UnknownLocations && !PrevLoc.isUnknown())
2766             InsnNeedsLabel.insert(MI);
2767         } else if (DL != PrevLoc)
2768           // Otherwise, instruction needs a location only if it is new location.
2769           InsnNeedsLabel.insert(MI);
2770       }
2771
2772       if (!DL.isUnknown() || UnknownLocations)
2773         PrevLoc = DL;
2774     }
2775
2776   PrevLabel = FunctionBeginSym;
2777 }
2778
2779 /// endFunction - Gather and emit post-function debug information.
2780 ///
2781 void DwarfDebug::endFunction(const MachineFunction *MF) {
2782   if (!MMI->hasDebugInfo() || DbgScopeMap.empty()) return;
2783
2784   if (CurrentFnDbgScope) {
2785
2786     // Define end label for subprogram.
2787     FunctionEndSym = Asm->GetTempSymbol("func_end",
2788                                         Asm->getFunctionNumber());
2789     // Assumes in correct section after the entry point.
2790     Asm->OutStreamer.EmitLabel(FunctionEndSym);
2791
2792     SmallPtrSet<const MDNode *, 16> ProcessedVars;
2793     collectVariableInfo(MF, ProcessedVars);
2794
2795     // Get function line info.
2796     if (!Lines.empty()) {
2797       // Get section line info.
2798       unsigned ID = SectionMap.insert(Asm->getCurrentSection());
2799       if (SectionSourceLines.size() < ID) SectionSourceLines.resize(ID);
2800       std::vector<SrcLineInfo> &SectionLineInfos = SectionSourceLines[ID-1];
2801       // Append the function info to section info.
2802       SectionLineInfos.insert(SectionLineInfos.end(),
2803                               Lines.begin(), Lines.end());
2804     }
2805
2806     // Construct abstract scopes.
2807     for (SmallVector<DbgScope *, 4>::iterator AI = AbstractScopesList.begin(),
2808            AE = AbstractScopesList.end(); AI != AE; ++AI) {
2809       DISubprogram SP((*AI)->getScopeNode());
2810       if (SP.Verify()) {
2811         // Collect info for variables that were optimized out.
2812         StringRef FName = SP.getLinkageName();
2813         if (FName.empty())
2814           FName = SP.getName();
2815         const Module *M = MF->getFunction()->getParent();
2816         if (NamedMDNode *NMD =
2817             M->getNamedMetadata(Twine("llvm.dbg.lv.",
2818                                       getRealLinkageName(FName)))) {
2819           for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
2820           DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
2821           if (!DV || !ProcessedVars.insert(DV))
2822             continue;
2823           DbgScope *Scope = AbstractScopes.lookup(DV.getContext());
2824           if (Scope)
2825             Scope->addVariable(new DbgVariable(DV));
2826           }
2827         }
2828       }
2829       if (ProcessedSPNodes.count((*AI)->getScopeNode()) == 0)
2830         constructScopeDIE(*AI);
2831     }
2832
2833     DIE *CurFnDIE = constructScopeDIE(CurrentFnDbgScope);
2834
2835     if (!DisableFramePointerElim(*MF))
2836       addUInt(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr,
2837               dwarf::DW_FORM_flag, 1);
2838
2839
2840     DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
2841                                                  MMI->getFrameMoves()));
2842   }
2843
2844   // Clear debug info
2845   CurrentFnDbgScope = NULL;
2846   InsnNeedsLabel.clear();
2847   DbgVariableToFrameIndexMap.clear();
2848   VarToAbstractVarMap.clear();
2849   DbgVariableToDbgInstMap.clear();
2850   DbgVariableLabelsMap.clear();
2851   DeleteContainerSeconds(DbgScopeMap);
2852   InsnsEndScopeSet.clear();
2853   ConcreteScopes.clear();
2854   DeleteContainerSeconds(AbstractScopes);
2855   AbstractScopesList.clear();
2856   AbstractVariables.clear();
2857   LabelsBeforeInsn.clear();
2858   LabelsAfterInsn.clear();
2859   Lines.clear();
2860   PrevLabel = NULL;
2861 }
2862
2863 /// recordVariableFrameIndex - Record a variable's index.
2864 void DwarfDebug::recordVariableFrameIndex(const DbgVariable *V, int Index) {
2865   assert (V && "Invalid DbgVariable!");
2866   DbgVariableToFrameIndexMap[V] = Index;
2867 }
2868
2869 /// findVariableFrameIndex - Return true if frame index for the variable
2870 /// is found. Update FI to hold value of the index.
2871 bool DwarfDebug::findVariableFrameIndex(const DbgVariable *V, int *FI) {
2872   assert (V && "Invalid DbgVariable!");
2873   DenseMap<const DbgVariable *, int>::iterator I =
2874     DbgVariableToFrameIndexMap.find(V);
2875   if (I == DbgVariableToFrameIndexMap.end())
2876     return false;
2877   *FI = I->second;
2878   return true;
2879 }
2880
2881 /// findVariableLabel - Find MCSymbol for the variable.
2882 const MCSymbol *DwarfDebug::findVariableLabel(const DbgVariable *V) {
2883   DenseMap<const DbgVariable *, const MCSymbol *>::iterator I
2884     = DbgVariableLabelsMap.find(V);
2885   if (I == DbgVariableLabelsMap.end())
2886     return NULL;
2887   else return I->second;
2888 }
2889
2890 /// findDbgScope - Find DbgScope for the debug loc attached with an
2891 /// instruction.
2892 DbgScope *DwarfDebug::findDbgScope(const MachineInstr *MInsn) {
2893   DbgScope *Scope = NULL;
2894   LLVMContext &Ctx =
2895     MInsn->getParent()->getParent()->getFunction()->getContext();
2896   DebugLoc DL = MInsn->getDebugLoc();
2897
2898   if (DL.isUnknown())
2899     return Scope;
2900
2901   if (const MDNode *IA = DL.getInlinedAt(Ctx))
2902     Scope = ConcreteScopes.lookup(IA);
2903   if (Scope == 0)
2904     Scope = DbgScopeMap.lookup(DL.getScope(Ctx));
2905
2906   return Scope;
2907 }
2908
2909
2910 /// recordSourceLine - Register a source line with debug info. Returns the
2911 /// unique label that was emitted and which provides correspondence to
2912 /// the source line list.
2913 MCSymbol *DwarfDebug::recordSourceLine(unsigned Line, unsigned Col,
2914                                        const MDNode *S) {
2915   StringRef Dir;
2916   StringRef Fn;
2917
2918   unsigned Src = 1;
2919   if (S) {
2920     DIDescriptor Scope(S);
2921
2922     if (Scope.isCompileUnit()) {
2923       DICompileUnit CU(S);
2924       Dir = CU.getDirectory();
2925       Fn = CU.getFilename();
2926     } else if (Scope.isSubprogram()) {
2927       DISubprogram SP(S);
2928       Dir = SP.getDirectory();
2929       Fn = SP.getFilename();
2930     } else if (Scope.isLexicalBlock()) {
2931       DILexicalBlock DB(S);
2932       Dir = DB.getDirectory();
2933       Fn = DB.getFilename();
2934     } else
2935       assert(0 && "Unexpected scope info");
2936
2937     Src = GetOrCreateSourceID(Dir, Fn);
2938   }
2939
2940   MCSymbol *Label = MMI->getContext().CreateTempSymbol();
2941   Lines.push_back(SrcLineInfo(Line, Col, Src, Label));
2942
2943   Asm->OutStreamer.EmitLabel(Label);
2944   return Label;
2945 }
2946
2947 //===----------------------------------------------------------------------===//
2948 // Emit Methods
2949 //===----------------------------------------------------------------------===//
2950
2951 /// computeSizeAndOffset - Compute the size and offset of a DIE.
2952 ///
2953 unsigned
2954 DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
2955   // Get the children.
2956   const std::vector<DIE *> &Children = Die->getChildren();
2957
2958   // If not last sibling and has children then add sibling offset attribute.
2959   if (!Last && !Children.empty())
2960     Die->addSiblingOffset(DIEValueAllocator);
2961
2962   // Record the abbreviation.
2963   assignAbbrevNumber(Die->getAbbrev());
2964
2965   // Get the abbreviation for this DIE.
2966   unsigned AbbrevNumber = Die->getAbbrevNumber();
2967   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2968
2969   // Set DIE offset
2970   Die->setOffset(Offset);
2971
2972   // Start the size with the size of abbreviation code.
2973   Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
2974
2975   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2976   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2977
2978   // Size the DIE attribute values.
2979   for (unsigned i = 0, N = Values.size(); i < N; ++i)
2980     // Size attribute value.
2981     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
2982
2983   // Size the DIE children if any.
2984   if (!Children.empty()) {
2985     assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
2986            "Children flag not set");
2987
2988     for (unsigned j = 0, M = Children.size(); j < M; ++j)
2989       Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
2990
2991     // End of children marker.
2992     Offset += sizeof(int8_t);
2993   }
2994
2995   Die->setSize(Offset - Die->getOffset());
2996   return Offset;
2997 }
2998
2999 /// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
3000 ///
3001 void DwarfDebug::computeSizeAndOffsets() {
3002   unsigned PrevOffset = 0;
3003   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
3004          E = CUMap.end(); I != E; ++I) {
3005     // Compute size of compile unit header.
3006     static unsigned Offset = PrevOffset +
3007       sizeof(int32_t) + // Length of Compilation Unit Info
3008       sizeof(int16_t) + // DWARF version number
3009       sizeof(int32_t) + // Offset Into Abbrev. Section
3010       sizeof(int8_t);   // Pointer Size (in bytes)
3011     computeSizeAndOffset(I->second->getCUDie(), Offset, true);
3012     PrevOffset = Offset;
3013   }
3014 }
3015
3016 /// EmitSectionSym - Switch to the specified MCSection and emit an assembler
3017 /// temporary label to it if SymbolStem is specified.
3018 static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
3019                                 const char *SymbolStem = 0) {
3020   Asm->OutStreamer.SwitchSection(Section);
3021   if (!SymbolStem) return 0;
3022
3023   MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
3024   Asm->OutStreamer.EmitLabel(TmpSym);
3025   return TmpSym;
3026 }
3027
3028 /// EmitSectionLabels - Emit initial Dwarf sections with a label at
3029 /// the start of each one.
3030 void DwarfDebug::EmitSectionLabels() {
3031   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
3032
3033   // Dwarf sections base addresses.
3034   if (Asm->MAI->doesDwarfRequireFrameSection()) {
3035     DwarfFrameSectionSym =
3036       EmitSectionSym(Asm, TLOF.getDwarfFrameSection(), "section_debug_frame");
3037    }
3038
3039   DwarfInfoSectionSym =
3040     EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
3041   DwarfAbbrevSectionSym =
3042     EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
3043   EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
3044
3045   if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
3046     EmitSectionSym(Asm, MacroInfo);
3047
3048   DwarfDebugLineSectionSym =
3049     EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
3050   EmitSectionSym(Asm, TLOF.getDwarfLocSection());
3051   EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
3052   EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
3053   DwarfStrSectionSym =
3054     EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
3055   DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
3056                                              "debug_range");
3057
3058   DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
3059                                            "section_debug_loc");
3060
3061   TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
3062   EmitSectionSym(Asm, TLOF.getDataSection());
3063 }
3064
3065 /// emitDIE - Recusively Emits a debug information entry.
3066 ///
3067 void DwarfDebug::emitDIE(DIE *Die) {
3068   // Get the abbreviation for this DIE.
3069   unsigned AbbrevNumber = Die->getAbbrevNumber();
3070   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
3071
3072   // Emit the code (index) for the abbreviation.
3073   if (Asm->isVerbose())
3074     Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
3075                                 Twine::utohexstr(Die->getOffset()) + ":0x" +
3076                                 Twine::utohexstr(Die->getSize()) + " " +
3077                                 dwarf::TagString(Abbrev->getTag()));
3078   Asm->EmitULEB128(AbbrevNumber);
3079
3080   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
3081   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
3082
3083   // Emit the DIE attribute values.
3084   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
3085     unsigned Attr = AbbrevData[i].getAttribute();
3086     unsigned Form = AbbrevData[i].getForm();
3087     assert(Form && "Too many attributes for DIE (check abbreviation)");
3088
3089     if (Asm->isVerbose())
3090       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
3091
3092     switch (Attr) {
3093     case dwarf::DW_AT_sibling:
3094       Asm->EmitInt32(Die->getSiblingOffset());
3095       break;
3096     case dwarf::DW_AT_abstract_origin: {
3097       DIEEntry *E = cast<DIEEntry>(Values[i]);
3098       DIE *Origin = E->getEntry();
3099       unsigned Addr = Origin->getOffset();
3100       Asm->EmitInt32(Addr);
3101       break;
3102     }
3103     case dwarf::DW_AT_ranges: {
3104       // DW_AT_range Value encodes offset in debug_range section.
3105       DIEInteger *V = cast<DIEInteger>(Values[i]);
3106       Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
3107                                      V->getValue(),
3108                                      DwarfDebugRangeSectionSym,
3109                                      4);
3110       break;
3111     }
3112     case dwarf::DW_AT_stmt_list: {
3113       Asm->EmitLabelDifference(CurrentLineSectionSym,
3114                                DwarfDebugLineSectionSym, 4);
3115       break;
3116     }
3117     case dwarf::DW_AT_location: {
3118       if (UseDotDebugLocEntry.count(Die) != 0) {
3119         DIELabel *L = cast<DIELabel>(Values[i]);
3120         Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
3121       } else
3122         Values[i]->EmitValue(Asm, Form);
3123       break;
3124     }
3125     default:
3126       // Emit an attribute using the defined form.
3127       Values[i]->EmitValue(Asm, Form);
3128       break;
3129     }
3130   }
3131
3132   // Emit the DIE children if any.
3133   if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
3134     const std::vector<DIE *> &Children = Die->getChildren();
3135
3136     for (unsigned j = 0, M = Children.size(); j < M; ++j)
3137       emitDIE(Children[j]);
3138
3139     if (Asm->isVerbose())
3140       Asm->OutStreamer.AddComment("End Of Children Mark");
3141     Asm->EmitInt8(0);
3142   }
3143 }
3144
3145 /// emitDebugInfo - Emit the debug info section.
3146 ///
3147 void DwarfDebug::emitDebugInfo() {
3148   // Start debug info section.
3149   Asm->OutStreamer.SwitchSection(
3150                             Asm->getObjFileLowering().getDwarfInfoSection());
3151   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
3152          E = CUMap.end(); I != E; ++I) {
3153     CompileUnit *TheCU = I->second;
3154     DIE *Die = TheCU->getCUDie();
3155
3156     // Emit the compile units header.
3157     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
3158                                                   TheCU->getID()));
3159
3160     // Emit size of content not including length itself
3161     unsigned ContentSize = Die->getSize() +
3162       sizeof(int16_t) + // DWARF version number
3163       sizeof(int32_t) + // Offset Into Abbrev. Section
3164       sizeof(int8_t) +  // Pointer Size (in bytes)
3165       sizeof(int32_t);  // FIXME - extra pad for gdb bug.
3166
3167     Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
3168     Asm->EmitInt32(ContentSize);
3169     Asm->OutStreamer.AddComment("DWARF version number");
3170     Asm->EmitInt16(dwarf::DWARF_VERSION);
3171     Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
3172     Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
3173                            DwarfAbbrevSectionSym);
3174     Asm->OutStreamer.AddComment("Address Size (in bytes)");
3175     Asm->EmitInt8(Asm->getTargetData().getPointerSize());
3176
3177     emitDIE(Die);
3178     // FIXME - extra padding for gdb bug.
3179     Asm->OutStreamer.AddComment("4 extra padding bytes for GDB");
3180     Asm->EmitInt8(0);
3181     Asm->EmitInt8(0);
3182     Asm->EmitInt8(0);
3183     Asm->EmitInt8(0);
3184     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
3185   }
3186 }
3187
3188 /// emitAbbreviations - Emit the abbreviation section.
3189 ///
3190 void DwarfDebug::emitAbbreviations() const {
3191   // Check to see if it is worth the effort.
3192   if (!Abbreviations.empty()) {
3193     // Start the debug abbrev section.
3194     Asm->OutStreamer.SwitchSection(
3195                             Asm->getObjFileLowering().getDwarfAbbrevSection());
3196
3197     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
3198
3199     // For each abbrevation.
3200     for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
3201       // Get abbreviation data
3202       const DIEAbbrev *Abbrev = Abbreviations[i];
3203
3204       // Emit the abbrevations code (base 1 index.)
3205       Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
3206
3207       // Emit the abbreviations data.
3208       Abbrev->Emit(Asm);
3209     }
3210
3211     // Mark end of abbreviations.
3212     Asm->EmitULEB128(0, "EOM(3)");
3213
3214     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
3215   }
3216 }
3217
3218 /// emitEndOfLineMatrix - Emit the last address of the section and the end of
3219 /// the line matrix.
3220 ///
3221 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
3222   // Define last address of section.
3223   Asm->OutStreamer.AddComment("Extended Op");
3224   Asm->EmitInt8(0);
3225
3226   Asm->OutStreamer.AddComment("Op size");
3227   Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
3228   Asm->OutStreamer.AddComment("DW_LNE_set_address");
3229   Asm->EmitInt8(dwarf::DW_LNE_set_address);
3230
3231   Asm->OutStreamer.AddComment("Section end label");
3232
3233   Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
3234                                    Asm->getTargetData().getPointerSize(),
3235                                    0/*AddrSpace*/);
3236
3237   // Mark end of matrix.
3238   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
3239   Asm->EmitInt8(0);
3240   Asm->EmitInt8(1);
3241   Asm->EmitInt8(1);
3242 }
3243
3244 /// emitDebugLines - Emit source line information.
3245 ///
3246 void DwarfDebug::emitDebugLines() {
3247   // If the target is using .loc/.file, the assembler will be emitting the
3248   // .debug_line table automatically.
3249   if (Asm->MAI->hasDotLocAndDotFile())
3250     return;
3251
3252   // Minimum line delta, thus ranging from -10..(255-10).
3253   const int MinLineDelta = -(dwarf::DW_LNS_fixed_advance_pc + 1);
3254   // Maximum line delta, thus ranging from -10..(255-10).
3255   const int MaxLineDelta = 255 + MinLineDelta;
3256
3257   // Start the dwarf line section.
3258   Asm->OutStreamer.SwitchSection(
3259                             Asm->getObjFileLowering().getDwarfLineSection());
3260
3261   // Construct the section header.
3262   CurrentLineSectionSym = Asm->GetTempSymbol("section_line_begin");
3263   Asm->OutStreamer.EmitLabel(CurrentLineSectionSym);
3264   Asm->OutStreamer.AddComment("Length of Source Line Info");
3265   Asm->EmitLabelDifference(Asm->GetTempSymbol("line_end"),
3266                            Asm->GetTempSymbol("line_begin"), 4);
3267   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("line_begin"));
3268
3269   Asm->OutStreamer.AddComment("DWARF version number");
3270   Asm->EmitInt16(dwarf::DWARF_VERSION);
3271
3272   Asm->OutStreamer.AddComment("Prolog Length");
3273   Asm->EmitLabelDifference(Asm->GetTempSymbol("line_prolog_end"),
3274                            Asm->GetTempSymbol("line_prolog_begin"), 4);
3275   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("line_prolog_begin"));
3276
3277   Asm->OutStreamer.AddComment("Minimum Instruction Length");
3278   Asm->EmitInt8(1);
3279   Asm->OutStreamer.AddComment("Default is_stmt_start flag");
3280   Asm->EmitInt8(1);
3281   Asm->OutStreamer.AddComment("Line Base Value (Special Opcodes)");
3282   Asm->EmitInt8(MinLineDelta);
3283   Asm->OutStreamer.AddComment("Line Range Value (Special Opcodes)");
3284   Asm->EmitInt8(MaxLineDelta);
3285   Asm->OutStreamer.AddComment("Special Opcode Base");
3286   Asm->EmitInt8(-MinLineDelta);
3287
3288   // Line number standard opcode encodings argument count
3289   Asm->OutStreamer.AddComment("DW_LNS_copy arg count");
3290   Asm->EmitInt8(0);
3291   Asm->OutStreamer.AddComment("DW_LNS_advance_pc arg count");
3292   Asm->EmitInt8(1);
3293   Asm->OutStreamer.AddComment("DW_LNS_advance_line arg count");
3294   Asm->EmitInt8(1);
3295   Asm->OutStreamer.AddComment("DW_LNS_set_file arg count");
3296   Asm->EmitInt8(1);
3297   Asm->OutStreamer.AddComment("DW_LNS_set_column arg count");
3298   Asm->EmitInt8(1);
3299   Asm->OutStreamer.AddComment("DW_LNS_negate_stmt arg count");
3300   Asm->EmitInt8(0);
3301   Asm->OutStreamer.AddComment("DW_LNS_set_basic_block arg count");
3302   Asm->EmitInt8(0);
3303   Asm->OutStreamer.AddComment("DW_LNS_const_add_pc arg count");
3304   Asm->EmitInt8(0);
3305   Asm->OutStreamer.AddComment("DW_LNS_fixed_advance_pc arg count");
3306   Asm->EmitInt8(1);
3307
3308   // Emit directories.
3309   for (unsigned DI = 1, DE = getNumSourceDirectories()+1; DI != DE; ++DI) {
3310     const std::string &Dir = getSourceDirectoryName(DI);
3311     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("Directory");
3312     Asm->OutStreamer.EmitBytes(StringRef(Dir.c_str(), Dir.size()+1), 0);
3313   }
3314
3315   Asm->OutStreamer.AddComment("End of directories");
3316   Asm->EmitInt8(0);
3317
3318   // Emit files.
3319   for (unsigned SI = 1, SE = getNumSourceIds()+1; SI != SE; ++SI) {
3320     // Remember source id starts at 1.
3321     std::pair<unsigned, unsigned> Id = getSourceDirectoryAndFileIds(SI);
3322     const std::string &FN = getSourceFileName(Id.second);
3323     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("Source");
3324     Asm->OutStreamer.EmitBytes(StringRef(FN.c_str(), FN.size()+1), 0);
3325
3326     Asm->EmitULEB128(Id.first, "Directory #");
3327     Asm->EmitULEB128(0, "Mod date");
3328     Asm->EmitULEB128(0, "File size");
3329   }
3330
3331   Asm->OutStreamer.AddComment("End of files");
3332   Asm->EmitInt8(0);
3333
3334   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("line_prolog_end"));
3335
3336   // A sequence for each text section.
3337   unsigned SecSrcLinesSize = SectionSourceLines.size();
3338
3339   for (unsigned j = 0; j < SecSrcLinesSize; ++j) {
3340     // Isolate current sections line info.
3341     const std::vector<SrcLineInfo> &LineInfos = SectionSourceLines[j];
3342
3343     // Dwarf assumes we start with first line of first source file.
3344     unsigned Source = 1;
3345     unsigned Line = 1;
3346
3347     // Construct rows of the address, source, line, column matrix.
3348     for (unsigned i = 0, N = LineInfos.size(); i < N; ++i) {
3349       const SrcLineInfo &LineInfo = LineInfos[i];
3350       MCSymbol *Label = LineInfo.getLabel();
3351       if (!Label->isDefined()) continue; // Not emitted, in dead code.
3352
3353       if (Asm->isVerbose()) {
3354         std::pair<unsigned, unsigned> SrcID =
3355           getSourceDirectoryAndFileIds(LineInfo.getSourceID());
3356         Asm->OutStreamer.AddComment(Twine(getSourceDirectoryName(SrcID.first)) +
3357                                     "/" +
3358                                     Twine(getSourceFileName(SrcID.second)) +
3359                                     ":" + Twine(LineInfo.getLine()));
3360       }
3361
3362       // Define the line address.
3363       Asm->OutStreamer.AddComment("Extended Op");
3364       Asm->EmitInt8(0);
3365       Asm->OutStreamer.AddComment("Op size");
3366       Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
3367
3368       Asm->OutStreamer.AddComment("DW_LNE_set_address");
3369       Asm->EmitInt8(dwarf::DW_LNE_set_address);
3370
3371       Asm->OutStreamer.AddComment("Location label");
3372       Asm->OutStreamer.EmitSymbolValue(Label,
3373                                        Asm->getTargetData().getPointerSize(),
3374                                        0/*AddrSpace*/);
3375
3376       // If change of source, then switch to the new source.
3377       if (Source != LineInfo.getSourceID()) {
3378         Source = LineInfo.getSourceID();
3379         Asm->OutStreamer.AddComment("DW_LNS_set_file");
3380         Asm->EmitInt8(dwarf::DW_LNS_set_file);
3381         Asm->EmitULEB128(Source, "New Source");
3382       }
3383
3384       // If change of line.
3385       if (Line != LineInfo.getLine()) {
3386         // Determine offset.
3387         int Offset = LineInfo.getLine() - Line;
3388         int Delta = Offset - MinLineDelta;
3389
3390         // Update line.
3391         Line = LineInfo.getLine();
3392
3393         // If delta is small enough and in range...
3394         if (Delta >= 0 && Delta < (MaxLineDelta - 1)) {
3395           // ... then use fast opcode.
3396           Asm->OutStreamer.AddComment("Line Delta");
3397           Asm->EmitInt8(Delta - MinLineDelta);
3398         } else {
3399           // ... otherwise use long hand.
3400           Asm->OutStreamer.AddComment("DW_LNS_advance_line");
3401           Asm->EmitInt8(dwarf::DW_LNS_advance_line);
3402           Asm->EmitSLEB128(Offset, "Line Offset");
3403           Asm->OutStreamer.AddComment("DW_LNS_copy");
3404           Asm->EmitInt8(dwarf::DW_LNS_copy);
3405         }
3406       } else {
3407         // Copy the previous row (different address or source)
3408         Asm->OutStreamer.AddComment("DW_LNS_copy");
3409         Asm->EmitInt8(dwarf::DW_LNS_copy);
3410       }
3411     }
3412
3413     emitEndOfLineMatrix(j + 1);
3414   }
3415
3416   if (SecSrcLinesSize == 0)
3417     // Because we're emitting a debug_line section, we still need a line
3418     // table. The linker and friends expect it to exist. If there's nothing to
3419     // put into it, emit an empty table.
3420     emitEndOfLineMatrix(1);
3421
3422   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("line_end"));
3423 }
3424
3425 /// emitCommonDebugFrame - Emit common frame info into a debug frame section.
3426 ///
3427 void DwarfDebug::emitCommonDebugFrame() {
3428   if (!Asm->MAI->doesDwarfRequireFrameSection())
3429     return;
3430
3431   int stackGrowth = Asm->getTargetData().getPointerSize();
3432   if (Asm->TM.getFrameInfo()->getStackGrowthDirection() ==
3433       TargetFrameInfo::StackGrowsDown)
3434     stackGrowth *= -1;
3435
3436   // Start the dwarf frame section.
3437   Asm->OutStreamer.SwitchSection(
3438                               Asm->getObjFileLowering().getDwarfFrameSection());
3439
3440   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common"));
3441   Asm->OutStreamer.AddComment("Length of Common Information Entry");
3442   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_frame_common_end"),
3443                            Asm->GetTempSymbol("debug_frame_common_begin"), 4);
3444
3445   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common_begin"));
3446   Asm->OutStreamer.AddComment("CIE Identifier Tag");
3447   Asm->EmitInt32((int)dwarf::DW_CIE_ID);
3448   Asm->OutStreamer.AddComment("CIE Version");
3449   Asm->EmitInt8(dwarf::DW_CIE_VERSION);
3450   Asm->OutStreamer.AddComment("CIE Augmentation");
3451   Asm->OutStreamer.EmitIntValue(0, 1, /*addrspace*/0); // nul terminator.
3452   Asm->EmitULEB128(1, "CIE Code Alignment Factor");
3453   Asm->EmitSLEB128(stackGrowth, "CIE Data Alignment Factor");
3454   Asm->OutStreamer.AddComment("CIE RA Column");
3455   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
3456   Asm->EmitInt8(RI->getDwarfRegNum(RI->getRARegister(), false));
3457
3458   std::vector<MachineMove> Moves;
3459   RI->getInitialFrameState(Moves);
3460
3461   Asm->EmitFrameMoves(Moves, 0, false);
3462
3463   Asm->EmitAlignment(2);
3464   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common_end"));
3465 }
3466
3467 /// emitFunctionDebugFrame - Emit per function frame info into a debug frame
3468 /// section.
3469 void DwarfDebug::
3470 emitFunctionDebugFrame(const FunctionDebugFrameInfo &DebugFrameInfo) {
3471   if (!Asm->MAI->doesDwarfRequireFrameSection())
3472     return;
3473
3474   // Start the dwarf frame section.
3475   Asm->OutStreamer.SwitchSection(
3476                               Asm->getObjFileLowering().getDwarfFrameSection());
3477
3478   Asm->OutStreamer.AddComment("Length of Frame Information Entry");
3479   MCSymbol *DebugFrameBegin =
3480     Asm->GetTempSymbol("debug_frame_begin", DebugFrameInfo.Number);
3481   MCSymbol *DebugFrameEnd =
3482     Asm->GetTempSymbol("debug_frame_end", DebugFrameInfo.Number);
3483   Asm->EmitLabelDifference(DebugFrameEnd, DebugFrameBegin, 4);
3484
3485   Asm->OutStreamer.EmitLabel(DebugFrameBegin);
3486
3487   Asm->OutStreamer.AddComment("FDE CIE offset");
3488   Asm->EmitSectionOffset(Asm->GetTempSymbol("debug_frame_common"),
3489                          DwarfFrameSectionSym);
3490
3491   Asm->OutStreamer.AddComment("FDE initial location");
3492   MCSymbol *FuncBeginSym =
3493     Asm->GetTempSymbol("func_begin", DebugFrameInfo.Number);
3494   Asm->OutStreamer.EmitSymbolValue(FuncBeginSym,
3495                                    Asm->getTargetData().getPointerSize(),
3496                                    0/*AddrSpace*/);
3497
3498
3499   Asm->OutStreamer.AddComment("FDE address range");
3500   Asm->EmitLabelDifference(Asm->GetTempSymbol("func_end",DebugFrameInfo.Number),
3501                            FuncBeginSym, Asm->getTargetData().getPointerSize());
3502
3503   Asm->EmitFrameMoves(DebugFrameInfo.Moves, FuncBeginSym, false);
3504
3505   Asm->EmitAlignment(2);
3506   Asm->OutStreamer.EmitLabel(DebugFrameEnd);
3507 }
3508
3509 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
3510 ///
3511 void DwarfDebug::emitDebugPubNames() {
3512   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
3513          E = CUMap.end(); I != E; ++I) {
3514     CompileUnit *TheCU = I->second;
3515     // Start the dwarf pubnames section.
3516     Asm->OutStreamer.SwitchSection(
3517       Asm->getObjFileLowering().getDwarfPubNamesSection());
3518
3519     Asm->OutStreamer.AddComment("Length of Public Names Info");
3520     Asm->EmitLabelDifference(
3521       Asm->GetTempSymbol("pubnames_end", TheCU->getID()),
3522       Asm->GetTempSymbol("pubnames_begin", TheCU->getID()), 4);
3523
3524     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin",
3525                                                   TheCU->getID()));
3526
3527     Asm->OutStreamer.AddComment("DWARF Version");
3528     Asm->EmitInt16(dwarf::DWARF_VERSION);
3529
3530     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
3531     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
3532                            DwarfInfoSectionSym);
3533
3534     Asm->OutStreamer.AddComment("Compilation Unit Length");
3535     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
3536                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
3537                              4);
3538
3539     const StringMap<DIE*> &Globals = TheCU->getGlobals();
3540     for (StringMap<DIE*>::const_iterator
3541            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
3542       const char *Name = GI->getKeyData();
3543       DIE *Entity = GI->second;
3544
3545       Asm->OutStreamer.AddComment("DIE offset");
3546       Asm->EmitInt32(Entity->getOffset());
3547
3548       if (Asm->isVerbose())
3549         Asm->OutStreamer.AddComment("External Name");
3550       Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
3551     }
3552
3553     Asm->OutStreamer.AddComment("End Mark");
3554     Asm->EmitInt32(0);
3555     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end",
3556                                                 TheCU->getID()));
3557   }
3558 }
3559
3560 void DwarfDebug::emitDebugPubTypes() {
3561   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
3562          E = CUMap.end(); I != E; ++I) {
3563     CompileUnit *TheCU = I->second;
3564     // Start the dwarf pubnames section.
3565     Asm->OutStreamer.SwitchSection(
3566       Asm->getObjFileLowering().getDwarfPubTypesSection());
3567     Asm->OutStreamer.AddComment("Length of Public Types Info");
3568     Asm->EmitLabelDifference(
3569       Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
3570       Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
3571
3572     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
3573                                                   TheCU->getID()));
3574
3575     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
3576     Asm->EmitInt16(dwarf::DWARF_VERSION);
3577
3578     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
3579     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
3580                            DwarfInfoSectionSym);
3581
3582     Asm->OutStreamer.AddComment("Compilation Unit Length");
3583     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
3584                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
3585                              4);
3586
3587     const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
3588     for (StringMap<DIE*>::const_iterator
3589            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
3590       const char *Name = GI->getKeyData();
3591       DIE * Entity = GI->second;
3592
3593       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
3594       Asm->EmitInt32(Entity->getOffset());
3595
3596       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
3597       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
3598     }
3599
3600     Asm->OutStreamer.AddComment("End Mark");
3601     Asm->EmitInt32(0);
3602     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
3603                                                   TheCU->getID()));
3604   }
3605 }
3606
3607 /// emitDebugStr - Emit visible names into a debug str section.
3608 ///
3609 void DwarfDebug::emitDebugStr() {
3610   // Check to see if it is worth the effort.
3611   if (StringPool.empty()) return;
3612
3613   // Start the dwarf str section.
3614   Asm->OutStreamer.SwitchSection(
3615                                 Asm->getObjFileLowering().getDwarfStrSection());
3616
3617   // Get all of the string pool entries and put them in an array by their ID so
3618   // we can sort them.
3619   SmallVector<std::pair<unsigned,
3620       StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
3621
3622   for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
3623        I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
3624     Entries.push_back(std::make_pair(I->second.second, &*I));
3625
3626   array_pod_sort(Entries.begin(), Entries.end());
3627
3628   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
3629     // Emit a label for reference from debug information entries.
3630     Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
3631
3632     // Emit the string itself.
3633     Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
3634   }
3635 }
3636
3637 /// emitDebugLoc - Emit visible names into a debug loc section.
3638 ///
3639 void DwarfDebug::emitDebugLoc() {
3640   if (DotDebugLocEntries.empty())
3641     return;
3642
3643   // Start the dwarf loc section.
3644   Asm->OutStreamer.SwitchSection(
3645     Asm->getObjFileLowering().getDwarfLocSection());
3646   unsigned char Size = Asm->getTargetData().getPointerSize();
3647   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
3648   unsigned index = 1;
3649   for (SmallVector<DotDebugLocEntry, 4>::iterator
3650          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
3651        I != E; ++I, ++index) {
3652     DotDebugLocEntry Entry = *I;
3653     if (Entry.isEmpty()) {
3654       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
3655       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
3656       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
3657     } else {
3658       Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
3659       Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
3660       const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
3661       unsigned Reg = RI->getDwarfRegNum(Entry.Loc.getReg(), false);
3662       if (int Offset =  Entry.Loc.getOffset()) {
3663         // If the value is at a certain offset from frame register then
3664         // use DW_OP_fbreg.
3665         unsigned OffsetSize = Offset ? MCAsmInfo::getSLEB128Size(Offset) : 1;
3666         Asm->OutStreamer.AddComment("Loc expr size");
3667         Asm->EmitInt16(1 + OffsetSize);
3668         Asm->OutStreamer.AddComment(
3669           dwarf::OperationEncodingString(dwarf::DW_OP_fbreg));
3670         Asm->EmitInt8(dwarf::DW_OP_fbreg);
3671         Asm->OutStreamer.AddComment("Offset");
3672         Asm->EmitSLEB128(Offset);
3673       } else {
3674         if (Reg < 32) {
3675           Asm->OutStreamer.AddComment("Loc expr size");
3676           Asm->EmitInt16(1);
3677           Asm->OutStreamer.AddComment(
3678             dwarf::OperationEncodingString(dwarf::DW_OP_reg0 + Reg));
3679           Asm->EmitInt8(dwarf::DW_OP_reg0 + Reg);
3680         } else {
3681           Asm->OutStreamer.AddComment("Loc expr size");
3682           Asm->EmitInt16(1 + MCAsmInfo::getULEB128Size(Reg));
3683           Asm->EmitInt8(dwarf::DW_OP_regx);
3684           Asm->EmitULEB128(Reg);
3685         }
3686       }
3687     }
3688   }
3689 }
3690
3691 /// EmitDebugARanges - Emit visible names into a debug aranges section.
3692 ///
3693 void DwarfDebug::EmitDebugARanges() {
3694   // Start the dwarf aranges section.
3695   Asm->OutStreamer.SwitchSection(
3696                           Asm->getObjFileLowering().getDwarfARangesSection());
3697 }
3698
3699 /// emitDebugRanges - Emit visible names into a debug ranges section.
3700 ///
3701 void DwarfDebug::emitDebugRanges() {
3702   // Start the dwarf ranges section.
3703   Asm->OutStreamer.SwitchSection(
3704     Asm->getObjFileLowering().getDwarfRangesSection());
3705   unsigned char Size = Asm->getTargetData().getPointerSize();
3706   for (SmallVector<const MCSymbol *, 8>::iterator
3707          I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
3708        I != E; ++I) {
3709     if (*I)
3710       Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
3711     else
3712       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
3713   }
3714 }
3715
3716 /// emitDebugMacInfo - Emit visible names into a debug macinfo section.
3717 ///
3718 void DwarfDebug::emitDebugMacInfo() {
3719   if (const MCSection *LineInfo =
3720       Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
3721     // Start the dwarf macinfo section.
3722     Asm->OutStreamer.SwitchSection(LineInfo);
3723   }
3724 }
3725
3726 /// emitDebugInlineInfo - Emit inline info using following format.
3727 /// Section Header:
3728 /// 1. length of section
3729 /// 2. Dwarf version number
3730 /// 3. address size.
3731 ///
3732 /// Entries (one "entry" for each function that was inlined):
3733 ///
3734 /// 1. offset into __debug_str section for MIPS linkage name, if exists;
3735 ///   otherwise offset into __debug_str for regular function name.
3736 /// 2. offset into __debug_str section for regular function name.
3737 /// 3. an unsigned LEB128 number indicating the number of distinct inlining
3738 /// instances for the function.
3739 ///
3740 /// The rest of the entry consists of a {die_offset, low_pc} pair for each
3741 /// inlined instance; the die_offset points to the inlined_subroutine die in the
3742 /// __debug_info section, and the low_pc is the starting address for the
3743 /// inlining instance.
3744 void DwarfDebug::emitDebugInlineInfo() {
3745   if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
3746     return;
3747
3748   if (!FirstCU)
3749     return;
3750
3751   Asm->OutStreamer.SwitchSection(
3752                         Asm->getObjFileLowering().getDwarfDebugInlineSection());
3753
3754   Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
3755   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
3756                            Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
3757
3758   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
3759
3760   Asm->OutStreamer.AddComment("Dwarf Version");
3761   Asm->EmitInt16(dwarf::DWARF_VERSION);
3762   Asm->OutStreamer.AddComment("Address Size (in bytes)");
3763   Asm->EmitInt8(Asm->getTargetData().getPointerSize());
3764
3765   for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
3766          E = InlinedSPNodes.end(); I != E; ++I) {
3767
3768     const MDNode *Node = *I;
3769     DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
3770       = InlineInfo.find(Node);
3771     SmallVector<InlineInfoLabels, 4> &Labels = II->second;
3772     DISubprogram SP(Node);
3773     StringRef LName = SP.getLinkageName();
3774     StringRef Name = SP.getName();
3775
3776     Asm->OutStreamer.AddComment("MIPS linkage name");
3777     if (LName.empty()) {
3778       Asm->OutStreamer.EmitBytes(Name, 0);
3779       Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
3780     } else
3781       Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
3782                              DwarfStrSectionSym);
3783
3784     Asm->OutStreamer.AddComment("Function name");
3785     Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
3786     Asm->EmitULEB128(Labels.size(), "Inline count");
3787
3788     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
3789            LE = Labels.end(); LI != LE; ++LI) {
3790       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
3791       Asm->EmitInt32(LI->second->getOffset());
3792
3793       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
3794       Asm->OutStreamer.EmitSymbolValue(LI->first,
3795                                        Asm->getTargetData().getPointerSize(),0);
3796     }
3797   }
3798
3799   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
3800 }