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