DwarfDebug.cpp revision dfa30e1ab243990eda4732a6dffb91e965e7a755
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 "DwarfAccelTable.h"
18#include "DwarfCompileUnit.h"
19#include "llvm/Constants.h"
20#include "llvm/Module.h"
21#include "llvm/Instructions.h"
22#include "llvm/CodeGen/MachineFunction.h"
23#include "llvm/CodeGen/MachineModuleInfo.h"
24#include "llvm/MC/MCAsmInfo.h"
25#include "llvm/MC/MCSection.h"
26#include "llvm/MC/MCStreamer.h"
27#include "llvm/MC/MCSymbol.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> DisableDebugInfoPrinting("disable-debug-info-print",
49                                              cl::Hidden,
50     cl::desc("Disable debug info printing"));
51
52static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
53     cl::desc("Make an absence of debug location information explicit."),
54     cl::init(false));
55
56static cl::opt<bool> DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
57     cl::desc("Output prototype dwarf accelerator tables."),
58     cl::init(false));
59
60namespace {
61  const char *DWARFGroupName = "DWARF Emission";
62  const char *DbgTimerName = "DWARF Debug Writer";
63} // end anonymous namespace
64
65//===----------------------------------------------------------------------===//
66
67/// Configuration values for initial hash set sizes (log2).
68///
69static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
70
71namespace llvm {
72
73DIType DbgVariable::getType() const {
74  DIType Ty = Var.getType();
75  // FIXME: isBlockByrefVariable should be reformulated in terms of complex
76  // addresses instead.
77  if (Var.isBlockByrefVariable()) {
78    /* Byref variables, in Blocks, are declared by the programmer as
79       "SomeType VarName;", but the compiler creates a
80       __Block_byref_x_VarName struct, and gives the variable VarName
81       either the struct, or a pointer to the struct, as its type.  This
82       is necessary for various behind-the-scenes things the compiler
83       needs to do with by-reference variables in blocks.
84
85       However, as far as the original *programmer* is concerned, the
86       variable should still have type 'SomeType', as originally declared.
87
88       The following function dives into the __Block_byref_x_VarName
89       struct to find the original type of the variable.  This will be
90       passed back to the code generating the type for the Debug
91       Information Entry for the variable 'VarName'.  'VarName' will then
92       have the original type 'SomeType' in its debug information.
93
94       The original type 'SomeType' will be the type of the field named
95       'VarName' inside the __Block_byref_x_VarName struct.
96
97       NOTE: In order for this to not completely fail on the debugger
98       side, the Debug Information Entry for the variable VarName needs to
99       have a DW_AT_location that tells the debugger how to unwind through
100       the pointers and __Block_byref_x_VarName struct to find the actual
101       value of the variable.  The function addBlockByrefType does this.  */
102    DIType subType = Ty;
103    unsigned tag = Ty.getTag();
104
105    if (tag == dwarf::DW_TAG_pointer_type) {
106      DIDerivedType DTy = DIDerivedType(Ty);
107      subType = DTy.getTypeDerivedFrom();
108    }
109
110    DICompositeType blockStruct = DICompositeType(subType);
111    DIArray Elements = blockStruct.getTypeArray();
112
113    for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
114      DIDescriptor Element = Elements.getElement(i);
115      DIDerivedType DT = DIDerivedType(Element);
116      if (getName() == DT.getName())
117        return (DT.getTypeDerivedFrom());
118    }
119    return Ty;
120  }
121  return Ty;
122}
123
124} // end llvm namespace
125
126DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
127  : Asm(A), MMI(Asm->MMI), FirstCU(0),
128    AbbreviationsSet(InitAbbreviationsSetSize),
129    PrevLabel(NULL) {
130  NextStringPoolNumber = 0;
131
132  DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
133  DwarfStrSectionSym = TextSectionSym = 0;
134  DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
135  FunctionBeginSym = FunctionEndSym = 0;
136  {
137    NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
138    beginModule(M);
139  }
140}
141DwarfDebug::~DwarfDebug() {
142}
143
144/// EmitSectionSym - Switch to the specified MCSection and emit an assembler
145/// temporary label to it if SymbolStem is specified.
146static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
147                                const char *SymbolStem = 0) {
148  Asm->OutStreamer.SwitchSection(Section);
149  if (!SymbolStem) return 0;
150
151  MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
152  Asm->OutStreamer.EmitLabel(TmpSym);
153  return TmpSym;
154}
155
156MCSymbol *DwarfDebug::getStringPool() {
157  return Asm->GetTempSymbol("section_str");
158}
159
160MCSymbol *DwarfDebug::getStringPoolEntry(StringRef Str) {
161  std::pair<MCSymbol*, unsigned> &Entry = StringPool[Str];
162  if (Entry.first) return Entry.first;
163
164  Entry.second = NextStringPoolNumber++;
165  return Entry.first = Asm->GetTempSymbol("string", Entry.second);
166}
167
168/// assignAbbrevNumber - Define a unique number for the abbreviation.
169///
170void DwarfDebug::assignAbbrevNumber(DIEAbbrev &Abbrev) {
171  // Profile the node so that we can make it unique.
172  FoldingSetNodeID ID;
173  Abbrev.Profile(ID);
174
175  // Check the set for priors.
176  DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
177
178  // If it's newly added.
179  if (InSet == &Abbrev) {
180    // Add to abbreviation list.
181    Abbreviations.push_back(&Abbrev);
182
183    // Assign the vector position + 1 as its number.
184    Abbrev.setNumber(Abbreviations.size());
185  } else {
186    // Assign existing abbreviation number.
187    Abbrev.setNumber(InSet->getNumber());
188  }
189}
190
191/// getRealLinkageName - If special LLVM prefix that is used to inform the asm
192/// printer to not emit usual symbol prefix before the symbol name is used then
193/// return linkage name after skipping this special LLVM prefix.
194static StringRef getRealLinkageName(StringRef LinkageName) {
195  char One = '\1';
196  if (LinkageName.startswith(StringRef(&One, 1)))
197    return LinkageName.substr(1);
198  return LinkageName;
199}
200
201/// updateSubprogramScopeDIE - Find DIE for the given subprogram and
202/// attach appropriate DW_AT_low_pc and DW_AT_high_pc attributes.
203/// If there are global variables in this scope then create and insert
204/// DIEs for these variables.
205DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
206                                          const MDNode *SPNode) {
207  DIE *SPDie = SPCU->getDIE(SPNode);
208
209  assert(SPDie && "Unable to find subprogram DIE!");
210  DISubprogram SP(SPNode);
211
212  DISubprogram SPDecl = SP.getFunctionDeclaration();
213  if (!SPDecl.isSubprogram()) {
214    // There is not any need to generate specification DIE for a function
215    // defined at compile unit level. If a function is defined inside another
216    // function then gdb prefers the definition at top level and but does not
217    // expect specification DIE in parent function. So avoid creating
218    // specification DIE for a function defined inside a function.
219    if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
220        !SP.getContext().isFile() &&
221        !isSubprogramContext(SP.getContext())) {
222      SPCU->addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
223
224      // Add arguments.
225      DICompositeType SPTy = SP.getType();
226      DIArray Args = SPTy.getTypeArray();
227      unsigned SPTag = SPTy.getTag();
228      if (SPTag == dwarf::DW_TAG_subroutine_type)
229        for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
230          DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
231          DIType ATy = DIType(DIType(Args.getElement(i)));
232          SPCU->addType(Arg, ATy);
233          if (ATy.isArtificial())
234            SPCU->addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
235          SPDie->addChild(Arg);
236        }
237      DIE *SPDeclDie = SPDie;
238      SPDie = new DIE(dwarf::DW_TAG_subprogram);
239      SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
240                        SPDeclDie);
241      SPCU->addDie(SPDie);
242    }
243  }
244  // Pick up abstract subprogram DIE.
245  if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
246    SPDie = new DIE(dwarf::DW_TAG_subprogram);
247    SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
248                      dwarf::DW_FORM_ref4, AbsSPDIE);
249    SPCU->addDie(SPDie);
250  }
251
252  SPCU->addLabel(SPDie, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
253                 Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber()));
254  SPCU->addLabel(SPDie, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
255                 Asm->GetTempSymbol("func_end", Asm->getFunctionNumber()));
256  const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
257  MachineLocation Location(RI->getFrameRegister(*Asm->MF));
258  SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
259
260  return SPDie;
261}
262
263/// constructLexicalScope - Construct new DW_TAG_lexical_block
264/// for this scope and attach DW_AT_low_pc/DW_AT_high_pc labels.
265DIE *DwarfDebug::constructLexicalScopeDIE(CompileUnit *TheCU,
266                                          LexicalScope *Scope) {
267  DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
268  if (Scope->isAbstractScope())
269    return ScopeDIE;
270
271  const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
272  if (Ranges.empty())
273    return 0;
274
275  SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
276  if (Ranges.size() > 1) {
277    // .debug_range section has not been laid out yet. Emit offset in
278    // .debug_range as a uint, size 4, for now. emitDIE will handle
279    // DW_AT_ranges appropriately.
280    TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
281                   DebugRangeSymbols.size()
282                   * Asm->getTargetData().getPointerSize());
283    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
284         RE = Ranges.end(); RI != RE; ++RI) {
285      DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
286      DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
287    }
288    DebugRangeSymbols.push_back(NULL);
289    DebugRangeSymbols.push_back(NULL);
290    return ScopeDIE;
291  }
292
293  const MCSymbol *Start = getLabelBeforeInsn(RI->first);
294  const MCSymbol *End = getLabelAfterInsn(RI->second);
295
296  if (End == 0) return 0;
297
298  assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
299  assert(End->isDefined() && "Invalid end label for an inlined scope!");
300
301  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, Start);
302  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, End);
303
304  return ScopeDIE;
305}
306
307/// constructInlinedScopeDIE - This scope represents inlined body of
308/// a function. Construct DIE to represent this concrete inlined copy
309/// of the function.
310DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
311                                          LexicalScope *Scope) {
312  const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
313  assert(Ranges.empty() == false &&
314         "LexicalScope does not have instruction markers!");
315
316  if (!Scope->getScopeNode())
317    return NULL;
318  DIScope DS(Scope->getScopeNode());
319  DISubprogram InlinedSP = getDISubprogram(DS);
320  DIE *OriginDIE = TheCU->getDIE(InlinedSP);
321  if (!OriginDIE) {
322    DEBUG(dbgs() << "Unable to find original DIE for inlined subprogram.");
323    return NULL;
324  }
325
326  SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
327  const MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
328  const MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
329
330  if (StartLabel == 0 || EndLabel == 0) {
331    assert(0 && "Unexpected Start and End labels for a inlined scope!");
332    return 0;
333  }
334  assert(StartLabel->isDefined() &&
335         "Invalid starting label for an inlined scope!");
336  assert(EndLabel->isDefined() &&
337         "Invalid end label for an inlined scope!");
338
339  DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
340  TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
341                     dwarf::DW_FORM_ref4, OriginDIE);
342
343  if (Ranges.size() > 1) {
344    // .debug_range section has not been laid out yet. Emit offset in
345    // .debug_range as a uint, size 4, for now. emitDIE will handle
346    // DW_AT_ranges appropriately.
347    TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
348                   DebugRangeSymbols.size()
349                   * Asm->getTargetData().getPointerSize());
350    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
351         RE = Ranges.end(); RI != RE; ++RI) {
352      DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
353      DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
354    }
355    DebugRangeSymbols.push_back(NULL);
356    DebugRangeSymbols.push_back(NULL);
357  } else {
358    TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
359                    StartLabel);
360    TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
361                    EndLabel);
362  }
363
364  InlinedSubprogramDIEs.insert(OriginDIE);
365
366  // Track the start label for this inlined function.
367  //.debug_inlined section specification does not clearly state how
368  // to emit inlined scope that is split into multiple instruction ranges.
369  // For now, use first instruction range and emit low_pc/high_pc pair and
370  // corresponding .debug_inlined section entry for this pair.
371  DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
372    I = InlineInfo.find(InlinedSP);
373
374  if (I == InlineInfo.end()) {
375    InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel, ScopeDIE));
376    InlinedSPNodes.push_back(InlinedSP);
377  } else
378    I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
379
380  DILocation DL(Scope->getInlinedAt());
381  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0, TheCU->getID());
382  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
383
384  return ScopeDIE;
385}
386
387/// constructScopeDIE - Construct a DIE for this scope.
388DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
389  if (!Scope || !Scope->getScopeNode())
390    return NULL;
391
392  SmallVector<DIE *, 8> Children;
393
394  // Collect arguments for current function.
395  if (LScopes.isCurrentFunctionScope(Scope))
396    for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
397      if (DbgVariable *ArgDV = CurrentFnArguments[i])
398        if (DIE *Arg =
399            TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope()))
400          Children.push_back(Arg);
401
402  // Collect lexical scope children first.
403  const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
404  for (unsigned i = 0, N = Variables.size(); i < N; ++i)
405    if (DIE *Variable =
406        TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope()))
407      Children.push_back(Variable);
408  const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
409  for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
410    if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
411      Children.push_back(Nested);
412  DIScope DS(Scope->getScopeNode());
413  DIE *ScopeDIE = NULL;
414  if (Scope->getInlinedAt())
415    ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
416  else if (DS.isSubprogram()) {
417    ProcessedSPNodes.insert(DS);
418    if (Scope->isAbstractScope()) {
419      ScopeDIE = TheCU->getDIE(DS);
420      // Note down abstract DIE.
421      if (ScopeDIE)
422        AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
423    }
424    else
425      ScopeDIE = updateSubprogramScopeDIE(TheCU, DS);
426  }
427  else {
428    // There is no need to emit empty lexical block DIE.
429    if (Children.empty())
430      return NULL;
431    ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
432  }
433
434  if (!ScopeDIE) return NULL;
435
436  // Add children
437  for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
438         E = Children.end(); I != E; ++I)
439    ScopeDIE->addChild(*I);
440
441  if (DS.isSubprogram())
442   TheCU->addPubTypes(DISubprogram(DS));
443
444  if (DS.isSubprogram() && !Scope->isAbstractScope()) {
445    DISubprogram SP = DISubprogram(DS);
446    TheCU->addAccelName(SP.getName(), ScopeDIE);
447
448    // If the linkage name is different than the name, go ahead and output
449    // that as well into the name table.
450    if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
451      TheCU->addAccelName(SP.getLinkageName(), ScopeDIE);
452  }
453
454 return ScopeDIE;
455}
456
457/// GetOrCreateSourceID - Look up the source id with the given directory and
458/// source file names. If none currently exists, create a new id and insert it
459/// in the SourceIds map. This can update DirectoryNames and SourceFileNames
460/// maps as well.
461unsigned DwarfDebug::GetOrCreateSourceID(StringRef FileName,
462                                         StringRef DirName) {
463  // If FE did not provide a file name, then assume stdin.
464  if (FileName.empty())
465    return GetOrCreateSourceID("<stdin>", StringRef());
466
467  // TODO: this might not belong here. See if we can factor this better.
468  if (DirName == CompilationDir)
469    DirName = "";
470
471  unsigned SrcId = SourceIdMap.size()+1;
472  std::pair<std::string, std::string> SourceName =
473      std::make_pair(FileName, DirName);
474  std::pair<std::pair<std::string, std::string>, unsigned> Entry =
475      make_pair(SourceName, SrcId);
476
477  std::map<std::pair<std::string, std::string>, unsigned>::iterator I;
478  bool NewlyInserted;
479  tie(I, NewlyInserted) = SourceIdMap.insert(Entry);
480  if (!NewlyInserted)
481    return I->second;
482
483  // Print out a .file directive to specify files for .loc directives.
484  Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.first.second,
485                                          Entry.first.first);
486
487  return SrcId;
488}
489
490/// constructCompileUnit - Create new CompileUnit for the given
491/// metadata node with tag DW_TAG_compile_unit.
492CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) {
493  DICompileUnit DIUnit(N);
494  StringRef FN = DIUnit.getFilename();
495  CompilationDir = DIUnit.getDirectory();
496  unsigned ID = GetOrCreateSourceID(FN, CompilationDir);
497
498  DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
499  CompileUnit *NewCU = new CompileUnit(ID, Die, Asm, this);
500  NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
501  NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
502                 DIUnit.getLanguage());
503  NewCU->addString(Die, dwarf::DW_AT_name, FN);
504  // Use DW_AT_entry_pc instead of DW_AT_low_pc/DW_AT_high_pc pair. This
505  // simplifies debug range entries.
506  NewCU->addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
507  // DW_AT_stmt_list is a offset of line number information for this
508  // compile unit in debug_line section.
509  if (Asm->MAI->doesDwarfRequireRelocationForSectionOffset())
510    NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
511                    Asm->GetTempSymbol("section_line"));
512  else
513    NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
514
515  if (!CompilationDir.empty())
516    NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
517  if (DIUnit.isOptimized())
518    NewCU->addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
519
520  StringRef Flags = DIUnit.getFlags();
521  if (!Flags.empty())
522    NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
523
524  if (unsigned RVer = DIUnit.getRunTimeVersion())
525    NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
526            dwarf::DW_FORM_data1, RVer);
527
528  if (!FirstCU)
529    FirstCU = NewCU;
530  CUMap.insert(std::make_pair(N, NewCU));
531  return NewCU;
532}
533
534static bool isObjCClass(StringRef Name) {
535  return Name.startswith("+") || Name.startswith("-");
536}
537
538static bool hasObjCCategory(StringRef Name) {
539  if (!isObjCClass(Name)) return false;
540
541  size_t pos = Name.find(')');
542  if (pos != std::string::npos) {
543    if (Name[pos+1] != ' ') return false;
544    return true;
545  }
546  return false;
547}
548
549static void getObjCClassCategory(StringRef In, StringRef &Class,
550                                 StringRef &Category) {
551  if (!hasObjCCategory(In)) {
552    Class = In.slice(In.find('[') + 1, In.find(' '));
553    Category = "";
554    return;
555  }
556
557  Class = In.slice(In.find('[') + 1, In.find('('));
558  Category = In.slice(In.find('[') + 1, In.find(' '));
559  return;
560}
561
562static StringRef getObjCMethodName(StringRef In) {
563  return In.slice(In.find(' ') + 1, In.find(']'));
564}
565
566/// construct SubprogramDIE - Construct subprogram DIE.
567void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
568                                        const MDNode *N) {
569  CompileUnit *&CURef = SPMap[N];
570  if (CURef)
571    return;
572  CURef = TheCU;
573
574  DISubprogram SP(N);
575  if (!SP.isDefinition())
576    // This is a method declaration which will be handled while constructing
577    // class type.
578    return;
579
580  DISubprogram SPDecl = SP.getFunctionDeclaration();
581  DIE *DeclDie = NULL;
582  if (SPDecl.isSubprogram()) {
583    DeclDie = TheCU->getOrCreateSubprogramDIE(SPDecl);
584  }
585
586  DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
587
588  if (DeclDie) {
589    // Refer function declaration directly.
590    TheCU->addDIEEntry(SubprogramDie, dwarf::DW_AT_specification,
591                       dwarf::DW_FORM_ref4, DeclDie);
592  }
593
594  // Add to map.
595  TheCU->insertDIE(N, SubprogramDie);
596
597  // Add to context owner.
598  TheCU->addToContextOwner(SubprogramDie, SP.getContext());
599
600  // Add to Accel Names
601  TheCU->addAccelName(SP.getName(), SubprogramDie);
602
603  // If the linkage name is different than the name, go ahead and output
604  // that as well into the name table.
605  if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
606    TheCU->addAccelName(SP.getLinkageName(), SubprogramDie);
607
608  // If this is an Objective-C selector name add it to the ObjC accelerator too.
609  if (isObjCClass(SP.getName())) {
610    StringRef Class, Category;
611    getObjCClassCategory(SP.getName(), Class, Category);
612    TheCU->addAccelObjC(Class, SubprogramDie);
613    if (Category != "")
614      TheCU->addAccelObjC(Category, SubprogramDie);
615    // Also add the base method name to the name table.
616    TheCU->addAccelName(getObjCMethodName(SP.getName()), SubprogramDie);
617  }
618
619  return;
620}
621
622/// collectInfoFromNamedMDNodes - Collect debug info from named mdnodes such
623/// as llvm.dbg.enum and llvm.dbg.ty
624void DwarfDebug::collectInfoFromNamedMDNodes(Module *M) {
625  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.sp"))
626    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
627      const MDNode *N = NMD->getOperand(i);
628      if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
629        constructSubprogramDIE(CU, N);
630    }
631
632  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv"))
633    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
634      const MDNode *N = NMD->getOperand(i);
635      if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
636        CU->createGlobalVariableDIE(N);
637    }
638
639  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
640    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
641      DIType Ty(NMD->getOperand(i));
642      if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
643        CU->getOrCreateTypeDIE(Ty);
644    }
645
646  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
647    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
648      DIType Ty(NMD->getOperand(i));
649      if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
650        CU->getOrCreateTypeDIE(Ty);
651    }
652}
653
654/// collectLegacyDebugInfo - Collect debug info using DebugInfoFinder.
655/// FIXME - Remove this when dragon-egg and llvm-gcc switch to DIBuilder.
656bool DwarfDebug::collectLegacyDebugInfo(Module *M) {
657  DebugInfoFinder DbgFinder;
658  DbgFinder.processModule(*M);
659
660  bool HasDebugInfo = false;
661  // Scan all the compile-units to see if there are any marked as the main
662  // unit. If not, we do not generate debug info.
663  for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
664         E = DbgFinder.compile_unit_end(); I != E; ++I) {
665    if (DICompileUnit(*I).isMain()) {
666      HasDebugInfo = true;
667      break;
668    }
669  }
670  if (!HasDebugInfo) return false;
671
672  // Create all the compile unit DIEs.
673  for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
674         E = DbgFinder.compile_unit_end(); I != E; ++I)
675    constructCompileUnit(*I);
676
677  // Create DIEs for each global variable.
678  for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
679         E = DbgFinder.global_variable_end(); I != E; ++I) {
680    const MDNode *N = *I;
681    if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
682      CU->createGlobalVariableDIE(N);
683  }
684
685  // Create DIEs for each subprogram.
686  for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
687         E = DbgFinder.subprogram_end(); I != E; ++I) {
688    const MDNode *N = *I;
689    if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
690      constructSubprogramDIE(CU, N);
691  }
692
693  return HasDebugInfo;
694}
695
696/// beginModule - Emit all Dwarf sections that should come prior to the
697/// content. Create global DIEs and emit initial debug info sections.
698/// This is invoked by the target AsmPrinter.
699void DwarfDebug::beginModule(Module *M) {
700  if (DisableDebugInfoPrinting)
701    return;
702
703  // If module has named metadata anchors then use them, otherwise scan the
704  // module using debug info finder to collect debug info.
705  NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
706  if (CU_Nodes) {
707    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
708      DICompileUnit CUNode(CU_Nodes->getOperand(i));
709      CompileUnit *CU = constructCompileUnit(CUNode);
710      DIArray GVs = CUNode.getGlobalVariables();
711      for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
712        CU->createGlobalVariableDIE(GVs.getElement(i));
713      DIArray SPs = CUNode.getSubprograms();
714      for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
715        constructSubprogramDIE(CU, SPs.getElement(i));
716      DIArray EnumTypes = CUNode.getEnumTypes();
717      for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
718        CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
719      DIArray RetainedTypes = CUNode.getRetainedTypes();
720      for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
721        CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
722    }
723  } else if (!collectLegacyDebugInfo(M))
724    return;
725
726  collectInfoFromNamedMDNodes(M);
727
728  // Tell MMI that we have debug info.
729  MMI->setDebugInfoAvailability(true);
730
731  // Emit initial sections.
732  EmitSectionLabels();
733
734  // Prime section data.
735  SectionMap.insert(Asm->getObjFileLowering().getTextSection());
736}
737
738/// endModule - Emit all Dwarf sections that should come after the content.
739///
740void DwarfDebug::endModule() {
741  if (!FirstCU) return;
742  const Module *M = MMI->getModule();
743  DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
744
745  // Collect info for variables that were optimized out.
746  if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
747    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
748      DICompileUnit TheCU(CU_Nodes->getOperand(i));
749      DIArray Subprograms = TheCU.getSubprograms();
750      for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
751        DISubprogram SP(Subprograms.getElement(i));
752        if (ProcessedSPNodes.count(SP) != 0) continue;
753        if (!SP.Verify()) continue;
754        if (!SP.isDefinition()) continue;
755        DIArray Variables = SP.getVariables();
756        if (Variables.getNumElements() == 0) continue;
757
758        LexicalScope *Scope =
759          new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
760        DeadFnScopeMap[SP] = Scope;
761
762        // Construct subprogram DIE and add variables DIEs.
763        CompileUnit *SPCU = CUMap.lookup(TheCU);
764        assert(SPCU && "Unable to find Compile Unit!");
765        constructSubprogramDIE(SPCU, SP);
766        DIE *ScopeDIE = SPCU->getDIE(SP);
767        for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
768          DIVariable DV(Variables.getElement(vi));
769          if (!DV.Verify()) continue;
770          DbgVariable *NewVar = new DbgVariable(DV, NULL);
771          if (DIE *VariableDIE =
772              SPCU->constructVariableDIE(NewVar, Scope->isAbstractScope()))
773            ScopeDIE->addChild(VariableDIE);
774        }
775      }
776    }
777  }
778
779  // Attach DW_AT_inline attribute with inlined subprogram DIEs.
780  for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
781         AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
782    DIE *ISP = *AI;
783    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
784  }
785
786  // Emit DW_AT_containing_type attribute to connect types with their
787  // vtable holding type.
788  for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
789         CUE = CUMap.end(); CUI != CUE; ++CUI) {
790    CompileUnit *TheCU = CUI->second;
791    TheCU->constructContainingTypeDIEs();
792  }
793
794  // Standard sections final addresses.
795  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
796  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
797  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
798  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
799
800  // End text sections.
801  for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
802    Asm->OutStreamer.SwitchSection(SectionMap[i]);
803    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
804  }
805
806  // Compute DIE offsets and sizes.
807  computeSizeAndOffsets();
808
809  // Emit all the DIEs into a debug info section
810  emitDebugInfo();
811
812  // Corresponding abbreviations into a abbrev section.
813  emitAbbreviations();
814
815  // Emit info into a dwarf accelerator table sections.
816  if (DwarfAccelTables) {
817    emitAccelNames();
818    emitAccelObjC();
819    emitAccelNamespaces();
820    emitAccelTypes();
821  }
822
823  // Emit info into a debug pubtypes section.
824  emitDebugPubTypes();
825
826  // Emit info into a debug loc section.
827  emitDebugLoc();
828
829  // Emit info into a debug aranges section.
830  EmitDebugARanges();
831
832  // Emit info into a debug ranges section.
833  emitDebugRanges();
834
835  // Emit info into a debug macinfo section.
836  emitDebugMacInfo();
837
838  // Emit inline info.
839  emitDebugInlineInfo();
840
841  // Emit info into a debug str section.
842  emitDebugStr();
843
844  // clean up.
845  DeleteContainerSeconds(DeadFnScopeMap);
846  SPMap.clear();
847  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
848         E = CUMap.end(); I != E; ++I)
849    delete I->second;
850  FirstCU = NULL;  // Reset for the next Module, if any.
851}
852
853/// findAbstractVariable - Find abstract variable, if any, associated with Var.
854DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
855                                              DebugLoc ScopeLoc) {
856  LLVMContext &Ctx = DV->getContext();
857  // More then one inlined variable corresponds to one abstract variable.
858  DIVariable Var = cleanseInlinedVariable(DV, Ctx);
859  DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
860  if (AbsDbgVariable)
861    return AbsDbgVariable;
862
863  LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
864  if (!Scope)
865    return NULL;
866
867  AbsDbgVariable = new DbgVariable(Var, NULL);
868  addScopeVariable(Scope, AbsDbgVariable);
869  AbstractVariables[Var] = AbsDbgVariable;
870  return AbsDbgVariable;
871}
872
873/// addCurrentFnArgument - If Var is a current function argument then add
874/// it to CurrentFnArguments list.
875bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
876                                      DbgVariable *Var, LexicalScope *Scope) {
877  if (!LScopes.isCurrentFunctionScope(Scope))
878    return false;
879  DIVariable DV = Var->getVariable();
880  if (DV.getTag() != dwarf::DW_TAG_arg_variable)
881    return false;
882  unsigned ArgNo = DV.getArgNumber();
883  if (ArgNo == 0)
884    return false;
885
886  size_t Size = CurrentFnArguments.size();
887  if (Size == 0)
888    CurrentFnArguments.resize(MF->getFunction()->arg_size());
889  // llvm::Function argument size is not good indicator of how many
890  // arguments does the function have at source level.
891  if (ArgNo > Size)
892    CurrentFnArguments.resize(ArgNo * 2);
893  CurrentFnArguments[ArgNo - 1] = Var;
894  return true;
895}
896
897/// collectVariableInfoFromMMITable - Collect variable information from
898/// side table maintained by MMI.
899void
900DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
901                                   SmallPtrSet<const MDNode *, 16> &Processed) {
902  MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
903  for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
904         VE = VMap.end(); VI != VE; ++VI) {
905    const MDNode *Var = VI->first;
906    if (!Var) continue;
907    Processed.insert(Var);
908    DIVariable DV(Var);
909    const std::pair<unsigned, DebugLoc> &VP = VI->second;
910
911    LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
912
913    // If variable scope is not found then skip this variable.
914    if (Scope == 0)
915      continue;
916
917    DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
918    DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
919    RegVar->setFrameIndex(VP.first);
920    if (!addCurrentFnArgument(MF, RegVar, Scope))
921      addScopeVariable(Scope, RegVar);
922    if (AbsDbgVariable)
923      AbsDbgVariable->setFrameIndex(VP.first);
924  }
925}
926
927/// isDbgValueInDefinedReg - Return true if debug value, encoded by
928/// DBG_VALUE instruction, is in a defined reg.
929static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
930  assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
931  return MI->getNumOperands() == 3 &&
932         MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
933         MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
934}
935
936/// getDebugLocEntry - Get .debug_loc entry for the instruction range starting
937/// at MI.
938static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
939                                         const MCSymbol *FLabel,
940                                         const MCSymbol *SLabel,
941                                         const MachineInstr *MI) {
942  const MDNode *Var =  MI->getOperand(MI->getNumOperands() - 1).getMetadata();
943
944  if (MI->getNumOperands() != 3) {
945    MachineLocation MLoc = Asm->getDebugValueLocation(MI);
946    return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
947  }
948  if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
949    MachineLocation MLoc;
950    MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
951    return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
952  }
953  if (MI->getOperand(0).isImm())
954    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
955  if (MI->getOperand(0).isFPImm())
956    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
957  if (MI->getOperand(0).isCImm())
958    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
959
960  assert(0 && "Unexpected 3 operand DBG_VALUE instruction!");
961  return DotDebugLocEntry();
962}
963
964/// collectVariableInfo - Find variables for each lexical scope.
965void
966DwarfDebug::collectVariableInfo(const MachineFunction *MF,
967                                SmallPtrSet<const MDNode *, 16> &Processed) {
968
969  /// collection info from MMI table.
970  collectVariableInfoFromMMITable(MF, Processed);
971
972  for (SmallVectorImpl<const MDNode*>::const_iterator
973         UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
974         ++UVI) {
975    const MDNode *Var = *UVI;
976    if (Processed.count(Var))
977      continue;
978
979    // History contains relevant DBG_VALUE instructions for Var and instructions
980    // clobbering it.
981    SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
982    if (History.empty())
983      continue;
984    const MachineInstr *MInsn = History.front();
985
986    DIVariable DV(Var);
987    LexicalScope *Scope = NULL;
988    if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
989        DISubprogram(DV.getContext()).describes(MF->getFunction()))
990      Scope = LScopes.getCurrentFunctionScope();
991    else {
992      if (DV.getVersion() <= LLVMDebugVersion9)
993        Scope = LScopes.findLexicalScope(MInsn->getDebugLoc());
994      else {
995        if (MDNode *IA = DV.getInlinedAt())
996          Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
997        else
998          Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
999      }
1000    }
1001    // If variable scope is not found then skip this variable.
1002    if (!Scope)
1003      continue;
1004
1005    Processed.insert(DV);
1006    assert(MInsn->isDebugValue() && "History must begin with debug value");
1007    DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1008    DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1009    if (!addCurrentFnArgument(MF, RegVar, Scope))
1010      addScopeVariable(Scope, RegVar);
1011    if (AbsVar)
1012      AbsVar->setMInsn(MInsn);
1013
1014    // Simple ranges that are fully coalesced.
1015    if (History.size() <= 1 || (History.size() == 2 &&
1016                                MInsn->isIdenticalTo(History.back()))) {
1017      RegVar->setMInsn(MInsn);
1018      continue;
1019    }
1020
1021    // handle multiple DBG_VALUE instructions describing one variable.
1022    RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1023
1024    for (SmallVectorImpl<const MachineInstr*>::const_iterator
1025           HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1026      const MachineInstr *Begin = *HI;
1027      assert(Begin->isDebugValue() && "Invalid History entry");
1028
1029      // Check if DBG_VALUE is truncating a range.
1030      if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1031          && !Begin->getOperand(0).getReg())
1032        continue;
1033
1034      // Compute the range for a register location.
1035      const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1036      const MCSymbol *SLabel = 0;
1037
1038      if (HI + 1 == HE)
1039        // If Begin is the last instruction in History then its value is valid
1040        // until the end of the function.
1041        SLabel = FunctionEndSym;
1042      else {
1043        const MachineInstr *End = HI[1];
1044        DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1045              << "\t" << *Begin << "\t" << *End << "\n");
1046        if (End->isDebugValue())
1047          SLabel = getLabelBeforeInsn(End);
1048        else {
1049          // End is a normal instruction clobbering the range.
1050          SLabel = getLabelAfterInsn(End);
1051          assert(SLabel && "Forgot label after clobber instruction");
1052          ++HI;
1053        }
1054      }
1055
1056      // The value is valid until the next DBG_VALUE or clobber.
1057      DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel, Begin));
1058    }
1059    DotDebugLocEntries.push_back(DotDebugLocEntry());
1060  }
1061
1062  // Collect info for variables that were optimized out.
1063  LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1064  DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1065  for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1066    DIVariable DV(Variables.getElement(i));
1067    if (!DV || !DV.Verify() || !Processed.insert(DV))
1068      continue;
1069    if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1070      addScopeVariable(Scope, new DbgVariable(DV, NULL));
1071  }
1072}
1073
1074/// getLabelBeforeInsn - Return Label preceding the instruction.
1075const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1076  MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1077  assert(Label && "Didn't insert label before instruction");
1078  return Label;
1079}
1080
1081/// getLabelAfterInsn - Return Label immediately following the instruction.
1082const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1083  return LabelsAfterInsn.lookup(MI);
1084}
1085
1086/// beginInstruction - Process beginning of an instruction.
1087void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1088  // Check if source location changes, but ignore DBG_VALUE locations.
1089  if (!MI->isDebugValue()) {
1090    DebugLoc DL = MI->getDebugLoc();
1091    if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1092      unsigned Flags = DWARF2_FLAG_IS_STMT;
1093      PrevInstLoc = DL;
1094      if (DL == PrologEndLoc) {
1095        Flags |= DWARF2_FLAG_PROLOGUE_END;
1096        PrologEndLoc = DebugLoc();
1097      }
1098      if (!DL.isUnknown()) {
1099        const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1100        recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1101      } else
1102        recordSourceLine(0, 0, 0, 0);
1103    }
1104  }
1105
1106  // Insert labels where requested.
1107  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1108    LabelsBeforeInsn.find(MI);
1109
1110  // No label needed.
1111  if (I == LabelsBeforeInsn.end())
1112    return;
1113
1114  // Label already assigned.
1115  if (I->second)
1116    return;
1117
1118  if (!PrevLabel) {
1119    PrevLabel = MMI->getContext().CreateTempSymbol();
1120    Asm->OutStreamer.EmitLabel(PrevLabel);
1121  }
1122  I->second = PrevLabel;
1123}
1124
1125/// endInstruction - Process end of an instruction.
1126void DwarfDebug::endInstruction(const MachineInstr *MI) {
1127  // Don't create a new label after DBG_VALUE instructions.
1128  // They don't generate code.
1129  if (!MI->isDebugValue())
1130    PrevLabel = 0;
1131
1132  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1133    LabelsAfterInsn.find(MI);
1134
1135  // No label needed.
1136  if (I == LabelsAfterInsn.end())
1137    return;
1138
1139  // Label already assigned.
1140  if (I->second)
1141    return;
1142
1143  // We need a label after this instruction.
1144  if (!PrevLabel) {
1145    PrevLabel = MMI->getContext().CreateTempSymbol();
1146    Asm->OutStreamer.EmitLabel(PrevLabel);
1147  }
1148  I->second = PrevLabel;
1149}
1150
1151/// identifyScopeMarkers() -
1152/// Each LexicalScope has first instruction and last instruction to mark
1153/// beginning and end of a scope respectively. Create an inverse map that list
1154/// scopes starts (and ends) with an instruction. One instruction may start (or
1155/// end) multiple scopes. Ignore scopes that are not reachable.
1156void DwarfDebug::identifyScopeMarkers() {
1157  SmallVector<LexicalScope *, 4> WorkList;
1158  WorkList.push_back(LScopes.getCurrentFunctionScope());
1159  while (!WorkList.empty()) {
1160    LexicalScope *S = WorkList.pop_back_val();
1161
1162    const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1163    if (!Children.empty())
1164      for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1165             SE = Children.end(); SI != SE; ++SI)
1166        WorkList.push_back(*SI);
1167
1168    if (S->isAbstractScope())
1169      continue;
1170
1171    const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1172    if (Ranges.empty())
1173      continue;
1174    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1175           RE = Ranges.end(); RI != RE; ++RI) {
1176      assert(RI->first && "InsnRange does not have first instruction!");
1177      assert(RI->second && "InsnRange does not have second instruction!");
1178      requestLabelBeforeInsn(RI->first);
1179      requestLabelAfterInsn(RI->second);
1180    }
1181  }
1182}
1183
1184/// getScopeNode - Get MDNode for DebugLoc's scope.
1185static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1186  if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1187    return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1188  return DL.getScope(Ctx);
1189}
1190
1191/// getFnDebugLoc - Walk up the scope chain of given debug loc and find
1192/// line number  info for the function.
1193static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1194  const MDNode *Scope = getScopeNode(DL, Ctx);
1195  DISubprogram SP = getDISubprogram(Scope);
1196  if (SP.Verify())
1197    return DebugLoc::get(SP.getLineNumber(), 0, SP);
1198  return DebugLoc();
1199}
1200
1201/// beginFunction - Gather pre-function debug information.  Assumes being
1202/// emitted immediately after the function entry point.
1203void DwarfDebug::beginFunction(const MachineFunction *MF) {
1204  if (!MMI->hasDebugInfo()) return;
1205  LScopes.initialize(*MF);
1206  if (LScopes.empty()) return;
1207  identifyScopeMarkers();
1208
1209  FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1210                                        Asm->getFunctionNumber());
1211  // Assumes in correct section after the entry point.
1212  Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1213
1214  assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1215
1216  const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1217  /// LiveUserVar - Map physreg numbers to the MDNode they contain.
1218  std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1219
1220  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1221       I != E; ++I) {
1222    bool AtBlockEntry = true;
1223    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1224         II != IE; ++II) {
1225      const MachineInstr *MI = II;
1226
1227      if (MI->isDebugValue()) {
1228        assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1229
1230        // Keep track of user variables.
1231        const MDNode *Var =
1232          MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1233
1234        // Variable is in a register, we need to check for clobbers.
1235        if (isDbgValueInDefinedReg(MI))
1236          LiveUserVar[MI->getOperand(0).getReg()] = Var;
1237
1238        // Check the history of this variable.
1239        SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1240        if (History.empty()) {
1241          UserVariables.push_back(Var);
1242          // The first mention of a function argument gets the FunctionBeginSym
1243          // label, so arguments are visible when breaking at function entry.
1244          DIVariable DV(Var);
1245          if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1246              DISubprogram(getDISubprogram(DV.getContext()))
1247                .describes(MF->getFunction()))
1248            LabelsBeforeInsn[MI] = FunctionBeginSym;
1249        } else {
1250          // We have seen this variable before. Try to coalesce DBG_VALUEs.
1251          const MachineInstr *Prev = History.back();
1252          if (Prev->isDebugValue()) {
1253            // Coalesce identical entries at the end of History.
1254            if (History.size() >= 2 &&
1255                Prev->isIdenticalTo(History[History.size() - 2])) {
1256              DEBUG(dbgs() << "Coalesce identical DBG_VALUE entries:\n"
1257                    << "\t" << *Prev
1258                    << "\t" << *History[History.size() - 2] << "\n");
1259              History.pop_back();
1260            }
1261
1262            // Terminate old register assignments that don't reach MI;
1263            MachineFunction::const_iterator PrevMBB = Prev->getParent();
1264            if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1265                isDbgValueInDefinedReg(Prev)) {
1266              // Previous register assignment needs to terminate at the end of
1267              // its basic block.
1268              MachineBasicBlock::const_iterator LastMI =
1269                PrevMBB->getLastNonDebugInstr();
1270              if (LastMI == PrevMBB->end()) {
1271                // Drop DBG_VALUE for empty range.
1272                DEBUG(dbgs() << "Drop DBG_VALUE for empty range:\n"
1273                      << "\t" << *Prev << "\n");
1274                History.pop_back();
1275              }
1276              else {
1277                // Terminate after LastMI.
1278                History.push_back(LastMI);
1279              }
1280            }
1281          }
1282        }
1283        History.push_back(MI);
1284      } else {
1285        // Not a DBG_VALUE instruction.
1286        if (!MI->isLabel())
1287          AtBlockEntry = false;
1288
1289        // First known non DBG_VALUE location marks beginning of function
1290        // body.
1291        if (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown())
1292          PrologEndLoc = MI->getDebugLoc();
1293
1294        // Check if the instruction clobbers any registers with debug vars.
1295        for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1296               MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1297          if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1298            continue;
1299          for (const unsigned *AI = TRI->getOverlaps(MOI->getReg());
1300               unsigned Reg = *AI; ++AI) {
1301            const MDNode *Var = LiveUserVar[Reg];
1302            if (!Var)
1303              continue;
1304            // Reg is now clobbered.
1305            LiveUserVar[Reg] = 0;
1306
1307            // Was MD last defined by a DBG_VALUE referring to Reg?
1308            DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1309            if (HistI == DbgValues.end())
1310              continue;
1311            SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1312            if (History.empty())
1313              continue;
1314            const MachineInstr *Prev = History.back();
1315            // Sanity-check: Register assignments are terminated at the end of
1316            // their block.
1317            if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1318              continue;
1319            // Is the variable still in Reg?
1320            if (!isDbgValueInDefinedReg(Prev) ||
1321                Prev->getOperand(0).getReg() != Reg)
1322              continue;
1323            // Var is clobbered. Make sure the next instruction gets a label.
1324            History.push_back(MI);
1325          }
1326        }
1327      }
1328    }
1329  }
1330
1331  for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1332       I != E; ++I) {
1333    SmallVectorImpl<const MachineInstr*> &History = I->second;
1334    if (History.empty())
1335      continue;
1336
1337    // Make sure the final register assignments are terminated.
1338    const MachineInstr *Prev = History.back();
1339    if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1340      const MachineBasicBlock *PrevMBB = Prev->getParent();
1341      MachineBasicBlock::const_iterator LastMI =
1342        PrevMBB->getLastNonDebugInstr();
1343      if (LastMI == PrevMBB->end())
1344        // Drop DBG_VALUE for empty range.
1345        History.pop_back();
1346      else {
1347        // Terminate after LastMI.
1348        History.push_back(LastMI);
1349      }
1350    }
1351    // Request labels for the full history.
1352    for (unsigned i = 0, e = History.size(); i != e; ++i) {
1353      const MachineInstr *MI = History[i];
1354      if (MI->isDebugValue())
1355        requestLabelBeforeInsn(MI);
1356      else
1357        requestLabelAfterInsn(MI);
1358    }
1359  }
1360
1361  PrevInstLoc = DebugLoc();
1362  PrevLabel = FunctionBeginSym;
1363
1364  // Record beginning of function.
1365  if (!PrologEndLoc.isUnknown()) {
1366    DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1367                                       MF->getFunction()->getContext());
1368    recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1369                     FnStartDL.getScope(MF->getFunction()->getContext()),
1370                     DWARF2_FLAG_IS_STMT);
1371  }
1372}
1373
1374void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1375//  SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1376  ScopeVariables[LS].push_back(Var);
1377//  Vars.push_back(Var);
1378}
1379
1380/// endFunction - Gather and emit post-function debug information.
1381///
1382void DwarfDebug::endFunction(const MachineFunction *MF) {
1383  if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1384
1385  // Define end label for subprogram.
1386  FunctionEndSym = Asm->GetTempSymbol("func_end",
1387                                      Asm->getFunctionNumber());
1388  // Assumes in correct section after the entry point.
1389  Asm->OutStreamer.EmitLabel(FunctionEndSym);
1390
1391  SmallPtrSet<const MDNode *, 16> ProcessedVars;
1392  collectVariableInfo(MF, ProcessedVars);
1393
1394  LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1395  CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1396  assert(TheCU && "Unable to find compile unit!");
1397
1398  // Construct abstract scopes.
1399  ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1400  for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1401    LexicalScope *AScope = AList[i];
1402    DISubprogram SP(AScope->getScopeNode());
1403    if (SP.Verify()) {
1404      // Collect info for variables that were optimized out.
1405      DIArray Variables = SP.getVariables();
1406      for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1407        DIVariable DV(Variables.getElement(i));
1408        if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1409          continue;
1410        if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1411          addScopeVariable(Scope, new DbgVariable(DV, NULL));
1412      }
1413    }
1414    if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1415      constructScopeDIE(TheCU, AScope);
1416  }
1417
1418  DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1419
1420  if (!DisableFramePointerElim(*MF))
1421    TheCU->addUInt(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr,
1422                   dwarf::DW_FORM_flag, 1);
1423
1424  DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1425                                               MMI->getFrameMoves()));
1426
1427  // Clear debug info
1428  for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1429         I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1430    DeleteContainerPointers(I->second);
1431  ScopeVariables.clear();
1432  DeleteContainerPointers(CurrentFnArguments);
1433  UserVariables.clear();
1434  DbgValues.clear();
1435  AbstractVariables.clear();
1436  LabelsBeforeInsn.clear();
1437  LabelsAfterInsn.clear();
1438  PrevLabel = NULL;
1439}
1440
1441/// recordSourceLine - Register a source line with debug info. Returns the
1442/// unique label that was emitted and which provides correspondence to
1443/// the source line list.
1444void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1445                                  unsigned Flags) {
1446  StringRef Fn;
1447  StringRef Dir;
1448  unsigned Src = 1;
1449  if (S) {
1450    DIDescriptor Scope(S);
1451
1452    if (Scope.isCompileUnit()) {
1453      DICompileUnit CU(S);
1454      Fn = CU.getFilename();
1455      Dir = CU.getDirectory();
1456    } else if (Scope.isFile()) {
1457      DIFile F(S);
1458      Fn = F.getFilename();
1459      Dir = F.getDirectory();
1460    } else if (Scope.isSubprogram()) {
1461      DISubprogram SP(S);
1462      Fn = SP.getFilename();
1463      Dir = SP.getDirectory();
1464    } else if (Scope.isLexicalBlockFile()) {
1465      DILexicalBlockFile DBF(S);
1466      Fn = DBF.getFilename();
1467      Dir = DBF.getDirectory();
1468    } else if (Scope.isLexicalBlock()) {
1469      DILexicalBlock DB(S);
1470      Fn = DB.getFilename();
1471      Dir = DB.getDirectory();
1472    } else
1473      assert(0 && "Unexpected scope info");
1474
1475    Src = GetOrCreateSourceID(Fn, Dir);
1476  }
1477  Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1478}
1479
1480//===----------------------------------------------------------------------===//
1481// Emit Methods
1482//===----------------------------------------------------------------------===//
1483
1484/// computeSizeAndOffset - Compute the size and offset of a DIE.
1485///
1486unsigned
1487DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
1488  // Get the children.
1489  const std::vector<DIE *> &Children = Die->getChildren();
1490
1491  // If not last sibling and has children then add sibling offset attribute.
1492  if (!Last && !Children.empty())
1493    Die->addSiblingOffset(DIEValueAllocator);
1494
1495  // Record the abbreviation.
1496  assignAbbrevNumber(Die->getAbbrev());
1497
1498  // Get the abbreviation for this DIE.
1499  unsigned AbbrevNumber = Die->getAbbrevNumber();
1500  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1501
1502  // Set DIE offset
1503  Die->setOffset(Offset);
1504
1505  // Start the size with the size of abbreviation code.
1506  Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1507
1508  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1509  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1510
1511  // Size the DIE attribute values.
1512  for (unsigned i = 0, N = Values.size(); i < N; ++i)
1513    // Size attribute value.
1514    Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1515
1516  // Size the DIE children if any.
1517  if (!Children.empty()) {
1518    assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1519           "Children flag not set");
1520
1521    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1522      Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
1523
1524    // End of children marker.
1525    Offset += sizeof(int8_t);
1526  }
1527
1528  Die->setSize(Offset - Die->getOffset());
1529  return Offset;
1530}
1531
1532/// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
1533///
1534void DwarfDebug::computeSizeAndOffsets() {
1535  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1536         E = CUMap.end(); I != E; ++I) {
1537    // Compute size of compile unit header.
1538    unsigned Offset =
1539      sizeof(int32_t) + // Length of Compilation Unit Info
1540      sizeof(int16_t) + // DWARF version number
1541      sizeof(int32_t) + // Offset Into Abbrev. Section
1542      sizeof(int8_t);   // Pointer Size (in bytes)
1543    computeSizeAndOffset(I->second->getCUDie(), Offset, true);
1544  }
1545}
1546
1547/// EmitSectionLabels - Emit initial Dwarf sections with a label at
1548/// the start of each one.
1549void DwarfDebug::EmitSectionLabels() {
1550  const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1551
1552  // Dwarf sections base addresses.
1553  DwarfInfoSectionSym =
1554    EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1555  DwarfAbbrevSectionSym =
1556    EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1557  EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
1558
1559  if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1560    EmitSectionSym(Asm, MacroInfo);
1561
1562  EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1563  EmitSectionSym(Asm, TLOF.getDwarfLocSection());
1564  EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1565  DwarfStrSectionSym =
1566    EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
1567  DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1568                                             "debug_range");
1569
1570  DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
1571                                           "section_debug_loc");
1572
1573  TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1574  EmitSectionSym(Asm, TLOF.getDataSection());
1575}
1576
1577/// emitDIE - Recursively emits a debug information entry.
1578///
1579void DwarfDebug::emitDIE(DIE *Die) {
1580  // Get the abbreviation for this DIE.
1581  unsigned AbbrevNumber = Die->getAbbrevNumber();
1582  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1583
1584  // Emit the code (index) for the abbreviation.
1585  if (Asm->isVerbose())
1586    Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1587                                Twine::utohexstr(Die->getOffset()) + ":0x" +
1588                                Twine::utohexstr(Die->getSize()) + " " +
1589                                dwarf::TagString(Abbrev->getTag()));
1590  Asm->EmitULEB128(AbbrevNumber);
1591
1592  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1593  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1594
1595  // Emit the DIE attribute values.
1596  for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1597    unsigned Attr = AbbrevData[i].getAttribute();
1598    unsigned Form = AbbrevData[i].getForm();
1599    assert(Form && "Too many attributes for DIE (check abbreviation)");
1600
1601    if (Asm->isVerbose())
1602      Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1603
1604    switch (Attr) {
1605    case dwarf::DW_AT_sibling:
1606      Asm->EmitInt32(Die->getSiblingOffset());
1607      break;
1608    case dwarf::DW_AT_abstract_origin: {
1609      DIEEntry *E = cast<DIEEntry>(Values[i]);
1610      DIE *Origin = E->getEntry();
1611      unsigned Addr = Origin->getOffset();
1612      Asm->EmitInt32(Addr);
1613      break;
1614    }
1615    case dwarf::DW_AT_ranges: {
1616      // DW_AT_range Value encodes offset in debug_range section.
1617      DIEInteger *V = cast<DIEInteger>(Values[i]);
1618
1619      if (Asm->MAI->doesDwarfUsesLabelOffsetForRanges()) {
1620        Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1621                                 V->getValue(),
1622                                 4);
1623      } else {
1624        Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1625                                       V->getValue(),
1626                                       DwarfDebugRangeSectionSym,
1627                                       4);
1628      }
1629      break;
1630    }
1631    case dwarf::DW_AT_location: {
1632      if (DIELabel *L = dyn_cast<DIELabel>(Values[i]))
1633        Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1634      else
1635        Values[i]->EmitValue(Asm, Form);
1636      break;
1637    }
1638    case dwarf::DW_AT_accessibility: {
1639      if (Asm->isVerbose()) {
1640        DIEInteger *V = cast<DIEInteger>(Values[i]);
1641        Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1642      }
1643      Values[i]->EmitValue(Asm, Form);
1644      break;
1645    }
1646    default:
1647      // Emit an attribute using the defined form.
1648      Values[i]->EmitValue(Asm, Form);
1649      break;
1650    }
1651  }
1652
1653  // Emit the DIE children if any.
1654  if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1655    const std::vector<DIE *> &Children = Die->getChildren();
1656
1657    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1658      emitDIE(Children[j]);
1659
1660    if (Asm->isVerbose())
1661      Asm->OutStreamer.AddComment("End Of Children Mark");
1662    Asm->EmitInt8(0);
1663  }
1664}
1665
1666/// emitDebugInfo - Emit the debug info section.
1667///
1668void DwarfDebug::emitDebugInfo() {
1669  // Start debug info section.
1670  Asm->OutStreamer.SwitchSection(
1671                            Asm->getObjFileLowering().getDwarfInfoSection());
1672  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1673         E = CUMap.end(); I != E; ++I) {
1674    CompileUnit *TheCU = I->second;
1675    DIE *Die = TheCU->getCUDie();
1676
1677    // Emit the compile units header.
1678    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
1679                                                  TheCU->getID()));
1680
1681    // Emit size of content not including length itself
1682    unsigned ContentSize = Die->getSize() +
1683      sizeof(int16_t) + // DWARF version number
1684      sizeof(int32_t) + // Offset Into Abbrev. Section
1685      sizeof(int8_t);   // Pointer Size (in bytes)
1686
1687    Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1688    Asm->EmitInt32(ContentSize);
1689    Asm->OutStreamer.AddComment("DWARF version number");
1690    Asm->EmitInt16(dwarf::DWARF_VERSION);
1691    Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1692    Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
1693                           DwarfAbbrevSectionSym);
1694    Asm->OutStreamer.AddComment("Address Size (in bytes)");
1695    Asm->EmitInt8(Asm->getTargetData().getPointerSize());
1696
1697    emitDIE(Die);
1698    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
1699  }
1700}
1701
1702/// emitAbbreviations - Emit the abbreviation section.
1703///
1704void DwarfDebug::emitAbbreviations() const {
1705  // Check to see if it is worth the effort.
1706  if (!Abbreviations.empty()) {
1707    // Start the debug abbrev section.
1708    Asm->OutStreamer.SwitchSection(
1709                            Asm->getObjFileLowering().getDwarfAbbrevSection());
1710
1711    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
1712
1713    // For each abbrevation.
1714    for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
1715      // Get abbreviation data
1716      const DIEAbbrev *Abbrev = Abbreviations[i];
1717
1718      // Emit the abbrevations code (base 1 index.)
1719      Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1720
1721      // Emit the abbreviations data.
1722      Abbrev->Emit(Asm);
1723    }
1724
1725    // Mark end of abbreviations.
1726    Asm->EmitULEB128(0, "EOM(3)");
1727
1728    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
1729  }
1730}
1731
1732/// emitEndOfLineMatrix - Emit the last address of the section and the end of
1733/// the line matrix.
1734///
1735void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1736  // Define last address of section.
1737  Asm->OutStreamer.AddComment("Extended Op");
1738  Asm->EmitInt8(0);
1739
1740  Asm->OutStreamer.AddComment("Op size");
1741  Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
1742  Asm->OutStreamer.AddComment("DW_LNE_set_address");
1743  Asm->EmitInt8(dwarf::DW_LNE_set_address);
1744
1745  Asm->OutStreamer.AddComment("Section end label");
1746
1747  Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1748                                   Asm->getTargetData().getPointerSize(),
1749                                   0/*AddrSpace*/);
1750
1751  // Mark end of matrix.
1752  Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1753  Asm->EmitInt8(0);
1754  Asm->EmitInt8(1);
1755  Asm->EmitInt8(1);
1756}
1757
1758/// emitAccelNames - Emit visible names into a hashed accelerator table
1759/// section.
1760void DwarfDebug::emitAccelNames() {
1761  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1762                                           dwarf::DW_FORM_data4));
1763  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1764         E = CUMap.end(); I != E; ++I) {
1765    CompileUnit *TheCU = I->second;
1766    const StringMap<DIE*> &Names = TheCU->getAccelNames();
1767    for (StringMap<DIE*>::const_iterator
1768           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1769      const char *Name = GI->getKeyData();
1770      DIE *Entity = GI->second;
1771      AT.AddName(Name, Entity);
1772    }
1773  }
1774
1775  AT.FinalizeTable(Asm, "Names");
1776  Asm->OutStreamer.SwitchSection(
1777    Asm->getObjFileLowering().getDwarfAccelNamesSection());
1778  MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
1779  Asm->OutStreamer.EmitLabel(SectionBegin);
1780
1781  // Emit the full data.
1782  AT.Emit(Asm, SectionBegin, this);
1783}
1784
1785/// emitAccelObjC - Emit objective C classes and categories into a hashed
1786/// accelerator table section.
1787void DwarfDebug::emitAccelObjC() {
1788  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1789                                           dwarf::DW_FORM_data4));
1790  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1791         E = CUMap.end(); I != E; ++I) {
1792    CompileUnit *TheCU = I->second;
1793    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
1794    for (StringMap<std::vector<DIE*> >::const_iterator
1795           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1796      const char *Name = GI->getKeyData();
1797      std::vector<DIE *> Entities = GI->second;
1798      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1799             DE = Entities.end(); DI != DE; ++DI)
1800        AT.AddName(Name, (*DI));
1801    }
1802  }
1803
1804  AT.FinalizeTable(Asm, "ObjC");
1805  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1806                                 .getDwarfAccelObjCSection());
1807  MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
1808  Asm->OutStreamer.EmitLabel(SectionBegin);
1809
1810  // Emit the full data.
1811  AT.Emit(Asm, SectionBegin, this);
1812}
1813
1814/// emitAccelNamespace - Emit namespace dies into a hashed accelerator
1815/// table.
1816void DwarfDebug::emitAccelNamespaces() {
1817  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1818                                           dwarf::DW_FORM_data4));
1819  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1820         E = CUMap.end(); I != E; ++I) {
1821    CompileUnit *TheCU = I->second;
1822    const StringMap<DIE*> &Names = TheCU->getAccelNamespace();
1823    for (StringMap<DIE*>::const_iterator
1824           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1825      const char *Name = GI->getKeyData();
1826      DIE *Entity = GI->second;
1827      AT.AddName(Name, Entity);
1828    }
1829  }
1830
1831  AT.FinalizeTable(Asm, "namespac");
1832  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1833                                 .getDwarfAccelNamespaceSection());
1834  MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
1835  Asm->OutStreamer.EmitLabel(SectionBegin);
1836
1837  // Emit the full data.
1838  AT.Emit(Asm, SectionBegin, this);
1839}
1840
1841/// emitAccelTypes() - Emit type dies into a hashed accelerator table.
1842void DwarfDebug::emitAccelTypes() {
1843  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1844                                           dwarf::DW_FORM_data4));
1845  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1846         E = CUMap.end(); I != E; ++I) {
1847    CompileUnit *TheCU = I->second;
1848    const StringMap<DIE*> &Names = TheCU->getAccelTypes();
1849    for (StringMap<DIE*>::const_iterator
1850           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1851      const char *Name = GI->getKeyData();
1852      DIE *Entity = GI->second;
1853      AT.AddName(Name, Entity);
1854    }
1855  }
1856
1857  AT.FinalizeTable(Asm, "types");
1858  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1859                                 .getDwarfAccelTypesSection());
1860  MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
1861  Asm->OutStreamer.EmitLabel(SectionBegin);
1862
1863  // Emit the full data.
1864  AT.Emit(Asm, SectionBegin, this);
1865}
1866
1867void DwarfDebug::emitDebugPubTypes() {
1868  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1869         E = CUMap.end(); I != E; ++I) {
1870    CompileUnit *TheCU = I->second;
1871    // Start the dwarf pubtypes section.
1872    Asm->OutStreamer.SwitchSection(
1873      Asm->getObjFileLowering().getDwarfPubTypesSection());
1874    Asm->OutStreamer.AddComment("Length of Public Types Info");
1875    Asm->EmitLabelDifference(
1876      Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
1877      Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
1878
1879    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
1880                                                  TheCU->getID()));
1881
1882    if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
1883    Asm->EmitInt16(dwarf::DWARF_VERSION);
1884
1885    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1886    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1887                           DwarfInfoSectionSym);
1888
1889    Asm->OutStreamer.AddComment("Compilation Unit Length");
1890    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1891                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
1892                             4);
1893
1894    const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
1895    for (StringMap<DIE*>::const_iterator
1896           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1897      const char *Name = GI->getKeyData();
1898      DIE *Entity = GI->second;
1899
1900      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
1901      Asm->EmitInt32(Entity->getOffset());
1902
1903      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
1904      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
1905    }
1906
1907    Asm->OutStreamer.AddComment("End Mark");
1908    Asm->EmitInt32(0);
1909    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
1910                                                  TheCU->getID()));
1911  }
1912}
1913
1914/// emitDebugStr - Emit visible names into a debug str section.
1915///
1916void DwarfDebug::emitDebugStr() {
1917  // Check to see if it is worth the effort.
1918  if (StringPool.empty()) return;
1919
1920  // Start the dwarf str section.
1921  Asm->OutStreamer.SwitchSection(
1922                                Asm->getObjFileLowering().getDwarfStrSection());
1923
1924  // Get all of the string pool entries and put them in an array by their ID so
1925  // we can sort them.
1926  SmallVector<std::pair<unsigned,
1927      StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
1928
1929  for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
1930       I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
1931    Entries.push_back(std::make_pair(I->second.second, &*I));
1932
1933  array_pod_sort(Entries.begin(), Entries.end());
1934
1935  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
1936    // Emit a label for reference from debug information entries.
1937    Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
1938
1939    // Emit the string itself.
1940    Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
1941    Asm->OutStreamer.EmitZeros(1, 0);
1942  }
1943}
1944
1945/// emitDebugLoc - Emit visible names into a debug loc section.
1946///
1947void DwarfDebug::emitDebugLoc() {
1948  if (DotDebugLocEntries.empty())
1949    return;
1950
1951  for (SmallVector<DotDebugLocEntry, 4>::iterator
1952         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1953       I != E; ++I) {
1954    DotDebugLocEntry &Entry = *I;
1955    if (I + 1 != DotDebugLocEntries.end())
1956      Entry.Merge(I+1);
1957  }
1958
1959  // Start the dwarf loc section.
1960  Asm->OutStreamer.SwitchSection(
1961    Asm->getObjFileLowering().getDwarfLocSection());
1962  unsigned char Size = Asm->getTargetData().getPointerSize();
1963  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
1964  unsigned index = 1;
1965  for (SmallVector<DotDebugLocEntry, 4>::iterator
1966         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1967       I != E; ++I, ++index) {
1968    DotDebugLocEntry &Entry = *I;
1969    if (Entry.isMerged()) continue;
1970    if (Entry.isEmpty()) {
1971      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1972      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1973      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
1974    } else {
1975      Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
1976      Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
1977      DIVariable DV(Entry.Variable);
1978      Asm->OutStreamer.AddComment("Loc expr size");
1979      MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
1980      MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
1981      Asm->EmitLabelDifference(end, begin, 2);
1982      Asm->OutStreamer.EmitLabel(begin);
1983      if (Entry.isInt()) {
1984        DIBasicType BTy(DV.getType());
1985        if (BTy.Verify() &&
1986            (BTy.getEncoding()  == dwarf::DW_ATE_signed
1987             || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
1988          Asm->OutStreamer.AddComment("DW_OP_consts");
1989          Asm->EmitInt8(dwarf::DW_OP_consts);
1990          Asm->EmitSLEB128(Entry.getInt());
1991        } else {
1992          Asm->OutStreamer.AddComment("DW_OP_constu");
1993          Asm->EmitInt8(dwarf::DW_OP_constu);
1994          Asm->EmitULEB128(Entry.getInt());
1995        }
1996      } else if (Entry.isLocation()) {
1997        if (!DV.hasComplexAddress())
1998          // Regular entry.
1999          Asm->EmitDwarfRegOp(Entry.Loc);
2000        else {
2001          // Complex address entry.
2002          unsigned N = DV.getNumAddrElements();
2003          unsigned i = 0;
2004          if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2005            if (Entry.Loc.getOffset()) {
2006              i = 2;
2007              Asm->EmitDwarfRegOp(Entry.Loc);
2008              Asm->OutStreamer.AddComment("DW_OP_deref");
2009              Asm->EmitInt8(dwarf::DW_OP_deref);
2010              Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2011              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2012              Asm->EmitSLEB128(DV.getAddrElement(1));
2013            } else {
2014              // If first address element is OpPlus then emit
2015              // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2016              MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2017              Asm->EmitDwarfRegOp(Loc);
2018              i = 2;
2019            }
2020          } else {
2021            Asm->EmitDwarfRegOp(Entry.Loc);
2022          }
2023
2024          // Emit remaining complex address elements.
2025          for (; i < N; ++i) {
2026            uint64_t Element = DV.getAddrElement(i);
2027            if (Element == DIBuilder::OpPlus) {
2028              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2029              Asm->EmitULEB128(DV.getAddrElement(++i));
2030            } else if (Element == DIBuilder::OpDeref)
2031              Asm->EmitInt8(dwarf::DW_OP_deref);
2032            else llvm_unreachable("unknown Opcode found in complex address");
2033          }
2034        }
2035      }
2036      // else ... ignore constant fp. There is not any good way to
2037      // to represent them here in dwarf.
2038      Asm->OutStreamer.EmitLabel(end);
2039    }
2040  }
2041}
2042
2043/// EmitDebugARanges - Emit visible names into a debug aranges section.
2044///
2045void DwarfDebug::EmitDebugARanges() {
2046  // Start the dwarf aranges section.
2047  Asm->OutStreamer.SwitchSection(
2048                          Asm->getObjFileLowering().getDwarfARangesSection());
2049}
2050
2051/// emitDebugRanges - Emit visible names into a debug ranges section.
2052///
2053void DwarfDebug::emitDebugRanges() {
2054  // Start the dwarf ranges section.
2055  Asm->OutStreamer.SwitchSection(
2056    Asm->getObjFileLowering().getDwarfRangesSection());
2057  unsigned char Size = Asm->getTargetData().getPointerSize();
2058  for (SmallVector<const MCSymbol *, 8>::iterator
2059         I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2060       I != E; ++I) {
2061    if (*I)
2062      Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2063    else
2064      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2065  }
2066}
2067
2068/// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2069///
2070void DwarfDebug::emitDebugMacInfo() {
2071  if (const MCSection *LineInfo =
2072      Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2073    // Start the dwarf macinfo section.
2074    Asm->OutStreamer.SwitchSection(LineInfo);
2075  }
2076}
2077
2078/// emitDebugInlineInfo - Emit inline info using following format.
2079/// Section Header:
2080/// 1. length of section
2081/// 2. Dwarf version number
2082/// 3. address size.
2083///
2084/// Entries (one "entry" for each function that was inlined):
2085///
2086/// 1. offset into __debug_str section for MIPS linkage name, if exists;
2087///   otherwise offset into __debug_str for regular function name.
2088/// 2. offset into __debug_str section for regular function name.
2089/// 3. an unsigned LEB128 number indicating the number of distinct inlining
2090/// instances for the function.
2091///
2092/// The rest of the entry consists of a {die_offset, low_pc} pair for each
2093/// inlined instance; the die_offset points to the inlined_subroutine die in the
2094/// __debug_info section, and the low_pc is the starting address for the
2095/// inlining instance.
2096void DwarfDebug::emitDebugInlineInfo() {
2097  if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
2098    return;
2099
2100  if (!FirstCU)
2101    return;
2102
2103  Asm->OutStreamer.SwitchSection(
2104                        Asm->getObjFileLowering().getDwarfDebugInlineSection());
2105
2106  Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2107  Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2108                           Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2109
2110  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2111
2112  Asm->OutStreamer.AddComment("Dwarf Version");
2113  Asm->EmitInt16(dwarf::DWARF_VERSION);
2114  Asm->OutStreamer.AddComment("Address Size (in bytes)");
2115  Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2116
2117  for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2118         E = InlinedSPNodes.end(); I != E; ++I) {
2119
2120    const MDNode *Node = *I;
2121    DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2122      = InlineInfo.find(Node);
2123    SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2124    DISubprogram SP(Node);
2125    StringRef LName = SP.getLinkageName();
2126    StringRef Name = SP.getName();
2127
2128    Asm->OutStreamer.AddComment("MIPS linkage name");
2129    if (LName.empty()) {
2130      Asm->OutStreamer.EmitBytes(Name, 0);
2131      Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
2132    } else
2133      Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2134                             DwarfStrSectionSym);
2135
2136    Asm->OutStreamer.AddComment("Function name");
2137    Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2138    Asm->EmitULEB128(Labels.size(), "Inline count");
2139
2140    for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2141           LE = Labels.end(); LI != LE; ++LI) {
2142      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2143      Asm->EmitInt32(LI->second->getOffset());
2144
2145      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2146      Asm->OutStreamer.EmitSymbolValue(LI->first,
2147                                       Asm->getTargetData().getPointerSize(),0);
2148    }
2149  }
2150
2151  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2152}
2153