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