For ARM/Darwin, add a dwarf entry indicating whether a function is arm or thumb
[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   StringMap<unsigned>::iterator DI = DirectoryIdMap.find(DirName);
1757   if (DI != DirectoryIdMap.end()) {
1758     DId = DI->getValue();
1759   } else {
1760     DId = DirectoryNames.size() + 1;
1761     DirectoryIdMap[DirName] = DId;
1762     DirectoryNames.push_back(DirName);
1763   }
1764
1765   unsigned FId;
1766   StringMap<unsigned>::iterator FI = SourceFileIdMap.find(FileName);
1767   if (FI != SourceFileIdMap.end()) {
1768     FId = FI->getValue();
1769   } else {
1770     FId = SourceFileNames.size() + 1;
1771     SourceFileIdMap[FileName] = FId;
1772     SourceFileNames.push_back(FileName);
1773   }
1774
1775   DenseMap<std::pair<unsigned, unsigned>, unsigned>::iterator SI =
1776     SourceIdMap.find(std::make_pair(DId, FId));
1777   if (SI != SourceIdMap.end())
1778     return SI->second;
1779
1780   unsigned SrcId = SourceIds.size() + 1;  // DW_AT_decl_file cannot be 0.
1781   SourceIdMap[std::make_pair(DId, FId)] = SrcId;
1782   SourceIds.push_back(std::make_pair(DId, FId));
1783
1784   return SrcId;
1785 }
1786
1787 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1788 DIE *DwarfDebug::getOrCreateNameSpace(DINameSpace NS) {
1789   CompileUnit *TheCU = getCompileUnit(NS);
1790   DIE *NDie = TheCU->getDIE(NS);
1791   if (NDie)
1792     return NDie;
1793   NDie = new DIE(dwarf::DW_TAG_namespace);
1794   TheCU->insertDIE(NS, NDie);
1795   if (!NS.getName().empty())
1796     addString(NDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, NS.getName());
1797   addSourceLine(NDie, &NS);
1798   addToContextOwner(NDie, NS.getContext());
1799   return NDie;
1800 }
1801
1802 /// constructCompileUnit - Create new CompileUnit for the given
1803 /// metadata node with tag DW_TAG_compile_unit.
1804 void DwarfDebug::constructCompileUnit(const MDNode *N) {
1805   DICompileUnit DIUnit(N);
1806   StringRef FN = DIUnit.getFilename();
1807   StringRef Dir = DIUnit.getDirectory();
1808   unsigned ID = GetOrCreateSourceID(Dir, FN);
1809
1810   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
1811   addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
1812             DIUnit.getProducer());
1813   addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data1,
1814           DIUnit.getLanguage());
1815   addString(Die, dwarf::DW_AT_name, dwarf::DW_FORM_string, FN);
1816   // Use DW_AT_entry_pc instead of DW_AT_low_pc/DW_AT_high_pc pair. This
1817   // simplifies debug range entries.
1818   addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
1819   // DW_AT_stmt_list is a offset of line number information for this
1820   // compile unit in debug_line section. This offset is calculated
1821   // during endMoudle().
1822   addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
1823
1824   if (!Dir.empty())
1825     addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
1826   if (DIUnit.isOptimized())
1827     addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
1828
1829   StringRef Flags = DIUnit.getFlags();
1830   if (!Flags.empty())
1831     addString(Die, dwarf::DW_AT_APPLE_flags, dwarf::DW_FORM_string, Flags);
1832
1833   unsigned RVer = DIUnit.getRunTimeVersion();
1834   if (RVer)
1835     addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
1836             dwarf::DW_FORM_data1, RVer);
1837
1838   CompileUnit *NewCU = new CompileUnit(ID, Die);
1839   if (!FirstCU)
1840     FirstCU = NewCU;
1841   CUMap.insert(std::make_pair(N, NewCU));
1842 }
1843
1844 /// getCompielUnit - Get CompileUnit DIE.
1845 CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
1846   assert (N && "Invalid DwarfDebug::getCompileUnit argument!");
1847   DIDescriptor D(N);
1848   const MDNode *CUNode = NULL;
1849   if (D.isCompileUnit())
1850     CUNode = N;
1851   else if (D.isSubprogram())
1852     CUNode = DISubprogram(N).getCompileUnit();
1853   else if (D.isType())
1854     CUNode = DIType(N).getCompileUnit();
1855   else if (D.isGlobalVariable())
1856     CUNode = DIGlobalVariable(N).getCompileUnit();
1857   else if (D.isVariable())
1858     CUNode = DIVariable(N).getCompileUnit();
1859   else if (D.isNameSpace())
1860     CUNode = DINameSpace(N).getCompileUnit();
1861   else if (D.isFile())
1862     CUNode = DIFile(N).getCompileUnit();
1863   else
1864     return FirstCU;
1865
1866   DenseMap<const MDNode *, CompileUnit *>::const_iterator I
1867     = CUMap.find(CUNode);
1868   if (I == CUMap.end())
1869     return FirstCU;
1870   return I->second;
1871 }
1872
1873
1874 /// constructGlobalVariableDIE - Construct global variable DIE.
1875 void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
1876   DIGlobalVariable DI_GV(N);
1877
1878   // If debug information is malformed then ignore it.
1879   if (DI_GV.Verify() == false)
1880     return;
1881
1882   // Check for pre-existence.
1883   CompileUnit *TheCU = getCompileUnit(N);
1884   if (TheCU->getDIE(DI_GV))
1885     return;
1886
1887   DIE *VariableDie = createGlobalVariableDIE(DI_GV);
1888   if (!VariableDie)
1889     return;
1890
1891   // Add to map.
1892   TheCU->insertDIE(N, VariableDie);
1893
1894   // Add to context owner.
1895   DIDescriptor GVContext = DI_GV.getContext();
1896   // Do not create specification DIE if context is either compile unit
1897   // or a subprogram.
1898   if (DI_GV.isDefinition() && !GVContext.isCompileUnit() &&
1899       !GVContext.isFile() &&
1900       !isSubprogramContext(GVContext)) {
1901     // Create specification DIE.
1902     DIE *VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1903     addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1904                 dwarf::DW_FORM_ref4, VariableDie);
1905     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1906     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1907     addLabel(Block, 0, dwarf::DW_FORM_udata,
1908              Asm->Mang->getSymbol(DI_GV.getGlobal()));
1909     addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1910     addUInt(VariableDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1911     TheCU->addDie(VariableSpecDIE);
1912   } else {
1913     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1914     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1915     addLabel(Block, 0, dwarf::DW_FORM_udata,
1916              Asm->Mang->getSymbol(DI_GV.getGlobal()));
1917     addBlock(VariableDie, dwarf::DW_AT_location, 0, Block);
1918   }
1919   addToContextOwner(VariableDie, GVContext);
1920
1921   // Expose as global. FIXME - need to check external flag.
1922   TheCU->addGlobal(DI_GV.getName(), VariableDie);
1923
1924   DIType GTy = DI_GV.getType();
1925   if (GTy.isCompositeType() && !GTy.getName().empty()
1926       && !GTy.isForwardDecl()) {
1927     DIEEntry *Entry = TheCU->getDIEEntry(GTy);
1928     assert(Entry && "Missing global type!");
1929     TheCU->addGlobalType(GTy.getName(), Entry->getEntry());
1930   }
1931   return;
1932 }
1933
1934 /// construct SubprogramDIE - Construct subprogram DIE.
1935 void DwarfDebug::constructSubprogramDIE(const MDNode *N) {
1936   DISubprogram SP(N);
1937
1938   // Check for pre-existence.
1939   CompileUnit *TheCU = getCompileUnit(N);
1940   if (TheCU->getDIE(N))
1941     return;
1942
1943   if (!SP.isDefinition())
1944     // This is a method declaration which will be handled while constructing
1945     // class type.
1946     return;
1947
1948   DIE *SubprogramDie = createSubprogramDIE(SP);
1949
1950   // Add to map.
1951   TheCU->insertDIE(N, SubprogramDie);
1952
1953   // Add to context owner.
1954   addToContextOwner(SubprogramDie, SP.getContext());
1955
1956   // Expose as global.
1957   TheCU->addGlobal(SP.getName(), SubprogramDie);
1958
1959   return;
1960 }
1961
1962 /// beginModule - Emit all Dwarf sections that should come prior to the
1963 /// content. Create global DIEs and emit initial debug info sections.
1964 /// This is inovked by the target AsmPrinter.
1965 void DwarfDebug::beginModule(Module *M) {
1966   if (DisableDebugInfoPrinting)
1967     return;
1968
1969   DebugInfoFinder DbgFinder;
1970   DbgFinder.processModule(*M);
1971
1972   bool HasDebugInfo = false;
1973
1974   // Scan all the compile-units to see if there are any marked as the main unit.
1975   // if not, we do not generate debug info.
1976   for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1977        E = DbgFinder.compile_unit_end(); I != E; ++I) {
1978     if (DICompileUnit(*I).isMain()) {
1979       HasDebugInfo = true;
1980       break;
1981     }
1982   }
1983
1984   if (!HasDebugInfo) return;
1985
1986   // Tell MMI that we have debug info.
1987   MMI->setDebugInfoAvailability(true);
1988
1989   // Emit initial sections.
1990   EmitSectionLabels();
1991
1992   // Create all the compile unit DIEs.
1993   for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1994          E = DbgFinder.compile_unit_end(); I != E; ++I)
1995     constructCompileUnit(*I);
1996
1997   // Create DIEs for each subprogram.
1998   for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
1999          E = DbgFinder.subprogram_end(); I != E; ++I)
2000     constructSubprogramDIE(*I);
2001
2002   // Create DIEs for each global variable.
2003   for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
2004          E = DbgFinder.global_variable_end(); I != E; ++I)
2005     constructGlobalVariableDIE(*I);
2006
2007   // Prime section data.
2008   SectionMap.insert(Asm->getObjFileLowering().getTextSection());
2009
2010   // Print out .file directives to specify files for .loc directives. These are
2011   // printed out early so that they precede any .loc directives.
2012   if (Asm->MAI->hasDotLocAndDotFile()) {
2013     for (unsigned i = 1, e = getNumSourceIds()+1; i != e; ++i) {
2014       // Remember source id starts at 1.
2015       std::pair<unsigned, unsigned> Id = getSourceDirectoryAndFileIds(i);
2016       // FIXME: don't use sys::path for this!  This should not depend on the
2017       // host.
2018       sys::Path FullPath(getSourceDirectoryName(Id.first));
2019       bool AppendOk =
2020         FullPath.appendComponent(getSourceFileName(Id.second));
2021       assert(AppendOk && "Could not append filename to directory!");
2022       AppendOk = false;
2023       Asm->OutStreamer.EmitDwarfFileDirective(i, FullPath.str());
2024     }
2025   }
2026 }
2027
2028 /// endModule - Emit all Dwarf sections that should come after the content.
2029 ///
2030 void DwarfDebug::endModule() {
2031   if (!FirstCU) return;
2032   const Module *M = MMI->getModule();
2033   if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
2034     for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
2035       if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
2036       DISubprogram SP(AllSPs->getOperand(SI));
2037       if (!SP.Verify()) continue;
2038
2039       // Collect info for variables that were optimized out.
2040       if (!SP.isDefinition()) continue;
2041       StringRef FName = SP.getLinkageName();
2042       if (FName.empty())
2043         FName = SP.getName();
2044       NamedMDNode *NMD =
2045         M->getNamedMetadata(Twine("llvm.dbg.lv.", getRealLinkageName(FName)));
2046       if (!NMD) continue;
2047       unsigned E = NMD->getNumOperands();
2048       if (!E) continue;
2049       DbgScope *Scope = new DbgScope(NULL, DIDescriptor(SP), NULL);
2050       for (unsigned I = 0; I != E; ++I) {
2051         DIVariable DV(NMD->getOperand(I));
2052         if (!DV.Verify()) continue;
2053         Scope->addVariable(new DbgVariable(DV));
2054       }
2055
2056       // Construct subprogram DIE and add variables DIEs.
2057       constructSubprogramDIE(SP);
2058       DIE *ScopeDIE = getCompileUnit(SP)->getDIE(SP);
2059       const SmallVector<DbgVariable *, 8> &Variables = Scope->getVariables();
2060       for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
2061         DIE *VariableDIE = constructVariableDIE(Variables[i], Scope);
2062         if (VariableDIE)
2063           ScopeDIE->addChild(VariableDIE);
2064       }
2065     }
2066   }
2067
2068   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
2069   for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
2070          AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
2071     DIE *ISP = *AI;
2072     addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
2073   }
2074
2075   for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
2076          CE = ContainingTypeMap.end(); CI != CE; ++CI) {
2077     DIE *SPDie = CI->first;
2078     const MDNode *N = dyn_cast_or_null<MDNode>(CI->second);
2079     if (!N) continue;
2080     DIE *NDie = getCompileUnit(N)->getDIE(N);
2081     if (!NDie) continue;
2082     addDIEEntry(SPDie, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, NDie);
2083   }
2084
2085   // Standard sections final addresses.
2086   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
2087   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
2088   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
2089   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
2090
2091   // End text sections.
2092   for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
2093     Asm->OutStreamer.SwitchSection(SectionMap[i]);
2094     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
2095   }
2096
2097   // Emit common frame information.
2098   emitCommonDebugFrame();
2099
2100   // Emit function debug frame information
2101   for (std::vector<FunctionDebugFrameInfo>::iterator I = DebugFrames.begin(),
2102          E = DebugFrames.end(); I != E; ++I)
2103     emitFunctionDebugFrame(*I);
2104
2105   // Compute DIE offsets and sizes.
2106   computeSizeAndOffsets();
2107
2108   // Emit source line correspondence into a debug line section.
2109   emitDebugLines();
2110
2111   // Emit all the DIEs into a debug info section
2112   emitDebugInfo();
2113
2114   // Corresponding abbreviations into a abbrev section.
2115   emitAbbreviations();
2116
2117   // Emit info into a debug pubnames section.
2118   emitDebugPubNames();
2119
2120   // Emit info into a debug pubtypes section.
2121   emitDebugPubTypes();
2122
2123   // Emit info into a debug loc section.
2124   emitDebugLoc();
2125
2126   // Emit info into a debug aranges section.
2127   EmitDebugARanges();
2128
2129   // Emit info into a debug ranges section.
2130   emitDebugRanges();
2131
2132   // Emit info into a debug macinfo section.
2133   emitDebugMacInfo();
2134
2135   // Emit inline info.
2136   emitDebugInlineInfo();
2137
2138   // Emit info into a debug str section.
2139   emitDebugStr();
2140
2141   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2142          E = CUMap.end(); I != E; ++I)
2143     delete I->second;
2144   FirstCU = NULL;  // Reset for the next Module, if any.
2145 }
2146
2147 /// findAbstractVariable - Find abstract variable, if any, associated with Var.
2148 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &Var,
2149                                               DebugLoc ScopeLoc) {
2150
2151   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
2152   if (AbsDbgVariable)
2153     return AbsDbgVariable;
2154
2155   LLVMContext &Ctx = Var->getContext();
2156   DbgScope *Scope = AbstractScopes.lookup(ScopeLoc.getScope(Ctx));
2157   if (!Scope)
2158     return NULL;
2159
2160   AbsDbgVariable = new DbgVariable(Var);
2161   Scope->addVariable(AbsDbgVariable);
2162   AbstractVariables[Var] = AbsDbgVariable;
2163   return AbsDbgVariable;
2164 }
2165
2166 /// collectVariableInfoFromMMITable - Collect variable information from
2167 /// side table maintained by MMI.
2168 void
2169 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction * MF,
2170                                    SmallPtrSet<const MDNode *, 16> &Processed) {
2171   const LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
2172   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
2173   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
2174          VE = VMap.end(); VI != VE; ++VI) {
2175     const MDNode *Var = VI->first;
2176     if (!Var) continue;
2177     Processed.insert(Var);
2178     DIVariable DV(Var);
2179     const std::pair<unsigned, DebugLoc> &VP = VI->second;
2180
2181     DbgScope *Scope = 0;
2182     if (const MDNode *IA = VP.second.getInlinedAt(Ctx))
2183       Scope = ConcreteScopes.lookup(IA);
2184     if (Scope == 0)
2185       Scope = DbgScopeMap.lookup(VP.second.getScope(Ctx));
2186
2187     // If variable scope is not found then skip this variable.
2188     if (Scope == 0)
2189       continue;
2190
2191     DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
2192     DbgVariable *RegVar = new DbgVariable(DV);
2193     recordVariableFrameIndex(RegVar, VP.first);
2194     Scope->addVariable(RegVar);
2195     if (AbsDbgVariable) {
2196       recordVariableFrameIndex(AbsDbgVariable, VP.first);
2197       VarToAbstractVarMap[RegVar] = AbsDbgVariable;
2198     }
2199   }
2200 }
2201
2202 /// isDbgValueInUndefinedReg - Return true if debug value, encoded by
2203 /// DBG_VALUE instruction, is in undefined reg.
2204 static bool isDbgValueInUndefinedReg(const MachineInstr *MI) {
2205   assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
2206   if (MI->getOperand(0).isReg() && !MI->getOperand(0).getReg())
2207     return true;
2208   return false;
2209 }
2210
2211 /// isDbgValueInDefinedReg - Return true if debug value, encoded by
2212 /// DBG_VALUE instruction, is in a defined reg.
2213 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
2214   assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
2215   if (MI->getOperand(0).isReg() && MI->getOperand(0).getReg())
2216     return true;
2217   return false;
2218 }
2219
2220 /// collectVariableInfo - Populate DbgScope entries with variables' info.
2221 void
2222 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
2223                                 SmallPtrSet<const MDNode *, 16> &Processed) {
2224
2225   /// collection info from MMI table.
2226   collectVariableInfoFromMMITable(MF, Processed);
2227
2228   SmallVector<const MachineInstr *, 8> DbgValues;
2229   // Collect variable information from DBG_VALUE machine instructions;
2230   for (MachineFunction::const_iterator I = Asm->MF->begin(), E = Asm->MF->end();
2231        I != E; ++I)
2232     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2233          II != IE; ++II) {
2234       const MachineInstr *MInsn = II;
2235       if (!MInsn->isDebugValue() || isDbgValueInUndefinedReg(MInsn))
2236         continue;
2237       DbgValues.push_back(MInsn);
2238     }
2239
2240   // This is a collection of DBV_VALUE instructions describing same variable.
2241   SmallVector<const MachineInstr *, 4> MultipleValues;
2242   for(SmallVector<const MachineInstr *, 8>::iterator I = DbgValues.begin(),
2243         E = DbgValues.end(); I != E; ++I) {
2244     const MachineInstr *MInsn = *I;
2245     MultipleValues.clear();
2246     if (isDbgValueInDefinedReg(MInsn))
2247       MultipleValues.push_back(MInsn);
2248     DIVariable DV(MInsn->getOperand(MInsn->getNumOperands() - 1).getMetadata());
2249     if (Processed.count(DV) != 0)
2250       continue;
2251
2252     const MachineInstr *PrevMI = MInsn;
2253     for (SmallVector<const MachineInstr *, 8>::iterator MI = I+1,
2254            ME = DbgValues.end(); MI != ME; ++MI) {
2255       const MDNode *Var =
2256         (*MI)->getOperand((*MI)->getNumOperands()-1).getMetadata();
2257       if (Var == DV && isDbgValueInDefinedReg(*MI) &&
2258           !PrevMI->isIdenticalTo(*MI))
2259         MultipleValues.push_back(*MI);
2260       PrevMI = *MI;
2261     }
2262
2263     DbgScope *Scope = findDbgScope(MInsn);
2264     bool CurFnArg = false;
2265     if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
2266         DISubprogram(DV.getContext()).describes(MF->getFunction()))
2267       CurFnArg = true;
2268     if (!Scope && CurFnArg)
2269       Scope = CurrentFnDbgScope;
2270     // If variable scope is not found then skip this variable.
2271     if (!Scope)
2272       continue;
2273
2274     Processed.insert(DV);
2275     DbgVariable *RegVar = new DbgVariable(DV);
2276     Scope->addVariable(RegVar);
2277     if (!CurFnArg)
2278       DbgVariableLabelsMap[RegVar] = getLabelBeforeInsn(MInsn);
2279     if (DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc())) {
2280       DbgVariableToDbgInstMap[AbsVar] = MInsn;
2281       VarToAbstractVarMap[RegVar] = AbsVar;
2282     }
2283     if (MultipleValues.size() <= 1) {
2284       DbgVariableToDbgInstMap[RegVar] = MInsn;
2285       continue;
2286     }
2287
2288     // handle multiple DBG_VALUE instructions describing one variable.
2289     if (DotDebugLocEntries.empty())
2290       RegVar->setDotDebugLocOffset(0);
2291     else
2292       RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
2293     const MachineInstr *Begin = NULL;
2294     const MachineInstr *End = NULL;
2295     for (SmallVector<const MachineInstr *, 4>::iterator
2296            MVI = MultipleValues.begin(), MVE = MultipleValues.end();
2297          MVI != MVE; ++MVI) {
2298       if (!Begin) {
2299         Begin = *MVI;
2300         continue;
2301       }
2302       End = *MVI;
2303       MachineLocation MLoc;
2304       MLoc.set(Begin->getOperand(0).getReg(), 0);
2305       const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
2306       const MCSymbol *SLabel = getLabelBeforeInsn(End);
2307       DotDebugLocEntries.push_back(DotDebugLocEntry(FLabel, SLabel, MLoc));
2308       Begin = End;
2309       if (MVI + 1 == MVE) {
2310         // If End is the last instruction then its value is valid
2311         // until the end of the funtion.
2312         MLoc.set(End->getOperand(0).getReg(), 0);
2313         DotDebugLocEntries.
2314           push_back(DotDebugLocEntry(SLabel, FunctionEndSym, MLoc));
2315       }
2316     }
2317     DotDebugLocEntries.push_back(DotDebugLocEntry());
2318   }
2319
2320   // Collect info for variables that were optimized out.
2321   const Function *F = MF->getFunction();
2322   const Module *M = F->getParent();
2323   if (NamedMDNode *NMD =
2324       M->getNamedMetadata(Twine("llvm.dbg.lv.",
2325                                 getRealLinkageName(F->getName())))) {
2326     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
2327       DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
2328       if (!DV || !Processed.insert(DV))
2329         continue;
2330       DbgScope *Scope = DbgScopeMap.lookup(DV.getContext());
2331       if (Scope)
2332         Scope->addVariable(new DbgVariable(DV));
2333     }
2334   }
2335 }
2336
2337 /// getLabelBeforeInsn - Return Label preceding the instruction.
2338 const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
2339   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
2340     LabelsBeforeInsn.find(MI);
2341   if (I == LabelsBeforeInsn.end())
2342     // FunctionBeginSym always preceeds all the instruction in current function.
2343     return FunctionBeginSym;
2344   return I->second;
2345 }
2346
2347 /// getLabelAfterInsn - Return Label immediately following the instruction.
2348 const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
2349   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
2350     LabelsAfterInsn.find(MI);
2351   if (I == LabelsAfterInsn.end())
2352     return NULL;
2353   return I->second;
2354 }
2355
2356 /// beginScope - Process beginning of a scope.
2357 void DwarfDebug::beginScope(const MachineInstr *MI) {
2358   if (InsnNeedsLabel.count(MI) == 0) {
2359     LabelsBeforeInsn[MI] = PrevLabel;
2360     return;
2361   }
2362
2363   // Check location.
2364   DebugLoc DL = MI->getDebugLoc();
2365   if (!DL.isUnknown()) {
2366     const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
2367     PrevLabel = recordSourceLine(DL.getLine(), DL.getCol(), Scope);
2368     PrevInstLoc = DL;
2369     LabelsBeforeInsn[MI] = PrevLabel;
2370     return;
2371   }
2372
2373   // If location is unknown then use temp label for this DBG_VALUE
2374   // instruction.
2375   if (MI->isDebugValue()) {
2376     PrevLabel = MMI->getContext().CreateTempSymbol();
2377     Asm->OutStreamer.EmitLabel(PrevLabel);
2378     LabelsBeforeInsn[MI] = PrevLabel;
2379     return;
2380   }
2381
2382   if (UnknownLocations) {
2383     PrevLabel = recordSourceLine(0, 0, 0);
2384     LabelsBeforeInsn[MI] = PrevLabel;
2385     return;
2386   }
2387
2388   assert (0 && "Instruction is not processed!");
2389 }
2390
2391 /// endScope - Process end of a scope.
2392 void DwarfDebug::endScope(const MachineInstr *MI) {
2393   if (InsnsEndScopeSet.count(MI) != 0) {
2394     // Emit a label if this instruction ends a scope.
2395     MCSymbol *Label = MMI->getContext().CreateTempSymbol();
2396     Asm->OutStreamer.EmitLabel(Label);
2397     LabelsAfterInsn[MI] = Label;
2398   }
2399 }
2400
2401 /// getOrCreateDbgScope - Create DbgScope for the scope.
2402 DbgScope *DwarfDebug::getOrCreateDbgScope(const MDNode *Scope,
2403                                           const MDNode *InlinedAt) {
2404   if (!InlinedAt) {
2405     DbgScope *WScope = DbgScopeMap.lookup(Scope);
2406     if (WScope)
2407       return WScope;
2408     WScope = new DbgScope(NULL, DIDescriptor(Scope), NULL);
2409     DbgScopeMap.insert(std::make_pair(Scope, WScope));
2410     if (DIDescriptor(Scope).isLexicalBlock()) {
2411       DbgScope *Parent =
2412         getOrCreateDbgScope(DILexicalBlock(Scope).getContext(), NULL);
2413       WScope->setParent(Parent);
2414       Parent->addScope(WScope);
2415     }
2416
2417     if (!WScope->getParent()) {
2418       StringRef SPName = DISubprogram(Scope).getLinkageName();
2419       // We used to check only for a linkage name, but that fails
2420       // since we began omitting the linkage name for private
2421       // functions.  The new way is to check for the name in metadata,
2422       // but that's not supported in old .ll test cases.  Ergo, we
2423       // check both.
2424       if (SPName == Asm->MF->getFunction()->getName() ||
2425           DISubprogram(Scope).getFunction() == Asm->MF->getFunction())
2426         CurrentFnDbgScope = WScope;
2427     }
2428
2429     return WScope;
2430   }
2431
2432   getOrCreateAbstractScope(Scope);
2433   DbgScope *WScope = DbgScopeMap.lookup(InlinedAt);
2434   if (WScope)
2435     return WScope;
2436
2437   WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt);
2438   DbgScopeMap.insert(std::make_pair(InlinedAt, WScope));
2439   DILocation DL(InlinedAt);
2440   DbgScope *Parent =
2441     getOrCreateDbgScope(DL.getScope(), DL.getOrigLocation());
2442   WScope->setParent(Parent);
2443   Parent->addScope(WScope);
2444
2445   ConcreteScopes[InlinedAt] = WScope;
2446
2447   return WScope;
2448 }
2449
2450 /// hasValidLocation - Return true if debug location entry attached with
2451 /// machine instruction encodes valid location info.
2452 static bool hasValidLocation(LLVMContext &Ctx,
2453                              const MachineInstr *MInsn,
2454                              const MDNode *&Scope, const MDNode *&InlinedAt) {
2455   DebugLoc DL = MInsn->getDebugLoc();
2456   if (DL.isUnknown()) return false;
2457
2458   const MDNode *S = DL.getScope(Ctx);
2459
2460   // There is no need to create another DIE for compile unit. For all
2461   // other scopes, create one DbgScope now. This will be translated
2462   // into a scope DIE at the end.
2463   if (DIScope(S).isCompileUnit()) return false;
2464
2465   Scope = S;
2466   InlinedAt = DL.getInlinedAt(Ctx);
2467   return true;
2468 }
2469
2470 /// calculateDominanceGraph - Calculate dominance graph for DbgScope
2471 /// hierarchy.
2472 static void calculateDominanceGraph(DbgScope *Scope) {
2473   assert (Scope && "Unable to calculate scop edominance graph!");
2474   SmallVector<DbgScope *, 4> WorkStack;
2475   WorkStack.push_back(Scope);
2476   unsigned Counter = 0;
2477   while (!WorkStack.empty()) {
2478     DbgScope *WS = WorkStack.back();
2479     const SmallVector<DbgScope *, 4> &Children = WS->getScopes();
2480     bool visitedChildren = false;
2481     for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
2482            SE = Children.end(); SI != SE; ++SI) {
2483       DbgScope *ChildScope = *SI;
2484       if (!ChildScope->getDFSOut()) {
2485         WorkStack.push_back(ChildScope);
2486         visitedChildren = true;
2487         ChildScope->setDFSIn(++Counter);
2488         break;
2489       }
2490     }
2491     if (!visitedChildren) {
2492       WorkStack.pop_back();
2493       WS->setDFSOut(++Counter);
2494     }
2495   }
2496 }
2497
2498 /// printDbgScopeInfo - Print DbgScope info for each machine instruction.
2499 static
2500 void printDbgScopeInfo(LLVMContext &Ctx, const MachineFunction *MF,
2501                        DenseMap<const MachineInstr *, DbgScope *> &MI2ScopeMap)
2502 {
2503 #ifndef NDEBUG
2504   unsigned PrevDFSIn = 0;
2505   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
2506        I != E; ++I) {
2507     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2508          II != IE; ++II) {
2509       const MachineInstr *MInsn = II;
2510       const MDNode *Scope = NULL;
2511       const MDNode *InlinedAt = NULL;
2512
2513       // Check if instruction has valid location information.
2514       if (hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
2515         dbgs() << " [ ";
2516         if (InlinedAt)
2517           dbgs() << "*";
2518         DenseMap<const MachineInstr *, DbgScope *>::iterator DI =
2519           MI2ScopeMap.find(MInsn);
2520         if (DI != MI2ScopeMap.end()) {
2521           DbgScope *S = DI->second;
2522           dbgs() << S->getDFSIn();
2523           PrevDFSIn = S->getDFSIn();
2524         } else
2525           dbgs() << PrevDFSIn;
2526       } else
2527         dbgs() << " [ x" << PrevDFSIn;
2528       dbgs() << " ]";
2529       MInsn->dump();
2530     }
2531     dbgs() << "\n";
2532   }
2533 #endif
2534 }
2535 /// extractScopeInformation - Scan machine instructions in this function
2536 /// and collect DbgScopes. Return true, if at least one scope was found.
2537 bool DwarfDebug::extractScopeInformation() {
2538   // If scope information was extracted using .dbg intrinsics then there is not
2539   // any need to extract these information by scanning each instruction.
2540   if (!DbgScopeMap.empty())
2541     return false;
2542
2543   // Scan each instruction and create scopes. First build working set of scopes.
2544   LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
2545   SmallVector<DbgRange, 4> MIRanges;
2546   DenseMap<const MachineInstr *, DbgScope *> MI2ScopeMap;
2547   const MDNode *PrevScope = NULL;
2548   const MDNode *PrevInlinedAt = NULL;
2549   const MachineInstr *RangeBeginMI = NULL;
2550   const MachineInstr *PrevMI = NULL;
2551   for (MachineFunction::const_iterator I = Asm->MF->begin(), E = Asm->MF->end();
2552        I != E; ++I) {
2553     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2554          II != IE; ++II) {
2555       const MachineInstr *MInsn = II;
2556       const MDNode *Scope = NULL;
2557       const MDNode *InlinedAt = NULL;
2558
2559       // Check if instruction has valid location information.
2560       if (!hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
2561         PrevMI = MInsn;
2562         continue;
2563       }
2564
2565       // If scope has not changed then skip this instruction.
2566       if (Scope == PrevScope && PrevInlinedAt == InlinedAt) {
2567         PrevMI = MInsn;
2568         continue;
2569       }
2570
2571       if (RangeBeginMI) {
2572         // If we have alread seen a beginning of a instruction range and
2573         // current instruction scope does not match scope of first instruction
2574         // in this range then create a new instruction range.
2575         DbgRange R(RangeBeginMI, PrevMI);
2576         MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope,
2577                                                         PrevInlinedAt);
2578         MIRanges.push_back(R);
2579       }
2580
2581       // This is a beginning of a new instruction range.
2582       RangeBeginMI = MInsn;
2583
2584       // Reset previous markers.
2585       PrevMI = MInsn;
2586       PrevScope = Scope;
2587       PrevInlinedAt = InlinedAt;
2588     }
2589   }
2590
2591   // Create last instruction range.
2592   if (RangeBeginMI && PrevMI && PrevScope) {
2593     DbgRange R(RangeBeginMI, PrevMI);
2594     MIRanges.push_back(R);
2595     MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope, PrevInlinedAt);
2596   }
2597
2598   if (!CurrentFnDbgScope)
2599     return false;
2600
2601   calculateDominanceGraph(CurrentFnDbgScope);
2602   if (PrintDbgScope)
2603     printDbgScopeInfo(Ctx, Asm->MF, MI2ScopeMap);
2604
2605   // Find ranges of instructions covered by each DbgScope;
2606   DbgScope *PrevDbgScope = NULL;
2607   for (SmallVector<DbgRange, 4>::const_iterator RI = MIRanges.begin(),
2608          RE = MIRanges.end(); RI != RE; ++RI) {
2609     const DbgRange &R = *RI;
2610     DbgScope *S = MI2ScopeMap.lookup(R.first);
2611     assert (S && "Lost DbgScope for a machine instruction!");
2612     if (PrevDbgScope && !PrevDbgScope->dominates(S))
2613       PrevDbgScope->closeInsnRange(S);
2614     S->openInsnRange(R.first);
2615     S->extendInsnRange(R.second);
2616     PrevDbgScope = S;
2617   }
2618
2619   if (PrevDbgScope)
2620     PrevDbgScope->closeInsnRange();
2621
2622   identifyScopeMarkers();
2623
2624   return !DbgScopeMap.empty();
2625 }
2626
2627 /// identifyScopeMarkers() -
2628 /// Each DbgScope has first instruction and last instruction to mark beginning
2629 /// and end of a scope respectively. Create an inverse map that list scopes
2630 /// starts (and ends) with an instruction. One instruction may start (or end)
2631 /// multiple scopes. Ignore scopes that are not reachable.
2632 void DwarfDebug::identifyScopeMarkers() {
2633   SmallVector<DbgScope *, 4> WorkList;
2634   WorkList.push_back(CurrentFnDbgScope);
2635   while (!WorkList.empty()) {
2636     DbgScope *S = WorkList.pop_back_val();
2637
2638     const SmallVector<DbgScope *, 4> &Children = S->getScopes();
2639     if (!Children.empty())
2640       for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
2641              SE = Children.end(); SI != SE; ++SI)
2642         WorkList.push_back(*SI);
2643
2644     if (S->isAbstractScope())
2645       continue;
2646
2647     const SmallVector<DbgRange, 4> &Ranges = S->getRanges();
2648     if (Ranges.empty())
2649       continue;
2650     for (SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin(),
2651            RE = Ranges.end(); RI != RE; ++RI) {
2652       assert(RI->first && "DbgRange does not have first instruction!");
2653       assert(RI->second && "DbgRange does not have second instruction!");
2654       InsnsEndScopeSet.insert(RI->second);
2655     }
2656   }
2657 }
2658
2659 /// FindFirstDebugLoc - Find the first debug location in the function. This
2660 /// is intended to be an approximation for the source position of the
2661 /// beginning of the function.
2662 static DebugLoc FindFirstDebugLoc(const MachineFunction *MF) {
2663   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
2664        I != E; ++I)
2665     for (MachineBasicBlock::const_iterator MBBI = I->begin(), MBBE = I->end();
2666          MBBI != MBBE; ++MBBI) {
2667       DebugLoc DL = MBBI->getDebugLoc();
2668       if (!DL.isUnknown())
2669         return DL;
2670     }
2671   return DebugLoc();
2672 }
2673
2674 /// beginFunction - Gather pre-function debug information.  Assumes being
2675 /// emitted immediately after the function entry point.
2676 void DwarfDebug::beginFunction(const MachineFunction *MF) {
2677   if (!MMI->hasDebugInfo()) return;
2678   if (!extractScopeInformation()) return;
2679
2680   FunctionBeginSym = Asm->GetTempSymbol("func_begin",
2681                                         Asm->getFunctionNumber());
2682   // Assumes in correct section after the entry point.
2683   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
2684
2685   // Emit label for the implicitly defined dbg.stoppoint at the start of the
2686   // function.
2687   DebugLoc FDL = FindFirstDebugLoc(MF);
2688   if (FDL.isUnknown()) return;
2689
2690   const MDNode *Scope = FDL.getScope(MF->getFunction()->getContext());
2691   const MDNode *TheScope = 0;
2692
2693   DISubprogram SP = getDISubprogram(Scope);
2694   unsigned Line, Col;
2695   if (SP.Verify()) {
2696     Line = SP.getLineNumber();
2697     Col = 0;
2698     TheScope = SP;
2699   } else {
2700     Line = FDL.getLine();
2701     Col = FDL.getCol();
2702     TheScope = Scope;
2703   }
2704
2705   recordSourceLine(Line, Col, TheScope);
2706
2707   /// ProcessedArgs - Collection of arguments already processed.
2708   SmallPtrSet<const MDNode *, 8> ProcessedArgs;
2709
2710   DebugLoc PrevLoc;
2711   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
2712        I != E; ++I)
2713     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2714          II != IE; ++II) {
2715       const MachineInstr *MI = II;
2716       DebugLoc DL = MI->getDebugLoc();
2717       if (MI->isDebugValue()) {
2718         assert (MI->getNumOperands() > 1 && "Invalid machine instruction!");
2719         DIVariable DV(MI->getOperand(MI->getNumOperands() - 1).getMetadata());
2720         if (!DV.Verify()) continue;
2721         // If DBG_VALUE is for a local variable then it needs a label.
2722         if (DV.getTag() != dwarf::DW_TAG_arg_variable
2723             && isDbgValueInUndefinedReg(MI) == false)
2724           InsnNeedsLabel.insert(MI);
2725         // DBG_VALUE for inlined functions argument needs a label.
2726         else if (!DISubprogram(getDISubprogram(DV.getContext())).
2727                  describes(MF->getFunction()))
2728           InsnNeedsLabel.insert(MI);
2729         // DBG_VALUE indicating argument location change needs a label.
2730         else if (isDbgValueInUndefinedReg(MI) == false
2731                  && !ProcessedArgs.insert(DV))
2732           InsnNeedsLabel.insert(MI);
2733       } else {
2734         // If location is unknown then instruction needs a location only if
2735         // UnknownLocations flag is set.
2736         if (DL.isUnknown()) {
2737           if (UnknownLocations && !PrevLoc.isUnknown())
2738             InsnNeedsLabel.insert(MI);
2739         } else if (DL != PrevLoc)
2740           // Otherwise, instruction needs a location only if it is new location.
2741           InsnNeedsLabel.insert(MI);
2742       }
2743
2744       if (!DL.isUnknown() || UnknownLocations)
2745         PrevLoc = DL;
2746     }
2747
2748   PrevLabel = FunctionBeginSym;
2749 }
2750
2751 /// endFunction - Gather and emit post-function debug information.
2752 ///
2753 void DwarfDebug::endFunction(const MachineFunction *MF) {
2754   if (!MMI->hasDebugInfo() || DbgScopeMap.empty()) return;
2755
2756   if (CurrentFnDbgScope) {
2757
2758     // Define end label for subprogram.
2759     FunctionEndSym = Asm->GetTempSymbol("func_end",
2760                                         Asm->getFunctionNumber());
2761     // Assumes in correct section after the entry point.
2762     Asm->OutStreamer.EmitLabel(FunctionEndSym);
2763
2764     SmallPtrSet<const MDNode *, 16> ProcessedVars;
2765     collectVariableInfo(MF, ProcessedVars);
2766
2767     // Get function line info.
2768     if (!Lines.empty()) {
2769       // Get section line info.
2770       unsigned ID = SectionMap.insert(Asm->getCurrentSection());
2771       if (SectionSourceLines.size() < ID) SectionSourceLines.resize(ID);
2772       std::vector<SrcLineInfo> &SectionLineInfos = SectionSourceLines[ID-1];
2773       // Append the function info to section info.
2774       SectionLineInfos.insert(SectionLineInfos.end(),
2775                               Lines.begin(), Lines.end());
2776     }
2777
2778     // Construct abstract scopes.
2779     for (SmallVector<DbgScope *, 4>::iterator AI = AbstractScopesList.begin(),
2780            AE = AbstractScopesList.end(); AI != AE; ++AI) {
2781       DISubprogram SP((*AI)->getScopeNode());
2782       if (SP.Verify()) {
2783         // Collect info for variables that were optimized out.
2784         StringRef FName = SP.getLinkageName();
2785         if (FName.empty())
2786           FName = SP.getName();
2787         const Module *M = MF->getFunction()->getParent();
2788         if (NamedMDNode *NMD =
2789             M->getNamedMetadata(Twine("llvm.dbg.lv.",
2790                                       getRealLinkageName(FName)))) {
2791           for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
2792           DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
2793           if (!DV || !ProcessedVars.insert(DV))
2794             continue;
2795           DbgScope *Scope = AbstractScopes.lookup(DV.getContext());
2796           if (Scope)
2797             Scope->addVariable(new DbgVariable(DV));
2798           }
2799         }
2800       }
2801       if (ProcessedSPNodes.count((*AI)->getScopeNode()) == 0)
2802         constructScopeDIE(*AI);
2803     }
2804
2805     DIE *CurFnDIE = constructScopeDIE(CurrentFnDbgScope);
2806
2807     if (!DisableFramePointerElim(*MF))
2808       addUInt(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr,
2809               dwarf::DW_FORM_flag, 1);
2810
2811
2812     DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
2813                                                  MMI->getFrameMoves()));
2814   }
2815
2816   // Clear debug info
2817   CurrentFnDbgScope = NULL;
2818   InsnNeedsLabel.clear();
2819   DbgVariableToFrameIndexMap.clear();
2820   VarToAbstractVarMap.clear();
2821   DbgVariableToDbgInstMap.clear();
2822   DbgVariableLabelsMap.clear();
2823   DeleteContainerSeconds(DbgScopeMap);
2824   InsnsEndScopeSet.clear();
2825   ConcreteScopes.clear();
2826   DeleteContainerSeconds(AbstractScopes);
2827   AbstractScopesList.clear();
2828   AbstractVariables.clear();
2829   LabelsBeforeInsn.clear();
2830   LabelsAfterInsn.clear();
2831   Lines.clear();
2832   PrevLabel = NULL;
2833 }
2834
2835 /// recordVariableFrameIndex - Record a variable's index.
2836 void DwarfDebug::recordVariableFrameIndex(const DbgVariable *V, int Index) {
2837   assert (V && "Invalid DbgVariable!");
2838   DbgVariableToFrameIndexMap[V] = Index;
2839 }
2840
2841 /// findVariableFrameIndex - Return true if frame index for the variable
2842 /// is found. Update FI to hold value of the index.
2843 bool DwarfDebug::findVariableFrameIndex(const DbgVariable *V, int *FI) {
2844   assert (V && "Invalid DbgVariable!");
2845   DenseMap<const DbgVariable *, int>::iterator I =
2846     DbgVariableToFrameIndexMap.find(V);
2847   if (I == DbgVariableToFrameIndexMap.end())
2848     return false;
2849   *FI = I->second;
2850   return true;
2851 }
2852
2853 /// findVariableLabel - Find MCSymbol for the variable.
2854 const MCSymbol *DwarfDebug::findVariableLabel(const DbgVariable *V) {
2855   DenseMap<const DbgVariable *, const MCSymbol *>::iterator I
2856     = DbgVariableLabelsMap.find(V);
2857   if (I == DbgVariableLabelsMap.end())
2858     return NULL;
2859   else return I->second;
2860 }
2861
2862 /// findDbgScope - Find DbgScope for the debug loc attached with an
2863 /// instruction.
2864 DbgScope *DwarfDebug::findDbgScope(const MachineInstr *MInsn) {
2865   DbgScope *Scope = NULL;
2866   LLVMContext &Ctx =
2867     MInsn->getParent()->getParent()->getFunction()->getContext();
2868   DebugLoc DL = MInsn->getDebugLoc();
2869
2870   if (DL.isUnknown())
2871     return Scope;
2872
2873   if (const MDNode *IA = DL.getInlinedAt(Ctx))
2874     Scope = ConcreteScopes.lookup(IA);
2875   if (Scope == 0)
2876     Scope = DbgScopeMap.lookup(DL.getScope(Ctx));
2877
2878   return Scope;
2879 }
2880
2881
2882 /// recordSourceLine - Register a source line with debug info. Returns the
2883 /// unique label that was emitted and which provides correspondence to
2884 /// the source line list.
2885 MCSymbol *DwarfDebug::recordSourceLine(unsigned Line, unsigned Col,
2886                                        const MDNode *S) {
2887   StringRef Dir;
2888   StringRef Fn;
2889
2890   unsigned Src = 1;
2891   if (S) {
2892     DIDescriptor Scope(S);
2893
2894     if (Scope.isCompileUnit()) {
2895       DICompileUnit CU(S);
2896       Dir = CU.getDirectory();
2897       Fn = CU.getFilename();
2898     } else if (Scope.isSubprogram()) {
2899       DISubprogram SP(S);
2900       Dir = SP.getDirectory();
2901       Fn = SP.getFilename();
2902     } else if (Scope.isLexicalBlock()) {
2903       DILexicalBlock DB(S);
2904       Dir = DB.getDirectory();
2905       Fn = DB.getFilename();
2906     } else
2907       assert(0 && "Unexpected scope info");
2908
2909     Src = GetOrCreateSourceID(Dir, Fn);
2910   }
2911
2912   MCSymbol *Label = MMI->getContext().CreateTempSymbol();
2913   Lines.push_back(SrcLineInfo(Line, Col, Src, Label));
2914
2915   Asm->OutStreamer.EmitLabel(Label);
2916   return Label;
2917 }
2918
2919 //===----------------------------------------------------------------------===//
2920 // Emit Methods
2921 //===----------------------------------------------------------------------===//
2922
2923 /// computeSizeAndOffset - Compute the size and offset of a DIE.
2924 ///
2925 unsigned
2926 DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
2927   // Get the children.
2928   const std::vector<DIE *> &Children = Die->getChildren();
2929
2930   // If not last sibling and has children then add sibling offset attribute.
2931   if (!Last && !Children.empty())
2932     Die->addSiblingOffset(DIEValueAllocator);
2933
2934   // Record the abbreviation.
2935   assignAbbrevNumber(Die->getAbbrev());
2936
2937   // Get the abbreviation for this DIE.
2938   unsigned AbbrevNumber = Die->getAbbrevNumber();
2939   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2940
2941   // Set DIE offset
2942   Die->setOffset(Offset);
2943
2944   // Start the size with the size of abbreviation code.
2945   Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
2946
2947   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2948   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2949
2950   // Size the DIE attribute values.
2951   for (unsigned i = 0, N = Values.size(); i < N; ++i)
2952     // Size attribute value.
2953     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
2954
2955   // Size the DIE children if any.
2956   if (!Children.empty()) {
2957     assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
2958            "Children flag not set");
2959
2960     for (unsigned j = 0, M = Children.size(); j < M; ++j)
2961       Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
2962
2963     // End of children marker.
2964     Offset += sizeof(int8_t);
2965   }
2966
2967   Die->setSize(Offset - Die->getOffset());
2968   return Offset;
2969 }
2970
2971 /// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
2972 ///
2973 void DwarfDebug::computeSizeAndOffsets() {
2974   unsigned PrevOffset = 0;
2975   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2976          E = CUMap.end(); I != E; ++I) {
2977     // Compute size of compile unit header.
2978     static unsigned Offset = PrevOffset +
2979       sizeof(int32_t) + // Length of Compilation Unit Info
2980       sizeof(int16_t) + // DWARF version number
2981       sizeof(int32_t) + // Offset Into Abbrev. Section
2982       sizeof(int8_t);   // Pointer Size (in bytes)
2983     computeSizeAndOffset(I->second->getCUDie(), Offset, true);
2984     PrevOffset = Offset;
2985   }
2986 }
2987
2988 /// EmitSectionSym - Switch to the specified MCSection and emit an assembler
2989 /// temporary label to it if SymbolStem is specified.
2990 static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
2991                                 const char *SymbolStem = 0) {
2992   Asm->OutStreamer.SwitchSection(Section);
2993   if (!SymbolStem) return 0;
2994
2995   MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
2996   Asm->OutStreamer.EmitLabel(TmpSym);
2997   return TmpSym;
2998 }
2999
3000 /// EmitSectionLabels - Emit initial Dwarf sections with a label at
3001 /// the start of each one.
3002 void DwarfDebug::EmitSectionLabels() {
3003   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
3004
3005   // Dwarf sections base addresses.
3006   if (Asm->MAI->doesDwarfRequireFrameSection()) {
3007     DwarfFrameSectionSym =
3008       EmitSectionSym(Asm, TLOF.getDwarfFrameSection(), "section_debug_frame");
3009    }
3010
3011   DwarfInfoSectionSym =
3012     EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
3013   DwarfAbbrevSectionSym =
3014     EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
3015   EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
3016
3017   if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
3018     EmitSectionSym(Asm, MacroInfo);
3019
3020   DwarfDebugLineSectionSym =
3021     EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
3022   EmitSectionSym(Asm, TLOF.getDwarfLocSection());
3023   EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
3024   EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
3025   DwarfStrSectionSym =
3026     EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
3027   DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
3028                                              "debug_range");
3029
3030   DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
3031                                            "section_debug_loc");
3032
3033   TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
3034   EmitSectionSym(Asm, TLOF.getDataSection());
3035 }
3036
3037 /// emitDIE - Recusively Emits a debug information entry.
3038 ///
3039 void DwarfDebug::emitDIE(DIE *Die) {
3040   // Get the abbreviation for this DIE.
3041   unsigned AbbrevNumber = Die->getAbbrevNumber();
3042   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
3043
3044   // Emit the code (index) for the abbreviation.
3045   if (Asm->isVerbose())
3046     Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
3047                                 Twine::utohexstr(Die->getOffset()) + ":0x" +
3048                                 Twine::utohexstr(Die->getSize()) + " " +
3049                                 dwarf::TagString(Abbrev->getTag()));
3050   Asm->EmitULEB128(AbbrevNumber);
3051
3052   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
3053   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
3054
3055   // Emit the DIE attribute values.
3056   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
3057     unsigned Attr = AbbrevData[i].getAttribute();
3058     unsigned Form = AbbrevData[i].getForm();
3059     assert(Form && "Too many attributes for DIE (check abbreviation)");
3060
3061     if (Asm->isVerbose())
3062       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
3063
3064     switch (Attr) {
3065     case dwarf::DW_AT_sibling:
3066       Asm->EmitInt32(Die->getSiblingOffset());
3067       break;
3068     case dwarf::DW_AT_abstract_origin: {
3069       DIEEntry *E = cast<DIEEntry>(Values[i]);
3070       DIE *Origin = E->getEntry();
3071       unsigned Addr = Origin->getOffset();
3072       Asm->EmitInt32(Addr);
3073       break;
3074     }
3075     case dwarf::DW_AT_ranges: {
3076       // DW_AT_range Value encodes offset in debug_range section.
3077       DIEInteger *V = cast<DIEInteger>(Values[i]);
3078       Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
3079                                      V->getValue(),
3080                                      DwarfDebugRangeSectionSym,
3081                                      4);
3082       break;
3083     }
3084     case dwarf::DW_AT_stmt_list: {
3085       Asm->EmitLabelDifference(CurrentLineSectionSym,
3086                                DwarfDebugLineSectionSym, 4);
3087       break;
3088     }
3089     case dwarf::DW_AT_location: {
3090       if (UseDotDebugLocEntry.count(Die) != 0) {
3091         DIELabel *L = cast<DIELabel>(Values[i]);
3092         Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
3093       } else
3094         Values[i]->EmitValue(Asm, Form);
3095       break;
3096     }
3097     default:
3098       // Emit an attribute using the defined form.
3099       Values[i]->EmitValue(Asm, Form);
3100       break;
3101     }
3102   }
3103
3104   // Emit the DIE children if any.
3105   if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
3106     const std::vector<DIE *> &Children = Die->getChildren();
3107
3108     for (unsigned j = 0, M = Children.size(); j < M; ++j)
3109       emitDIE(Children[j]);
3110
3111     if (Asm->isVerbose())
3112       Asm->OutStreamer.AddComment("End Of Children Mark");
3113     Asm->EmitInt8(0);
3114   }
3115 }
3116
3117 /// emitDebugInfo - Emit the debug info section.
3118 ///
3119 void DwarfDebug::emitDebugInfo() {
3120   // Start debug info section.
3121   Asm->OutStreamer.SwitchSection(
3122                             Asm->getObjFileLowering().getDwarfInfoSection());
3123   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
3124          E = CUMap.end(); I != E; ++I) {
3125     CompileUnit *TheCU = I->second;
3126     DIE *Die = TheCU->getCUDie();
3127
3128     // Emit the compile units header.
3129     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
3130                                                   TheCU->getID()));
3131
3132     // Emit size of content not including length itself
3133     unsigned ContentSize = Die->getSize() +
3134       sizeof(int16_t) + // DWARF version number
3135       sizeof(int32_t) + // Offset Into Abbrev. Section
3136       sizeof(int8_t) +  // Pointer Size (in bytes)
3137       sizeof(int32_t);  // FIXME - extra pad for gdb bug.
3138
3139     Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
3140     Asm->EmitInt32(ContentSize);
3141     Asm->OutStreamer.AddComment("DWARF version number");
3142     Asm->EmitInt16(dwarf::DWARF_VERSION);
3143     Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
3144     Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
3145                            DwarfAbbrevSectionSym);
3146     Asm->OutStreamer.AddComment("Address Size (in bytes)");
3147     Asm->EmitInt8(Asm->getTargetData().getPointerSize());
3148
3149     emitDIE(Die);
3150     // FIXME - extra padding for gdb bug.
3151     Asm->OutStreamer.AddComment("4 extra padding bytes for GDB");
3152     Asm->EmitInt8(0);
3153     Asm->EmitInt8(0);
3154     Asm->EmitInt8(0);
3155     Asm->EmitInt8(0);
3156     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
3157   }
3158 }
3159
3160 /// emitAbbreviations - Emit the abbreviation section.
3161 ///
3162 void DwarfDebug::emitAbbreviations() const {
3163   // Check to see if it is worth the effort.
3164   if (!Abbreviations.empty()) {
3165     // Start the debug abbrev section.
3166     Asm->OutStreamer.SwitchSection(
3167                             Asm->getObjFileLowering().getDwarfAbbrevSection());
3168
3169     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
3170
3171     // For each abbrevation.
3172     for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
3173       // Get abbreviation data
3174       const DIEAbbrev *Abbrev = Abbreviations[i];
3175
3176       // Emit the abbrevations code (base 1 index.)
3177       Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
3178
3179       // Emit the abbreviations data.
3180       Abbrev->Emit(Asm);
3181     }
3182
3183     // Mark end of abbreviations.
3184     Asm->EmitULEB128(0, "EOM(3)");
3185
3186     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
3187   }
3188 }
3189
3190 /// emitEndOfLineMatrix - Emit the last address of the section and the end of
3191 /// the line matrix.
3192 ///
3193 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
3194   // Define last address of section.
3195   Asm->OutStreamer.AddComment("Extended Op");
3196   Asm->EmitInt8(0);
3197
3198   Asm->OutStreamer.AddComment("Op size");
3199   Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
3200   Asm->OutStreamer.AddComment("DW_LNE_set_address");
3201   Asm->EmitInt8(dwarf::DW_LNE_set_address);
3202
3203   Asm->OutStreamer.AddComment("Section end label");
3204
3205   Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
3206                                    Asm->getTargetData().getPointerSize(),
3207                                    0/*AddrSpace*/);
3208
3209   // Mark end of matrix.
3210   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
3211   Asm->EmitInt8(0);
3212   Asm->EmitInt8(1);
3213   Asm->EmitInt8(1);
3214 }
3215
3216 /// emitDebugLines - Emit source line information.
3217 ///
3218 void DwarfDebug::emitDebugLines() {
3219   // If the target is using .loc/.file, the assembler will be emitting the
3220   // .debug_line table automatically.
3221   if (Asm->MAI->hasDotLocAndDotFile())
3222     return;
3223
3224   // Minimum line delta, thus ranging from -10..(255-10).
3225   const int MinLineDelta = -(dwarf::DW_LNS_fixed_advance_pc + 1);
3226   // Maximum line delta, thus ranging from -10..(255-10).
3227   const int MaxLineDelta = 255 + MinLineDelta;
3228
3229   // Start the dwarf line section.
3230   Asm->OutStreamer.SwitchSection(
3231                             Asm->getObjFileLowering().getDwarfLineSection());
3232
3233   // Construct the section header.
3234   CurrentLineSectionSym = Asm->GetTempSymbol("section_line_begin");
3235   Asm->OutStreamer.EmitLabel(CurrentLineSectionSym);
3236   Asm->OutStreamer.AddComment("Length of Source Line Info");
3237   Asm->EmitLabelDifference(Asm->GetTempSymbol("line_end"),
3238                            Asm->GetTempSymbol("line_begin"), 4);
3239   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("line_begin"));
3240
3241   Asm->OutStreamer.AddComment("DWARF version number");
3242   Asm->EmitInt16(dwarf::DWARF_VERSION);
3243
3244   Asm->OutStreamer.AddComment("Prolog Length");
3245   Asm->EmitLabelDifference(Asm->GetTempSymbol("line_prolog_end"),
3246                            Asm->GetTempSymbol("line_prolog_begin"), 4);
3247   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("line_prolog_begin"));
3248
3249   Asm->OutStreamer.AddComment("Minimum Instruction Length");
3250   Asm->EmitInt8(1);
3251   Asm->OutStreamer.AddComment("Default is_stmt_start flag");
3252   Asm->EmitInt8(1);
3253   Asm->OutStreamer.AddComment("Line Base Value (Special Opcodes)");
3254   Asm->EmitInt8(MinLineDelta);
3255   Asm->OutStreamer.AddComment("Line Range Value (Special Opcodes)");
3256   Asm->EmitInt8(MaxLineDelta);
3257   Asm->OutStreamer.AddComment("Special Opcode Base");
3258   Asm->EmitInt8(-MinLineDelta);
3259
3260   // Line number standard opcode encodings argument count
3261   Asm->OutStreamer.AddComment("DW_LNS_copy arg count");
3262   Asm->EmitInt8(0);
3263   Asm->OutStreamer.AddComment("DW_LNS_advance_pc arg count");
3264   Asm->EmitInt8(1);
3265   Asm->OutStreamer.AddComment("DW_LNS_advance_line arg count");
3266   Asm->EmitInt8(1);
3267   Asm->OutStreamer.AddComment("DW_LNS_set_file arg count");
3268   Asm->EmitInt8(1);
3269   Asm->OutStreamer.AddComment("DW_LNS_set_column arg count");
3270   Asm->EmitInt8(1);
3271   Asm->OutStreamer.AddComment("DW_LNS_negate_stmt arg count");
3272   Asm->EmitInt8(0);
3273   Asm->OutStreamer.AddComment("DW_LNS_set_basic_block arg count");
3274   Asm->EmitInt8(0);
3275   Asm->OutStreamer.AddComment("DW_LNS_const_add_pc arg count");
3276   Asm->EmitInt8(0);
3277   Asm->OutStreamer.AddComment("DW_LNS_fixed_advance_pc arg count");
3278   Asm->EmitInt8(1);
3279
3280   // Emit directories.
3281   for (unsigned DI = 1, DE = getNumSourceDirectories()+1; DI != DE; ++DI) {
3282     const std::string &Dir = getSourceDirectoryName(DI);
3283     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("Directory");
3284     Asm->OutStreamer.EmitBytes(StringRef(Dir.c_str(), Dir.size()+1), 0);
3285   }
3286
3287   Asm->OutStreamer.AddComment("End of directories");
3288   Asm->EmitInt8(0);
3289
3290   // Emit files.
3291   for (unsigned SI = 1, SE = getNumSourceIds()+1; SI != SE; ++SI) {
3292     // Remember source id starts at 1.
3293     std::pair<unsigned, unsigned> Id = getSourceDirectoryAndFileIds(SI);
3294     const std::string &FN = getSourceFileName(Id.second);
3295     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("Source");
3296     Asm->OutStreamer.EmitBytes(StringRef(FN.c_str(), FN.size()+1), 0);
3297
3298     Asm->EmitULEB128(Id.first, "Directory #");
3299     Asm->EmitULEB128(0, "Mod date");
3300     Asm->EmitULEB128(0, "File size");
3301   }
3302
3303   Asm->OutStreamer.AddComment("End of files");
3304   Asm->EmitInt8(0);
3305
3306   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("line_prolog_end"));
3307
3308   // A sequence for each text section.
3309   unsigned SecSrcLinesSize = SectionSourceLines.size();
3310
3311   for (unsigned j = 0; j < SecSrcLinesSize; ++j) {
3312     // Isolate current sections line info.
3313     const std::vector<SrcLineInfo> &LineInfos = SectionSourceLines[j];
3314
3315     // Dwarf assumes we start with first line of first source file.
3316     unsigned Source = 1;
3317     unsigned Line = 1;
3318
3319     // Construct rows of the address, source, line, column matrix.
3320     for (unsigned i = 0, N = LineInfos.size(); i < N; ++i) {
3321       const SrcLineInfo &LineInfo = LineInfos[i];
3322       MCSymbol *Label = LineInfo.getLabel();
3323       if (!Label->isDefined()) continue; // Not emitted, in dead code.
3324
3325       if (Asm->isVerbose()) {
3326         std::pair<unsigned, unsigned> SrcID =
3327           getSourceDirectoryAndFileIds(LineInfo.getSourceID());
3328         Asm->OutStreamer.AddComment(Twine(getSourceDirectoryName(SrcID.first)) +
3329                                     "/" +
3330                                     Twine(getSourceFileName(SrcID.second)) +
3331                                     ":" + Twine(LineInfo.getLine()));
3332       }
3333
3334       // Define the line address.
3335       Asm->OutStreamer.AddComment("Extended Op");
3336       Asm->EmitInt8(0);
3337       Asm->OutStreamer.AddComment("Op size");
3338       Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
3339
3340       Asm->OutStreamer.AddComment("DW_LNE_set_address");
3341       Asm->EmitInt8(dwarf::DW_LNE_set_address);
3342
3343       Asm->OutStreamer.AddComment("Location label");
3344       Asm->OutStreamer.EmitSymbolValue(Label,
3345                                        Asm->getTargetData().getPointerSize(),
3346                                        0/*AddrSpace*/);
3347
3348       // If change of source, then switch to the new source.
3349       if (Source != LineInfo.getSourceID()) {
3350         Source = LineInfo.getSourceID();
3351         Asm->OutStreamer.AddComment("DW_LNS_set_file");
3352         Asm->EmitInt8(dwarf::DW_LNS_set_file);
3353         Asm->EmitULEB128(Source, "New Source");
3354       }
3355
3356       // If change of line.
3357       if (Line != LineInfo.getLine()) {
3358         // Determine offset.
3359         int Offset = LineInfo.getLine() - Line;
3360         int Delta = Offset - MinLineDelta;
3361
3362         // Update line.
3363         Line = LineInfo.getLine();
3364
3365         // If delta is small enough and in range...
3366         if (Delta >= 0 && Delta < (MaxLineDelta - 1)) {
3367           // ... then use fast opcode.
3368           Asm->OutStreamer.AddComment("Line Delta");
3369           Asm->EmitInt8(Delta - MinLineDelta);
3370         } else {
3371           // ... otherwise use long hand.
3372           Asm->OutStreamer.AddComment("DW_LNS_advance_line");
3373           Asm->EmitInt8(dwarf::DW_LNS_advance_line);
3374           Asm->EmitSLEB128(Offset, "Line Offset");
3375           Asm->OutStreamer.AddComment("DW_LNS_copy");
3376           Asm->EmitInt8(dwarf::DW_LNS_copy);
3377         }
3378       } else {
3379         // Copy the previous row (different address or source)
3380         Asm->OutStreamer.AddComment("DW_LNS_copy");
3381         Asm->EmitInt8(dwarf::DW_LNS_copy);
3382       }
3383     }
3384
3385     emitEndOfLineMatrix(j + 1);
3386   }
3387
3388   if (SecSrcLinesSize == 0)
3389     // Because we're emitting a debug_line section, we still need a line
3390     // table. The linker and friends expect it to exist. If there's nothing to
3391     // put into it, emit an empty table.
3392     emitEndOfLineMatrix(1);
3393
3394   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("line_end"));
3395 }
3396
3397 /// emitCommonDebugFrame - Emit common frame info into a debug frame section.
3398 ///
3399 void DwarfDebug::emitCommonDebugFrame() {
3400   if (!Asm->MAI->doesDwarfRequireFrameSection())
3401     return;
3402
3403   int stackGrowth = Asm->getTargetData().getPointerSize();
3404   if (Asm->TM.getFrameInfo()->getStackGrowthDirection() ==
3405       TargetFrameInfo::StackGrowsDown)
3406     stackGrowth *= -1;
3407
3408   // Start the dwarf frame section.
3409   Asm->OutStreamer.SwitchSection(
3410                               Asm->getObjFileLowering().getDwarfFrameSection());
3411
3412   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common"));
3413   Asm->OutStreamer.AddComment("Length of Common Information Entry");
3414   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_frame_common_end"),
3415                            Asm->GetTempSymbol("debug_frame_common_begin"), 4);
3416
3417   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common_begin"));
3418   Asm->OutStreamer.AddComment("CIE Identifier Tag");
3419   Asm->EmitInt32((int)dwarf::DW_CIE_ID);
3420   Asm->OutStreamer.AddComment("CIE Version");
3421   Asm->EmitInt8(dwarf::DW_CIE_VERSION);
3422   Asm->OutStreamer.AddComment("CIE Augmentation");
3423   Asm->OutStreamer.EmitIntValue(0, 1, /*addrspace*/0); // nul terminator.
3424   Asm->EmitULEB128(1, "CIE Code Alignment Factor");
3425   Asm->EmitSLEB128(stackGrowth, "CIE Data Alignment Factor");
3426   Asm->OutStreamer.AddComment("CIE RA Column");
3427   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
3428   Asm->EmitInt8(RI->getDwarfRegNum(RI->getRARegister(), false));
3429
3430   std::vector<MachineMove> Moves;
3431   RI->getInitialFrameState(Moves);
3432
3433   Asm->EmitFrameMoves(Moves, 0, false);
3434
3435   Asm->EmitAlignment(2);
3436   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common_end"));
3437 }
3438
3439 /// emitFunctionDebugFrame - Emit per function frame info into a debug frame
3440 /// section.
3441 void DwarfDebug::
3442 emitFunctionDebugFrame(const FunctionDebugFrameInfo &DebugFrameInfo) {
3443   if (!Asm->MAI->doesDwarfRequireFrameSection())
3444     return;
3445
3446   // Start the dwarf frame section.
3447   Asm->OutStreamer.SwitchSection(
3448                               Asm->getObjFileLowering().getDwarfFrameSection());
3449
3450   Asm->OutStreamer.AddComment("Length of Frame Information Entry");
3451   MCSymbol *DebugFrameBegin =
3452     Asm->GetTempSymbol("debug_frame_begin", DebugFrameInfo.Number);
3453   MCSymbol *DebugFrameEnd =
3454     Asm->GetTempSymbol("debug_frame_end", DebugFrameInfo.Number);
3455   Asm->EmitLabelDifference(DebugFrameEnd, DebugFrameBegin, 4);
3456
3457   Asm->OutStreamer.EmitLabel(DebugFrameBegin);
3458
3459   Asm->OutStreamer.AddComment("FDE CIE offset");
3460   Asm->EmitSectionOffset(Asm->GetTempSymbol("debug_frame_common"),
3461                          DwarfFrameSectionSym);
3462
3463   Asm->OutStreamer.AddComment("FDE initial location");
3464   MCSymbol *FuncBeginSym =
3465     Asm->GetTempSymbol("func_begin", DebugFrameInfo.Number);
3466   Asm->OutStreamer.EmitSymbolValue(FuncBeginSym,
3467                                    Asm->getTargetData().getPointerSize(),
3468                                    0/*AddrSpace*/);
3469
3470
3471   Asm->OutStreamer.AddComment("FDE address range");
3472   Asm->EmitLabelDifference(Asm->GetTempSymbol("func_end",DebugFrameInfo.Number),
3473                            FuncBeginSym, Asm->getTargetData().getPointerSize());
3474
3475   Asm->EmitFrameMoves(DebugFrameInfo.Moves, FuncBeginSym, false);
3476
3477   Asm->EmitAlignment(2);
3478   Asm->OutStreamer.EmitLabel(DebugFrameEnd);
3479 }
3480
3481 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
3482 ///
3483 void DwarfDebug::emitDebugPubNames() {
3484   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
3485          E = CUMap.end(); I != E; ++I) {
3486     CompileUnit *TheCU = I->second;
3487     // Start the dwarf pubnames section.
3488     Asm->OutStreamer.SwitchSection(
3489       Asm->getObjFileLowering().getDwarfPubNamesSection());
3490
3491     Asm->OutStreamer.AddComment("Length of Public Names Info");
3492     Asm->EmitLabelDifference(
3493       Asm->GetTempSymbol("pubnames_end", TheCU->getID()),
3494       Asm->GetTempSymbol("pubnames_begin", TheCU->getID()), 4);
3495
3496     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin",
3497                                                   TheCU->getID()));
3498
3499     Asm->OutStreamer.AddComment("DWARF Version");
3500     Asm->EmitInt16(dwarf::DWARF_VERSION);
3501
3502     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
3503     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
3504                            DwarfInfoSectionSym);
3505
3506     Asm->OutStreamer.AddComment("Compilation Unit Length");
3507     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
3508                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
3509                              4);
3510
3511     const StringMap<DIE*> &Globals = TheCU->getGlobals();
3512     for (StringMap<DIE*>::const_iterator
3513            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
3514       const char *Name = GI->getKeyData();
3515       DIE *Entity = GI->second;
3516
3517       Asm->OutStreamer.AddComment("DIE offset");
3518       Asm->EmitInt32(Entity->getOffset());
3519
3520       if (Asm->isVerbose())
3521         Asm->OutStreamer.AddComment("External Name");
3522       Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
3523     }
3524
3525     Asm->OutStreamer.AddComment("End Mark");
3526     Asm->EmitInt32(0);
3527     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end",
3528                                                 TheCU->getID()));
3529   }
3530 }
3531
3532 void DwarfDebug::emitDebugPubTypes() {
3533   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
3534          E = CUMap.end(); I != E; ++I) {
3535     CompileUnit *TheCU = I->second;
3536     // Start the dwarf pubnames section.
3537     Asm->OutStreamer.SwitchSection(
3538       Asm->getObjFileLowering().getDwarfPubTypesSection());
3539     Asm->OutStreamer.AddComment("Length of Public Types Info");
3540     Asm->EmitLabelDifference(
3541       Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
3542       Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
3543
3544     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
3545                                                   TheCU->getID()));
3546
3547     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
3548     Asm->EmitInt16(dwarf::DWARF_VERSION);
3549
3550     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
3551     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
3552                            DwarfInfoSectionSym);
3553
3554     Asm->OutStreamer.AddComment("Compilation Unit Length");
3555     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
3556                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
3557                              4);
3558
3559     const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
3560     for (StringMap<DIE*>::const_iterator
3561            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
3562       const char *Name = GI->getKeyData();
3563       DIE * Entity = GI->second;
3564
3565       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
3566       Asm->EmitInt32(Entity->getOffset());
3567
3568       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
3569       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
3570     }
3571
3572     Asm->OutStreamer.AddComment("End Mark");
3573     Asm->EmitInt32(0);
3574     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
3575                                                   TheCU->getID()));
3576   }
3577 }
3578
3579 /// emitDebugStr - Emit visible names into a debug str section.
3580 ///
3581 void DwarfDebug::emitDebugStr() {
3582   // Check to see if it is worth the effort.
3583   if (StringPool.empty()) return;
3584
3585   // Start the dwarf str section.
3586   Asm->OutStreamer.SwitchSection(
3587                                 Asm->getObjFileLowering().getDwarfStrSection());
3588
3589   // Get all of the string pool entries and put them in an array by their ID so
3590   // we can sort them.
3591   SmallVector<std::pair<unsigned,
3592       StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
3593
3594   for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
3595        I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
3596     Entries.push_back(std::make_pair(I->second.second, &*I));
3597
3598   array_pod_sort(Entries.begin(), Entries.end());
3599
3600   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
3601     // Emit a label for reference from debug information entries.
3602     Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
3603
3604     // Emit the string itself.
3605     Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
3606   }
3607 }
3608
3609 /// emitDebugLoc - Emit visible names into a debug loc section.
3610 ///
3611 void DwarfDebug::emitDebugLoc() {
3612   if (DotDebugLocEntries.empty())
3613     return;
3614
3615   // Start the dwarf loc section.
3616   Asm->OutStreamer.SwitchSection(
3617     Asm->getObjFileLowering().getDwarfLocSection());
3618   unsigned char Size = Asm->getTargetData().getPointerSize();
3619   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
3620   unsigned index = 1;
3621   for (SmallVector<DotDebugLocEntry, 4>::iterator
3622          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
3623        I != E; ++I, ++index) {
3624     DotDebugLocEntry Entry = *I;
3625     if (Entry.isEmpty()) {
3626       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
3627       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
3628       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
3629     } else {
3630       Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
3631       Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
3632       const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
3633       unsigned Reg = RI->getDwarfRegNum(Entry.Loc.getReg(), false);
3634       if (Reg < 32) {
3635         Asm->OutStreamer.AddComment("Loc expr size");
3636         Asm->EmitInt16(1);
3637         Asm->EmitInt8(dwarf::DW_OP_reg0 + Reg);
3638       } else {
3639         Asm->OutStreamer.AddComment("Loc expr size");
3640         Asm->EmitInt16(1+MCAsmInfo::getULEB128Size(Reg));
3641         Asm->EmitInt8(dwarf::DW_OP_regx);
3642         Asm->EmitULEB128(Reg);
3643       }
3644     }
3645   }
3646 }
3647
3648 /// EmitDebugARanges - Emit visible names into a debug aranges section.
3649 ///
3650 void DwarfDebug::EmitDebugARanges() {
3651   // Start the dwarf aranges section.
3652   Asm->OutStreamer.SwitchSection(
3653                           Asm->getObjFileLowering().getDwarfARangesSection());
3654 }
3655
3656 /// emitDebugRanges - Emit visible names into a debug ranges section.
3657 ///
3658 void DwarfDebug::emitDebugRanges() {
3659   // Start the dwarf ranges section.
3660   Asm->OutStreamer.SwitchSection(
3661     Asm->getObjFileLowering().getDwarfRangesSection());
3662   unsigned char Size = Asm->getTargetData().getPointerSize();
3663   for (SmallVector<const MCSymbol *, 8>::iterator
3664          I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
3665        I != E; ++I) {
3666     if (*I)
3667       Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
3668     else
3669       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
3670   }
3671 }
3672
3673 /// emitDebugMacInfo - Emit visible names into a debug macinfo section.
3674 ///
3675 void DwarfDebug::emitDebugMacInfo() {
3676   if (const MCSection *LineInfo =
3677       Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
3678     // Start the dwarf macinfo section.
3679     Asm->OutStreamer.SwitchSection(LineInfo);
3680   }
3681 }
3682
3683 /// emitDebugInlineInfo - Emit inline info using following format.
3684 /// Section Header:
3685 /// 1. length of section
3686 /// 2. Dwarf version number
3687 /// 3. address size.
3688 ///
3689 /// Entries (one "entry" for each function that was inlined):
3690 ///
3691 /// 1. offset into __debug_str section for MIPS linkage name, if exists;
3692 ///   otherwise offset into __debug_str for regular function name.
3693 /// 2. offset into __debug_str section for regular function name.
3694 /// 3. an unsigned LEB128 number indicating the number of distinct inlining
3695 /// instances for the function.
3696 ///
3697 /// The rest of the entry consists of a {die_offset, low_pc} pair for each
3698 /// inlined instance; the die_offset points to the inlined_subroutine die in the
3699 /// __debug_info section, and the low_pc is the starting address for the
3700 /// inlining instance.
3701 void DwarfDebug::emitDebugInlineInfo() {
3702   if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
3703     return;
3704
3705   if (!FirstCU)
3706     return;
3707
3708   Asm->OutStreamer.SwitchSection(
3709                         Asm->getObjFileLowering().getDwarfDebugInlineSection());
3710
3711   Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
3712   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
3713                            Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
3714
3715   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
3716
3717   Asm->OutStreamer.AddComment("Dwarf Version");
3718   Asm->EmitInt16(dwarf::DWARF_VERSION);
3719   Asm->OutStreamer.AddComment("Address Size (in bytes)");
3720   Asm->EmitInt8(Asm->getTargetData().getPointerSize());
3721
3722   for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
3723          E = InlinedSPNodes.end(); I != E; ++I) {
3724
3725     const MDNode *Node = *I;
3726     DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
3727       = InlineInfo.find(Node);
3728     SmallVector<InlineInfoLabels, 4> &Labels = II->second;
3729     DISubprogram SP(Node);
3730     StringRef LName = SP.getLinkageName();
3731     StringRef Name = SP.getName();
3732
3733     Asm->OutStreamer.AddComment("MIPS linkage name");
3734     if (LName.empty()) {
3735       Asm->OutStreamer.EmitBytes(Name, 0);
3736       Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
3737     } else
3738       Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
3739                              DwarfStrSectionSym);
3740
3741     Asm->OutStreamer.AddComment("Function name");
3742     Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
3743     Asm->EmitULEB128(Labels.size(), "Inline count");
3744
3745     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
3746            LE = Labels.end(); LI != LE; ++LI) {
3747       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
3748       Asm->EmitInt32(LI->second->getOffset());
3749
3750       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
3751       Asm->OutStreamer.EmitSymbolValue(LI->first,
3752                                        Asm->getTargetData().getPointerSize(),0);
3753     }
3754   }
3755
3756   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
3757 }