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