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