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