DwarfDebug.cpp revision e9ae06ca987b6c3b6cfbcd50ab85386565a4e0ca
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
622/// constructVariableDIE - Construct a DIE for the given DbgVariable.
623DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
624  StringRef Name = DV->getName();
625  if (Name.empty())
626    return NULL;
627
628  // Translate tag to proper Dwarf tag.  The result variable is dropped for
629  // now.
630  unsigned Tag;
631  switch (DV->getTag()) {
632  case dwarf::DW_TAG_return_variable:
633    return NULL;
634  case dwarf::DW_TAG_arg_variable:
635    Tag = dwarf::DW_TAG_formal_parameter;
636    break;
637  case dwarf::DW_TAG_auto_variable:    // fall thru
638  default:
639    Tag = dwarf::DW_TAG_variable;
640    break;
641  }
642
643  // Define variable debug information entry.
644  DIE *VariableDie = new DIE(Tag);
645  CompileUnit *VariableCU = getCompileUnit(DV->getVariable());
646  DIE *AbsDIE = NULL;
647  DenseMap<const DbgVariable *, const DbgVariable *>::iterator
648    V2AVI = VarToAbstractVarMap.find(DV);
649  if (V2AVI != VarToAbstractVarMap.end())
650    AbsDIE = V2AVI->second->getDIE();
651
652  if (AbsDIE)
653    VariableCU->addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
654                       dwarf::DW_FORM_ref4, AbsDIE);
655  else {
656    VariableCU->addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
657                          Name);
658    VariableCU->addSourceLine(VariableDie, DV->getVariable());
659
660    // Add variable type.
661    VariableCU->addType(VariableDie, DV->getType());
662  }
663
664  if (Tag == dwarf::DW_TAG_formal_parameter && DV->getType().isArtificial())
665    VariableCU->addUInt(VariableDie, dwarf::DW_AT_artificial,
666                        dwarf::DW_FORM_flag, 1);
667  else if (DIVariable(DV->getVariable()).isArtificial())
668    VariableCU->addUInt(VariableDie, dwarf::DW_AT_artificial,
669                        dwarf::DW_FORM_flag, 1);
670
671  if (Scope->isAbstractScope()) {
672    DV->setDIE(VariableDie);
673    return VariableDie;
674  }
675
676  // Add variable address.
677
678  unsigned Offset = DV->getDotDebugLocOffset();
679  if (Offset != ~0U) {
680    VariableCU->addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
681             Asm->GetTempSymbol("debug_loc", Offset));
682    DV->setDIE(VariableDie);
683    UseDotDebugLocEntry.insert(VariableDie);
684    return VariableDie;
685  }
686
687  // Check if variable is described by a  DBG_VALUE instruction.
688  DenseMap<const DbgVariable *, const MachineInstr *>::iterator DVI =
689    DbgVariableToDbgInstMap.find(DV);
690  if (DVI != DbgVariableToDbgInstMap.end()) {
691    const MachineInstr *DVInsn = DVI->second;
692    bool updated = false;
693    // FIXME : Handle getNumOperands != 3
694    if (DVInsn->getNumOperands() == 3) {
695      if (DVInsn->getOperand(0).isReg()) {
696        const MachineOperand RegOp = DVInsn->getOperand(0);
697        const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
698        if (DVInsn->getOperand(1).isImm() &&
699            TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) {
700          unsigned FrameReg = 0;
701          const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
702          int Offset =
703            TFI->getFrameIndexReference(*Asm->MF,
704                                        DVInsn->getOperand(1).getImm(),
705                                        FrameReg);
706          MachineLocation Location(FrameReg, Offset);
707          VariableCU->addVariableAddress(DV, VariableDie, Location);
708
709        } else if (RegOp.getReg())
710          VariableCU->addVariableAddress(DV, VariableDie,
711                                         MachineLocation(RegOp.getReg()));
712        updated = true;
713      }
714      else if (DVInsn->getOperand(0).isImm())
715        updated =
716          VariableCU->addConstantValue(VariableDie, DVInsn->getOperand(0),
717                                       DV->getType());
718      else if (DVInsn->getOperand(0).isFPImm())
719        updated =
720          VariableCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0));
721    } else {
722      VariableCU->addVariableAddress(DV, VariableDie,
723                                     Asm->getDebugValueLocation(DVInsn));
724      updated = true;
725    }
726    if (!updated) {
727      // If variableDie is not updated then DBG_VALUE instruction does not
728      // have valid variable info.
729      delete VariableDie;
730      return NULL;
731    }
732    DV->setDIE(VariableDie);
733    return VariableDie;
734  }
735
736  // .. else use frame index, if available.
737  int FI = 0;
738  if (findVariableFrameIndex(DV, &FI)) {
739    unsigned FrameReg = 0;
740    const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
741    int Offset =
742      TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
743    MachineLocation Location(FrameReg, Offset);
744    VariableCU->addVariableAddress(DV, VariableDie, Location);
745  }
746
747  DV->setDIE(VariableDie);
748  return VariableDie;
749
750}
751
752/// constructScopeDIE - Construct a DIE for this scope.
753DIE *DwarfDebug::constructScopeDIE(DbgScope *Scope) {
754  if (!Scope || !Scope->getScopeNode())
755    return NULL;
756
757  SmallVector <DIE *, 8> Children;
758
759  // Collect arguments for current function.
760  if (Scope == CurrentFnDbgScope)
761    for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
762      if (DbgVariable *ArgDV = CurrentFnArguments[i])
763        if (DIE *Arg = constructVariableDIE(ArgDV, Scope))
764          Children.push_back(Arg);
765
766  // Collect lexical scope childrens first.
767  const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
768  for (unsigned i = 0, N = Variables.size(); i < N; ++i)
769    if (DIE *Variable = constructVariableDIE(Variables[i], Scope))
770      Children.push_back(Variable);
771  const SmallVector<DbgScope *, 4> &Scopes = Scope->getScopes();
772  for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
773    if (DIE *Nested = constructScopeDIE(Scopes[j]))
774      Children.push_back(Nested);
775  DIScope DS(Scope->getScopeNode());
776  DIE *ScopeDIE = NULL;
777  if (Scope->getInlinedAt())
778    ScopeDIE = constructInlinedScopeDIE(Scope);
779  else if (DS.isSubprogram()) {
780    ProcessedSPNodes.insert(DS);
781    if (Scope->isAbstractScope()) {
782      ScopeDIE = getCompileUnit(DS)->getDIE(DS);
783      // Note down abstract DIE.
784      if (ScopeDIE)
785        AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
786    }
787    else
788      ScopeDIE = updateSubprogramScopeDIE(DS);
789  }
790  else {
791    // There is no need to emit empty lexical block DIE.
792    if (Children.empty())
793      return NULL;
794    ScopeDIE = constructLexicalScopeDIE(Scope);
795  }
796
797  if (!ScopeDIE) return NULL;
798
799  // Add children
800  for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
801         E = Children.end(); I != E; ++I)
802    ScopeDIE->addChild(*I);
803
804  if (DS.isSubprogram())
805    getCompileUnit(DS)->addPubTypes(DISubprogram(DS));
806
807 return ScopeDIE;
808}
809
810/// GetOrCreateSourceID - Look up the source id with the given directory and
811/// source file names. If none currently exists, create a new id and insert it
812/// in the SourceIds map. This can update DirectoryNames and SourceFileNames
813/// maps as well.
814
815unsigned DwarfDebug::GetOrCreateSourceID(StringRef FileName,
816                                         StringRef DirName) {
817  // If FE did not provide a file name, then assume stdin.
818  if (FileName.empty())
819    return GetOrCreateSourceID("<stdin>", StringRef());
820
821  // MCStream expects full path name as filename.
822  if (!DirName.empty() && !FileName.startswith("/")) {
823    std::string FullPathName(DirName.data());
824    if (!DirName.endswith("/"))
825      FullPathName += "/";
826    FullPathName += FileName.data();
827    // Here FullPathName will be copied into StringMap by GetOrCreateSourceID.
828    return GetOrCreateSourceID(StringRef(FullPathName), StringRef());
829  }
830
831  StringMapEntry<unsigned> &Entry = SourceIdMap.GetOrCreateValue(FileName);
832  if (Entry.getValue())
833    return Entry.getValue();
834
835  unsigned SrcId = SourceIdMap.size();
836  Entry.setValue(SrcId);
837
838  // Print out a .file directive to specify files for .loc directives.
839  Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.getKey());
840
841  return SrcId;
842}
843
844/// constructCompileUnit - Create new CompileUnit for the given
845/// metadata node with tag DW_TAG_compile_unit.
846void DwarfDebug::constructCompileUnit(const MDNode *N) {
847  DICompileUnit DIUnit(N);
848  StringRef FN = DIUnit.getFilename();
849  StringRef Dir = DIUnit.getDirectory();
850  unsigned ID = GetOrCreateSourceID(FN, Dir);
851
852  DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
853  CompileUnit *NewCU = new CompileUnit(ID, Die, Asm, this);
854  NewCU->addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
855                   DIUnit.getProducer());
856  NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
857                 DIUnit.getLanguage());
858  NewCU->addString(Die, dwarf::DW_AT_name, dwarf::DW_FORM_string, FN);
859  // Use DW_AT_entry_pc instead of DW_AT_low_pc/DW_AT_high_pc pair. This
860  // simplifies debug range entries.
861  NewCU->addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
862  // DW_AT_stmt_list is a offset of line number information for this
863  // compile unit in debug_line section.
864  if(Asm->MAI->doesDwarfRequireRelocationForSectionOffset())
865    NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
866                    Asm->GetTempSymbol("section_line"));
867  else
868    NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
869
870  if (!Dir.empty())
871    NewCU->addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
872  if (DIUnit.isOptimized())
873    NewCU->addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
874
875  StringRef Flags = DIUnit.getFlags();
876  if (!Flags.empty())
877    NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, dwarf::DW_FORM_string, Flags);
878
879  unsigned RVer = DIUnit.getRunTimeVersion();
880  if (RVer)
881    NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
882            dwarf::DW_FORM_data1, RVer);
883
884  if (!FirstCU)
885    FirstCU = NewCU;
886  CUMap.insert(std::make_pair(N, NewCU));
887}
888
889/// getCompielUnit - Get CompileUnit DIE.
890CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
891  assert (N && "Invalid DwarfDebug::getCompileUnit argument!");
892  DIDescriptor D(N);
893  const MDNode *CUNode = NULL;
894  if (D.isCompileUnit())
895    CUNode = N;
896  else if (D.isSubprogram())
897    CUNode = DISubprogram(N).getCompileUnit();
898  else if (D.isType())
899    CUNode = DIType(N).getCompileUnit();
900  else if (D.isGlobalVariable())
901    CUNode = DIGlobalVariable(N).getCompileUnit();
902  else if (D.isVariable())
903    CUNode = DIVariable(N).getCompileUnit();
904  else if (D.isNameSpace())
905    CUNode = DINameSpace(N).getCompileUnit();
906  else if (D.isFile())
907    CUNode = DIFile(N).getCompileUnit();
908  else
909    return FirstCU;
910
911  DenseMap<const MDNode *, CompileUnit *>::const_iterator I
912    = CUMap.find(CUNode);
913  if (I == CUMap.end())
914    return FirstCU;
915  return I->second;
916}
917
918/// isUnsignedDIType - Return true if type encoding is unsigned.
919static bool isUnsignedDIType(DIType Ty) {
920  DIDerivedType DTy(Ty);
921  if (DTy.Verify())
922    return isUnsignedDIType(DTy.getTypeDerivedFrom());
923
924  DIBasicType BTy(Ty);
925  if (BTy.Verify()) {
926    unsigned Encoding = BTy.getEncoding();
927    if (Encoding == dwarf::DW_ATE_unsigned ||
928        Encoding == dwarf::DW_ATE_unsigned_char)
929      return true;
930  }
931  return false;
932}
933
934// Return const exprssion if value is a GEP to access merged global
935// constant. e.g.
936// i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
937static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
938  const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
939  if (!CE || CE->getNumOperands() != 3 ||
940      CE->getOpcode() != Instruction::GetElementPtr)
941    return NULL;
942
943  // First operand points to a global value.
944  if (!isa<GlobalValue>(CE->getOperand(0)))
945    return NULL;
946
947  // Second operand is zero.
948  const ConstantInt *CI =
949    dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
950  if (!CI || !CI->isZero())
951    return NULL;
952
953  // Third operand is offset.
954  if (!isa<ConstantInt>(CE->getOperand(2)))
955    return NULL;
956
957  return CE;
958}
959
960/// constructGlobalVariableDIE - Construct global variable DIE.
961void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
962  DIGlobalVariable GV(N);
963
964  // If debug information is malformed then ignore it.
965  if (GV.Verify() == false)
966    return;
967
968  // Check for pre-existence.
969  CompileUnit *TheCU = getCompileUnit(N);
970  if (TheCU->getDIE(GV))
971    return;
972
973  DIType GTy = GV.getType();
974  DIE *VariableDIE = new DIE(GV.getTag());
975
976  bool isGlobalVariable = GV.getGlobal() != NULL;
977
978  // Add name.
979  TheCU->addString(VariableDIE, dwarf::DW_AT_name, dwarf::DW_FORM_string,
980                   GV.getDisplayName());
981  StringRef LinkageName = GV.getLinkageName();
982  if (!LinkageName.empty() && isGlobalVariable)
983    TheCU->addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
984                     dwarf::DW_FORM_string,
985                     getRealLinkageName(LinkageName));
986  // Add type.
987  TheCU->addType(VariableDIE, GTy);
988
989  // Add scoping info.
990  if (!GV.isLocalToUnit()) {
991    TheCU->addUInt(VariableDIE, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
992    // Expose as global.
993    TheCU->addGlobal(GV.getName(), VariableDIE);
994  }
995  // Add line number info.
996  TheCU->addSourceLine(VariableDIE, GV);
997  // Add to map.
998  TheCU->insertDIE(N, VariableDIE);
999  // Add to context owner.
1000  DIDescriptor GVContext = GV.getContext();
1001  TheCU->addToContextOwner(VariableDIE, GVContext);
1002  // Add location.
1003  if (isGlobalVariable) {
1004    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1005    TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1006    TheCU->addLabel(Block, 0, dwarf::DW_FORM_udata,
1007             Asm->Mang->getSymbol(GV.getGlobal()));
1008    // Do not create specification DIE if context is either compile unit
1009    // or a subprogram.
1010    if (GV.isDefinition() && !GVContext.isCompileUnit() &&
1011        !GVContext.isFile() && !isSubprogramContext(GVContext)) {
1012      // Create specification DIE.
1013      DIE *VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1014      TheCU->addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1015                  dwarf::DW_FORM_ref4, VariableDIE);
1016      TheCU->addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1017      TheCU->addUInt(VariableDIE, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1018      TheCU->addDie(VariableSpecDIE);
1019    } else {
1020      TheCU->addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1021    }
1022  } else if (ConstantInt *CI =
1023             dyn_cast_or_null<ConstantInt>(GV.getConstant()))
1024    TheCU->addConstantValue(VariableDIE, CI, isUnsignedDIType(GTy));
1025  else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
1026    // GV is a merged global.
1027    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1028    TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1029    TheCU->addLabel(Block, 0, dwarf::DW_FORM_udata,
1030                    Asm->Mang->getSymbol(cast<GlobalValue>(CE->getOperand(0))));
1031    ConstantInt *CII = cast<ConstantInt>(CE->getOperand(2));
1032    TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1033    TheCU->addUInt(Block, 0, dwarf::DW_FORM_udata, CII->getZExtValue());
1034    TheCU->addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1035    TheCU->addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1036  }
1037
1038  return;
1039}
1040
1041/// construct SubprogramDIE - Construct subprogram DIE.
1042void DwarfDebug::constructSubprogramDIE(const MDNode *N) {
1043  DISubprogram SP(N);
1044
1045  // Check for pre-existence.
1046  CompileUnit *TheCU = getCompileUnit(N);
1047  if (TheCU->getDIE(N))
1048    return;
1049
1050  if (!SP.isDefinition())
1051    // This is a method declaration which will be handled while constructing
1052    // class type.
1053    return;
1054
1055  DIE *SubprogramDie = createSubprogramDIE(SP);
1056
1057  // Add to map.
1058  TheCU->insertDIE(N, SubprogramDie);
1059
1060  // Add to context owner.
1061  TheCU->addToContextOwner(SubprogramDie, SP.getContext());
1062
1063  // Expose as global.
1064  TheCU->addGlobal(SP.getName(), SubprogramDie);
1065
1066  return;
1067}
1068
1069/// beginModule - Emit all Dwarf sections that should come prior to the
1070/// content. Create global DIEs and emit initial debug info sections.
1071/// This is inovked by the target AsmPrinter.
1072void DwarfDebug::beginModule(Module *M) {
1073  if (DisableDebugInfoPrinting)
1074    return;
1075
1076  // If module has named metadata anchors then use them, otherwise scan the module
1077  // using debug info finder to collect debug info.
1078  NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
1079  if (CU_Nodes) {
1080
1081    NamedMDNode *GV_Nodes = M->getNamedMetadata("llvm.dbg.gv");
1082    NamedMDNode *SP_Nodes = M->getNamedMetadata("llvm.dbg.sp");
1083    if (!GV_Nodes && !SP_Nodes)
1084      // If there are not any global variables or any functions then
1085      // there is not any debug info in this module.
1086      return;
1087
1088    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)
1089      constructCompileUnit(CU_Nodes->getOperand(i));
1090
1091    if (GV_Nodes)
1092      for (unsigned i = 0, e = GV_Nodes->getNumOperands(); i != e; ++i)
1093        constructGlobalVariableDIE(GV_Nodes->getOperand(i));
1094
1095    if (SP_Nodes)
1096      for (unsigned i = 0, e = SP_Nodes->getNumOperands(); i != e; ++i)
1097        constructSubprogramDIE(SP_Nodes->getOperand(i));
1098
1099  } else {
1100
1101    DebugInfoFinder DbgFinder;
1102    DbgFinder.processModule(*M);
1103
1104    bool HasDebugInfo = false;
1105    // Scan all the compile-units to see if there are any marked as the main unit.
1106    // if not, we do not generate debug info.
1107    for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1108           E = DbgFinder.compile_unit_end(); I != E; ++I) {
1109      if (DICompileUnit(*I).isMain()) {
1110        HasDebugInfo = true;
1111        break;
1112      }
1113    }
1114    if (!HasDebugInfo) return;
1115
1116    // Create all the compile unit DIEs.
1117    for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1118           E = DbgFinder.compile_unit_end(); I != E; ++I)
1119      constructCompileUnit(*I);
1120
1121    // Create DIEs for each global variable.
1122    for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
1123           E = DbgFinder.global_variable_end(); I != E; ++I)
1124      constructGlobalVariableDIE(*I);
1125
1126    // Create DIEs for each subprogram.
1127    for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
1128           E = DbgFinder.subprogram_end(); I != E; ++I)
1129      constructSubprogramDIE(*I);
1130  }
1131
1132  // Tell MMI that we have debug info.
1133  MMI->setDebugInfoAvailability(true);
1134
1135  // Emit initial sections.
1136  EmitSectionLabels();
1137
1138  //getOrCreateTypeDIE
1139  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
1140    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1141      DIType Ty(NMD->getOperand(i));
1142      getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
1143    }
1144
1145  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
1146    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1147      DIType Ty(NMD->getOperand(i));
1148      getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
1149    }
1150
1151  // Prime section data.
1152  SectionMap.insert(Asm->getObjFileLowering().getTextSection());
1153}
1154
1155/// endModule - Emit all Dwarf sections that should come after the content.
1156///
1157void DwarfDebug::endModule() {
1158  if (!FirstCU) return;
1159  const Module *M = MMI->getModule();
1160  DenseMap<const MDNode *, DbgScope *> DeadFnScopeMap;
1161  if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
1162    for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
1163      if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
1164      DISubprogram SP(AllSPs->getOperand(SI));
1165      if (!SP.Verify()) continue;
1166
1167      // Collect info for variables that were optimized out.
1168      if (!SP.isDefinition()) continue;
1169      StringRef FName = SP.getLinkageName();
1170      if (FName.empty())
1171        FName = SP.getName();
1172      NamedMDNode *NMD = getFnSpecificMDNode(*(MMI->getModule()), FName);
1173      if (!NMD) continue;
1174      unsigned E = NMD->getNumOperands();
1175      if (!E) continue;
1176      DbgScope *Scope = new DbgScope(NULL, DIDescriptor(SP), NULL);
1177      DeadFnScopeMap[SP] = Scope;
1178      for (unsigned I = 0; I != E; ++I) {
1179        DIVariable DV(NMD->getOperand(I));
1180        if (!DV.Verify()) continue;
1181        Scope->addVariable(new DbgVariable(DV));
1182      }
1183
1184      // Construct subprogram DIE and add variables DIEs.
1185      constructSubprogramDIE(SP);
1186      DIE *ScopeDIE = getCompileUnit(SP)->getDIE(SP);
1187      const SmallVector<DbgVariable *, 8> &Variables = Scope->getDbgVariables();
1188      for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
1189        DIE *VariableDIE = constructVariableDIE(Variables[i], Scope);
1190        if (VariableDIE)
1191          ScopeDIE->addChild(VariableDIE);
1192      }
1193    }
1194  }
1195
1196  // Attach DW_AT_inline attribute with inlined subprogram DIEs.
1197  for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
1198         AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
1199    DIE *ISP = *AI;
1200    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
1201  }
1202
1203  for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1204         CE = ContainingTypeMap.end(); CI != CE; ++CI) {
1205    DIE *SPDie = CI->first;
1206    const MDNode *N = dyn_cast_or_null<MDNode>(CI->second);
1207    if (!N) continue;
1208    DIE *NDie = getCompileUnit(N)->getDIE(N);
1209    if (!NDie) continue;
1210    getCompileUnit(N)->addDIEEntry(SPDie, dwarf::DW_AT_containing_type,
1211                                   dwarf::DW_FORM_ref4, NDie);
1212  }
1213
1214  // Standard sections final addresses.
1215  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
1216  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
1217  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
1218  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
1219
1220  // End text sections.
1221  for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
1222    Asm->OutStreamer.SwitchSection(SectionMap[i]);
1223    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
1224  }
1225
1226  // Compute DIE offsets and sizes.
1227  computeSizeAndOffsets();
1228
1229  // Emit all the DIEs into a debug info section
1230  emitDebugInfo();
1231
1232  // Corresponding abbreviations into a abbrev section.
1233  emitAbbreviations();
1234
1235  // Emit info into a debug pubnames section.
1236  emitDebugPubNames();
1237
1238  // Emit info into a debug pubtypes section.
1239  emitDebugPubTypes();
1240
1241  // Emit info into a debug loc section.
1242  emitDebugLoc();
1243
1244  // Emit info into a debug aranges section.
1245  EmitDebugARanges();
1246
1247  // Emit info into a debug ranges section.
1248  emitDebugRanges();
1249
1250  // Emit info into a debug macinfo section.
1251  emitDebugMacInfo();
1252
1253  // Emit inline info.
1254  emitDebugInlineInfo();
1255
1256  // Emit info into a debug str section.
1257  emitDebugStr();
1258
1259  // clean up.
1260  DeleteContainerSeconds(DeadFnScopeMap);
1261  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1262         E = CUMap.end(); I != E; ++I)
1263    delete I->second;
1264  FirstCU = NULL;  // Reset for the next Module, if any.
1265}
1266
1267/// findAbstractVariable - Find abstract variable, if any, associated with Var.
1268DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &Var,
1269                                              DebugLoc ScopeLoc) {
1270
1271  DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1272  if (AbsDbgVariable)
1273    return AbsDbgVariable;
1274
1275  LLVMContext &Ctx = Var->getContext();
1276  DbgScope *Scope = AbstractScopes.lookup(ScopeLoc.getScope(Ctx));
1277  if (!Scope)
1278    return NULL;
1279
1280  AbsDbgVariable = new DbgVariable(Var);
1281  Scope->addVariable(AbsDbgVariable);
1282  AbstractVariables[Var] = AbsDbgVariable;
1283  return AbsDbgVariable;
1284}
1285
1286/// addCurrentFnArgument - If Var is an current function argument that add
1287/// it in CurrentFnArguments list.
1288bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1289                                      DbgVariable *Var, DbgScope *Scope) {
1290  if (Scope != CurrentFnDbgScope)
1291    return false;
1292  DIVariable DV = Var->getVariable();
1293  if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1294    return false;
1295  unsigned ArgNo = DV.getArgNumber();
1296  if (ArgNo == 0)
1297    return false;
1298
1299  size_t Size = CurrentFnArguments.size();
1300  if (Size == 0)
1301    CurrentFnArguments.resize(MF->getFunction()->arg_size());
1302  // llvm::Function argument size is not good indicator of how many
1303  // arguments does the function have at source level.
1304  if (ArgNo > Size)
1305    CurrentFnArguments.resize(ArgNo * 2);
1306  CurrentFnArguments[ArgNo - 1] = Var;
1307  return true;
1308}
1309
1310/// collectVariableInfoFromMMITable - Collect variable information from
1311/// side table maintained by MMI.
1312void
1313DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction * MF,
1314                                   SmallPtrSet<const MDNode *, 16> &Processed) {
1315  const LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
1316  MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1317  for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1318         VE = VMap.end(); VI != VE; ++VI) {
1319    const MDNode *Var = VI->first;
1320    if (!Var) continue;
1321    Processed.insert(Var);
1322    DIVariable DV(Var);
1323    const std::pair<unsigned, DebugLoc> &VP = VI->second;
1324
1325    DbgScope *Scope = 0;
1326    if (const MDNode *IA = VP.second.getInlinedAt(Ctx))
1327      Scope = ConcreteScopes.lookup(IA);
1328    if (Scope == 0)
1329      Scope = DbgScopeMap.lookup(VP.second.getScope(Ctx));
1330
1331    // If variable scope is not found then skip this variable.
1332    if (Scope == 0)
1333      continue;
1334
1335    DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1336    DbgVariable *RegVar = new DbgVariable(DV);
1337    recordVariableFrameIndex(RegVar, VP.first);
1338    if (!addCurrentFnArgument(MF, RegVar, Scope))
1339      Scope->addVariable(RegVar);
1340    if (AbsDbgVariable) {
1341      recordVariableFrameIndex(AbsDbgVariable, VP.first);
1342      VarToAbstractVarMap[RegVar] = AbsDbgVariable;
1343    }
1344  }
1345}
1346
1347/// isDbgValueInDefinedReg - Return true if debug value, encoded by
1348/// DBG_VALUE instruction, is in a defined reg.
1349static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1350  assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1351  return MI->getNumOperands() == 3 &&
1352         MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1353         MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1354}
1355
1356/// collectVariableInfo - Populate DbgScope entries with variables' info.
1357void
1358DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1359                                SmallPtrSet<const MDNode *, 16> &Processed) {
1360
1361  /// collection info from MMI table.
1362  collectVariableInfoFromMMITable(MF, Processed);
1363
1364  for (SmallVectorImpl<const MDNode*>::const_iterator
1365         UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1366         ++UVI) {
1367    const MDNode *Var = *UVI;
1368    if (Processed.count(Var))
1369      continue;
1370
1371    // History contains relevant DBG_VALUE instructions for Var and instructions
1372    // clobbering it.
1373    SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1374    if (History.empty())
1375      continue;
1376    const MachineInstr *MInsn = History.front();
1377
1378    DIVariable DV(Var);
1379    DbgScope *Scope = NULL;
1380    if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1381        DISubprogram(DV.getContext()).describes(MF->getFunction()))
1382      Scope = CurrentFnDbgScope;
1383    else
1384      Scope = findDbgScope(MInsn);
1385    // If variable scope is not found then skip this variable.
1386    if (!Scope)
1387      continue;
1388
1389    Processed.insert(DV);
1390    assert(MInsn->isDebugValue() && "History must begin with debug value");
1391    DbgVariable *RegVar = new DbgVariable(DV);
1392    if (!addCurrentFnArgument(MF, RegVar, Scope))
1393      Scope->addVariable(RegVar);
1394    if (DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc())) {
1395      DbgVariableToDbgInstMap[AbsVar] = MInsn;
1396      VarToAbstractVarMap[RegVar] = AbsVar;
1397    }
1398
1399    // Simple ranges that are fully coalesced.
1400    if (History.size() <= 1 || (History.size() == 2 &&
1401                                MInsn->isIdenticalTo(History.back()))) {
1402      DbgVariableToDbgInstMap[RegVar] = MInsn;
1403      continue;
1404    }
1405
1406    // handle multiple DBG_VALUE instructions describing one variable.
1407    RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1408
1409    for (SmallVectorImpl<const MachineInstr*>::const_iterator
1410           HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1411      const MachineInstr *Begin = *HI;
1412      assert(Begin->isDebugValue() && "Invalid History entry");
1413      MachineLocation MLoc;
1414      if (Begin->getNumOperands() == 3) {
1415        if (Begin->getOperand(0).isReg() && Begin->getOperand(1).isImm())
1416          MLoc.set(Begin->getOperand(0).getReg(), Begin->getOperand(1).getImm());
1417      } else
1418        MLoc = Asm->getDebugValueLocation(Begin);
1419
1420      // FIXME: emitDebugLoc only understands registers.
1421      if (!MLoc.getReg())
1422        continue;
1423
1424      // Compute the range for a register location.
1425      const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1426      const MCSymbol *SLabel = 0;
1427
1428      if (HI + 1 == HE)
1429        // If Begin is the last instruction in History then its value is valid
1430        // until the end of the function.
1431        SLabel = FunctionEndSym;
1432      else {
1433        const MachineInstr *End = HI[1];
1434        if (End->isDebugValue())
1435          SLabel = getLabelBeforeInsn(End);
1436        else {
1437          // End is a normal instruction clobbering the range.
1438          SLabel = getLabelAfterInsn(End);
1439          assert(SLabel && "Forgot label after clobber instruction");
1440          ++HI;
1441        }
1442      }
1443
1444      // The value is valid until the next DBG_VALUE or clobber.
1445      DotDebugLocEntries.push_back(DotDebugLocEntry(FLabel, SLabel, MLoc, Var));
1446    }
1447    DotDebugLocEntries.push_back(DotDebugLocEntry());
1448  }
1449
1450  // Collect info for variables that were optimized out.
1451  const Function *F = MF->getFunction();
1452  if (NamedMDNode *NMD = getFnSpecificMDNode(*(F->getParent()), F->getName())) {
1453    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1454      DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
1455      if (!DV || !Processed.insert(DV))
1456        continue;
1457      DbgScope *Scope = DbgScopeMap.lookup(DV.getContext());
1458      if (Scope)
1459        Scope->addVariable(new DbgVariable(DV));
1460    }
1461  }
1462}
1463
1464/// getLabelBeforeInsn - Return Label preceding the instruction.
1465const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1466  MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1467  assert(Label && "Didn't insert label before instruction");
1468  return Label;
1469}
1470
1471/// getLabelAfterInsn - Return Label immediately following the instruction.
1472const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1473  return LabelsAfterInsn.lookup(MI);
1474}
1475
1476/// beginInstruction - Process beginning of an instruction.
1477void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1478  // Check if source location changes, but ignore DBG_VALUE locations.
1479  if (!MI->isDebugValue()) {
1480    DebugLoc DL = MI->getDebugLoc();
1481    if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1482      unsigned Flags = DWARF2_FLAG_IS_STMT;
1483      PrevInstLoc = DL;
1484      if (DL == PrologEndLoc) {
1485        Flags |= DWARF2_FLAG_PROLOGUE_END;
1486        PrologEndLoc = DebugLoc();
1487      }
1488      if (!DL.isUnknown()) {
1489        const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1490        recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1491      } else
1492        recordSourceLine(0, 0, 0, 0);
1493    }
1494  }
1495
1496  // Insert labels where requested.
1497  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1498    LabelsBeforeInsn.find(MI);
1499
1500  // No label needed.
1501  if (I == LabelsBeforeInsn.end())
1502    return;
1503
1504  // Label already assigned.
1505  if (I->second)
1506    return;
1507
1508  if (!PrevLabel) {
1509    PrevLabel = MMI->getContext().CreateTempSymbol();
1510    Asm->OutStreamer.EmitLabel(PrevLabel);
1511  }
1512  I->second = PrevLabel;
1513}
1514
1515/// endInstruction - Process end of an instruction.
1516void DwarfDebug::endInstruction(const MachineInstr *MI) {
1517  // Don't create a new label after DBG_VALUE instructions.
1518  // They don't generate code.
1519  if (!MI->isDebugValue())
1520    PrevLabel = 0;
1521
1522  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1523    LabelsAfterInsn.find(MI);
1524
1525  // No label needed.
1526  if (I == LabelsAfterInsn.end())
1527    return;
1528
1529  // Label already assigned.
1530  if (I->second)
1531    return;
1532
1533  // We need a label after this instruction.
1534  if (!PrevLabel) {
1535    PrevLabel = MMI->getContext().CreateTempSymbol();
1536    Asm->OutStreamer.EmitLabel(PrevLabel);
1537  }
1538  I->second = PrevLabel;
1539}
1540
1541/// getOrCreateDbgScope - Create DbgScope for the scope.
1542DbgScope *DwarfDebug::getOrCreateDbgScope(const MDNode *Scope,
1543                                          const MDNode *InlinedAt) {
1544  if (!InlinedAt) {
1545    DbgScope *WScope = DbgScopeMap.lookup(Scope);
1546    if (WScope)
1547      return WScope;
1548    WScope = new DbgScope(NULL, DIDescriptor(Scope), NULL);
1549    DbgScopeMap.insert(std::make_pair(Scope, WScope));
1550    if (DIDescriptor(Scope).isLexicalBlock()) {
1551      DbgScope *Parent =
1552        getOrCreateDbgScope(DILexicalBlock(Scope).getContext(), NULL);
1553      WScope->setParent(Parent);
1554      Parent->addScope(WScope);
1555    }
1556
1557    if (!WScope->getParent()) {
1558      StringRef SPName = DISubprogram(Scope).getLinkageName();
1559      // We used to check only for a linkage name, but that fails
1560      // since we began omitting the linkage name for private
1561      // functions.  The new way is to check for the name in metadata,
1562      // but that's not supported in old .ll test cases.  Ergo, we
1563      // check both.
1564      if (SPName == Asm->MF->getFunction()->getName() ||
1565          DISubprogram(Scope).getFunction() == Asm->MF->getFunction())
1566        CurrentFnDbgScope = WScope;
1567    }
1568
1569    return WScope;
1570  }
1571
1572  getOrCreateAbstractScope(Scope);
1573  DbgScope *WScope = DbgScopeMap.lookup(InlinedAt);
1574  if (WScope)
1575    return WScope;
1576
1577  WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt);
1578  DbgScopeMap.insert(std::make_pair(InlinedAt, WScope));
1579  DILocation DL(InlinedAt);
1580  DbgScope *Parent =
1581    getOrCreateDbgScope(DL.getScope(), DL.getOrigLocation());
1582  WScope->setParent(Parent);
1583  Parent->addScope(WScope);
1584
1585  ConcreteScopes[InlinedAt] = WScope;
1586
1587  return WScope;
1588}
1589
1590/// hasValidLocation - Return true if debug location entry attached with
1591/// machine instruction encodes valid location info.
1592static bool hasValidLocation(LLVMContext &Ctx,
1593                             const MachineInstr *MInsn,
1594                             const MDNode *&Scope, const MDNode *&InlinedAt) {
1595  DebugLoc DL = MInsn->getDebugLoc();
1596  if (DL.isUnknown()) return false;
1597
1598  const MDNode *S = DL.getScope(Ctx);
1599
1600  // There is no need to create another DIE for compile unit. For all
1601  // other scopes, create one DbgScope now. This will be translated
1602  // into a scope DIE at the end.
1603  if (DIScope(S).isCompileUnit()) return false;
1604
1605  Scope = S;
1606  InlinedAt = DL.getInlinedAt(Ctx);
1607  return true;
1608}
1609
1610/// calculateDominanceGraph - Calculate dominance graph for DbgScope
1611/// hierarchy.
1612static void calculateDominanceGraph(DbgScope *Scope) {
1613  assert (Scope && "Unable to calculate scop edominance graph!");
1614  SmallVector<DbgScope *, 4> WorkStack;
1615  WorkStack.push_back(Scope);
1616  unsigned Counter = 0;
1617  while (!WorkStack.empty()) {
1618    DbgScope *WS = WorkStack.back();
1619    const SmallVector<DbgScope *, 4> &Children = WS->getScopes();
1620    bool visitedChildren = false;
1621    for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
1622           SE = Children.end(); SI != SE; ++SI) {
1623      DbgScope *ChildScope = *SI;
1624      if (!ChildScope->getDFSOut()) {
1625        WorkStack.push_back(ChildScope);
1626        visitedChildren = true;
1627        ChildScope->setDFSIn(++Counter);
1628        break;
1629      }
1630    }
1631    if (!visitedChildren) {
1632      WorkStack.pop_back();
1633      WS->setDFSOut(++Counter);
1634    }
1635  }
1636}
1637
1638/// printDbgScopeInfo - Print DbgScope info for each machine instruction.
1639static
1640void printDbgScopeInfo(LLVMContext &Ctx, const MachineFunction *MF,
1641                       DenseMap<const MachineInstr *, DbgScope *> &MI2ScopeMap)
1642{
1643#ifndef NDEBUG
1644  unsigned PrevDFSIn = 0;
1645  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1646       I != E; ++I) {
1647    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1648         II != IE; ++II) {
1649      const MachineInstr *MInsn = II;
1650      const MDNode *Scope = NULL;
1651      const MDNode *InlinedAt = NULL;
1652
1653      // Check if instruction has valid location information.
1654      if (hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
1655        dbgs() << " [ ";
1656        if (InlinedAt)
1657          dbgs() << "*";
1658        DenseMap<const MachineInstr *, DbgScope *>::iterator DI =
1659          MI2ScopeMap.find(MInsn);
1660        if (DI != MI2ScopeMap.end()) {
1661          DbgScope *S = DI->second;
1662          dbgs() << S->getDFSIn();
1663          PrevDFSIn = S->getDFSIn();
1664        } else
1665          dbgs() << PrevDFSIn;
1666      } else
1667        dbgs() << " [ x" << PrevDFSIn;
1668      dbgs() << " ]";
1669      MInsn->dump();
1670    }
1671    dbgs() << "\n";
1672  }
1673#endif
1674}
1675/// extractScopeInformation - Scan machine instructions in this function
1676/// and collect DbgScopes. Return true, if at least one scope was found.
1677bool DwarfDebug::extractScopeInformation() {
1678  // If scope information was extracted using .dbg intrinsics then there is not
1679  // any need to extract these information by scanning each instruction.
1680  if (!DbgScopeMap.empty())
1681    return false;
1682
1683  // Scan each instruction and create scopes. First build working set of scopes.
1684  LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
1685  SmallVector<DbgRange, 4> MIRanges;
1686  DenseMap<const MachineInstr *, DbgScope *> MI2ScopeMap;
1687  const MDNode *PrevScope = NULL;
1688  const MDNode *PrevInlinedAt = NULL;
1689  const MachineInstr *RangeBeginMI = NULL;
1690  const MachineInstr *PrevMI = NULL;
1691  for (MachineFunction::const_iterator I = Asm->MF->begin(), E = Asm->MF->end();
1692       I != E; ++I) {
1693    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1694         II != IE; ++II) {
1695      const MachineInstr *MInsn = II;
1696      const MDNode *Scope = NULL;
1697      const MDNode *InlinedAt = NULL;
1698
1699      // Check if instruction has valid location information.
1700      if (!hasValidLocation(Ctx, MInsn, Scope, InlinedAt)) {
1701        PrevMI = MInsn;
1702        continue;
1703      }
1704
1705      // If scope has not changed then skip this instruction.
1706      if (Scope == PrevScope && PrevInlinedAt == InlinedAt) {
1707        PrevMI = MInsn;
1708        continue;
1709      }
1710
1711      // Ignore DBG_VALUE. It does not contribute any instruction in output.
1712      if (MInsn->isDebugValue())
1713        continue;
1714
1715      if (RangeBeginMI) {
1716        // If we have alread seen a beginning of a instruction range and
1717        // current instruction scope does not match scope of first instruction
1718        // in this range then create a new instruction range.
1719        DbgRange R(RangeBeginMI, PrevMI);
1720        MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope,
1721                                                        PrevInlinedAt);
1722        MIRanges.push_back(R);
1723      }
1724
1725      // This is a beginning of a new instruction range.
1726      RangeBeginMI = MInsn;
1727
1728      // Reset previous markers.
1729      PrevMI = MInsn;
1730      PrevScope = Scope;
1731      PrevInlinedAt = InlinedAt;
1732    }
1733  }
1734
1735  // Create last instruction range.
1736  if (RangeBeginMI && PrevMI && PrevScope) {
1737    DbgRange R(RangeBeginMI, PrevMI);
1738    MIRanges.push_back(R);
1739    MI2ScopeMap[RangeBeginMI] = getOrCreateDbgScope(PrevScope, PrevInlinedAt);
1740  }
1741
1742  if (!CurrentFnDbgScope)
1743    return false;
1744
1745  calculateDominanceGraph(CurrentFnDbgScope);
1746  if (PrintDbgScope)
1747    printDbgScopeInfo(Ctx, Asm->MF, MI2ScopeMap);
1748
1749  // Find ranges of instructions covered by each DbgScope;
1750  DbgScope *PrevDbgScope = NULL;
1751  for (SmallVector<DbgRange, 4>::const_iterator RI = MIRanges.begin(),
1752         RE = MIRanges.end(); RI != RE; ++RI) {
1753    const DbgRange &R = *RI;
1754    DbgScope *S = MI2ScopeMap.lookup(R.first);
1755    assert (S && "Lost DbgScope for a machine instruction!");
1756    if (PrevDbgScope && !PrevDbgScope->dominates(S))
1757      PrevDbgScope->closeInsnRange(S);
1758    S->openInsnRange(R.first);
1759    S->extendInsnRange(R.second);
1760    PrevDbgScope = S;
1761  }
1762
1763  if (PrevDbgScope)
1764    PrevDbgScope->closeInsnRange();
1765
1766  identifyScopeMarkers();
1767
1768  return !DbgScopeMap.empty();
1769}
1770
1771/// identifyScopeMarkers() -
1772/// Each DbgScope has first instruction and last instruction to mark beginning
1773/// and end of a scope respectively. Create an inverse map that list scopes
1774/// starts (and ends) with an instruction. One instruction may start (or end)
1775/// multiple scopes. Ignore scopes that are not reachable.
1776void DwarfDebug::identifyScopeMarkers() {
1777  SmallVector<DbgScope *, 4> WorkList;
1778  WorkList.push_back(CurrentFnDbgScope);
1779  while (!WorkList.empty()) {
1780    DbgScope *S = WorkList.pop_back_val();
1781
1782    const SmallVector<DbgScope *, 4> &Children = S->getScopes();
1783    if (!Children.empty())
1784      for (SmallVector<DbgScope *, 4>::const_iterator SI = Children.begin(),
1785             SE = Children.end(); SI != SE; ++SI)
1786        WorkList.push_back(*SI);
1787
1788    if (S->isAbstractScope())
1789      continue;
1790
1791    const SmallVector<DbgRange, 4> &Ranges = S->getRanges();
1792    if (Ranges.empty())
1793      continue;
1794    for (SmallVector<DbgRange, 4>::const_iterator RI = Ranges.begin(),
1795           RE = Ranges.end(); RI != RE; ++RI) {
1796      assert(RI->first && "DbgRange does not have first instruction!");
1797      assert(RI->second && "DbgRange does not have second instruction!");
1798      requestLabelBeforeInsn(RI->first);
1799      requestLabelAfterInsn(RI->second);
1800    }
1801  }
1802}
1803
1804/// getScopeNode - Get MDNode for DebugLoc's scope.
1805static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1806  if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1807    return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1808  return DL.getScope(Ctx);
1809}
1810
1811/// getFnDebugLoc - Walk up the scope chain of given debug loc and find
1812/// line number  info for the function.
1813static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1814  const MDNode *Scope = getScopeNode(DL, Ctx);
1815  DISubprogram SP = getDISubprogram(Scope);
1816  if (SP.Verify())
1817    return DebugLoc::get(SP.getLineNumber(), 0, SP);
1818  return DebugLoc();
1819}
1820
1821/// beginFunction - Gather pre-function debug information.  Assumes being
1822/// emitted immediately after the function entry point.
1823void DwarfDebug::beginFunction(const MachineFunction *MF) {
1824  if (!MMI->hasDebugInfo()) return;
1825  if (!extractScopeInformation()) return;
1826
1827  FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1828                                        Asm->getFunctionNumber());
1829  // Assumes in correct section after the entry point.
1830  Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1831
1832  assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1833
1834  /// ProcessedArgs - Collection of arguments already processed.
1835  SmallPtrSet<const MDNode *, 8> ProcessedArgs;
1836  const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1837  /// LiveUserVar - Map physreg numbers to the MDNode they contain.
1838  std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1839
1840  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1841       I != E; ++I) {
1842    bool AtBlockEntry = true;
1843    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1844         II != IE; ++II) {
1845      const MachineInstr *MI = II;
1846
1847      if (MI->isDebugValue()) {
1848        assert (MI->getNumOperands() > 1 && "Invalid machine instruction!");
1849
1850        // Keep track of user variables.
1851        const MDNode *Var =
1852          MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1853
1854        // Variable is in a register, we need to check for clobbers.
1855        if (isDbgValueInDefinedReg(MI))
1856          LiveUserVar[MI->getOperand(0).getReg()] = Var;
1857
1858        // Check the history of this variable.
1859        SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1860        if (History.empty()) {
1861          UserVariables.push_back(Var);
1862          // The first mention of a function argument gets the FunctionBeginSym
1863          // label, so arguments are visible when breaking at function entry.
1864          DIVariable DV(Var);
1865          if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1866              DISubprogram(getDISubprogram(DV.getContext()))
1867                .describes(MF->getFunction()))
1868            LabelsBeforeInsn[MI] = FunctionBeginSym;
1869        } else {
1870          // We have seen this variable before. Try to coalesce DBG_VALUEs.
1871          const MachineInstr *Prev = History.back();
1872          if (Prev->isDebugValue()) {
1873            // Coalesce identical entries at the end of History.
1874            if (History.size() >= 2 &&
1875                Prev->isIdenticalTo(History[History.size() - 2]))
1876              History.pop_back();
1877
1878            // Terminate old register assignments that don't reach MI;
1879            MachineFunction::const_iterator PrevMBB = Prev->getParent();
1880            if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1881                isDbgValueInDefinedReg(Prev)) {
1882              // Previous register assignment needs to terminate at the end of
1883              // its basic block.
1884              MachineBasicBlock::const_iterator LastMI =
1885                PrevMBB->getLastNonDebugInstr();
1886              if (LastMI == PrevMBB->end())
1887                // Drop DBG_VALUE for empty range.
1888                History.pop_back();
1889              else {
1890                // Terminate after LastMI.
1891                History.push_back(LastMI);
1892              }
1893            }
1894          }
1895        }
1896        History.push_back(MI);
1897      } else {
1898        // Not a DBG_VALUE instruction.
1899        if (!MI->isLabel())
1900          AtBlockEntry = false;
1901
1902        // First known non DBG_VALUE location marks beginning of function
1903        // body.
1904        if (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown())
1905          PrologEndLoc = MI->getDebugLoc();
1906
1907        // Check if the instruction clobbers any registers with debug vars.
1908        for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1909               MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1910          if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1911            continue;
1912          for (const unsigned *AI = TRI->getOverlaps(MOI->getReg());
1913               unsigned Reg = *AI; ++AI) {
1914            const MDNode *Var = LiveUserVar[Reg];
1915            if (!Var)
1916              continue;
1917            // Reg is now clobbered.
1918            LiveUserVar[Reg] = 0;
1919
1920            // Was MD last defined by a DBG_VALUE referring to Reg?
1921            DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1922            if (HistI == DbgValues.end())
1923              continue;
1924            SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1925            if (History.empty())
1926              continue;
1927            const MachineInstr *Prev = History.back();
1928            // Sanity-check: Register assignments are terminated at the end of
1929            // their block.
1930            if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1931              continue;
1932            // Is the variable still in Reg?
1933            if (!isDbgValueInDefinedReg(Prev) ||
1934                Prev->getOperand(0).getReg() != Reg)
1935              continue;
1936            // Var is clobbered. Make sure the next instruction gets a label.
1937            History.push_back(MI);
1938          }
1939        }
1940      }
1941    }
1942  }
1943
1944  for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1945       I != E; ++I) {
1946    SmallVectorImpl<const MachineInstr*> &History = I->second;
1947    if (History.empty())
1948      continue;
1949
1950    // Make sure the final register assignments are terminated.
1951    const MachineInstr *Prev = History.back();
1952    if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1953      const MachineBasicBlock *PrevMBB = Prev->getParent();
1954      MachineBasicBlock::const_iterator LastMI = PrevMBB->getLastNonDebugInstr();
1955      if (LastMI == PrevMBB->end())
1956        // Drop DBG_VALUE for empty range.
1957        History.pop_back();
1958      else {
1959        // Terminate after LastMI.
1960        History.push_back(LastMI);
1961      }
1962    }
1963    // Request labels for the full history.
1964    for (unsigned i = 0, e = History.size(); i != e; ++i) {
1965      const MachineInstr *MI = History[i];
1966      if (MI->isDebugValue())
1967        requestLabelBeforeInsn(MI);
1968      else
1969        requestLabelAfterInsn(MI);
1970    }
1971  }
1972
1973  PrevInstLoc = DebugLoc();
1974  PrevLabel = FunctionBeginSym;
1975
1976  // Record beginning of function.
1977  if (!PrologEndLoc.isUnknown()) {
1978    DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1979                                       MF->getFunction()->getContext());
1980    recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1981                     FnStartDL.getScope(MF->getFunction()->getContext()),
1982                     DWARF2_FLAG_IS_STMT);
1983  }
1984}
1985
1986/// endFunction - Gather and emit post-function debug information.
1987///
1988void DwarfDebug::endFunction(const MachineFunction *MF) {
1989  if (!MMI->hasDebugInfo() || DbgScopeMap.empty()) return;
1990
1991  if (CurrentFnDbgScope) {
1992
1993    // Define end label for subprogram.
1994    FunctionEndSym = Asm->GetTempSymbol("func_end",
1995                                        Asm->getFunctionNumber());
1996    // Assumes in correct section after the entry point.
1997    Asm->OutStreamer.EmitLabel(FunctionEndSym);
1998
1999    SmallPtrSet<const MDNode *, 16> ProcessedVars;
2000    collectVariableInfo(MF, ProcessedVars);
2001
2002    // Construct abstract scopes.
2003    for (SmallVector<DbgScope *, 4>::iterator AI = AbstractScopesList.begin(),
2004           AE = AbstractScopesList.end(); AI != AE; ++AI) {
2005      DISubprogram SP((*AI)->getScopeNode());
2006      if (SP.Verify()) {
2007        // Collect info for variables that were optimized out.
2008        StringRef FName = SP.getLinkageName();
2009        if (FName.empty())
2010          FName = SP.getName();
2011        if (NamedMDNode *NMD =
2012            getFnSpecificMDNode(*(MF->getFunction()->getParent()), FName)) {
2013          for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
2014          DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
2015          if (!DV || !ProcessedVars.insert(DV))
2016            continue;
2017          DbgScope *Scope = AbstractScopes.lookup(DV.getContext());
2018          if (Scope)
2019            Scope->addVariable(new DbgVariable(DV));
2020          }
2021        }
2022      }
2023      if (ProcessedSPNodes.count((*AI)->getScopeNode()) == 0)
2024        constructScopeDIE(*AI);
2025    }
2026
2027    DIE *CurFnDIE = constructScopeDIE(CurrentFnDbgScope);
2028
2029    if (!DisableFramePointerElim(*MF))
2030      getCompileUnit(CurrentFnDbgScope->getScopeNode())->addUInt(CurFnDIE,
2031                                                                 dwarf::DW_AT_APPLE_omit_frame_ptr,
2032                                                                 dwarf::DW_FORM_flag, 1);
2033
2034
2035    DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
2036                                                 MMI->getFrameMoves()));
2037  }
2038
2039  // Clear debug info
2040  CurrentFnDbgScope = NULL;
2041  DeleteContainerPointers(CurrentFnArguments);
2042  DbgVariableToFrameIndexMap.clear();
2043  VarToAbstractVarMap.clear();
2044  DbgVariableToDbgInstMap.clear();
2045  DeleteContainerSeconds(DbgScopeMap);
2046  UserVariables.clear();
2047  DbgValues.clear();
2048  ConcreteScopes.clear();
2049  DeleteContainerSeconds(AbstractScopes);
2050  AbstractScopesList.clear();
2051  AbstractVariables.clear();
2052  LabelsBeforeInsn.clear();
2053  LabelsAfterInsn.clear();
2054  PrevLabel = NULL;
2055}
2056
2057/// recordVariableFrameIndex - Record a variable's index.
2058void DwarfDebug::recordVariableFrameIndex(const DbgVariable *V, int Index) {
2059  assert (V && "Invalid DbgVariable!");
2060  DbgVariableToFrameIndexMap[V] = Index;
2061}
2062
2063/// findVariableFrameIndex - Return true if frame index for the variable
2064/// is found. Update FI to hold value of the index.
2065bool DwarfDebug::findVariableFrameIndex(const DbgVariable *V, int *FI) {
2066  assert (V && "Invalid DbgVariable!");
2067  DenseMap<const DbgVariable *, int>::iterator I =
2068    DbgVariableToFrameIndexMap.find(V);
2069  if (I == DbgVariableToFrameIndexMap.end())
2070    return false;
2071  *FI = I->second;
2072  return true;
2073}
2074
2075/// findDbgScope - Find DbgScope for the debug loc attached with an
2076/// instruction.
2077DbgScope *DwarfDebug::findDbgScope(const MachineInstr *MInsn) {
2078  DbgScope *Scope = NULL;
2079  LLVMContext &Ctx =
2080    MInsn->getParent()->getParent()->getFunction()->getContext();
2081  DebugLoc DL = MInsn->getDebugLoc();
2082
2083  if (DL.isUnknown())
2084    return Scope;
2085
2086  if (const MDNode *IA = DL.getInlinedAt(Ctx))
2087    Scope = ConcreteScopes.lookup(IA);
2088  if (Scope == 0)
2089    Scope = DbgScopeMap.lookup(DL.getScope(Ctx));
2090
2091  return Scope;
2092}
2093
2094
2095/// recordSourceLine - Register a source line with debug info. Returns the
2096/// unique label that was emitted and which provides correspondence to
2097/// the source line list.
2098void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
2099                                  unsigned Flags) {
2100  StringRef Fn;
2101  StringRef Dir;
2102  unsigned Src = 1;
2103  if (S) {
2104    DIDescriptor Scope(S);
2105
2106    if (Scope.isCompileUnit()) {
2107      DICompileUnit CU(S);
2108      Fn = CU.getFilename();
2109      Dir = CU.getDirectory();
2110    } else if (Scope.isFile()) {
2111      DIFile F(S);
2112      Fn = F.getFilename();
2113      Dir = F.getDirectory();
2114    } else if (Scope.isSubprogram()) {
2115      DISubprogram SP(S);
2116      Fn = SP.getFilename();
2117      Dir = SP.getDirectory();
2118    } else if (Scope.isLexicalBlock()) {
2119      DILexicalBlock DB(S);
2120      Fn = DB.getFilename();
2121      Dir = DB.getDirectory();
2122    } else
2123      assert(0 && "Unexpected scope info");
2124
2125    Src = GetOrCreateSourceID(Fn, Dir);
2126  }
2127  Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags,
2128                                         0, 0, Fn);
2129}
2130
2131//===----------------------------------------------------------------------===//
2132// Emit Methods
2133//===----------------------------------------------------------------------===//
2134
2135/// computeSizeAndOffset - Compute the size and offset of a DIE.
2136///
2137unsigned
2138DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
2139  // Get the children.
2140  const std::vector<DIE *> &Children = Die->getChildren();
2141
2142  // If not last sibling and has children then add sibling offset attribute.
2143  if (!Last && !Children.empty())
2144    Die->addSiblingOffset(DIEValueAllocator);
2145
2146  // Record the abbreviation.
2147  assignAbbrevNumber(Die->getAbbrev());
2148
2149  // Get the abbreviation for this DIE.
2150  unsigned AbbrevNumber = Die->getAbbrevNumber();
2151  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2152
2153  // Set DIE offset
2154  Die->setOffset(Offset);
2155
2156  // Start the size with the size of abbreviation code.
2157  Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
2158
2159  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2160  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2161
2162  // Size the DIE attribute values.
2163  for (unsigned i = 0, N = Values.size(); i < N; ++i)
2164    // Size attribute value.
2165    Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
2166
2167  // Size the DIE children if any.
2168  if (!Children.empty()) {
2169    assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
2170           "Children flag not set");
2171
2172    for (unsigned j = 0, M = Children.size(); j < M; ++j)
2173      Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
2174
2175    // End of children marker.
2176    Offset += sizeof(int8_t);
2177  }
2178
2179  Die->setSize(Offset - Die->getOffset());
2180  return Offset;
2181}
2182
2183/// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
2184///
2185void DwarfDebug::computeSizeAndOffsets() {
2186  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2187         E = CUMap.end(); I != E; ++I) {
2188    // Compute size of compile unit header.
2189    unsigned Offset =
2190      sizeof(int32_t) + // Length of Compilation Unit Info
2191      sizeof(int16_t) + // DWARF version number
2192      sizeof(int32_t) + // Offset Into Abbrev. Section
2193      sizeof(int8_t);   // Pointer Size (in bytes)
2194    computeSizeAndOffset(I->second->getCUDie(), Offset, true);
2195  }
2196}
2197
2198/// EmitSectionSym - Switch to the specified MCSection and emit an assembler
2199/// temporary label to it if SymbolStem is specified.
2200static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
2201                                const char *SymbolStem = 0) {
2202  Asm->OutStreamer.SwitchSection(Section);
2203  if (!SymbolStem) return 0;
2204
2205  MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
2206  Asm->OutStreamer.EmitLabel(TmpSym);
2207  return TmpSym;
2208}
2209
2210/// EmitSectionLabels - Emit initial Dwarf sections with a label at
2211/// the start of each one.
2212void DwarfDebug::EmitSectionLabels() {
2213  const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
2214
2215  // Dwarf sections base addresses.
2216  DwarfInfoSectionSym =
2217    EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
2218  DwarfAbbrevSectionSym =
2219    EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
2220  EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
2221
2222  if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
2223    EmitSectionSym(Asm, MacroInfo);
2224
2225  EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
2226  EmitSectionSym(Asm, TLOF.getDwarfLocSection());
2227  EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
2228  EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
2229  DwarfStrSectionSym =
2230    EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
2231  DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
2232                                             "debug_range");
2233
2234  DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
2235                                           "section_debug_loc");
2236
2237  TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
2238  EmitSectionSym(Asm, TLOF.getDataSection());
2239}
2240
2241/// emitDIE - Recusively Emits a debug information entry.
2242///
2243void DwarfDebug::emitDIE(DIE *Die) {
2244  // Get the abbreviation for this DIE.
2245  unsigned AbbrevNumber = Die->getAbbrevNumber();
2246  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2247
2248  // Emit the code (index) for the abbreviation.
2249  if (Asm->isVerbose())
2250    Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
2251                                Twine::utohexstr(Die->getOffset()) + ":0x" +
2252                                Twine::utohexstr(Die->getSize()) + " " +
2253                                dwarf::TagString(Abbrev->getTag()));
2254  Asm->EmitULEB128(AbbrevNumber);
2255
2256  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2257  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2258
2259  // Emit the DIE attribute values.
2260  for (unsigned i = 0, N = Values.size(); i < N; ++i) {
2261    unsigned Attr = AbbrevData[i].getAttribute();
2262    unsigned Form = AbbrevData[i].getForm();
2263    assert(Form && "Too many attributes for DIE (check abbreviation)");
2264
2265    if (Asm->isVerbose())
2266      Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
2267
2268    switch (Attr) {
2269    case dwarf::DW_AT_sibling:
2270      Asm->EmitInt32(Die->getSiblingOffset());
2271      break;
2272    case dwarf::DW_AT_abstract_origin: {
2273      DIEEntry *E = cast<DIEEntry>(Values[i]);
2274      DIE *Origin = E->getEntry();
2275      unsigned Addr = Origin->getOffset();
2276      Asm->EmitInt32(Addr);
2277      break;
2278    }
2279    case dwarf::DW_AT_ranges: {
2280      // DW_AT_range Value encodes offset in debug_range section.
2281      DIEInteger *V = cast<DIEInteger>(Values[i]);
2282
2283      if (Asm->MAI->doesDwarfUsesLabelOffsetForRanges()) {
2284        Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
2285                                 V->getValue(),
2286                                 4);
2287      } else {
2288        Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
2289                                       V->getValue(),
2290                                       DwarfDebugRangeSectionSym,
2291                                       4);
2292      }
2293      break;
2294    }
2295    case dwarf::DW_AT_location: {
2296      if (UseDotDebugLocEntry.count(Die) != 0) {
2297        DIELabel *L = cast<DIELabel>(Values[i]);
2298        Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
2299      } else
2300        Values[i]->EmitValue(Asm, Form);
2301      break;
2302    }
2303    case dwarf::DW_AT_accessibility: {
2304      if (Asm->isVerbose()) {
2305        DIEInteger *V = cast<DIEInteger>(Values[i]);
2306        Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
2307      }
2308      Values[i]->EmitValue(Asm, Form);
2309      break;
2310    }
2311    default:
2312      // Emit an attribute using the defined form.
2313      Values[i]->EmitValue(Asm, Form);
2314      break;
2315    }
2316  }
2317
2318  // Emit the DIE children if any.
2319  if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
2320    const std::vector<DIE *> &Children = Die->getChildren();
2321
2322    for (unsigned j = 0, M = Children.size(); j < M; ++j)
2323      emitDIE(Children[j]);
2324
2325    if (Asm->isVerbose())
2326      Asm->OutStreamer.AddComment("End Of Children Mark");
2327    Asm->EmitInt8(0);
2328  }
2329}
2330
2331/// emitDebugInfo - Emit the debug info section.
2332///
2333void DwarfDebug::emitDebugInfo() {
2334  // Start debug info section.
2335  Asm->OutStreamer.SwitchSection(
2336                            Asm->getObjFileLowering().getDwarfInfoSection());
2337  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2338         E = CUMap.end(); I != E; ++I) {
2339    CompileUnit *TheCU = I->second;
2340    DIE *Die = TheCU->getCUDie();
2341
2342    // Emit the compile units header.
2343    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
2344                                                  TheCU->getID()));
2345
2346    // Emit size of content not including length itself
2347    unsigned ContentSize = Die->getSize() +
2348      sizeof(int16_t) + // DWARF version number
2349      sizeof(int32_t) + // Offset Into Abbrev. Section
2350      sizeof(int8_t);   // Pointer Size (in bytes)
2351
2352    Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
2353    Asm->EmitInt32(ContentSize);
2354    Asm->OutStreamer.AddComment("DWARF version number");
2355    Asm->EmitInt16(dwarf::DWARF_VERSION);
2356    Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2357    Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
2358                           DwarfAbbrevSectionSym);
2359    Asm->OutStreamer.AddComment("Address Size (in bytes)");
2360    Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2361
2362    emitDIE(Die);
2363    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
2364  }
2365}
2366
2367/// emitAbbreviations - Emit the abbreviation section.
2368///
2369void DwarfDebug::emitAbbreviations() const {
2370  // Check to see if it is worth the effort.
2371  if (!Abbreviations.empty()) {
2372    // Start the debug abbrev section.
2373    Asm->OutStreamer.SwitchSection(
2374                            Asm->getObjFileLowering().getDwarfAbbrevSection());
2375
2376    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
2377
2378    // For each abbrevation.
2379    for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
2380      // Get abbreviation data
2381      const DIEAbbrev *Abbrev = Abbreviations[i];
2382
2383      // Emit the abbrevations code (base 1 index.)
2384      Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2385
2386      // Emit the abbreviations data.
2387      Abbrev->Emit(Asm);
2388    }
2389
2390    // Mark end of abbreviations.
2391    Asm->EmitULEB128(0, "EOM(3)");
2392
2393    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
2394  }
2395}
2396
2397/// emitEndOfLineMatrix - Emit the last address of the section and the end of
2398/// the line matrix.
2399///
2400void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2401  // Define last address of section.
2402  Asm->OutStreamer.AddComment("Extended Op");
2403  Asm->EmitInt8(0);
2404
2405  Asm->OutStreamer.AddComment("Op size");
2406  Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
2407  Asm->OutStreamer.AddComment("DW_LNE_set_address");
2408  Asm->EmitInt8(dwarf::DW_LNE_set_address);
2409
2410  Asm->OutStreamer.AddComment("Section end label");
2411
2412  Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2413                                   Asm->getTargetData().getPointerSize(),
2414                                   0/*AddrSpace*/);
2415
2416  // Mark end of matrix.
2417  Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2418  Asm->EmitInt8(0);
2419  Asm->EmitInt8(1);
2420  Asm->EmitInt8(1);
2421}
2422
2423/// emitDebugPubNames - Emit visible names into a debug pubnames section.
2424///
2425void DwarfDebug::emitDebugPubNames() {
2426  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2427         E = CUMap.end(); I != E; ++I) {
2428    CompileUnit *TheCU = I->second;
2429    // Start the dwarf pubnames section.
2430    Asm->OutStreamer.SwitchSection(
2431      Asm->getObjFileLowering().getDwarfPubNamesSection());
2432
2433    Asm->OutStreamer.AddComment("Length of Public Names Info");
2434    Asm->EmitLabelDifference(
2435      Asm->GetTempSymbol("pubnames_end", TheCU->getID()),
2436      Asm->GetTempSymbol("pubnames_begin", TheCU->getID()), 4);
2437
2438    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin",
2439                                                  TheCU->getID()));
2440
2441    Asm->OutStreamer.AddComment("DWARF Version");
2442    Asm->EmitInt16(dwarf::DWARF_VERSION);
2443
2444    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2445    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
2446                           DwarfInfoSectionSym);
2447
2448    Asm->OutStreamer.AddComment("Compilation Unit Length");
2449    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
2450                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
2451                             4);
2452
2453    const StringMap<DIE*> &Globals = TheCU->getGlobals();
2454    for (StringMap<DIE*>::const_iterator
2455           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2456      const char *Name = GI->getKeyData();
2457      DIE *Entity = GI->second;
2458
2459      Asm->OutStreamer.AddComment("DIE offset");
2460      Asm->EmitInt32(Entity->getOffset());
2461
2462      if (Asm->isVerbose())
2463        Asm->OutStreamer.AddComment("External Name");
2464      Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
2465    }
2466
2467    Asm->OutStreamer.AddComment("End Mark");
2468    Asm->EmitInt32(0);
2469    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end",
2470                                                TheCU->getID()));
2471  }
2472}
2473
2474void DwarfDebug::emitDebugPubTypes() {
2475  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2476         E = CUMap.end(); I != E; ++I) {
2477    CompileUnit *TheCU = I->second;
2478    // Start the dwarf pubnames section.
2479    Asm->OutStreamer.SwitchSection(
2480      Asm->getObjFileLowering().getDwarfPubTypesSection());
2481    Asm->OutStreamer.AddComment("Length of Public Types Info");
2482    Asm->EmitLabelDifference(
2483      Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
2484      Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
2485
2486    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2487                                                  TheCU->getID()));
2488
2489    if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2490    Asm->EmitInt16(dwarf::DWARF_VERSION);
2491
2492    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2493    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
2494                           DwarfInfoSectionSym);
2495
2496    Asm->OutStreamer.AddComment("Compilation Unit Length");
2497    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
2498                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
2499                             4);
2500
2501    const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2502    for (StringMap<DIE*>::const_iterator
2503           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2504      const char *Name = GI->getKeyData();
2505      DIE * Entity = GI->second;
2506
2507      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2508      Asm->EmitInt32(Entity->getOffset());
2509
2510      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2511      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
2512    }
2513
2514    Asm->OutStreamer.AddComment("End Mark");
2515    Asm->EmitInt32(0);
2516    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2517                                                  TheCU->getID()));
2518  }
2519}
2520
2521/// emitDebugStr - Emit visible names into a debug str section.
2522///
2523void DwarfDebug::emitDebugStr() {
2524  // Check to see if it is worth the effort.
2525  if (StringPool.empty()) return;
2526
2527  // Start the dwarf str section.
2528  Asm->OutStreamer.SwitchSection(
2529                                Asm->getObjFileLowering().getDwarfStrSection());
2530
2531  // Get all of the string pool entries and put them in an array by their ID so
2532  // we can sort them.
2533  SmallVector<std::pair<unsigned,
2534      StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2535
2536  for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2537       I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
2538    Entries.push_back(std::make_pair(I->second.second, &*I));
2539
2540  array_pod_sort(Entries.begin(), Entries.end());
2541
2542  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2543    // Emit a label for reference from debug information entries.
2544    Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2545
2546    // Emit the string itself.
2547    Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
2548  }
2549}
2550
2551/// emitDebugLoc - Emit visible names into a debug loc section.
2552///
2553void DwarfDebug::emitDebugLoc() {
2554  if (DotDebugLocEntries.empty())
2555    return;
2556
2557  for (SmallVector<DotDebugLocEntry, 4>::iterator
2558         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2559       I != E; ++I) {
2560    DotDebugLocEntry &Entry = *I;
2561    if (I + 1 != DotDebugLocEntries.end())
2562      Entry.Merge(I+1);
2563  }
2564
2565  // Start the dwarf loc section.
2566  Asm->OutStreamer.SwitchSection(
2567    Asm->getObjFileLowering().getDwarfLocSection());
2568  unsigned char Size = Asm->getTargetData().getPointerSize();
2569  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2570  unsigned index = 1;
2571  for (SmallVector<DotDebugLocEntry, 4>::iterator
2572         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2573       I != E; ++I, ++index) {
2574    DotDebugLocEntry &Entry = *I;
2575    if (Entry.isMerged()) continue;
2576    if (Entry.isEmpty()) {
2577      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2578      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2579      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2580    } else {
2581      Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
2582      Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
2583      DIVariable DV(Entry.Variable);
2584      Asm->OutStreamer.AddComment("Loc expr size");
2585      MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2586      MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2587      Asm->EmitLabelDifference(end, begin, 2);
2588      Asm->OutStreamer.EmitLabel(begin);
2589      if (DV.hasComplexAddress()) {
2590        unsigned N = DV.getNumAddrElements();
2591        unsigned i = 0;
2592        if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2593          if (Entry.Loc.getOffset()) {
2594            i = 2;
2595            Asm->EmitDwarfRegOp(Entry.Loc);
2596            Asm->OutStreamer.AddComment("DW_OP_deref");
2597            Asm->EmitInt8(dwarf::DW_OP_deref);
2598            Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2599            Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2600            Asm->EmitSLEB128(DV.getAddrElement(1));
2601          } else {
2602            // If first address element is OpPlus then emit
2603            // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2604            MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2605            Asm->EmitDwarfRegOp(Loc);
2606            i = 2;
2607          }
2608        } else {
2609          Asm->EmitDwarfRegOp(Entry.Loc);
2610        }
2611
2612        // Emit remaining complex address elements.
2613        for (; i < N; ++i) {
2614          uint64_t Element = DV.getAddrElement(i);
2615          if (Element == DIBuilder::OpPlus) {
2616            Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2617            Asm->EmitULEB128(DV.getAddrElement(++i));
2618          } else if (Element == DIBuilder::OpDeref)
2619            Asm->EmitInt8(dwarf::DW_OP_deref);
2620          else llvm_unreachable("unknown Opcode found in complex address");
2621        }
2622      } else {
2623        Asm->EmitDwarfRegOp(Entry.Loc);
2624      }
2625      Asm->OutStreamer.EmitLabel(end);
2626    }
2627  }
2628}
2629
2630/// EmitDebugARanges - Emit visible names into a debug aranges section.
2631///
2632void DwarfDebug::EmitDebugARanges() {
2633  // Start the dwarf aranges section.
2634  Asm->OutStreamer.SwitchSection(
2635                          Asm->getObjFileLowering().getDwarfARangesSection());
2636}
2637
2638/// emitDebugRanges - Emit visible names into a debug ranges section.
2639///
2640void DwarfDebug::emitDebugRanges() {
2641  // Start the dwarf ranges section.
2642  Asm->OutStreamer.SwitchSection(
2643    Asm->getObjFileLowering().getDwarfRangesSection());
2644  unsigned char Size = Asm->getTargetData().getPointerSize();
2645  for (SmallVector<const MCSymbol *, 8>::iterator
2646         I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2647       I != E; ++I) {
2648    if (*I)
2649      Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2650    else
2651      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2652  }
2653}
2654
2655/// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2656///
2657void DwarfDebug::emitDebugMacInfo() {
2658  if (const MCSection *LineInfo =
2659      Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2660    // Start the dwarf macinfo section.
2661    Asm->OutStreamer.SwitchSection(LineInfo);
2662  }
2663}
2664
2665/// emitDebugInlineInfo - Emit inline info using following format.
2666/// Section Header:
2667/// 1. length of section
2668/// 2. Dwarf version number
2669/// 3. address size.
2670///
2671/// Entries (one "entry" for each function that was inlined):
2672///
2673/// 1. offset into __debug_str section for MIPS linkage name, if exists;
2674///   otherwise offset into __debug_str for regular function name.
2675/// 2. offset into __debug_str section for regular function name.
2676/// 3. an unsigned LEB128 number indicating the number of distinct inlining
2677/// instances for the function.
2678///
2679/// The rest of the entry consists of a {die_offset, low_pc} pair for each
2680/// inlined instance; the die_offset points to the inlined_subroutine die in the
2681/// __debug_info section, and the low_pc is the starting address for the
2682/// inlining instance.
2683void DwarfDebug::emitDebugInlineInfo() {
2684  if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
2685    return;
2686
2687  if (!FirstCU)
2688    return;
2689
2690  Asm->OutStreamer.SwitchSection(
2691                        Asm->getObjFileLowering().getDwarfDebugInlineSection());
2692
2693  Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2694  Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2695                           Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2696
2697  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2698
2699  Asm->OutStreamer.AddComment("Dwarf Version");
2700  Asm->EmitInt16(dwarf::DWARF_VERSION);
2701  Asm->OutStreamer.AddComment("Address Size (in bytes)");
2702  Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2703
2704  for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2705         E = InlinedSPNodes.end(); I != E; ++I) {
2706
2707    const MDNode *Node = *I;
2708    DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2709      = InlineInfo.find(Node);
2710    SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2711    DISubprogram SP(Node);
2712    StringRef LName = SP.getLinkageName();
2713    StringRef Name = SP.getName();
2714
2715    Asm->OutStreamer.AddComment("MIPS linkage name");
2716    if (LName.empty()) {
2717      Asm->OutStreamer.EmitBytes(Name, 0);
2718      Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
2719    } else
2720      Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2721                             DwarfStrSectionSym);
2722
2723    Asm->OutStreamer.AddComment("Function name");
2724    Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2725    Asm->EmitULEB128(Labels.size(), "Inline count");
2726
2727    for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2728           LE = Labels.end(); LI != LE; ++LI) {
2729      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2730      Asm->EmitInt32(LI->second->getOffset());
2731
2732      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2733      Asm->OutStreamer.EmitSymbolValue(LI->first,
2734                                       Asm->getTargetData().getPointerSize(),0);
2735    }
2736  }
2737
2738  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2739}
2740