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