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