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