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