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