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