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