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