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