DwarfDebug.cpp revision eac0c9dc7759b013bbe831ace1afa37bc46915c6
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 "DwarfCompileUnit.h"
18#include "llvm/Constants.h"
19#include "llvm/Module.h"
20#include "llvm/Instructions.h"
21#include "llvm/CodeGen/MachineFunction.h"
22#include "llvm/CodeGen/MachineModuleInfo.h"
23#include "llvm/MC/MCAsmInfo.h"
24#include "llvm/MC/MCSection.h"
25#include "llvm/MC/MCStreamer.h"
26#include "llvm/MC/MCSymbol.h"
27#include "llvm/Target/Mangler.h"
28#include "llvm/Target/TargetData.h"
29#include "llvm/Target/TargetFrameLowering.h"
30#include "llvm/Target/TargetLoweringObjectFile.h"
31#include "llvm/Target/TargetMachine.h"
32#include "llvm/Target/TargetRegisterInfo.h"
33#include "llvm/Target/TargetOptions.h"
34#include "llvm/Analysis/DebugInfo.h"
35#include "llvm/Analysis/DIBuilder.h"
36#include "llvm/ADT/Statistic.h"
37#include "llvm/ADT/STLExtras.h"
38#include "llvm/ADT/StringExtras.h"
39#include "llvm/Support/CommandLine.h"
40#include "llvm/Support/Debug.h"
41#include "llvm/Support/ErrorHandling.h"
42#include "llvm/Support/ValueHandle.h"
43#include "llvm/Support/FormattedStream.h"
44#include "llvm/Support/Timer.h"
45#include "llvm/Support/Path.h"
46using namespace llvm;
47
48static cl::opt<bool> PrintDbgScope("print-dbgscope", cl::Hidden,
49     cl::desc("Print DbgScope information for each machine instruction"));
50
51static cl::opt<bool> DisableDebugInfoPrinting("disable-debug-info-print",
52                                              cl::Hidden,
53     cl::desc("Disable debug info printing"));
54
55static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
56     cl::desc("Make an absence of debug location information explicit."),
57     cl::init(false));
58
59#ifndef NDEBUG
60STATISTIC(BlocksWithoutLineNo, "Number of blocks without any line number");
61#endif
62
63namespace {
64  const char *DWARFGroupName = "DWARF Emission";
65  const char *DbgTimerName = "DWARF Debug Writer";
66} // end anonymous namespace
67
68//===----------------------------------------------------------------------===//
69
70/// Configuration values for initial hash set sizes (log2).
71///
72static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
73
74namespace llvm {
75
76DIType DbgVariable::getType()               const {
77  DIType Ty = Var.getType();
78  // FIXME: isBlockByrefVariable should be reformulated in terms of complex
79  // addresses instead.
80  if (Var.isBlockByrefVariable()) {
81    /* Byref variables, in Blocks, are declared by the programmer as
82       "SomeType VarName;", but the compiler creates a
83       __Block_byref_x_VarName struct, and gives the variable VarName
84       either the struct, or a pointer to the struct, as its type.  This
85       is necessary for various behind-the-scenes things the compiler
86       needs to do with by-reference variables in blocks.
87
88       However, as far as the original *programmer* is concerned, the
89       variable should still have type 'SomeType', as originally declared.
90
91       The following function dives into the __Block_byref_x_VarName
92       struct to find the original type of the variable.  This will be
93       passed back to the code generating the type for the Debug
94       Information Entry for the variable 'VarName'.  'VarName' will then
95       have the original type 'SomeType' in its debug information.
96
97       The original type 'SomeType' will be the type of the field named
98       'VarName' inside the __Block_byref_x_VarName struct.
99
100       NOTE: In order for this to not completely fail on the debugger
101       side, the Debug Information Entry for the variable VarName needs to
102       have a DW_AT_location that tells the debugger how to unwind through
103       the pointers and __Block_byref_x_VarName struct to find the actual
104       value of the variable.  The function addBlockByrefType does this.  */
105    DIType subType = Ty;
106    unsigned tag = Ty.getTag();
107
108    if (tag == dwarf::DW_TAG_pointer_type) {
109      DIDerivedType DTy = DIDerivedType(Ty);
110      subType = DTy.getTypeDerivedFrom();
111    }
112
113    DICompositeType blockStruct = DICompositeType(subType);
114    DIArray Elements = blockStruct.getTypeArray();
115
116    for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
117      DIDescriptor Element = Elements.getElement(i);
118      DIDerivedType DT = DIDerivedType(Element);
119      if (getName() == DT.getName())
120        return (DT.getTypeDerivedFrom());
121    }
122    return Ty;
123  }
124  return Ty;
125}
126
127//===----------------------------------------------------------------------===//
128/// DbgRange - This is used to track range of instructions with identical
129/// debug info scope.
130///
131typedef std::pair<const MachineInstr *, const MachineInstr *> DbgRange;
132
133//===----------------------------------------------------------------------===//
134/// DbgScope - This class is used to track scope information.
135///
136class DbgScope {
137  DbgScope *Parent;                   // Parent to this scope.
138  DIDescriptor Desc;                  // Debug info descriptor for scope.
139  // Location at which this scope is inlined.
140  AssertingVH<const MDNode> InlinedAtLocation;
141  bool AbstractScope;                 // Abstract Scope
142  const MachineInstr *LastInsn;       // Last instruction of this scope.
143  const MachineInstr *FirstInsn;      // First instruction of this scope.
144  unsigned DFSIn, DFSOut;
145  // Scopes defined in scope.  Contents not owned.
146  SmallVector<DbgScope *, 4> Scopes;
147  // Variables declared in scope.  Contents owned.
148  SmallVector<DbgVariable *, 8> Variables;
149  SmallVector<DbgRange, 4> Ranges;
150  // Private state for dump()
151  mutable unsigned IndentLevel;
152public:
153  DbgScope(DbgScope *P, DIDescriptor D, const MDNode *I = 0)
154    : Parent(P), Desc(D), InlinedAtLocation(I), AbstractScope(false),
155      LastInsn(0), FirstInsn(0),
156      DFSIn(0), DFSOut(0), IndentLevel(0) {}
157  virtual ~DbgScope();
158
159  // Accessors.
160  DbgScope *getParent()          const { return Parent; }
161  void setParent(DbgScope *P)          { Parent = P; }
162  DIDescriptor getDesc()         const { return Desc; }
163  const MDNode *getInlinedAt()         const { return InlinedAtLocation; }
164  const MDNode *getScopeNode()         const { return Desc; }
165  const SmallVector<DbgScope *, 4> &getScopes() { return Scopes; }
166  const SmallVector<DbgVariable *, 8> &getDbgVariables() { return Variables; }
167  const SmallVector<DbgRange, 4> &getRanges() { return Ranges; }
168
169  /// openInsnRange - This scope covers instruction range starting from MI.
170  void openInsnRange(const MachineInstr *MI) {
171    if (!FirstInsn)
172      FirstInsn = MI;
173
174    if (Parent)
175      Parent->openInsnRange(MI);
176  }
177
178  /// extendInsnRange - Extend the current instruction range covered by
179  /// this scope.
180  void extendInsnRange(const MachineInstr *MI) {
181    assert (FirstInsn && "MI Range is not open!");
182    LastInsn = MI;
183    if (Parent)
184      Parent->extendInsnRange(MI);
185  }
186
187  /// closeInsnRange - Create a range based on FirstInsn and LastInsn collected
188  /// until now. This is used when a new scope is encountered while walking
189  /// machine instructions.
190  void closeInsnRange(DbgScope *NewScope = NULL) {
191    assert (LastInsn && "Last insn missing!");
192    Ranges.push_back(DbgRange(FirstInsn, LastInsn));
193    FirstInsn = NULL;
194    LastInsn = NULL;
195    // If Parent dominates NewScope then do not close Parent's instruction
196    // range.
197    if (Parent && (!NewScope || !Parent->dominates(NewScope)))
198      Parent->closeInsnRange(NewScope);
199  }
200
201  void setAbstractScope() { AbstractScope = true; }
202  bool isAbstractScope() const { return AbstractScope; }
203
204  // Depth First Search support to walk and mainpluate DbgScope hierarchy.
205  unsigned getDFSOut() const { return DFSOut; }
206  void setDFSOut(unsigned O) { DFSOut = O; }
207  unsigned getDFSIn() const  { return DFSIn; }
208  void setDFSIn(unsigned I)  { DFSIn = I; }
209  bool dominates(const DbgScope *S) {
210    if (S == this)
211      return true;
212    if (DFSIn < S->getDFSIn() && DFSOut > S->getDFSOut())
213      return true;
214    return false;
215  }
216
217  /// addScope - Add a scope to the scope.
218  ///
219  void addScope(DbgScope *S) { Scopes.push_back(S); }
220
221  /// addVariable - Add a variable to the scope.
222  ///
223  void addVariable(DbgVariable *V) { Variables.push_back(V); }
224
225#ifndef NDEBUG
226  void dump() const;
227#endif
228};
229
230} // end llvm namespace
231
232#ifndef NDEBUG
233void DbgScope::dump() const {
234  raw_ostream &err = dbgs();
235  err.indent(IndentLevel);
236  const MDNode *N = Desc;
237  N->dump();
238  if (AbstractScope)
239    err << "Abstract Scope\n";
240
241  IndentLevel += 2;
242  if (!Scopes.empty())
243    err << "Children ...\n";
244  for (unsigned i = 0, e = Scopes.size(); i != e; ++i)
245    if (Scopes[i] != this)
246      Scopes[i]->dump();
247
248  IndentLevel -= 2;
249}
250#endif
251
252DbgScope::~DbgScope() {
253  for (unsigned j = 0, M = Variables.size(); j < M; ++j)
254    delete Variables[j];
255}
256
257DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
258  : Asm(A), MMI(Asm->MMI), FirstCU(0),
259    AbbreviationsSet(InitAbbreviationsSetSize),
260    CurrentFnDbgScope(0), PrevLabel(NULL) {
261  NextStringPoolNumber = 0;
262
263  DwarfFrameSectionSym = DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
264  DwarfStrSectionSym = TextSectionSym = 0;
265  DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
266  FunctionBeginSym = FunctionEndSym = 0;
267  {
268    NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
269    beginModule(M);
270  }
271}
272DwarfDebug::~DwarfDebug() {
273}
274
275MCSymbol *DwarfDebug::getStringPoolEntry(StringRef Str) {
276  std::pair<MCSymbol*, unsigned> &Entry = StringPool[Str];
277  if (Entry.first) return Entry.first;
278
279  Entry.second = NextStringPoolNumber++;
280  return Entry.first = Asm->GetTempSymbol("string", Entry.second);
281}
282
283
284/// assignAbbrevNumber - Define a unique number for the abbreviation.
285///
286void DwarfDebug::assignAbbrevNumber(DIEAbbrev &Abbrev) {
287  // Profile the node so that we can make it unique.
288  FoldingSetNodeID ID;
289  Abbrev.Profile(ID);
290
291  // Check the set for priors.
292  DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
293
294  // If it's newly added.
295  if (InSet == &Abbrev) {
296    // Add to abbreviation list.
297    Abbreviations.push_back(&Abbrev);
298
299    // Assign the vector position + 1 as its number.
300    Abbrev.setNumber(Abbreviations.size());
301  } else {
302    // Assign existing abbreviation number.
303    Abbrev.setNumber(InSet->getNumber());
304  }
305}
306
307/// getRealLinkageName - If special LLVM prefix that is used to inform the asm
308/// printer to not emit usual symbol prefix before the symbol name is used then
309/// return linkage name after skipping this special LLVM prefix.
310static StringRef getRealLinkageName(StringRef LinkageName) {
311  char One = '\1';
312  if (LinkageName.startswith(StringRef(&One, 1)))
313    return LinkageName.substr(1);
314  return LinkageName;
315}
316
317/// createSubprogramDIE - Create new DIE using SP.
318DIE *DwarfDebug::createSubprogramDIE(DISubprogram SP) {
319  CompileUnit *SPCU = getCompileUnit(SP);
320  DIE *SPDie = SPCU->getDIE(SP);
321  if (SPDie)
322    return SPDie;
323
324  SPDie = new DIE(dwarf::DW_TAG_subprogram);
325  // Constructors and operators for anonymous aggregates do not have names.
326  if (!SP.getName().empty())
327    SPCU->addString(SPDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
328                    SP.getName());
329
330  StringRef LinkageName = SP.getLinkageName();
331  if (!LinkageName.empty())
332    SPCU->addString(SPDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string,
333                    getRealLinkageName(LinkageName));
334
335  SPCU->addSourceLine(SPDie, SP);
336
337  if (SP.isPrototyped())
338    SPCU->addUInt(SPDie, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1);
339
340  // Add Return Type.
341  DICompositeType SPTy = SP.getType();
342  DIArray Args = SPTy.getTypeArray();
343  unsigned SPTag = SPTy.getTag();
344
345  if (Args.getNumElements() == 0 || SPTag != dwarf::DW_TAG_subroutine_type)
346    SPCU->addType(SPDie, SPTy);
347  else
348    SPCU->addType(SPDie, DIType(Args.getElement(0)));
349
350  unsigned VK = SP.getVirtuality();
351  if (VK) {
352    SPCU->addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_flag, VK);
353    DIEBlock *Block = SPCU->getDIEBlock();
354    SPCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
355    SPCU->addUInt(Block, 0, dwarf::DW_FORM_udata, SP.getVirtualIndex());
356    SPCU->addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
357    ContainingTypeMap.insert(std::make_pair(SPDie,
358                                            SP.getContainingType()));
359  }
360
361  if (!SP.isDefinition()) {
362    SPCU->addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
363
364    // Add arguments. Do not add arguments for subprogram definition. They will
365    // be handled while processing variables.
366    DICompositeType SPTy = SP.getType();
367    DIArray Args = SPTy.getTypeArray();
368    unsigned SPTag = SPTy.getTag();
369
370    if (SPTag == dwarf::DW_TAG_subroutine_type)
371      for (unsigned i = 1, N =  Args.getNumElements(); i < N; ++i) {
372        DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
373        DIType ATy = DIType(DIType(Args.getElement(i)));
374        SPCU->addType(Arg, ATy);
375        if (ATy.isArtificial())
376          SPCU->addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
377        SPDie->addChild(Arg);
378      }
379  }
380
381  if (SP.isArtificial())
382    SPCU->addUInt(SPDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
383
384  if (!SP.isLocalToUnit())
385    SPCU->addUInt(SPDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
386
387  if (SP.isOptimized())
388    SPCU->addUInt(SPDie, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
389
390  if (unsigned isa = Asm->getISAEncoding()) {
391    SPCU->addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
392  }
393
394  // Add function template parameters.
395  SPCU->addTemplateParams(*SPDie, SP.getTemplateParams());
396
397  // DW_TAG_inlined_subroutine may refer to this DIE.
398  SPCU->insertDIE(SP, SPDie);
399
400  // Add to context owner.
401  SPCU->addToContextOwner(SPDie, SP.getContext());
402
403  return SPDie;
404}
405
406DbgScope *DwarfDebug::getOrCreateAbstractScope(const MDNode *N) {
407  assert(N && "Invalid Scope encoding!");
408
409  DbgScope *AScope = AbstractScopes.lookup(N);
410  if (AScope)
411    return AScope;
412
413  DbgScope *Parent = NULL;
414
415  DIDescriptor Scope(N);
416  if (Scope.isLexicalBlock()) {
417    DILexicalBlock DB(N);
418    DIDescriptor ParentDesc = DB.getContext();
419    Parent = getOrCreateAbstractScope(ParentDesc);
420  }
421
422  AScope = new DbgScope(Parent, DIDescriptor(N), NULL);
423
424  if (Parent)
425    Parent->addScope(AScope);
426  AScope->setAbstractScope();
427  AbstractScopes[N] = AScope;
428  if (DIDescriptor(N).isSubprogram())
429    AbstractScopesList.push_back(AScope);
430  return AScope;
431}
432
433/// isSubprogramContext - Return true if Context is either a subprogram
434/// or another context nested inside a subprogram.
435static bool isSubprogramContext(const MDNode *Context) {
436  if (!Context)
437    return false;
438  DIDescriptor D(Context);
439  if (D.isSubprogram())
440    return true;
441  if (D.isType())
442    return isSubprogramContext(DIType(Context).getContext());
443  return false;
444}
445
446/// updateSubprogramScopeDIE - Find DIE for the given subprogram and
447/// attach appropriate DW_AT_low_pc and DW_AT_high_pc attributes.
448/// If there are global variables in this scope then create and insert
449/// DIEs for these variables.
450DIE *DwarfDebug::updateSubprogramScopeDIE(const MDNode *SPNode) {
451  CompileUnit *SPCU = getCompileUnit(SPNode);
452  DIE *SPDie = SPCU->getDIE(SPNode);
453
454  assert(SPDie && "Unable to find subprogram DIE!");
455  DISubprogram SP(SPNode);
456
457  // There is not any need to generate specification DIE for a function
458  // defined at compile unit level. If a function is defined inside another
459  // function then gdb prefers the definition at top level and but does not
460  // expect specification DIE in parent function. So avoid creating
461  // specification DIE for a function defined inside a function.
462  if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
463      !SP.getContext().isFile() &&
464      !isSubprogramContext(SP.getContext())) {
465   SPCU-> addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
466
467    // Add arguments.
468    DICompositeType SPTy = SP.getType();
469    DIArray Args = SPTy.getTypeArray();
470    unsigned SPTag = SPTy.getTag();
471    if (SPTag == dwarf::DW_TAG_subroutine_type)
472      for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
473        DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
474        DIType ATy = DIType(DIType(Args.getElement(i)));
475        SPCU->addType(Arg, ATy);
476        if (ATy.isArtificial())
477          SPCU->addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
478        SPDie->addChild(Arg);
479      }
480    DIE *SPDeclDie = SPDie;
481    SPDie = new DIE(dwarf::DW_TAG_subprogram);
482    SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
483                      SPDeclDie);
484    SPCU->addDie(SPDie);
485  }
486
487  // Pick up abstract subprogram DIE.
488  if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
489    SPDie = new DIE(dwarf::DW_TAG_subprogram);
490    SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
491                      dwarf::DW_FORM_ref4, AbsSPDIE);
492    SPCU->addDie(SPDie);
493  }
494
495  SPCU->addLabel(SPDie, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
496                 Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber()));
497  SPCU->addLabel(SPDie, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
498                 Asm->GetTempSymbol("func_end", Asm->getFunctionNumber()));
499  const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
500  MachineLocation Location(RI->getFrameRegister(*Asm->MF));
501  SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
502
503  return SPDie;
504}
505
506/// constructLexicalScope - Construct new DW_TAG_lexical_block
507/// for this scope and attach DW_AT_low_pc/DW_AT_high_pc labels.
508DIE *DwarfDebug::constructLexicalScopeDIE(DbgScope *Scope) {
509
510  DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
511  if (Scope->isAbstractScope())
512    return ScopeDIE;
513
514  const SmallVector<DbgRange, 4> &Ranges = Scope->getRanges();
515  if (Ranges.empty())
516    return 0;
517
518  CompileUnit *TheCU = getCompileUnit(Scope->getScopeNode());
519  SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin();
520  if (Ranges.size() > 1) {
521    // .debug_range section has not been laid out yet. Emit offset in
522    // .debug_range as a uint, size 4, for now. emitDIE will handle
523    // DW_AT_ranges appropriately.
524    TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
525                   DebugRangeSymbols.size() * Asm->getTargetData().getPointerSize());
526    for (SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin(),
527         RE = Ranges.end(); RI != RE; ++RI) {
528      DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
529      DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
530    }
531    DebugRangeSymbols.push_back(NULL);
532    DebugRangeSymbols.push_back(NULL);
533    return ScopeDIE;
534  }
535
536  const MCSymbol *Start = getLabelBeforeInsn(RI->first);
537  const MCSymbol *End = getLabelAfterInsn(RI->second);
538
539  if (End == 0) return 0;
540
541  assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
542  assert(End->isDefined() && "Invalid end label for an inlined scope!");
543
544  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, Start);
545  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, End);
546
547  return ScopeDIE;
548}
549
550/// constructInlinedScopeDIE - This scope represents inlined body of
551/// a function. Construct DIE to represent this concrete inlined copy
552/// of the function.
553DIE *DwarfDebug::constructInlinedScopeDIE(DbgScope *Scope) {
554
555  const SmallVector<DbgRange, 4> &Ranges = Scope->getRanges();
556  assert (Ranges.empty() == false
557          && "DbgScope does not have instruction markers!");
558
559  // FIXME : .debug_inlined section specification does not clearly state how
560  // to emit inlined scope that is split into multiple instruction ranges.
561  // For now, use first instruction range and emit low_pc/high_pc pair and
562  // corresponding .debug_inlined section entry for this pair.
563  SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin();
564  const MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
565  const MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
566
567  if (StartLabel == 0 || EndLabel == 0) {
568    assert (0 && "Unexpected Start and End  labels for a inlined scope!");
569    return 0;
570  }
571  assert(StartLabel->isDefined() &&
572         "Invalid starting label for an inlined scope!");
573  assert(EndLabel->isDefined() &&
574         "Invalid end label for an inlined scope!");
575
576  if (!Scope->getScopeNode())
577    return NULL;
578  DIScope DS(Scope->getScopeNode());
579  DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
580
581  DISubprogram InlinedSP = getDISubprogram(DS);
582  CompileUnit *TheCU = getCompileUnit(InlinedSP);
583  DIE *OriginDIE = TheCU->getDIE(InlinedSP);
584  assert(OriginDIE && "Unable to find Origin DIE!");
585  TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
586                     dwarf::DW_FORM_ref4, OriginDIE);
587
588  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, StartLabel);
589  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, EndLabel);
590
591  InlinedSubprogramDIEs.insert(OriginDIE);
592
593  // Track the start label for this inlined function.
594  DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
595    I = InlineInfo.find(InlinedSP);
596
597  if (I == InlineInfo.end()) {
598    InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel,
599                                                             ScopeDIE));
600    InlinedSPNodes.push_back(InlinedSP);
601  } else
602    I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
603
604  DILocation DL(Scope->getInlinedAt());
605  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0, TheCU->getID());
606  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
607
608  return ScopeDIE;
609}
610
611
612/// constructVariableDIE - Construct a DIE for the given DbgVariable.
613DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
614  StringRef Name = DV->getName();
615  if (Name.empty())
616    return NULL;
617
618  // Translate tag to proper Dwarf tag.  The result variable is dropped for
619  // now.
620  unsigned Tag;
621  switch (DV->getTag()) {
622  case dwarf::DW_TAG_return_variable:
623    return NULL;
624  case dwarf::DW_TAG_arg_variable:
625    Tag = dwarf::DW_TAG_formal_parameter;
626    break;
627  case dwarf::DW_TAG_auto_variable:    // fall thru
628  default:
629    Tag = dwarf::DW_TAG_variable;
630    break;
631  }
632
633  // Define variable debug information entry.
634  DIE *VariableDie = new DIE(Tag);
635  CompileUnit *TheCU = getCompileUnit(DV->getVariable());
636  DIE *AbsDIE = NULL;
637  DenseMap<const DbgVariable *, const DbgVariable *>::iterator
638    V2AVI = VarToAbstractVarMap.find(DV);
639  if (V2AVI != VarToAbstractVarMap.end())
640    AbsDIE = V2AVI->second->getDIE();
641
642  if (AbsDIE)
643    TheCU->addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
644                       dwarf::DW_FORM_ref4, AbsDIE);
645  else {
646    TheCU->addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
647    TheCU->addSourceLine(VariableDie, DV->getVariable());
648
649    // Add variable type.
650    TheCU->addType(VariableDie, DV->getType());
651  }
652
653  if (Tag == dwarf::DW_TAG_formal_parameter && DV->getType().isArtificial())
654    TheCU->addUInt(VariableDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
655  else if (DIVariable(DV->getVariable()).isArtificial())
656    TheCU->addUInt(VariableDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
657
658  if (Scope->isAbstractScope()) {
659    DV->setDIE(VariableDie);
660    return VariableDie;
661  }
662
663  // Add variable address.
664
665  unsigned Offset = DV->getDotDebugLocOffset();
666  if (Offset != ~0U) {
667    TheCU->addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
668             Asm->GetTempSymbol("debug_loc", Offset));
669    DV->setDIE(VariableDie);
670    UseDotDebugLocEntry.insert(VariableDie);
671    return VariableDie;
672  }
673
674  // Check if variable is described by a  DBG_VALUE instruction.
675  DenseMap<const DbgVariable *, const MachineInstr *>::iterator DVI =
676    DbgVariableToDbgInstMap.find(DV);
677  if (DVI != DbgVariableToDbgInstMap.end()) {
678    const MachineInstr *DVInsn = DVI->second;
679    bool updated = false;
680    // FIXME : Handle getNumOperands != 3
681    if (DVInsn->getNumOperands() == 3) {
682      if (DVInsn->getOperand(0).isReg()) {
683        const MachineOperand RegOp = DVInsn->getOperand(0);
684        const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
685        if (DVInsn->getOperand(1).isImm() &&
686            TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) {
687          TheCU->addVariableAddress(DV, VariableDie, DVInsn->getOperand(1).getImm());
688          updated = true;
689        } else
690          updated = TheCU->addRegisterAddress(VariableDie, RegOp);
691      }
692      else if (DVInsn->getOperand(0).isImm())
693        updated = TheCU->addConstantValue(VariableDie, DVInsn->getOperand(0));
694      else if (DVInsn->getOperand(0).isFPImm())
695        updated =
696          TheCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0));
697    } else {
698      MachineLocation Location = Asm->getDebugValueLocation(DVInsn);
699      if (Location.getReg()) {
700        TheCU->addAddress(VariableDie, dwarf::DW_AT_location, Location);
701        updated = true;
702      }
703    }
704    if (!updated) {
705      // If variableDie is not updated then DBG_VALUE instruction does not
706      // have valid variable info.
707      delete VariableDie;
708      return NULL;
709    }
710    DV->setDIE(VariableDie);
711    return VariableDie;
712  }
713
714  // .. else use frame index, if available.
715  int FI = 0;
716  if (findVariableFrameIndex(DV, &FI))
717    TheCU->addVariableAddress(DV, VariableDie, FI);
718
719  DV->setDIE(VariableDie);
720  return VariableDie;
721
722}
723
724void CompileUnit::addPubTypes(DISubprogram SP) {
725  DICompositeType SPTy = SP.getType();
726  unsigned SPTag = SPTy.getTag();
727  if (SPTag != dwarf::DW_TAG_subroutine_type)
728    return;
729
730  DIArray Args = SPTy.getTypeArray();
731  for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
732    DIType ATy(Args.getElement(i));
733    if (!ATy.Verify())
734      continue;
735    DICompositeType CATy = getDICompositeType(ATy);
736    if (DIDescriptor(CATy).Verify() && !CATy.getName().empty()
737        && !CATy.isForwardDecl()) {
738      if (DIEEntry *Entry = getDIEEntry(CATy))
739        addGlobalType(CATy.getName(), Entry->getEntry());
740    }
741  }
742}
743
744/// constructScopeDIE - Construct a DIE for this scope.
745DIE *DwarfDebug::constructScopeDIE(DbgScope *Scope) {
746  if (!Scope || !Scope->getScopeNode())
747    return NULL;
748
749  SmallVector <DIE *, 8> Children;
750
751  // Collect arguments for current function.
752  if (Scope == CurrentFnDbgScope)
753    for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
754      if (DbgVariable *ArgDV = CurrentFnArguments[i])
755        if (DIE *Arg = constructVariableDIE(ArgDV, Scope))
756          Children.push_back(Arg);
757
758  // Collect lexical scope childrens first.
759  const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
760  for (unsigned i = 0, N = Variables.size(); i < N; ++i)
761    if (DIE *Variable = constructVariableDIE(Variables[i], Scope))
762      Children.push_back(Variable);
763  const SmallVector<DbgScope *, 4> &Scopes = Scope->getScopes();
764  for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
765    if (DIE *Nested = constructScopeDIE(Scopes[j]))
766      Children.push_back(Nested);
767  DIScope DS(Scope->getScopeNode());
768  DIE *ScopeDIE = NULL;
769  if (Scope->getInlinedAt())
770    ScopeDIE = constructInlinedScopeDIE(Scope);
771  else if (DS.isSubprogram()) {
772    ProcessedSPNodes.insert(DS);
773    if (Scope->isAbstractScope()) {
774      ScopeDIE = getCompileUnit(DS)->getDIE(DS);
775      // Note down abstract DIE.
776      if (ScopeDIE)
777        AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
778    }
779    else
780      ScopeDIE = updateSubprogramScopeDIE(DS);
781  }
782  else {
783    // There is no need to emit empty lexical block DIE.
784    if (Children.empty())
785      return NULL;
786    ScopeDIE = constructLexicalScopeDIE(Scope);
787  }
788
789  if (!ScopeDIE) return NULL;
790
791  // Add children
792  for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
793         E = Children.end(); I != E; ++I)
794    ScopeDIE->addChild(*I);
795
796  if (DS.isSubprogram())
797    getCompileUnit(DS)->addPubTypes(DISubprogram(DS));
798
799 return ScopeDIE;
800}
801
802/// GetOrCreateSourceID - Look up the source id with the given directory and
803/// source file names. If none currently exists, create a new id and insert it
804/// in the SourceIds map. This can update DirectoryNames and SourceFileNames
805/// maps as well.
806
807unsigned DwarfDebug::GetOrCreateSourceID(StringRef FileName,
808                                         StringRef DirName) {
809  // If FE did not provide a file name, then assume stdin.
810  if (FileName.empty())
811    return GetOrCreateSourceID("<stdin>", StringRef());
812
813  // MCStream expects full path name as filename.
814  if (!DirName.empty() && !FileName.startswith("/")) {
815    std::string FullPathName(DirName.data());
816    if (!DirName.endswith("/"))
817      FullPathName += "/";
818    FullPathName += FileName.data();
819    // Here FullPathName will be copied into StringMap by GetOrCreateSourceID.
820    return GetOrCreateSourceID(StringRef(FullPathName), StringRef());
821  }
822
823  StringMapEntry<unsigned> &Entry = SourceIdMap.GetOrCreateValue(FileName);
824  if (Entry.getValue())
825    return Entry.getValue();
826
827  unsigned SrcId = SourceIdMap.size();
828  Entry.setValue(SrcId);
829
830  // Print out a .file directive to specify files for .loc directives.
831  Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.getKey());
832
833  return SrcId;
834}
835
836/// getOrCreateNameSpace - Create a DIE for DINameSpace.
837DIE *CompileUnit::getOrCreateNameSpace(DINameSpace NS) {
838  DIE *NDie = getDIE(NS);
839  if (NDie)
840    return NDie;
841  NDie = new DIE(dwarf::DW_TAG_namespace);
842  insertDIE(NS, NDie);
843  if (!NS.getName().empty())
844    addString(NDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, NS.getName());
845  addSourceLine(NDie, NS);
846  addToContextOwner(NDie, NS.getContext());
847  return NDie;
848}
849
850/// constructCompileUnit - Create new CompileUnit for the given
851/// metadata node with tag DW_TAG_compile_unit.
852void DwarfDebug::constructCompileUnit(const MDNode *N) {
853  DICompileUnit DIUnit(N);
854  StringRef FN = DIUnit.getFilename();
855  StringRef Dir = DIUnit.getDirectory();
856  unsigned ID = GetOrCreateSourceID(FN, Dir);
857
858  DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
859  CompileUnit *NewCU = new CompileUnit(ID, Die, Asm, this);
860  NewCU->addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
861                   DIUnit.getProducer());
862  NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
863                 DIUnit.getLanguage());
864  NewCU->addString(Die, dwarf::DW_AT_name, dwarf::DW_FORM_string, FN);
865  // Use DW_AT_entry_pc instead of DW_AT_low_pc/DW_AT_high_pc pair. This
866  // simplifies debug range entries.
867  NewCU->addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
868  // DW_AT_stmt_list is a offset of line number information for this
869  // compile unit in debug_line section.
870  if (Asm->MAI->doesDwarfUsesAbsoluteLabelForStmtList())
871    NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_addr,
872                    Asm->GetTempSymbol("section_line"));
873  else
874    NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
875
876  if (!Dir.empty())
877    NewCU->addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
878  if (DIUnit.isOptimized())
879    NewCU->addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
880
881  StringRef Flags = DIUnit.getFlags();
882  if (!Flags.empty())
883    NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, dwarf::DW_FORM_string, Flags);
884
885  unsigned RVer = DIUnit.getRunTimeVersion();
886  if (RVer)
887    NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
888            dwarf::DW_FORM_data1, RVer);
889
890  if (!FirstCU)
891    FirstCU = NewCU;
892  CUMap.insert(std::make_pair(N, NewCU));
893}
894
895/// getCompielUnit - Get CompileUnit DIE.
896CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
897  assert (N && "Invalid DwarfDebug::getCompileUnit argument!");
898  DIDescriptor D(N);
899  const MDNode *CUNode = NULL;
900  if (D.isCompileUnit())
901    CUNode = N;
902  else if (D.isSubprogram())
903    CUNode = DISubprogram(N).getCompileUnit();
904  else if (D.isType())
905    CUNode = DIType(N).getCompileUnit();
906  else if (D.isGlobalVariable())
907    CUNode = DIGlobalVariable(N).getCompileUnit();
908  else if (D.isVariable())
909    CUNode = DIVariable(N).getCompileUnit();
910  else if (D.isNameSpace())
911    CUNode = DINameSpace(N).getCompileUnit();
912  else if (D.isFile())
913    CUNode = DIFile(N).getCompileUnit();
914  else
915    return FirstCU;
916
917  DenseMap<const MDNode *, CompileUnit *>::const_iterator I
918    = CUMap.find(CUNode);
919  if (I == CUMap.end())
920    return FirstCU;
921  return I->second;
922}
923
924/// isUnsignedDIType - Return true if type encoding is unsigned.
925static bool isUnsignedDIType(DIType Ty) {
926  DIDerivedType DTy(Ty);
927  if (DTy.Verify())
928    return isUnsignedDIType(DTy.getTypeDerivedFrom());
929
930  DIBasicType BTy(Ty);
931  if (BTy.Verify()) {
932    unsigned Encoding = BTy.getEncoding();
933    if (Encoding == dwarf::DW_ATE_unsigned ||
934        Encoding == dwarf::DW_ATE_unsigned_char)
935      return true;
936  }
937  return false;
938}
939
940// Return const exprssion if value is a GEP to access merged global
941// constant. e.g.
942// i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
943static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
944  const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
945  if (!CE || CE->getNumOperands() != 3 ||
946      CE->getOpcode() != Instruction::GetElementPtr)
947    return NULL;
948
949  // First operand points to a global value.
950  if (!isa<GlobalValue>(CE->getOperand(0)))
951    return NULL;
952
953  // Second operand is zero.
954  const ConstantInt *CI =
955    dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
956  if (!CI || !CI->isZero())
957    return NULL;
958
959  // Third operand is offset.
960  if (!isa<ConstantInt>(CE->getOperand(2)))
961    return NULL;
962
963  return CE;
964}
965
966/// constructGlobalVariableDIE - Construct global variable DIE.
967void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
968  DIGlobalVariable GV(N);
969
970  // If debug information is malformed then ignore it.
971  if (GV.Verify() == false)
972    return;
973
974  // Check for pre-existence.
975  CompileUnit *TheCU = getCompileUnit(N);
976  if (TheCU->getDIE(GV))
977    return;
978
979  DIType GTy = GV.getType();
980  DIE *VariableDIE = new DIE(GV.getTag());
981
982  bool isGlobalVariable = GV.getGlobal() != NULL;
983
984  // Add name.
985  TheCU->addString(VariableDIE, dwarf::DW_AT_name, dwarf::DW_FORM_string,
986                   GV.getDisplayName());
987  StringRef LinkageName = GV.getLinkageName();
988  if (!LinkageName.empty() && isGlobalVariable)
989    TheCU->addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
990                     dwarf::DW_FORM_string,
991                     getRealLinkageName(LinkageName));
992  // Add type.
993  TheCU->addType(VariableDIE, GTy);
994  if (GTy.isCompositeType() && !GTy.getName().empty()
995      && !GTy.isForwardDecl()) {
996    DIEEntry *Entry = TheCU->getDIEEntry(GTy);
997    assert(Entry && "Missing global type!");
998    TheCU->addGlobalType(GTy.getName(), Entry->getEntry());
999  }
1000  // Add scoping info.
1001  if (!GV.isLocalToUnit()) {
1002    TheCU->addUInt(VariableDIE, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
1003    // Expose as global.
1004    TheCU->addGlobal(GV.getName(), VariableDIE);
1005  }
1006  // Add line number info.
1007  TheCU->addSourceLine(VariableDIE, GV);
1008  // Add to map.
1009  TheCU->insertDIE(N, VariableDIE);
1010  // Add to context owner.
1011  DIDescriptor GVContext = GV.getContext();
1012  TheCU->addToContextOwner(VariableDIE, GVContext);
1013  // Add location.
1014  if (isGlobalVariable) {
1015    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1016    TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1017    TheCU->addLabel(Block, 0, dwarf::DW_FORM_udata,
1018             Asm->Mang->getSymbol(GV.getGlobal()));
1019    // Do not create specification DIE if context is either compile unit
1020    // or a subprogram.
1021    if (GV.isDefinition() && !GVContext.isCompileUnit() &&
1022        !GVContext.isFile() && !isSubprogramContext(GVContext)) {
1023      // Create specification DIE.
1024      DIE *VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1025      TheCU->addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1026                  dwarf::DW_FORM_ref4, VariableDIE);
1027      TheCU->addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1028      TheCU->addUInt(VariableDIE, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1029      TheCU->addDie(VariableSpecDIE);
1030    } else {
1031      TheCU->addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1032    }
1033  } else if (ConstantInt *CI =
1034             dyn_cast_or_null<ConstantInt>(GV.getConstant()))
1035    TheCU->addConstantValue(VariableDIE, CI, isUnsignedDIType(GTy));
1036  else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
1037    // GV is a merged global.
1038    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1039    TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1040    TheCU->addLabel(Block, 0, dwarf::DW_FORM_udata,
1041                    Asm->Mang->getSymbol(cast<GlobalValue>(CE->getOperand(0))));
1042    ConstantInt *CII = cast<ConstantInt>(CE->getOperand(2));
1043    TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1044    TheCU->addUInt(Block, 0, dwarf::DW_FORM_udata, CII->getZExtValue());
1045    TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1046    TheCU->addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1047  }
1048
1049  return;
1050}
1051
1052/// construct SubprogramDIE - Construct subprogram DIE.
1053void DwarfDebug::constructSubprogramDIE(const MDNode *N) {
1054  DISubprogram SP(N);
1055
1056  // Check for pre-existence.
1057  CompileUnit *TheCU = getCompileUnit(N);
1058  if (TheCU->getDIE(N))
1059    return;
1060
1061  if (!SP.isDefinition())
1062    // This is a method declaration which will be handled while constructing
1063    // class type.
1064    return;
1065
1066  DIE *SubprogramDie = createSubprogramDIE(SP);
1067
1068  // Add to map.
1069  TheCU->insertDIE(N, SubprogramDie);
1070
1071  // Add to context owner.
1072  TheCU->addToContextOwner(SubprogramDie, SP.getContext());
1073
1074  // Expose as global.
1075  TheCU->addGlobal(SP.getName(), SubprogramDie);
1076
1077  return;
1078}
1079
1080/// beginModule - Emit all Dwarf sections that should come prior to the
1081/// content. Create global DIEs and emit initial debug info sections.
1082/// This is inovked by the target AsmPrinter.
1083void DwarfDebug::beginModule(Module *M) {
1084  if (DisableDebugInfoPrinting)
1085    return;
1086
1087  DebugInfoFinder DbgFinder;
1088  DbgFinder.processModule(*M);
1089
1090  bool HasDebugInfo = false;
1091
1092  // Scan all the compile-units to see if there are any marked as the main unit.
1093  // if not, we do not generate debug info.
1094  for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1095       E = DbgFinder.compile_unit_end(); I != E; ++I) {
1096    if (DICompileUnit(*I).isMain()) {
1097      HasDebugInfo = true;
1098      break;
1099    }
1100  }
1101
1102  if (!HasDebugInfo) return;
1103
1104  // Tell MMI that we have debug info.
1105  MMI->setDebugInfoAvailability(true);
1106
1107  // Emit initial sections.
1108  EmitSectionLabels();
1109
1110  // Create all the compile unit DIEs.
1111  for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1112         E = DbgFinder.compile_unit_end(); I != E; ++I)
1113    constructCompileUnit(*I);
1114
1115  // Create DIEs for each subprogram.
1116  for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
1117         E = DbgFinder.subprogram_end(); I != E; ++I)
1118    constructSubprogramDIE(*I);
1119
1120  // Create DIEs for each global variable.
1121  for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
1122         E = DbgFinder.global_variable_end(); I != E; ++I)
1123    constructGlobalVariableDIE(*I);
1124
1125  //getOrCreateTypeDIE
1126  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
1127    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1128      DIType Ty(NMD->getOperand(i));
1129      getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
1130    }
1131
1132  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
1133    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1134      DIType Ty(NMD->getOperand(i));
1135      getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
1136    }
1137
1138  // Prime section data.
1139  SectionMap.insert(Asm->getObjFileLowering().getTextSection());
1140}
1141
1142/// endModule - Emit all Dwarf sections that should come after the content.
1143///
1144void DwarfDebug::endModule() {
1145  if (!FirstCU) return;
1146  const Module *M = MMI->getModule();
1147  DenseMap<const MDNode *, DbgScope *> DeadFnScopeMap;
1148  if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
1149    for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
1150      if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
1151      DISubprogram SP(AllSPs->getOperand(SI));
1152      if (!SP.Verify()) continue;
1153
1154      // Collect info for variables that were optimized out.
1155      if (!SP.isDefinition()) continue;
1156      StringRef FName = SP.getLinkageName();
1157      if (FName.empty())
1158        FName = SP.getName();
1159      NamedMDNode *NMD = getFnSpecificMDNode(*(MMI->getModule()), FName);
1160      if (!NMD) continue;
1161      unsigned E = NMD->getNumOperands();
1162      if (!E) continue;
1163      DbgScope *Scope = new DbgScope(NULL, DIDescriptor(SP), NULL);
1164      DeadFnScopeMap[SP] = Scope;
1165      for (unsigned I = 0; I != E; ++I) {
1166        DIVariable DV(NMD->getOperand(I));
1167        if (!DV.Verify()) continue;
1168        Scope->addVariable(new DbgVariable(DV));
1169      }
1170
1171      // Construct subprogram DIE and add variables DIEs.
1172      constructSubprogramDIE(SP);
1173      DIE *ScopeDIE = getCompileUnit(SP)->getDIE(SP);
1174      const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
1175      for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
1176        DIE *VariableDIE = constructVariableDIE(Variables[i], Scope);
1177        if (VariableDIE)
1178          ScopeDIE->addChild(VariableDIE);
1179      }
1180    }
1181  }
1182
1183  // Attach DW_AT_inline attribute with inlined subprogram DIEs.
1184  for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
1185         AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
1186    DIE *ISP = *AI;
1187    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
1188  }
1189
1190  for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1191         CE = ContainingTypeMap.end(); CI != CE; ++CI) {
1192    DIE *SPDie = CI->first;
1193    const MDNode *N = dyn_cast_or_null<MDNode>(CI->second);
1194    if (!N) continue;
1195    DIE *NDie = getCompileUnit(N)->getDIE(N);
1196    if (!NDie) continue;
1197    getCompileUnit(N)->addDIEEntry(SPDie, dwarf::DW_AT_containing_type,
1198                                   dwarf::DW_FORM_ref4, NDie);
1199  }
1200
1201  // Standard sections final addresses.
1202  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
1203  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
1204  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
1205  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
1206
1207  // End text sections.
1208  for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
1209    Asm->OutStreamer.SwitchSection(SectionMap[i]);
1210    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
1211  }
1212
1213  // Emit common frame information.
1214  emitCommonDebugFrame();
1215
1216  // Emit function debug frame information
1217  for (std::vector<FunctionDebugFrameInfo>::iterator I = DebugFrames.begin(),
1218         E = DebugFrames.end(); I != E; ++I)
1219    emitFunctionDebugFrame(*I);
1220
1221  // Compute DIE offsets and sizes.
1222  computeSizeAndOffsets();
1223
1224  // Emit all the DIEs into a debug info section
1225  emitDebugInfo();
1226
1227  // Corresponding abbreviations into a abbrev section.
1228  emitAbbreviations();
1229
1230  // Emit info into a debug pubnames section.
1231  emitDebugPubNames();
1232
1233  // Emit info into a debug pubtypes section.
1234  emitDebugPubTypes();
1235
1236  // Emit info into a debug loc section.
1237  emitDebugLoc();
1238
1239  // Emit info into a debug aranges section.
1240  EmitDebugARanges();
1241
1242  // Emit info into a debug ranges section.
1243  emitDebugRanges();
1244
1245  // Emit info into a debug macinfo section.
1246  emitDebugMacInfo();
1247
1248  // Emit inline info.
1249  emitDebugInlineInfo();
1250
1251  // Emit info into a debug str section.
1252  emitDebugStr();
1253
1254  // clean up.
1255  DeleteContainerSeconds(DeadFnScopeMap);
1256  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1257         E = CUMap.end(); I != E; ++I)
1258    delete I->second;
1259  FirstCU = NULL;  // Reset for the next Module, if any.
1260}
1261
1262/// findAbstractVariable - Find abstract variable, if any, associated with Var.
1263DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &Var,
1264                                              DebugLoc ScopeLoc) {
1265
1266  DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1267  if (AbsDbgVariable)
1268    return AbsDbgVariable;
1269
1270  LLVMContext &Ctx = Var->getContext();
1271  DbgScope *Scope = AbstractScopes.lookup(ScopeLoc.getScope(Ctx));
1272  if (!Scope)
1273    return NULL;
1274
1275  AbsDbgVariable = new DbgVariable(Var);
1276  Scope->addVariable(AbsDbgVariable);
1277  AbstractVariables[Var] = AbsDbgVariable;
1278  return AbsDbgVariable;
1279}
1280
1281/// addCurrentFnArgument - If Var is an current function argument that add
1282/// it in CurrentFnArguments list.
1283bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1284                                      DbgVariable *Var, DbgScope *Scope) {
1285  if (Scope != CurrentFnDbgScope)
1286    return false;
1287  DIVariable DV = Var->getVariable();
1288  if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1289    return false;
1290  unsigned ArgNo = DV.getArgNumber();
1291  if (ArgNo == 0)
1292    return false;
1293
1294  size_t Size = CurrentFnArguments.size();
1295  if (Size == 0)
1296    CurrentFnArguments.resize(MF->getFunction()->arg_size());
1297  // llvm::Function argument size is not good indicator of how many
1298  // arguments does the function have at source level.
1299  if (ArgNo > Size)
1300    CurrentFnArguments.resize(ArgNo * 2);
1301  CurrentFnArguments[ArgNo - 1] = Var;
1302  return true;
1303}
1304
1305/// collectVariableInfoFromMMITable - Collect variable information from
1306/// side table maintained by MMI.
1307void
1308DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction * MF,
1309                                   SmallPtrSet<const MDNode *, 16> &Processed) {
1310  const LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
1311  MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1312  for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1313         VE = VMap.end(); VI != VE; ++VI) {
1314    const MDNode *Var = VI->first;
1315    if (!Var) continue;
1316    Processed.insert(Var);
1317    DIVariable DV(Var);
1318    const std::pair<unsigned, DebugLoc> &VP = VI->second;
1319
1320    DbgScope *Scope = 0;
1321    if (const MDNode *IA = VP.second.getInlinedAt(Ctx))
1322      Scope = ConcreteScopes.lookup(IA);
1323    if (Scope == 0)
1324      Scope = DbgScopeMap.lookup(VP.second.getScope(Ctx));
1325
1326    // If variable scope is not found then skip this variable.
1327    if (Scope == 0)
1328      continue;
1329
1330    DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1331    DbgVariable *RegVar = new DbgVariable(DV);
1332    recordVariableFrameIndex(RegVar, VP.first);
1333    if (!addCurrentFnArgument(MF, RegVar, Scope))
1334      Scope->addVariable(RegVar);
1335    if (AbsDbgVariable) {
1336      recordVariableFrameIndex(AbsDbgVariable, VP.first);
1337      VarToAbstractVarMap[RegVar] = AbsDbgVariable;
1338    }
1339  }
1340}
1341
1342/// isDbgValueInDefinedReg - Return true if debug value, encoded by
1343/// DBG_VALUE instruction, is in a defined reg.
1344static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1345  assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1346  return MI->getNumOperands() == 3 &&
1347         MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1348         MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1349}
1350
1351/// collectVariableInfo - Populate DbgScope entries with variables' info.
1352void
1353DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1354                                SmallPtrSet<const MDNode *, 16> &Processed) {
1355
1356  /// collection info from MMI table.
1357  collectVariableInfoFromMMITable(MF, Processed);
1358
1359  for (SmallVectorImpl<const MDNode*>::const_iterator
1360         UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1361         ++UVI) {
1362    const MDNode *Var = *UVI;
1363    if (Processed.count(Var))
1364      continue;
1365
1366    // History contains relevant DBG_VALUE instructions for Var and instructions
1367    // clobbering it.
1368    SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1369    if (History.empty())
1370      continue;
1371    const MachineInstr *MInsn = History.front();
1372
1373    DIVariable DV(Var);
1374    DbgScope *Scope = NULL;
1375    if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1376        DISubprogram(DV.getContext()).describes(MF->getFunction()))
1377      Scope = CurrentFnDbgScope;
1378    else
1379      Scope = findDbgScope(MInsn);
1380    // If variable scope is not found then skip this variable.
1381    if (!Scope)
1382      continue;
1383
1384    Processed.insert(DV);
1385    assert(MInsn->isDebugValue() && "History must begin with debug value");
1386    DbgVariable *RegVar = new DbgVariable(DV);
1387    if (!addCurrentFnArgument(MF, RegVar, Scope))
1388      Scope->addVariable(RegVar);
1389    if (DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc())) {
1390      DbgVariableToDbgInstMap[AbsVar] = MInsn;
1391      VarToAbstractVarMap[RegVar] = AbsVar;
1392    }
1393
1394    // Simple ranges that are fully coalesced.
1395    if (History.size() <= 1 || (History.size() == 2 &&
1396                                MInsn->isIdenticalTo(History.back()))) {
1397      DbgVariableToDbgInstMap[RegVar] = MInsn;
1398      continue;
1399    }
1400
1401    // handle multiple DBG_VALUE instructions describing one variable.
1402    RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1403
1404    for (SmallVectorImpl<const MachineInstr*>::const_iterator
1405           HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1406      const MachineInstr *Begin = *HI;
1407      assert(Begin->isDebugValue() && "Invalid History entry");
1408      MachineLocation MLoc;
1409      if (Begin->getNumOperands() == 3) {
1410        if (Begin->getOperand(0).isReg() && Begin->getOperand(1).isImm())
1411          MLoc.set(Begin->getOperand(0).getReg(), Begin->getOperand(1).getImm());
1412      } else
1413        MLoc = Asm->getDebugValueLocation(Begin);
1414
1415      // FIXME: emitDebugLoc only understands registers.
1416      if (!MLoc.getReg())
1417        continue;
1418
1419      // Compute the range for a register location.
1420      const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1421      const MCSymbol *SLabel = 0;
1422
1423      if (HI + 1 == HE)
1424        // If Begin is the last instruction in History then its value is valid
1425        // until the end of the function.
1426        SLabel = FunctionEndSym;
1427      else {
1428        const MachineInstr *End = HI[1];
1429        if (End->isDebugValue())
1430          SLabel = getLabelBeforeInsn(End);
1431        else {
1432          // End is a normal instruction clobbering the range.
1433          SLabel = getLabelAfterInsn(End);
1434          assert(SLabel && "Forgot label after clobber instruction");
1435          ++HI;
1436        }
1437      }
1438
1439      // The value is valid until the next DBG_VALUE or clobber.
1440      DotDebugLocEntries.push_back(DotDebugLocEntry(FLabel, SLabel, MLoc));
1441    }
1442    DotDebugLocEntries.push_back(DotDebugLocEntry());
1443  }
1444
1445  // Collect info for variables that were optimized out.
1446  const Function *F = MF->getFunction();
1447  if (NamedMDNode *NMD = getFnSpecificMDNode(*(F->getParent()), F->getName())) {
1448    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1449      DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
1450      if (!DV || !Processed.insert(DV))
1451        continue;
1452      DbgScope *Scope = DbgScopeMap.lookup(DV.getContext());
1453      if (Scope)
1454        Scope->addVariable(new DbgVariable(DV));
1455    }
1456  }
1457}
1458
1459/// getLabelBeforeInsn - Return Label preceding the instruction.
1460const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1461  MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1462  assert(Label && "Didn't insert label before instruction");
1463  return Label;
1464}
1465
1466/// getLabelAfterInsn - Return Label immediately following the instruction.
1467const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1468  return LabelsAfterInsn.lookup(MI);
1469}
1470
1471/// beginInstruction - Process beginning of an instruction.
1472void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1473  // Check if source location changes, but ignore DBG_VALUE locations.
1474  if (!MI->isDebugValue()) {
1475    DebugLoc DL = MI->getDebugLoc();
1476    if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1477      PrevInstLoc = DL;
1478      if (!DL.isUnknown()) {
1479        const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1480        recordSourceLine(DL.getLine(), DL.getCol(), Scope);
1481      } else
1482        recordSourceLine(0, 0, 0);
1483    }
1484  }
1485
1486  // Insert labels where requested.
1487  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1488    LabelsBeforeInsn.find(MI);
1489
1490  // No label needed.
1491  if (I == LabelsBeforeInsn.end())
1492    return;
1493
1494  // Label already assigned.
1495  if (I->second)
1496    return;
1497
1498  if (!PrevLabel) {
1499    PrevLabel = MMI->getContext().CreateTempSymbol();
1500    Asm->OutStreamer.EmitLabel(PrevLabel);
1501  }
1502  I->second = PrevLabel;
1503}
1504
1505/// endInstruction - Process end of an instruction.
1506void DwarfDebug::endInstruction(const MachineInstr *MI) {
1507  // Don't create a new label after DBG_VALUE instructions.
1508  // They don't generate code.
1509  if (!MI->isDebugValue())
1510    PrevLabel = 0;
1511
1512  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1513    LabelsAfterInsn.find(MI);
1514
1515  // No label needed.
1516  if (I == LabelsAfterInsn.end())
1517    return;
1518
1519  // Label already assigned.
1520  if (I->second)
1521    return;
1522
1523  // We need a label after this instruction.
1524  if (!PrevLabel) {
1525    PrevLabel = MMI->getContext().CreateTempSymbol();
1526    Asm->OutStreamer.EmitLabel(PrevLabel);
1527  }
1528  I->second = PrevLabel;
1529}
1530
1531/// getOrCreateDbgScope - Create DbgScope for the scope.
1532DbgScope *DwarfDebug::getOrCreateDbgScope(const MDNode *Scope,
1533                                          const MDNode *InlinedAt) {
1534  if (!InlinedAt) {
1535    DbgScope *WScope = DbgScopeMap.lookup(Scope);
1536    if (WScope)
1537      return WScope;
1538    WScope = new DbgScope(NULL, DIDescriptor(Scope), NULL);
1539    DbgScopeMap.insert(std::make_pair(Scope, WScope));
1540    if (DIDescriptor(Scope).isLexicalBlock()) {
1541      DbgScope *Parent =
1542        getOrCreateDbgScope(DILexicalBlock(Scope).getContext(), NULL);
1543      WScope->setParent(Parent);
1544      Parent->addScope(WScope);
1545    }
1546
1547    if (!WScope->getParent()) {
1548      StringRef SPName = DISubprogram(Scope).getLinkageName();
1549      // We used to check only for a linkage name, but that fails
1550      // since we began omitting the linkage name for private
1551      // functions.  The new way is to check for the name in metadata,
1552      // but that's not supported in old .ll test cases.  Ergo, we
1553      // check both.
1554      if (SPName == Asm->MF->getFunction()->getName() ||
1555          DISubprogram(Scope).getFunction() == Asm->MF->getFunction())
1556        CurrentFnDbgScope = WScope;
1557    }
1558
1559    return WScope;
1560  }
1561
1562  getOrCreateAbstractScope(Scope);
1563  DbgScope *WScope = DbgScopeMap.lookup(InlinedAt);
1564  if (WScope)
1565    return WScope;
1566
1567  WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt);
1568  DbgScopeMap.insert(std::make_pair(InlinedAt, WScope));
1569  DILocation DL(InlinedAt);
1570  DbgScope *Parent =
1571    getOrCreateDbgScope(DL.getScope(), DL.getOrigLocation());
1572  WScope->setParent(Parent);
1573  Parent->addScope(WScope);
1574
1575  ConcreteScopes[InlinedAt] = WScope;
1576
1577  return WScope;
1578}
1579
1580/// hasValidLocation - Return true if debug location entry attached with
1581/// machine instruction encodes valid location info.
1582static bool hasValidLocation(LLVMContext &Ctx,
1583                             const MachineInstr *MInsn,
1584                             const MDNode *&Scope, const MDNode *&InlinedAt) {
1585  DebugLoc DL = MInsn->getDebugLoc();
1586  if (DL.isUnknown()) return false;
1587
1588  const MDNode *S = DL.getScope(Ctx);
1589
1590  // There is no need to create another DIE for compile unit. For all
1591  // other scopes, create one DbgScope now. This will be translated
1592  // into a scope DIE at the end.
1593  if (DIScope(S).isCompileUnit()) return false;
1594
1595  Scope = S;
1596  InlinedAt = DL.getInlinedAt(Ctx);
1597  return true;
1598}
1599
1600/// calculateDominanceGraph - Calculate dominance graph for DbgScope
1601/// hierarchy.
1602static void calculateDominanceGraph(DbgScope *Scope) {
1603  assert (Scope && "Unable to calculate scop edominance graph!");
1604  SmallVector<DbgScope *, 4> WorkStack;
1605  WorkStack.push_back(Scope);
1606  unsigned Counter = 0;
1607  while (!WorkStack.empty()) {
1608    DbgScope *WS = WorkStack.back();
1609    const SmallVector<DbgScope *, 4> &Children = WS->getScopes();
1610    bool visitedChildren = false;
1611    for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
1612           SE = Children.end(); SI != SE; ++SI) {
1613      DbgScope *ChildScope = *SI;
1614      if (!ChildScope->getDFSOut()) {
1615        WorkStack.push_back(ChildScope);
1616        visitedChildren = true;
1617        ChildScope->setDFSIn(++Counter);
1618        break;
1619      }
1620    }
1621    if (!visitedChildren) {
1622      WorkStack.pop_back();
1623      WS->setDFSOut(++Counter);
1624    }
1625  }
1626}
1627
1628/// printDbgScopeInfo - Print DbgScope info for each machine instruction.
1629static
1630void printDbgScopeInfo(LLVMContext &Ctx, const MachineFunction *MF,
1631                       DenseMap<const MachineInstr *, DbgScope *> &MI2ScopeMap)
1632{
1633#ifndef NDEBUG
1634  unsigned PrevDFSIn = 0;
1635  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1636       I != E; ++I) {
1637    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1638         II != IE; ++II) {
1639      const MachineInstr *MInsn = II;
1640      const MDNode *Scope = NULL;
1641      const MDNode *InlinedAt = NULL;
1642
1643      // Check if instruction has valid location information.
1644      if (hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
1645        dbgs() << " [ ";
1646        if (InlinedAt)
1647          dbgs() << "*";
1648        DenseMap<const MachineInstr *, DbgScope *>::iterator DI =
1649          MI2ScopeMap.find(MInsn);
1650        if (DI != MI2ScopeMap.end()) {
1651          DbgScope *S = DI->second;
1652          dbgs() << S->getDFSIn();
1653          PrevDFSIn = S->getDFSIn();
1654        } else
1655          dbgs() << PrevDFSIn;
1656      } else
1657        dbgs() << " [ x" << PrevDFSIn;
1658      dbgs() << " ]";
1659      MInsn->dump();
1660    }
1661    dbgs() << "\n";
1662  }
1663#endif
1664}
1665/// extractScopeInformation - Scan machine instructions in this function
1666/// and collect DbgScopes. Return true, if at least one scope was found.
1667bool DwarfDebug::extractScopeInformation() {
1668  // If scope information was extracted using .dbg intrinsics then there is not
1669  // any need to extract these information by scanning each instruction.
1670  if (!DbgScopeMap.empty())
1671    return false;
1672
1673  // Scan each instruction and create scopes. First build working set of scopes.
1674  LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
1675  SmallVector<DbgRange, 4> MIRanges;
1676  DenseMap<const MachineInstr *, DbgScope *> MI2ScopeMap;
1677  const MDNode *PrevScope = NULL;
1678  const MDNode *PrevInlinedAt = NULL;
1679  const MachineInstr *RangeBeginMI = NULL;
1680  const MachineInstr *PrevMI = NULL;
1681  for (MachineFunction::const_iterator I = Asm->MF->begin(), E = Asm->MF->end();
1682       I != E; ++I) {
1683    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1684         II != IE; ++II) {
1685      const MachineInstr *MInsn = II;
1686      const MDNode *Scope = NULL;
1687      const MDNode *InlinedAt = NULL;
1688
1689      // Check if instruction has valid location information.
1690      if (!hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
1691        PrevMI = MInsn;
1692        continue;
1693      }
1694
1695      // If scope has not changed then skip this instruction.
1696      if (Scope == PrevScope && PrevInlinedAt == InlinedAt) {
1697        PrevMI = MInsn;
1698        continue;
1699      }
1700
1701      // Ignore DBG_VALUE. It does not contribute any instruction in output.
1702      if (MInsn->isDebugValue())
1703        continue;
1704
1705      if (RangeBeginMI) {
1706        // If we have alread seen a beginning of a instruction range and
1707        // current instruction scope does not match scope of first instruction
1708        // in this range then create a new instruction range.
1709        DbgRange R(RangeBeginMI, PrevMI);
1710        MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope,
1711                                                        PrevInlinedAt);
1712        MIRanges.push_back(R);
1713      }
1714
1715      // This is a beginning of a new instruction range.
1716      RangeBeginMI = MInsn;
1717
1718      // Reset previous markers.
1719      PrevMI = MInsn;
1720      PrevScope = Scope;
1721      PrevInlinedAt = InlinedAt;
1722    }
1723  }
1724
1725  // Create last instruction range.
1726  if (RangeBeginMI && PrevMI && PrevScope) {
1727    DbgRange R(RangeBeginMI, PrevMI);
1728    MIRanges.push_back(R);
1729    MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope, PrevInlinedAt);
1730  }
1731
1732  if (!CurrentFnDbgScope)
1733    return false;
1734
1735  calculateDominanceGraph(CurrentFnDbgScope);
1736  if (PrintDbgScope)
1737    printDbgScopeInfo(Ctx, Asm->MF, MI2ScopeMap);
1738
1739  // Find ranges of instructions covered by each DbgScope;
1740  DbgScope *PrevDbgScope = NULL;
1741  for (SmallVector<DbgRange, 4>::const_iterator RI = MIRanges.begin(),
1742         RE = MIRanges.end(); RI != RE; ++RI) {
1743    const DbgRange &R = *RI;
1744    DbgScope *S = MI2ScopeMap.lookup(R.first);
1745    assert (S && "Lost DbgScope for a machine instruction!");
1746    if (PrevDbgScope && !PrevDbgScope->dominates(S))
1747      PrevDbgScope->closeInsnRange(S);
1748    S->openInsnRange(R.first);
1749    S->extendInsnRange(R.second);
1750    PrevDbgScope = S;
1751  }
1752
1753  if (PrevDbgScope)
1754    PrevDbgScope->closeInsnRange();
1755
1756  identifyScopeMarkers();
1757
1758  return !DbgScopeMap.empty();
1759}
1760
1761/// identifyScopeMarkers() -
1762/// Each DbgScope has first instruction and last instruction to mark beginning
1763/// and end of a scope respectively. Create an inverse map that list scopes
1764/// starts (and ends) with an instruction. One instruction may start (or end)
1765/// multiple scopes. Ignore scopes that are not reachable.
1766void DwarfDebug::identifyScopeMarkers() {
1767  SmallVector<DbgScope *, 4> WorkList;
1768  WorkList.push_back(CurrentFnDbgScope);
1769  while (!WorkList.empty()) {
1770    DbgScope *S = WorkList.pop_back_val();
1771
1772    const SmallVector<DbgScope *, 4> &Children = S->getScopes();
1773    if (!Children.empty())
1774      for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
1775             SE = Children.end(); SI != SE; ++SI)
1776        WorkList.push_back(*SI);
1777
1778    if (S->isAbstractScope())
1779      continue;
1780
1781    const SmallVector<DbgRange, 4> &Ranges = S->getRanges();
1782    if (Ranges.empty())
1783      continue;
1784    for (SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin(),
1785           RE = Ranges.end(); RI != RE; ++RI) {
1786      assert(RI->first && "DbgRange does not have first instruction!");
1787      assert(RI->second && "DbgRange does not have second instruction!");
1788      requestLabelBeforeInsn(RI->first);
1789      requestLabelAfterInsn(RI->second);
1790    }
1791  }
1792}
1793
1794/// FindFirstDebugLoc - Find the first debug location in the function. This
1795/// is intended to be an approximation for the source position of the
1796/// beginning of the function.
1797static DebugLoc FindFirstDebugLoc(const MachineFunction *MF) {
1798  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1799       I != E; ++I)
1800    for (MachineBasicBlock::const_iterator MBBI = I->begin(), MBBE = I->end();
1801         MBBI != MBBE; ++MBBI) {
1802      DebugLoc DL = MBBI->getDebugLoc();
1803      if (!DL.isUnknown())
1804        return DL;
1805    }
1806  return DebugLoc();
1807}
1808
1809#ifndef NDEBUG
1810/// CheckLineNumbers - Count basicblocks whose instructions do not have any
1811/// line number information.
1812static void CheckLineNumbers(const MachineFunction *MF) {
1813  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1814       I != E; ++I) {
1815    bool FoundLineNo = false;
1816    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1817         II != IE; ++II) {
1818      const MachineInstr *MI = II;
1819      if (!MI->getDebugLoc().isUnknown()) {
1820        FoundLineNo = true;
1821        break;
1822      }
1823    }
1824    if (!FoundLineNo && I->size())
1825      ++BlocksWithoutLineNo;
1826  }
1827}
1828#endif
1829
1830/// beginFunction - Gather pre-function debug information.  Assumes being
1831/// emitted immediately after the function entry point.
1832void DwarfDebug::beginFunction(const MachineFunction *MF) {
1833  if (!MMI->hasDebugInfo()) return;
1834  if (!extractScopeInformation()) return;
1835
1836#ifndef NDEBUG
1837  CheckLineNumbers(MF);
1838#endif
1839
1840  FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1841                                        Asm->getFunctionNumber());
1842  // Assumes in correct section after the entry point.
1843  Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1844
1845  // Emit label for the implicitly defined dbg.stoppoint at the start of the
1846  // function.
1847  DebugLoc FDL = FindFirstDebugLoc(MF);
1848  if (FDL.isUnknown()) return;
1849
1850  const MDNode *Scope = FDL.getScope(MF->getFunction()->getContext());
1851  const MDNode *TheScope = 0;
1852
1853  DISubprogram SP = getDISubprogram(Scope);
1854  unsigned Line, Col;
1855  if (SP.Verify()) {
1856    Line = SP.getLineNumber();
1857    Col = 0;
1858    TheScope = SP;
1859  } else {
1860    Line = FDL.getLine();
1861    Col = FDL.getCol();
1862    TheScope = Scope;
1863  }
1864
1865  recordSourceLine(Line, Col, TheScope);
1866
1867  assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1868
1869  /// ProcessedArgs - Collection of arguments already processed.
1870  SmallPtrSet<const MDNode *, 8> ProcessedArgs;
1871
1872  const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1873
1874  /// LiveUserVar - Map physreg numbers to the MDNode they contain.
1875  std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1876
1877  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1878       I != E; ++I) {
1879    bool AtBlockEntry = true;
1880    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1881         II != IE; ++II) {
1882      const MachineInstr *MI = II;
1883
1884      if (MI->isDebugValue()) {
1885        assert (MI->getNumOperands() > 1 && "Invalid machine instruction!");
1886
1887        // Keep track of user variables.
1888        const MDNode *Var =
1889          MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1890
1891        // Variable is in a register, we need to check for clobbers.
1892        if (isDbgValueInDefinedReg(MI))
1893          LiveUserVar[MI->getOperand(0).getReg()] = Var;
1894
1895        // Check the history of this variable.
1896        SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1897        if (History.empty()) {
1898          UserVariables.push_back(Var);
1899          // The first mention of a function argument gets the FunctionBeginSym
1900          // label, so arguments are visible when breaking at function entry.
1901          DIVariable DV(Var);
1902          if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1903              DISubprogram(getDISubprogram(DV.getContext()))
1904                .describes(MF->getFunction()))
1905            LabelsBeforeInsn[MI] = FunctionBeginSym;
1906        } else {
1907          // We have seen this variable before. Try to coalesce DBG_VALUEs.
1908          const MachineInstr *Prev = History.back();
1909          if (Prev->isDebugValue()) {
1910            // Coalesce identical entries at the end of History.
1911            if (History.size() >= 2 &&
1912                Prev->isIdenticalTo(History[History.size() - 2]))
1913              History.pop_back();
1914
1915            // Terminate old register assignments that don't reach MI;
1916            MachineFunction::const_iterator PrevMBB = Prev->getParent();
1917            if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1918                isDbgValueInDefinedReg(Prev)) {
1919              // Previous register assignment needs to terminate at the end of
1920              // its basic block.
1921              MachineBasicBlock::const_iterator LastMI =
1922                PrevMBB->getLastNonDebugInstr();
1923              if (LastMI == PrevMBB->end())
1924                // Drop DBG_VALUE for empty range.
1925                History.pop_back();
1926              else {
1927                // Terminate after LastMI.
1928                History.push_back(LastMI);
1929              }
1930            }
1931          }
1932        }
1933        History.push_back(MI);
1934      } else {
1935        // Not a DBG_VALUE instruction.
1936        if (!MI->isLabel())
1937          AtBlockEntry = false;
1938
1939        // Check if the instruction clobbers any registers with debug vars.
1940        for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1941               MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1942          if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1943            continue;
1944          for (const unsigned *AI = TRI->getOverlaps(MOI->getReg());
1945               unsigned Reg = *AI; ++AI) {
1946            const MDNode *Var = LiveUserVar[Reg];
1947            if (!Var)
1948              continue;
1949            // Reg is now clobbered.
1950            LiveUserVar[Reg] = 0;
1951
1952            // Was MD last defined by a DBG_VALUE referring to Reg?
1953            DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1954            if (HistI == DbgValues.end())
1955              continue;
1956            SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1957            if (History.empty())
1958              continue;
1959            const MachineInstr *Prev = History.back();
1960            // Sanity-check: Register assignments are terminated at the end of
1961            // their block.
1962            if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1963              continue;
1964            // Is the variable still in Reg?
1965            if (!isDbgValueInDefinedReg(Prev) ||
1966                Prev->getOperand(0).getReg() != Reg)
1967              continue;
1968            // Var is clobbered. Make sure the next instruction gets a label.
1969            History.push_back(MI);
1970          }
1971        }
1972      }
1973    }
1974  }
1975
1976  for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1977       I != E; ++I) {
1978    SmallVectorImpl<const MachineInstr*> &History = I->second;
1979    if (History.empty())
1980      continue;
1981
1982    // Make sure the final register assignments are terminated.
1983    const MachineInstr *Prev = History.back();
1984    if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1985      const MachineBasicBlock *PrevMBB = Prev->getParent();
1986      MachineBasicBlock::const_iterator LastMI = PrevMBB->getLastNonDebugInstr();
1987      if (LastMI == PrevMBB->end())
1988        // Drop DBG_VALUE for empty range.
1989        History.pop_back();
1990      else {
1991        // Terminate after LastMI.
1992        History.push_back(LastMI);
1993      }
1994    }
1995    // Request labels for the full history.
1996    for (unsigned i = 0, e = History.size(); i != e; ++i) {
1997      const MachineInstr *MI = History[i];
1998      if (MI->isDebugValue())
1999        requestLabelBeforeInsn(MI);
2000      else
2001        requestLabelAfterInsn(MI);
2002    }
2003  }
2004
2005  PrevInstLoc = DebugLoc();
2006  PrevLabel = FunctionBeginSym;
2007}
2008
2009/// endFunction - Gather and emit post-function debug information.
2010///
2011void DwarfDebug::endFunction(const MachineFunction *MF) {
2012  if (!MMI->hasDebugInfo() || DbgScopeMap.empty()) return;
2013
2014  if (CurrentFnDbgScope) {
2015
2016    // Define end label for subprogram.
2017    FunctionEndSym = Asm->GetTempSymbol("func_end",
2018                                        Asm->getFunctionNumber());
2019    // Assumes in correct section after the entry point.
2020    Asm->OutStreamer.EmitLabel(FunctionEndSym);
2021
2022    SmallPtrSet<const MDNode *, 16> ProcessedVars;
2023    collectVariableInfo(MF, ProcessedVars);
2024
2025    // Construct abstract scopes.
2026    for (SmallVector<DbgScope *, 4>::iterator AI = AbstractScopesList.begin(),
2027           AE = AbstractScopesList.end(); AI != AE; ++AI) {
2028      DISubprogram SP((*AI)->getScopeNode());
2029      if (SP.Verify()) {
2030        // Collect info for variables that were optimized out.
2031        StringRef FName = SP.getLinkageName();
2032        if (FName.empty())
2033          FName = SP.getName();
2034        if (NamedMDNode *NMD =
2035            getFnSpecificMDNode(*(MF->getFunction()->getParent()), FName)) {
2036          for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
2037          DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
2038          if (!DV || !ProcessedVars.insert(DV))
2039            continue;
2040          DbgScope *Scope = AbstractScopes.lookup(DV.getContext());
2041          if (Scope)
2042            Scope->addVariable(new DbgVariable(DV));
2043          }
2044        }
2045      }
2046      if (ProcessedSPNodes.count((*AI)->getScopeNode()) == 0)
2047        constructScopeDIE(*AI);
2048    }
2049
2050    DIE *CurFnDIE = constructScopeDIE(CurrentFnDbgScope);
2051
2052    if (!DisableFramePointerElim(*MF))
2053      getCompileUnit(CurrentFnDbgScope->getScopeNode())->addUInt(CurFnDIE,
2054                                                                 dwarf::DW_AT_APPLE_omit_frame_ptr,
2055                                                                 dwarf::DW_FORM_flag, 1);
2056
2057
2058    DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
2059                                                 MMI->getFrameMoves()));
2060  }
2061
2062  // Clear debug info
2063  CurrentFnDbgScope = NULL;
2064  DeleteContainerPointers(CurrentFnArguments);
2065  DbgVariableToFrameIndexMap.clear();
2066  VarToAbstractVarMap.clear();
2067  DbgVariableToDbgInstMap.clear();
2068  DeleteContainerSeconds(DbgScopeMap);
2069  UserVariables.clear();
2070  DbgValues.clear();
2071  ConcreteScopes.clear();
2072  DeleteContainerSeconds(AbstractScopes);
2073  AbstractScopesList.clear();
2074  AbstractVariables.clear();
2075  LabelsBeforeInsn.clear();
2076  LabelsAfterInsn.clear();
2077  PrevLabel = NULL;
2078}
2079
2080/// recordVariableFrameIndex - Record a variable's index.
2081void DwarfDebug::recordVariableFrameIndex(const DbgVariable *V, int Index) {
2082  assert (V && "Invalid DbgVariable!");
2083  DbgVariableToFrameIndexMap[V] = Index;
2084}
2085
2086/// findVariableFrameIndex - Return true if frame index for the variable
2087/// is found. Update FI to hold value of the index.
2088bool DwarfDebug::findVariableFrameIndex(const DbgVariable *V, int *FI) {
2089  assert (V && "Invalid DbgVariable!");
2090  DenseMap<const DbgVariable *, int>::iterator I =
2091    DbgVariableToFrameIndexMap.find(V);
2092  if (I == DbgVariableToFrameIndexMap.end())
2093    return false;
2094  *FI = I->second;
2095  return true;
2096}
2097
2098/// findDbgScope - Find DbgScope for the debug loc attached with an
2099/// instruction.
2100DbgScope *DwarfDebug::findDbgScope(const MachineInstr *MInsn) {
2101  DbgScope *Scope = NULL;
2102  LLVMContext &Ctx =
2103    MInsn->getParent()->getParent()->getFunction()->getContext();
2104  DebugLoc DL = MInsn->getDebugLoc();
2105
2106  if (DL.isUnknown())
2107    return Scope;
2108
2109  if (const MDNode *IA = DL.getInlinedAt(Ctx))
2110    Scope = ConcreteScopes.lookup(IA);
2111  if (Scope == 0)
2112    Scope = DbgScopeMap.lookup(DL.getScope(Ctx));
2113
2114  return Scope;
2115}
2116
2117
2118/// recordSourceLine - Register a source line with debug info. Returns the
2119/// unique label that was emitted and which provides correspondence to
2120/// the source line list.
2121void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S){
2122  StringRef Fn;
2123  StringRef Dir;
2124  unsigned Src = 1;
2125  if (S) {
2126    DIDescriptor Scope(S);
2127
2128    if (Scope.isCompileUnit()) {
2129      DICompileUnit CU(S);
2130      Fn = CU.getFilename();
2131      Dir = CU.getDirectory();
2132    } else if (Scope.isFile()) {
2133      DIFile F(S);
2134      Fn = F.getFilename();
2135      Dir = F.getDirectory();
2136    } else if (Scope.isSubprogram()) {
2137      DISubprogram SP(S);
2138      Fn = SP.getFilename();
2139      Dir = SP.getDirectory();
2140    } else if (Scope.isLexicalBlock()) {
2141      DILexicalBlock DB(S);
2142      Fn = DB.getFilename();
2143      Dir = DB.getDirectory();
2144    } else
2145      assert(0 && "Unexpected scope info");
2146
2147    Src = GetOrCreateSourceID(Fn, Dir);
2148  }
2149  Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, DWARF2_FLAG_IS_STMT,
2150                                         0, 0, Fn);
2151}
2152
2153//===----------------------------------------------------------------------===//
2154// Emit Methods
2155//===----------------------------------------------------------------------===//
2156
2157/// computeSizeAndOffset - Compute the size and offset of a DIE.
2158///
2159unsigned
2160DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
2161  // Get the children.
2162  const std::vector<DIE *> &Children = Die->getChildren();
2163
2164  // If not last sibling and has children then add sibling offset attribute.
2165  if (!Last && !Children.empty())
2166    Die->addSiblingOffset(DIEValueAllocator);
2167
2168  // Record the abbreviation.
2169  assignAbbrevNumber(Die->getAbbrev());
2170
2171  // Get the abbreviation for this DIE.
2172  unsigned AbbrevNumber = Die->getAbbrevNumber();
2173  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2174
2175  // Set DIE offset
2176  Die->setOffset(Offset);
2177
2178  // Start the size with the size of abbreviation code.
2179  Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
2180
2181  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2182  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2183
2184  // Size the DIE attribute values.
2185  for (unsigned i = 0, N = Values.size(); i < N; ++i)
2186    // Size attribute value.
2187    Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
2188
2189  // Size the DIE children if any.
2190  if (!Children.empty()) {
2191    assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
2192           "Children flag not set");
2193
2194    for (unsigned j = 0, M = Children.size(); j < M; ++j)
2195      Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
2196
2197    // End of children marker.
2198    Offset += sizeof(int8_t);
2199  }
2200
2201  Die->setSize(Offset - Die->getOffset());
2202  return Offset;
2203}
2204
2205/// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
2206///
2207void DwarfDebug::computeSizeAndOffsets() {
2208  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2209         E = CUMap.end(); I != E; ++I) {
2210    // Compute size of compile unit header.
2211    unsigned Offset =
2212      sizeof(int32_t) + // Length of Compilation Unit Info
2213      sizeof(int16_t) + // DWARF version number
2214      sizeof(int32_t) + // Offset Into Abbrev. Section
2215      sizeof(int8_t);   // Pointer Size (in bytes)
2216    computeSizeAndOffset(I->second->getCUDie(), Offset, true);
2217  }
2218}
2219
2220/// EmitSectionSym - Switch to the specified MCSection and emit an assembler
2221/// temporary label to it if SymbolStem is specified.
2222static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
2223                                const char *SymbolStem = 0) {
2224  Asm->OutStreamer.SwitchSection(Section);
2225  if (!SymbolStem) return 0;
2226
2227  MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
2228  Asm->OutStreamer.EmitLabel(TmpSym);
2229  return TmpSym;
2230}
2231
2232/// EmitSectionLabels - Emit initial Dwarf sections with a label at
2233/// the start of each one.
2234void DwarfDebug::EmitSectionLabels() {
2235  const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
2236
2237  // Dwarf sections base addresses.
2238  if (Asm->MAI->doesDwarfRequireFrameSection()) {
2239    DwarfFrameSectionSym =
2240      EmitSectionSym(Asm, TLOF.getDwarfFrameSection(), "section_debug_frame");
2241   }
2242
2243  DwarfInfoSectionSym =
2244    EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
2245  DwarfAbbrevSectionSym =
2246    EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
2247  EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
2248
2249  if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
2250    EmitSectionSym(Asm, MacroInfo);
2251
2252  EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
2253  EmitSectionSym(Asm, TLOF.getDwarfLocSection());
2254  EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
2255  EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
2256  DwarfStrSectionSym =
2257    EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
2258  DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
2259                                             "debug_range");
2260
2261  DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
2262                                           "section_debug_loc");
2263
2264  TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
2265  EmitSectionSym(Asm, TLOF.getDataSection());
2266}
2267
2268/// emitDIE - Recusively Emits a debug information entry.
2269///
2270void DwarfDebug::emitDIE(DIE *Die) {
2271  // Get the abbreviation for this DIE.
2272  unsigned AbbrevNumber = Die->getAbbrevNumber();
2273  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2274
2275  // Emit the code (index) for the abbreviation.
2276  if (Asm->isVerbose())
2277    Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
2278                                Twine::utohexstr(Die->getOffset()) + ":0x" +
2279                                Twine::utohexstr(Die->getSize()) + " " +
2280                                dwarf::TagString(Abbrev->getTag()));
2281  Asm->EmitULEB128(AbbrevNumber);
2282
2283  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2284  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2285
2286  // Emit the DIE attribute values.
2287  for (unsigned i = 0, N = Values.size(); i < N; ++i) {
2288    unsigned Attr = AbbrevData[i].getAttribute();
2289    unsigned Form = AbbrevData[i].getForm();
2290    assert(Form && "Too many attributes for DIE (check abbreviation)");
2291
2292    if (Asm->isVerbose())
2293      Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
2294
2295    switch (Attr) {
2296    case dwarf::DW_AT_sibling:
2297      Asm->EmitInt32(Die->getSiblingOffset());
2298      break;
2299    case dwarf::DW_AT_abstract_origin: {
2300      DIEEntry *E = cast<DIEEntry>(Values[i]);
2301      DIE *Origin = E->getEntry();
2302      unsigned Addr = Origin->getOffset();
2303      Asm->EmitInt32(Addr);
2304      break;
2305    }
2306    case dwarf::DW_AT_ranges: {
2307      // DW_AT_range Value encodes offset in debug_range section.
2308      DIEInteger *V = cast<DIEInteger>(Values[i]);
2309
2310      if (Asm->MAI->doesDwarfUsesLabelOffsetForRanges()) {
2311        Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
2312                                 V->getValue(),
2313                                 4);
2314      } else {
2315        Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
2316                                       V->getValue(),
2317                                       DwarfDebugRangeSectionSym,
2318                                       4);
2319      }
2320      break;
2321    }
2322    case dwarf::DW_AT_location: {
2323      if (UseDotDebugLocEntry.count(Die) != 0) {
2324        DIELabel *L = cast<DIELabel>(Values[i]);
2325        Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
2326      } else
2327        Values[i]->EmitValue(Asm, Form);
2328      break;
2329    }
2330    case dwarf::DW_AT_accessibility: {
2331      if (Asm->isVerbose()) {
2332        DIEInteger *V = cast<DIEInteger>(Values[i]);
2333        Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
2334      }
2335      Values[i]->EmitValue(Asm, Form);
2336      break;
2337    }
2338    default:
2339      // Emit an attribute using the defined form.
2340      Values[i]->EmitValue(Asm, Form);
2341      break;
2342    }
2343  }
2344
2345  // Emit the DIE children if any.
2346  if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
2347    const std::vector<DIE *> &Children = Die->getChildren();
2348
2349    for (unsigned j = 0, M = Children.size(); j < M; ++j)
2350      emitDIE(Children[j]);
2351
2352    if (Asm->isVerbose())
2353      Asm->OutStreamer.AddComment("End Of Children Mark");
2354    Asm->EmitInt8(0);
2355  }
2356}
2357
2358/// emitDebugInfo - Emit the debug info section.
2359///
2360void DwarfDebug::emitDebugInfo() {
2361  // Start debug info section.
2362  Asm->OutStreamer.SwitchSection(
2363                            Asm->getObjFileLowering().getDwarfInfoSection());
2364  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2365         E = CUMap.end(); I != E; ++I) {
2366    CompileUnit *TheCU = I->second;
2367    DIE *Die = TheCU->getCUDie();
2368
2369    // Emit the compile units header.
2370    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
2371                                                  TheCU->getID()));
2372
2373    // Emit size of content not including length itself
2374    unsigned ContentSize = Die->getSize() +
2375      sizeof(int16_t) + // DWARF version number
2376      sizeof(int32_t) + // Offset Into Abbrev. Section
2377      sizeof(int8_t);   // Pointer Size (in bytes)
2378
2379    Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
2380    Asm->EmitInt32(ContentSize);
2381    Asm->OutStreamer.AddComment("DWARF version number");
2382    Asm->EmitInt16(dwarf::DWARF_VERSION);
2383    Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2384    Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
2385                           DwarfAbbrevSectionSym);
2386    Asm->OutStreamer.AddComment("Address Size (in bytes)");
2387    Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2388
2389    emitDIE(Die);
2390    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
2391  }
2392}
2393
2394/// emitAbbreviations - Emit the abbreviation section.
2395///
2396void DwarfDebug::emitAbbreviations() const {
2397  // Check to see if it is worth the effort.
2398  if (!Abbreviations.empty()) {
2399    // Start the debug abbrev section.
2400    Asm->OutStreamer.SwitchSection(
2401                            Asm->getObjFileLowering().getDwarfAbbrevSection());
2402
2403    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
2404
2405    // For each abbrevation.
2406    for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
2407      // Get abbreviation data
2408      const DIEAbbrev *Abbrev = Abbreviations[i];
2409
2410      // Emit the abbrevations code (base 1 index.)
2411      Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2412
2413      // Emit the abbreviations data.
2414      Abbrev->Emit(Asm);
2415    }
2416
2417    // Mark end of abbreviations.
2418    Asm->EmitULEB128(0, "EOM(3)");
2419
2420    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
2421  }
2422}
2423
2424/// emitEndOfLineMatrix - Emit the last address of the section and the end of
2425/// the line matrix.
2426///
2427void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2428  // Define last address of section.
2429  Asm->OutStreamer.AddComment("Extended Op");
2430  Asm->EmitInt8(0);
2431
2432  Asm->OutStreamer.AddComment("Op size");
2433  Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
2434  Asm->OutStreamer.AddComment("DW_LNE_set_address");
2435  Asm->EmitInt8(dwarf::DW_LNE_set_address);
2436
2437  Asm->OutStreamer.AddComment("Section end label");
2438
2439  Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2440                                   Asm->getTargetData().getPointerSize(),
2441                                   0/*AddrSpace*/);
2442
2443  // Mark end of matrix.
2444  Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2445  Asm->EmitInt8(0);
2446  Asm->EmitInt8(1);
2447  Asm->EmitInt8(1);
2448}
2449
2450/// emitCommonDebugFrame - Emit common frame info into a debug frame section.
2451///
2452void DwarfDebug::emitCommonDebugFrame() {
2453  if (!Asm->MAI->doesDwarfRequireFrameSection())
2454    return;
2455
2456  int stackGrowth = Asm->getTargetData().getPointerSize();
2457  if (Asm->TM.getFrameLowering()->getStackGrowthDirection() ==
2458      TargetFrameLowering::StackGrowsDown)
2459    stackGrowth *= -1;
2460
2461  // Start the dwarf frame section.
2462  Asm->OutStreamer.SwitchSection(
2463                              Asm->getObjFileLowering().getDwarfFrameSection());
2464
2465  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common"));
2466  Asm->OutStreamer.AddComment("Length of Common Information Entry");
2467  Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_frame_common_end"),
2468                           Asm->GetTempSymbol("debug_frame_common_begin"), 4);
2469
2470  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common_begin"));
2471  Asm->OutStreamer.AddComment("CIE Identifier Tag");
2472  Asm->EmitInt32((int)dwarf::DW_CIE_ID);
2473  Asm->OutStreamer.AddComment("CIE Version");
2474  Asm->EmitInt8(dwarf::DW_CIE_VERSION);
2475  Asm->OutStreamer.AddComment("CIE Augmentation");
2476  Asm->OutStreamer.EmitIntValue(0, 1, /*addrspace*/0); // nul terminator.
2477  Asm->EmitULEB128(1, "CIE Code Alignment Factor");
2478  Asm->EmitSLEB128(stackGrowth, "CIE Data Alignment Factor");
2479  Asm->OutStreamer.AddComment("CIE RA Column");
2480  const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
2481  const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
2482  Asm->EmitInt8(RI->getDwarfRegNum(RI->getRARegister(), false));
2483
2484  std::vector<MachineMove> Moves;
2485  TFI->getInitialFrameState(Moves);
2486
2487  Asm->EmitFrameMoves(Moves, 0, false);
2488
2489  Asm->EmitAlignment(2);
2490  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_frame_common_end"));
2491}
2492
2493/// emitFunctionDebugFrame - Emit per function frame info into a debug frame
2494/// section.
2495void DwarfDebug::
2496emitFunctionDebugFrame(const FunctionDebugFrameInfo &DebugFrameInfo) {
2497  if (!Asm->MAI->doesDwarfRequireFrameSection())
2498    return;
2499
2500  // Start the dwarf frame section.
2501  Asm->OutStreamer.SwitchSection(
2502                              Asm->getObjFileLowering().getDwarfFrameSection());
2503
2504  Asm->OutStreamer.AddComment("Length of Frame Information Entry");
2505  MCSymbol *DebugFrameBegin =
2506    Asm->GetTempSymbol("debug_frame_begin", DebugFrameInfo.Number);
2507  MCSymbol *DebugFrameEnd =
2508    Asm->GetTempSymbol("debug_frame_end", DebugFrameInfo.Number);
2509  Asm->EmitLabelDifference(DebugFrameEnd, DebugFrameBegin, 4);
2510
2511  Asm->OutStreamer.EmitLabel(DebugFrameBegin);
2512
2513  Asm->OutStreamer.AddComment("FDE CIE offset");
2514  Asm->EmitSectionOffset(Asm->GetTempSymbol("debug_frame_common"),
2515                         DwarfFrameSectionSym);
2516
2517  Asm->OutStreamer.AddComment("FDE initial location");
2518  MCSymbol *FuncBeginSym =
2519    Asm->GetTempSymbol("func_begin", DebugFrameInfo.Number);
2520  Asm->OutStreamer.EmitSymbolValue(FuncBeginSym,
2521                                   Asm->getTargetData().getPointerSize(),
2522                                   0/*AddrSpace*/);
2523
2524
2525  Asm->OutStreamer.AddComment("FDE address range");
2526  Asm->EmitLabelDifference(Asm->GetTempSymbol("func_end",DebugFrameInfo.Number),
2527                           FuncBeginSym, Asm->getTargetData().getPointerSize());
2528
2529  Asm->EmitFrameMoves(DebugFrameInfo.Moves, FuncBeginSym, false);
2530
2531  Asm->EmitAlignment(2);
2532  Asm->OutStreamer.EmitLabel(DebugFrameEnd);
2533}
2534
2535/// emitDebugPubNames - Emit visible names into a debug pubnames section.
2536///
2537void DwarfDebug::emitDebugPubNames() {
2538  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2539         E = CUMap.end(); I != E; ++I) {
2540    CompileUnit *TheCU = I->second;
2541    // Start the dwarf pubnames section.
2542    Asm->OutStreamer.SwitchSection(
2543      Asm->getObjFileLowering().getDwarfPubNamesSection());
2544
2545    Asm->OutStreamer.AddComment("Length of Public Names Info");
2546    Asm->EmitLabelDifference(
2547      Asm->GetTempSymbol("pubnames_end", TheCU->getID()),
2548      Asm->GetTempSymbol("pubnames_begin", TheCU->getID()), 4);
2549
2550    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin",
2551                                                  TheCU->getID()));
2552
2553    Asm->OutStreamer.AddComment("DWARF Version");
2554    Asm->EmitInt16(dwarf::DWARF_VERSION);
2555
2556    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2557    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
2558                           DwarfInfoSectionSym);
2559
2560    Asm->OutStreamer.AddComment("Compilation Unit Length");
2561    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
2562                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
2563                             4);
2564
2565    const StringMap<DIE*> &Globals = TheCU->getGlobals();
2566    for (StringMap<DIE*>::const_iterator
2567           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2568      const char *Name = GI->getKeyData();
2569      DIE *Entity = GI->second;
2570
2571      Asm->OutStreamer.AddComment("DIE offset");
2572      Asm->EmitInt32(Entity->getOffset());
2573
2574      if (Asm->isVerbose())
2575        Asm->OutStreamer.AddComment("External Name");
2576      Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
2577    }
2578
2579    Asm->OutStreamer.AddComment("End Mark");
2580    Asm->EmitInt32(0);
2581    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end",
2582                                                TheCU->getID()));
2583  }
2584}
2585
2586void DwarfDebug::emitDebugPubTypes() {
2587  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2588         E = CUMap.end(); I != E; ++I) {
2589    CompileUnit *TheCU = I->second;
2590    // Start the dwarf pubnames section.
2591    Asm->OutStreamer.SwitchSection(
2592      Asm->getObjFileLowering().getDwarfPubTypesSection());
2593    Asm->OutStreamer.AddComment("Length of Public Types Info");
2594    Asm->EmitLabelDifference(
2595      Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
2596      Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
2597
2598    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2599                                                  TheCU->getID()));
2600
2601    if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2602    Asm->EmitInt16(dwarf::DWARF_VERSION);
2603
2604    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2605    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
2606                           DwarfInfoSectionSym);
2607
2608    Asm->OutStreamer.AddComment("Compilation Unit Length");
2609    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
2610                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
2611                             4);
2612
2613    const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2614    for (StringMap<DIE*>::const_iterator
2615           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2616      const char *Name = GI->getKeyData();
2617      DIE * Entity = GI->second;
2618
2619      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2620      Asm->EmitInt32(Entity->getOffset());
2621
2622      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2623      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
2624    }
2625
2626    Asm->OutStreamer.AddComment("End Mark");
2627    Asm->EmitInt32(0);
2628    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2629                                                  TheCU->getID()));
2630  }
2631}
2632
2633/// emitDebugStr - Emit visible names into a debug str section.
2634///
2635void DwarfDebug::emitDebugStr() {
2636  // Check to see if it is worth the effort.
2637  if (StringPool.empty()) return;
2638
2639  // Start the dwarf str section.
2640  Asm->OutStreamer.SwitchSection(
2641                                Asm->getObjFileLowering().getDwarfStrSection());
2642
2643  // Get all of the string pool entries and put them in an array by their ID so
2644  // we can sort them.
2645  SmallVector<std::pair<unsigned,
2646      StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2647
2648  for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2649       I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
2650    Entries.push_back(std::make_pair(I->second.second, &*I));
2651
2652  array_pod_sort(Entries.begin(), Entries.end());
2653
2654  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2655    // Emit a label for reference from debug information entries.
2656    Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2657
2658    // Emit the string itself.
2659    Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
2660  }
2661}
2662
2663/// emitDebugLoc - Emit visible names into a debug loc section.
2664///
2665void DwarfDebug::emitDebugLoc() {
2666  if (DotDebugLocEntries.empty())
2667    return;
2668
2669  for (SmallVector<DotDebugLocEntry, 4>::iterator
2670         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2671       I != E; ++I) {
2672    DotDebugLocEntry &Entry = *I;
2673    if (I + 1 != DotDebugLocEntries.end())
2674      Entry.Merge(I+1);
2675  }
2676
2677  // Start the dwarf loc section.
2678  Asm->OutStreamer.SwitchSection(
2679    Asm->getObjFileLowering().getDwarfLocSection());
2680  unsigned char Size = Asm->getTargetData().getPointerSize();
2681  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2682  unsigned index = 1;
2683  for (SmallVector<DotDebugLocEntry, 4>::iterator
2684         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2685       I != E; ++I, ++index) {
2686    DotDebugLocEntry &Entry = *I;
2687    if (Entry.isMerged()) continue;
2688    if (Entry.isEmpty()) {
2689      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2690      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2691      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2692    } else {
2693      Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
2694      Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
2695      Asm->EmitDwarfRegOp(Entry.Loc);
2696    }
2697  }
2698}
2699
2700/// EmitDebugARanges - Emit visible names into a debug aranges section.
2701///
2702void DwarfDebug::EmitDebugARanges() {
2703  // Start the dwarf aranges section.
2704  Asm->OutStreamer.SwitchSection(
2705                          Asm->getObjFileLowering().getDwarfARangesSection());
2706}
2707
2708/// emitDebugRanges - Emit visible names into a debug ranges section.
2709///
2710void DwarfDebug::emitDebugRanges() {
2711  // Start the dwarf ranges section.
2712  Asm->OutStreamer.SwitchSection(
2713    Asm->getObjFileLowering().getDwarfRangesSection());
2714  unsigned char Size = Asm->getTargetData().getPointerSize();
2715  for (SmallVector<const MCSymbol *, 8>::iterator
2716         I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2717       I != E; ++I) {
2718    if (*I)
2719      Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2720    else
2721      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2722  }
2723}
2724
2725/// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2726///
2727void DwarfDebug::emitDebugMacInfo() {
2728  if (const MCSection *LineInfo =
2729      Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2730    // Start the dwarf macinfo section.
2731    Asm->OutStreamer.SwitchSection(LineInfo);
2732  }
2733}
2734
2735/// emitDebugInlineInfo - Emit inline info using following format.
2736/// Section Header:
2737/// 1. length of section
2738/// 2. Dwarf version number
2739/// 3. address size.
2740///
2741/// Entries (one "entry" for each function that was inlined):
2742///
2743/// 1. offset into __debug_str section for MIPS linkage name, if exists;
2744///   otherwise offset into __debug_str for regular function name.
2745/// 2. offset into __debug_str section for regular function name.
2746/// 3. an unsigned LEB128 number indicating the number of distinct inlining
2747/// instances for the function.
2748///
2749/// The rest of the entry consists of a {die_offset, low_pc} pair for each
2750/// inlined instance; the die_offset points to the inlined_subroutine die in the
2751/// __debug_info section, and the low_pc is the starting address for the
2752/// inlining instance.
2753void DwarfDebug::emitDebugInlineInfo() {
2754  if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
2755    return;
2756
2757  if (!FirstCU)
2758    return;
2759
2760  Asm->OutStreamer.SwitchSection(
2761                        Asm->getObjFileLowering().getDwarfDebugInlineSection());
2762
2763  Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2764  Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2765                           Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2766
2767  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2768
2769  Asm->OutStreamer.AddComment("Dwarf Version");
2770  Asm->EmitInt16(dwarf::DWARF_VERSION);
2771  Asm->OutStreamer.AddComment("Address Size (in bytes)");
2772  Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2773
2774  for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2775         E = InlinedSPNodes.end(); I != E; ++I) {
2776
2777    const MDNode *Node = *I;
2778    DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2779      = InlineInfo.find(Node);
2780    SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2781    DISubprogram SP(Node);
2782    StringRef LName = SP.getLinkageName();
2783    StringRef Name = SP.getName();
2784
2785    Asm->OutStreamer.AddComment("MIPS linkage name");
2786    if (LName.empty()) {
2787      Asm->OutStreamer.EmitBytes(Name, 0);
2788      Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
2789    } else
2790      Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2791                             DwarfStrSectionSym);
2792
2793    Asm->OutStreamer.AddComment("Function name");
2794    Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2795    Asm->EmitULEB128(Labels.size(), "Inline count");
2796
2797    for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2798           LE = Labels.end(); LI != LE; ++LI) {
2799      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2800      Asm->EmitInt32(LI->second->getOffset());
2801
2802      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2803      Asm->OutStreamer.EmitSymbolValue(LI->first,
2804                                       Asm->getTargetData().getPointerSize(),0);
2805    }
2806  }
2807
2808  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2809}
2810