DwarfDebug.cpp revision 10cb744f194dc2a0ce0c3d52965aafb2b190068b
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  emitDebugPubTypes();
836
837  // Emit info into a debug loc section.
838  emitDebugLoc();
839
840  // Emit info into a debug aranges section.
841  EmitDebugARanges();
842
843  // Emit info into a debug ranges section.
844  emitDebugRanges();
845
846  // Emit info into a debug macinfo section.
847  emitDebugMacInfo();
848
849  // Emit inline info.
850  emitDebugInlineInfo();
851
852  // Emit info into a debug str section.
853  emitDebugStr();
854
855  // clean up.
856  DeleteContainerSeconds(DeadFnScopeMap);
857  SPMap.clear();
858  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
859         E = CUMap.end(); I != E; ++I)
860    delete I->second;
861  FirstCU = NULL;  // Reset for the next Module, if any.
862}
863
864/// findAbstractVariable - Find abstract variable, if any, associated with Var.
865DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
866                                              DebugLoc ScopeLoc) {
867  LLVMContext &Ctx = DV->getContext();
868  // More then one inlined variable corresponds to one abstract variable.
869  DIVariable Var = cleanseInlinedVariable(DV, Ctx);
870  DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
871  if (AbsDbgVariable)
872    return AbsDbgVariable;
873
874  LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
875  if (!Scope)
876    return NULL;
877
878  AbsDbgVariable = new DbgVariable(Var, NULL);
879  addScopeVariable(Scope, AbsDbgVariable);
880  AbstractVariables[Var] = AbsDbgVariable;
881  return AbsDbgVariable;
882}
883
884/// addCurrentFnArgument - If Var is a current function argument then add
885/// it to CurrentFnArguments list.
886bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
887                                      DbgVariable *Var, LexicalScope *Scope) {
888  if (!LScopes.isCurrentFunctionScope(Scope))
889    return false;
890  DIVariable DV = Var->getVariable();
891  if (DV.getTag() != dwarf::DW_TAG_arg_variable)
892    return false;
893  unsigned ArgNo = DV.getArgNumber();
894  if (ArgNo == 0)
895    return false;
896
897  size_t Size = CurrentFnArguments.size();
898  if (Size == 0)
899    CurrentFnArguments.resize(MF->getFunction()->arg_size());
900  // llvm::Function argument size is not good indicator of how many
901  // arguments does the function have at source level.
902  if (ArgNo > Size)
903    CurrentFnArguments.resize(ArgNo * 2);
904  CurrentFnArguments[ArgNo - 1] = Var;
905  return true;
906}
907
908/// collectVariableInfoFromMMITable - Collect variable information from
909/// side table maintained by MMI.
910void
911DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
912                                   SmallPtrSet<const MDNode *, 16> &Processed) {
913  MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
914  for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
915         VE = VMap.end(); VI != VE; ++VI) {
916    const MDNode *Var = VI->first;
917    if (!Var) continue;
918    Processed.insert(Var);
919    DIVariable DV(Var);
920    const std::pair<unsigned, DebugLoc> &VP = VI->second;
921
922    LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
923
924    // If variable scope is not found then skip this variable.
925    if (Scope == 0)
926      continue;
927
928    DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
929    DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
930    RegVar->setFrameIndex(VP.first);
931    if (!addCurrentFnArgument(MF, RegVar, Scope))
932      addScopeVariable(Scope, RegVar);
933    if (AbsDbgVariable)
934      AbsDbgVariable->setFrameIndex(VP.first);
935  }
936}
937
938/// isDbgValueInDefinedReg - Return true if debug value, encoded by
939/// DBG_VALUE instruction, is in a defined reg.
940static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
941  assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
942  return MI->getNumOperands() == 3 &&
943         MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
944         MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
945}
946
947/// getDebugLocEntry - Get .debug_loc entry for the instruction range starting
948/// at MI.
949static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
950                                         const MCSymbol *FLabel,
951                                         const MCSymbol *SLabel,
952                                         const MachineInstr *MI) {
953  const MDNode *Var =  MI->getOperand(MI->getNumOperands() - 1).getMetadata();
954
955  if (MI->getNumOperands() != 3) {
956    MachineLocation MLoc = Asm->getDebugValueLocation(MI);
957    return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
958  }
959  if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
960    MachineLocation MLoc;
961    MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
962    return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
963  }
964  if (MI->getOperand(0).isImm())
965    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
966  if (MI->getOperand(0).isFPImm())
967    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
968  if (MI->getOperand(0).isCImm())
969    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
970
971  llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
972}
973
974/// collectVariableInfo - Find variables for each lexical scope.
975void
976DwarfDebug::collectVariableInfo(const MachineFunction *MF,
977                                SmallPtrSet<const MDNode *, 16> &Processed) {
978
979  /// collection info from MMI table.
980  collectVariableInfoFromMMITable(MF, Processed);
981
982  for (SmallVectorImpl<const MDNode*>::const_iterator
983         UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
984         ++UVI) {
985    const MDNode *Var = *UVI;
986    if (Processed.count(Var))
987      continue;
988
989    // History contains relevant DBG_VALUE instructions for Var and instructions
990    // clobbering it.
991    SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
992    if (History.empty())
993      continue;
994    const MachineInstr *MInsn = History.front();
995
996    DIVariable DV(Var);
997    LexicalScope *Scope = NULL;
998    if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
999        DISubprogram(DV.getContext()).describes(MF->getFunction()))
1000      Scope = LScopes.getCurrentFunctionScope();
1001    else {
1002      if (DV.getVersion() <= LLVMDebugVersion9)
1003        Scope = LScopes.findLexicalScope(MInsn->getDebugLoc());
1004      else {
1005        if (MDNode *IA = DV.getInlinedAt())
1006          Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1007        else
1008          Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1009      }
1010    }
1011    // If variable scope is not found then skip this variable.
1012    if (!Scope)
1013      continue;
1014
1015    Processed.insert(DV);
1016    assert(MInsn->isDebugValue() && "History must begin with debug value");
1017    DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1018    DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1019    if (!addCurrentFnArgument(MF, RegVar, Scope))
1020      addScopeVariable(Scope, RegVar);
1021    if (AbsVar)
1022      AbsVar->setMInsn(MInsn);
1023
1024    // Simple ranges that are fully coalesced.
1025    if (History.size() <= 1 || (History.size() == 2 &&
1026                                MInsn->isIdenticalTo(History.back()))) {
1027      RegVar->setMInsn(MInsn);
1028      continue;
1029    }
1030
1031    // handle multiple DBG_VALUE instructions describing one variable.
1032    RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1033
1034    for (SmallVectorImpl<const MachineInstr*>::const_iterator
1035           HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1036      const MachineInstr *Begin = *HI;
1037      assert(Begin->isDebugValue() && "Invalid History entry");
1038
1039      // Check if DBG_VALUE is truncating a range.
1040      if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1041          && !Begin->getOperand(0).getReg())
1042        continue;
1043
1044      // Compute the range for a register location.
1045      const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1046      const MCSymbol *SLabel = 0;
1047
1048      if (HI + 1 == HE)
1049        // If Begin is the last instruction in History then its value is valid
1050        // until the end of the function.
1051        SLabel = FunctionEndSym;
1052      else {
1053        const MachineInstr *End = HI[1];
1054        DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1055              << "\t" << *Begin << "\t" << *End << "\n");
1056        if (End->isDebugValue())
1057          SLabel = getLabelBeforeInsn(End);
1058        else {
1059          // End is a normal instruction clobbering the range.
1060          SLabel = getLabelAfterInsn(End);
1061          assert(SLabel && "Forgot label after clobber instruction");
1062          ++HI;
1063        }
1064      }
1065
1066      // The value is valid until the next DBG_VALUE or clobber.
1067      DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1068                                                    Begin));
1069    }
1070    DotDebugLocEntries.push_back(DotDebugLocEntry());
1071  }
1072
1073  // Collect info for variables that were optimized out.
1074  LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1075  DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1076  for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1077    DIVariable DV(Variables.getElement(i));
1078    if (!DV || !DV.Verify() || !Processed.insert(DV))
1079      continue;
1080    if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1081      addScopeVariable(Scope, new DbgVariable(DV, NULL));
1082  }
1083}
1084
1085/// getLabelBeforeInsn - Return Label preceding the instruction.
1086const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1087  MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1088  assert(Label && "Didn't insert label before instruction");
1089  return Label;
1090}
1091
1092/// getLabelAfterInsn - Return Label immediately following the instruction.
1093const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1094  return LabelsAfterInsn.lookup(MI);
1095}
1096
1097/// beginInstruction - Process beginning of an instruction.
1098void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1099  // Check if source location changes, but ignore DBG_VALUE locations.
1100  if (!MI->isDebugValue()) {
1101    DebugLoc DL = MI->getDebugLoc();
1102    if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1103      unsigned Flags = 0;
1104      PrevInstLoc = DL;
1105      if (DL == PrologEndLoc) {
1106        Flags |= DWARF2_FLAG_PROLOGUE_END;
1107        PrologEndLoc = DebugLoc();
1108      }
1109      if (PrologEndLoc.isUnknown())
1110        Flags |= DWARF2_FLAG_IS_STMT;
1111
1112      if (!DL.isUnknown()) {
1113        const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1114        recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1115      } else
1116        recordSourceLine(0, 0, 0, 0);
1117    }
1118  }
1119
1120  // Insert labels where requested.
1121  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1122    LabelsBeforeInsn.find(MI);
1123
1124  // No label needed.
1125  if (I == LabelsBeforeInsn.end())
1126    return;
1127
1128  // Label already assigned.
1129  if (I->second)
1130    return;
1131
1132  if (!PrevLabel) {
1133    PrevLabel = MMI->getContext().CreateTempSymbol();
1134    Asm->OutStreamer.EmitLabel(PrevLabel);
1135  }
1136  I->second = PrevLabel;
1137}
1138
1139/// endInstruction - Process end of an instruction.
1140void DwarfDebug::endInstruction(const MachineInstr *MI) {
1141  // Don't create a new label after DBG_VALUE instructions.
1142  // They don't generate code.
1143  if (!MI->isDebugValue())
1144    PrevLabel = 0;
1145
1146  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1147    LabelsAfterInsn.find(MI);
1148
1149  // No label needed.
1150  if (I == LabelsAfterInsn.end())
1151    return;
1152
1153  // Label already assigned.
1154  if (I->second)
1155    return;
1156
1157  // We need a label after this instruction.
1158  if (!PrevLabel) {
1159    PrevLabel = MMI->getContext().CreateTempSymbol();
1160    Asm->OutStreamer.EmitLabel(PrevLabel);
1161  }
1162  I->second = PrevLabel;
1163}
1164
1165/// identifyScopeMarkers() -
1166/// Each LexicalScope has first instruction and last instruction to mark
1167/// beginning and end of a scope respectively. Create an inverse map that list
1168/// scopes starts (and ends) with an instruction. One instruction may start (or
1169/// end) multiple scopes. Ignore scopes that are not reachable.
1170void DwarfDebug::identifyScopeMarkers() {
1171  SmallVector<LexicalScope *, 4> WorkList;
1172  WorkList.push_back(LScopes.getCurrentFunctionScope());
1173  while (!WorkList.empty()) {
1174    LexicalScope *S = WorkList.pop_back_val();
1175
1176    const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1177    if (!Children.empty())
1178      for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1179             SE = Children.end(); SI != SE; ++SI)
1180        WorkList.push_back(*SI);
1181
1182    if (S->isAbstractScope())
1183      continue;
1184
1185    const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1186    if (Ranges.empty())
1187      continue;
1188    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1189           RE = Ranges.end(); RI != RE; ++RI) {
1190      assert(RI->first && "InsnRange does not have first instruction!");
1191      assert(RI->second && "InsnRange does not have second instruction!");
1192      requestLabelBeforeInsn(RI->first);
1193      requestLabelAfterInsn(RI->second);
1194    }
1195  }
1196}
1197
1198/// getScopeNode - Get MDNode for DebugLoc's scope.
1199static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1200  if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1201    return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1202  return DL.getScope(Ctx);
1203}
1204
1205/// getFnDebugLoc - Walk up the scope chain of given debug loc and find
1206/// line number info for the function.
1207static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1208  const MDNode *Scope = getScopeNode(DL, Ctx);
1209  DISubprogram SP = getDISubprogram(Scope);
1210  if (SP.Verify()) {
1211    // Check for number of operands since the compatibility is
1212    // cheap here.
1213    if (SP->getNumOperands() > 19)
1214      return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1215    else
1216      return DebugLoc::get(SP.getLineNumber(), 0, SP);
1217  }
1218
1219  return DebugLoc();
1220}
1221
1222/// beginFunction - Gather pre-function debug information.  Assumes being
1223/// emitted immediately after the function entry point.
1224void DwarfDebug::beginFunction(const MachineFunction *MF) {
1225  if (!MMI->hasDebugInfo()) return;
1226  LScopes.initialize(*MF);
1227  if (LScopes.empty()) return;
1228  identifyScopeMarkers();
1229
1230  FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1231                                        Asm->getFunctionNumber());
1232  // Assumes in correct section after the entry point.
1233  Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1234
1235  assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1236
1237  const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1238  /// LiveUserVar - Map physreg numbers to the MDNode they contain.
1239  std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1240
1241  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1242       I != E; ++I) {
1243    bool AtBlockEntry = true;
1244    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1245         II != IE; ++II) {
1246      const MachineInstr *MI = II;
1247
1248      if (MI->isDebugValue()) {
1249        assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1250
1251        // Keep track of user variables.
1252        const MDNode *Var =
1253          MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1254
1255        // Variable is in a register, we need to check for clobbers.
1256        if (isDbgValueInDefinedReg(MI))
1257          LiveUserVar[MI->getOperand(0).getReg()] = Var;
1258
1259        // Check the history of this variable.
1260        SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1261        if (History.empty()) {
1262          UserVariables.push_back(Var);
1263          // The first mention of a function argument gets the FunctionBeginSym
1264          // label, so arguments are visible when breaking at function entry.
1265          DIVariable DV(Var);
1266          if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1267              DISubprogram(getDISubprogram(DV.getContext()))
1268                .describes(MF->getFunction()))
1269            LabelsBeforeInsn[MI] = FunctionBeginSym;
1270        } else {
1271          // We have seen this variable before. Try to coalesce DBG_VALUEs.
1272          const MachineInstr *Prev = History.back();
1273          if (Prev->isDebugValue()) {
1274            // Coalesce identical entries at the end of History.
1275            if (History.size() >= 2 &&
1276                Prev->isIdenticalTo(History[History.size() - 2])) {
1277              DEBUG(dbgs() << "Coalesce identical DBG_VALUE entries:\n"
1278                    << "\t" << *Prev
1279                    << "\t" << *History[History.size() - 2] << "\n");
1280              History.pop_back();
1281            }
1282
1283            // Terminate old register assignments that don't reach MI;
1284            MachineFunction::const_iterator PrevMBB = Prev->getParent();
1285            if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1286                isDbgValueInDefinedReg(Prev)) {
1287              // Previous register assignment needs to terminate at the end of
1288              // its basic block.
1289              MachineBasicBlock::const_iterator LastMI =
1290                PrevMBB->getLastNonDebugInstr();
1291              if (LastMI == PrevMBB->end()) {
1292                // Drop DBG_VALUE for empty range.
1293                DEBUG(dbgs() << "Drop DBG_VALUE for empty range:\n"
1294                      << "\t" << *Prev << "\n");
1295                History.pop_back();
1296              }
1297              else {
1298                // Terminate after LastMI.
1299                History.push_back(LastMI);
1300              }
1301            }
1302          }
1303        }
1304        History.push_back(MI);
1305      } else {
1306        // Not a DBG_VALUE instruction.
1307        if (!MI->isLabel())
1308          AtBlockEntry = false;
1309
1310        // First known non DBG_VALUE location marks beginning of function
1311        // body.
1312        if (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown())
1313          PrologEndLoc = MI->getDebugLoc();
1314
1315        // Check if the instruction clobbers any registers with debug vars.
1316        for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1317               MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1318          if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1319            continue;
1320          for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1321               AI.isValid(); ++AI) {
1322            unsigned Reg = *AI;
1323            const MDNode *Var = LiveUserVar[Reg];
1324            if (!Var)
1325              continue;
1326            // Reg is now clobbered.
1327            LiveUserVar[Reg] = 0;
1328
1329            // Was MD last defined by a DBG_VALUE referring to Reg?
1330            DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1331            if (HistI == DbgValues.end())
1332              continue;
1333            SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1334            if (History.empty())
1335              continue;
1336            const MachineInstr *Prev = History.back();
1337            // Sanity-check: Register assignments are terminated at the end of
1338            // their block.
1339            if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1340              continue;
1341            // Is the variable still in Reg?
1342            if (!isDbgValueInDefinedReg(Prev) ||
1343                Prev->getOperand(0).getReg() != Reg)
1344              continue;
1345            // Var is clobbered. Make sure the next instruction gets a label.
1346            History.push_back(MI);
1347          }
1348        }
1349      }
1350    }
1351  }
1352
1353  for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1354       I != E; ++I) {
1355    SmallVectorImpl<const MachineInstr*> &History = I->second;
1356    if (History.empty())
1357      continue;
1358
1359    // Make sure the final register assignments are terminated.
1360    const MachineInstr *Prev = History.back();
1361    if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1362      const MachineBasicBlock *PrevMBB = Prev->getParent();
1363      MachineBasicBlock::const_iterator LastMI =
1364        PrevMBB->getLastNonDebugInstr();
1365      if (LastMI == PrevMBB->end())
1366        // Drop DBG_VALUE for empty range.
1367        History.pop_back();
1368      else {
1369        // Terminate after LastMI.
1370        History.push_back(LastMI);
1371      }
1372    }
1373    // Request labels for the full history.
1374    for (unsigned i = 0, e = History.size(); i != e; ++i) {
1375      const MachineInstr *MI = History[i];
1376      if (MI->isDebugValue())
1377        requestLabelBeforeInsn(MI);
1378      else
1379        requestLabelAfterInsn(MI);
1380    }
1381  }
1382
1383  PrevInstLoc = DebugLoc();
1384  PrevLabel = FunctionBeginSym;
1385
1386  // Record beginning of function.
1387  if (!PrologEndLoc.isUnknown()) {
1388    DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1389                                       MF->getFunction()->getContext());
1390    recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1391                     FnStartDL.getScope(MF->getFunction()->getContext()),
1392                     DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0);
1393  }
1394}
1395
1396void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1397//  SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1398  ScopeVariables[LS].push_back(Var);
1399//  Vars.push_back(Var);
1400}
1401
1402/// endFunction - Gather and emit post-function debug information.
1403///
1404void DwarfDebug::endFunction(const MachineFunction *MF) {
1405  if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1406
1407  // Define end label for subprogram.
1408  FunctionEndSym = Asm->GetTempSymbol("func_end",
1409                                      Asm->getFunctionNumber());
1410  // Assumes in correct section after the entry point.
1411  Asm->OutStreamer.EmitLabel(FunctionEndSym);
1412
1413  SmallPtrSet<const MDNode *, 16> ProcessedVars;
1414  collectVariableInfo(MF, ProcessedVars);
1415
1416  LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1417  CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1418  assert(TheCU && "Unable to find compile unit!");
1419
1420  // Construct abstract scopes.
1421  ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1422  for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1423    LexicalScope *AScope = AList[i];
1424    DISubprogram SP(AScope->getScopeNode());
1425    if (SP.Verify()) {
1426      // Collect info for variables that were optimized out.
1427      DIArray Variables = SP.getVariables();
1428      for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1429        DIVariable DV(Variables.getElement(i));
1430        if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1431          continue;
1432        // Check that DbgVariable for DV wasn't created earlier, when
1433        // findAbstractVariable() was called for inlined instance of DV.
1434        LLVMContext &Ctx = DV->getContext();
1435        DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1436        if (AbstractVariables.lookup(CleanDV))
1437          continue;
1438        if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1439          addScopeVariable(Scope, new DbgVariable(DV, NULL));
1440      }
1441    }
1442    if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1443      constructScopeDIE(TheCU, AScope);
1444  }
1445
1446  DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1447
1448  if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1449    TheCU->addUInt(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr,
1450                   dwarf::DW_FORM_flag, 1);
1451
1452  DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1453                                               MMI->getFrameMoves()));
1454
1455  // Clear debug info
1456  for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1457         I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1458    DeleteContainerPointers(I->second);
1459  ScopeVariables.clear();
1460  DeleteContainerPointers(CurrentFnArguments);
1461  UserVariables.clear();
1462  DbgValues.clear();
1463  AbstractVariables.clear();
1464  LabelsBeforeInsn.clear();
1465  LabelsAfterInsn.clear();
1466  PrevLabel = NULL;
1467}
1468
1469/// recordSourceLine - Register a source line with debug info. Returns the
1470/// unique label that was emitted and which provides correspondence to
1471/// the source line list.
1472void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1473                                  unsigned Flags) {
1474  StringRef Fn;
1475  StringRef Dir;
1476  unsigned Src = 1;
1477  if (S) {
1478    DIDescriptor Scope(S);
1479
1480    if (Scope.isCompileUnit()) {
1481      DICompileUnit CU(S);
1482      Fn = CU.getFilename();
1483      Dir = CU.getDirectory();
1484    } else if (Scope.isFile()) {
1485      DIFile F(S);
1486      Fn = F.getFilename();
1487      Dir = F.getDirectory();
1488    } else if (Scope.isSubprogram()) {
1489      DISubprogram SP(S);
1490      Fn = SP.getFilename();
1491      Dir = SP.getDirectory();
1492    } else if (Scope.isLexicalBlockFile()) {
1493      DILexicalBlockFile DBF(S);
1494      Fn = DBF.getFilename();
1495      Dir = DBF.getDirectory();
1496    } else if (Scope.isLexicalBlock()) {
1497      DILexicalBlock DB(S);
1498      Fn = DB.getFilename();
1499      Dir = DB.getDirectory();
1500    } else
1501      llvm_unreachable("Unexpected scope info");
1502
1503    Src = GetOrCreateSourceID(Fn, Dir);
1504  }
1505  Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1506}
1507
1508//===----------------------------------------------------------------------===//
1509// Emit Methods
1510//===----------------------------------------------------------------------===//
1511
1512/// computeSizeAndOffset - Compute the size and offset of a DIE.
1513///
1514unsigned
1515DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
1516  // Get the children.
1517  const std::vector<DIE *> &Children = Die->getChildren();
1518
1519  // Record the abbreviation.
1520  assignAbbrevNumber(Die->getAbbrev());
1521
1522  // Get the abbreviation for this DIE.
1523  unsigned AbbrevNumber = Die->getAbbrevNumber();
1524  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1525
1526  // Set DIE offset
1527  Die->setOffset(Offset);
1528
1529  // Start the size with the size of abbreviation code.
1530  Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1531
1532  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1533  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1534
1535  // Size the DIE attribute values.
1536  for (unsigned i = 0, N = Values.size(); i < N; ++i)
1537    // Size attribute value.
1538    Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1539
1540  // Size the DIE children if any.
1541  if (!Children.empty()) {
1542    assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1543           "Children flag not set");
1544
1545    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1546      Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
1547
1548    // End of children marker.
1549    Offset += sizeof(int8_t);
1550  }
1551
1552  Die->setSize(Offset - Die->getOffset());
1553  return Offset;
1554}
1555
1556/// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
1557///
1558void DwarfDebug::computeSizeAndOffsets() {
1559  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1560         E = CUMap.end(); I != E; ++I) {
1561    // Compute size of compile unit header.
1562    unsigned Offset =
1563      sizeof(int32_t) + // Length of Compilation Unit Info
1564      sizeof(int16_t) + // DWARF version number
1565      sizeof(int32_t) + // Offset Into Abbrev. Section
1566      sizeof(int8_t);   // Pointer Size (in bytes)
1567    computeSizeAndOffset(I->second->getCUDie(), Offset, true);
1568  }
1569}
1570
1571/// EmitSectionLabels - Emit initial Dwarf sections with a label at
1572/// the start of each one.
1573void DwarfDebug::EmitSectionLabels() {
1574  const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1575
1576  // Dwarf sections base addresses.
1577  DwarfInfoSectionSym =
1578    EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1579  DwarfAbbrevSectionSym =
1580    EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1581  EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
1582
1583  if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1584    EmitSectionSym(Asm, MacroInfo);
1585
1586  EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1587  EmitSectionSym(Asm, TLOF.getDwarfLocSection());
1588  EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1589  DwarfStrSectionSym =
1590    EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
1591  DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1592                                             "debug_range");
1593
1594  DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
1595                                           "section_debug_loc");
1596
1597  TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1598  EmitSectionSym(Asm, TLOF.getDataSection());
1599}
1600
1601/// emitDIE - Recursively emits a debug information entry.
1602///
1603void DwarfDebug::emitDIE(DIE *Die) {
1604  // Get the abbreviation for this DIE.
1605  unsigned AbbrevNumber = Die->getAbbrevNumber();
1606  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1607
1608  // Emit the code (index) for the abbreviation.
1609  if (Asm->isVerbose())
1610    Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1611                                Twine::utohexstr(Die->getOffset()) + ":0x" +
1612                                Twine::utohexstr(Die->getSize()) + " " +
1613                                dwarf::TagString(Abbrev->getTag()));
1614  Asm->EmitULEB128(AbbrevNumber);
1615
1616  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1617  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1618
1619  // Emit the DIE attribute values.
1620  for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1621    unsigned Attr = AbbrevData[i].getAttribute();
1622    unsigned Form = AbbrevData[i].getForm();
1623    assert(Form && "Too many attributes for DIE (check abbreviation)");
1624
1625    if (Asm->isVerbose())
1626      Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1627
1628    switch (Attr) {
1629    case dwarf::DW_AT_abstract_origin: {
1630      DIEEntry *E = cast<DIEEntry>(Values[i]);
1631      DIE *Origin = E->getEntry();
1632      unsigned Addr = Origin->getOffset();
1633      Asm->EmitInt32(Addr);
1634      break;
1635    }
1636    case dwarf::DW_AT_ranges: {
1637      // DW_AT_range Value encodes offset in debug_range section.
1638      DIEInteger *V = cast<DIEInteger>(Values[i]);
1639
1640      if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
1641        Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1642                                 V->getValue(),
1643                                 4);
1644      } else {
1645        Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1646                                       V->getValue(),
1647                                       DwarfDebugRangeSectionSym,
1648                                       4);
1649      }
1650      break;
1651    }
1652    case dwarf::DW_AT_location: {
1653      if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
1654        if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
1655          Asm->EmitLabelReference(L->getValue(), 4);
1656        else
1657          Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1658      } else {
1659        Values[i]->EmitValue(Asm, Form);
1660      }
1661      break;
1662    }
1663    case dwarf::DW_AT_accessibility: {
1664      if (Asm->isVerbose()) {
1665        DIEInteger *V = cast<DIEInteger>(Values[i]);
1666        Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1667      }
1668      Values[i]->EmitValue(Asm, Form);
1669      break;
1670    }
1671    default:
1672      // Emit an attribute using the defined form.
1673      Values[i]->EmitValue(Asm, Form);
1674      break;
1675    }
1676  }
1677
1678  // Emit the DIE children if any.
1679  if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1680    const std::vector<DIE *> &Children = Die->getChildren();
1681
1682    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1683      emitDIE(Children[j]);
1684
1685    if (Asm->isVerbose())
1686      Asm->OutStreamer.AddComment("End Of Children Mark");
1687    Asm->EmitInt8(0);
1688  }
1689}
1690
1691/// emitDebugInfo - Emit the debug info section.
1692///
1693void DwarfDebug::emitDebugInfo() {
1694  // Start debug info section.
1695  Asm->OutStreamer.SwitchSection(
1696                            Asm->getObjFileLowering().getDwarfInfoSection());
1697  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1698         E = CUMap.end(); I != E; ++I) {
1699    CompileUnit *TheCU = I->second;
1700    DIE *Die = TheCU->getCUDie();
1701
1702    // Emit the compile units header.
1703    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
1704                                                  TheCU->getID()));
1705
1706    // Emit size of content not including length itself
1707    unsigned ContentSize = Die->getSize() +
1708      sizeof(int16_t) + // DWARF version number
1709      sizeof(int32_t) + // Offset Into Abbrev. Section
1710      sizeof(int8_t);   // Pointer Size (in bytes)
1711
1712    Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1713    Asm->EmitInt32(ContentSize);
1714    Asm->OutStreamer.AddComment("DWARF version number");
1715    Asm->EmitInt16(dwarf::DWARF_VERSION);
1716    Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1717    Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
1718                           DwarfAbbrevSectionSym);
1719    Asm->OutStreamer.AddComment("Address Size (in bytes)");
1720    Asm->EmitInt8(Asm->getTargetData().getPointerSize());
1721
1722    emitDIE(Die);
1723    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
1724  }
1725}
1726
1727/// emitAbbreviations - Emit the abbreviation section.
1728///
1729void DwarfDebug::emitAbbreviations() const {
1730  // Check to see if it is worth the effort.
1731  if (!Abbreviations.empty()) {
1732    // Start the debug abbrev section.
1733    Asm->OutStreamer.SwitchSection(
1734                            Asm->getObjFileLowering().getDwarfAbbrevSection());
1735
1736    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
1737
1738    // For each abbrevation.
1739    for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
1740      // Get abbreviation data
1741      const DIEAbbrev *Abbrev = Abbreviations[i];
1742
1743      // Emit the abbrevations code (base 1 index.)
1744      Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1745
1746      // Emit the abbreviations data.
1747      Abbrev->Emit(Asm);
1748    }
1749
1750    // Mark end of abbreviations.
1751    Asm->EmitULEB128(0, "EOM(3)");
1752
1753    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
1754  }
1755}
1756
1757/// emitEndOfLineMatrix - Emit the last address of the section and the end of
1758/// the line matrix.
1759///
1760void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1761  // Define last address of section.
1762  Asm->OutStreamer.AddComment("Extended Op");
1763  Asm->EmitInt8(0);
1764
1765  Asm->OutStreamer.AddComment("Op size");
1766  Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
1767  Asm->OutStreamer.AddComment("DW_LNE_set_address");
1768  Asm->EmitInt8(dwarf::DW_LNE_set_address);
1769
1770  Asm->OutStreamer.AddComment("Section end label");
1771
1772  Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1773                                   Asm->getTargetData().getPointerSize(),
1774                                   0/*AddrSpace*/);
1775
1776  // Mark end of matrix.
1777  Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1778  Asm->EmitInt8(0);
1779  Asm->EmitInt8(1);
1780  Asm->EmitInt8(1);
1781}
1782
1783/// emitAccelNames - Emit visible names into a hashed accelerator table
1784/// section.
1785void DwarfDebug::emitAccelNames() {
1786  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1787                                           dwarf::DW_FORM_data4));
1788  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1789         E = CUMap.end(); I != E; ++I) {
1790    CompileUnit *TheCU = I->second;
1791    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
1792    for (StringMap<std::vector<DIE*> >::const_iterator
1793           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1794      const char *Name = GI->getKeyData();
1795      const std::vector<DIE *> &Entities = GI->second;
1796      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1797             DE = Entities.end(); DI != DE; ++DI)
1798        AT.AddName(Name, (*DI));
1799    }
1800  }
1801
1802  AT.FinalizeTable(Asm, "Names");
1803  Asm->OutStreamer.SwitchSection(
1804    Asm->getObjFileLowering().getDwarfAccelNamesSection());
1805  MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
1806  Asm->OutStreamer.EmitLabel(SectionBegin);
1807
1808  // Emit the full data.
1809  AT.Emit(Asm, SectionBegin, this);
1810}
1811
1812/// emitAccelObjC - Emit objective C classes and categories into a hashed
1813/// accelerator table section.
1814void DwarfDebug::emitAccelObjC() {
1815  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1816                                           dwarf::DW_FORM_data4));
1817  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1818         E = CUMap.end(); I != E; ++I) {
1819    CompileUnit *TheCU = I->second;
1820    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
1821    for (StringMap<std::vector<DIE*> >::const_iterator
1822           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1823      const char *Name = GI->getKeyData();
1824      const std::vector<DIE *> &Entities = GI->second;
1825      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1826             DE = Entities.end(); DI != DE; ++DI)
1827        AT.AddName(Name, (*DI));
1828    }
1829  }
1830
1831  AT.FinalizeTable(Asm, "ObjC");
1832  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1833                                 .getDwarfAccelObjCSection());
1834  MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
1835  Asm->OutStreamer.EmitLabel(SectionBegin);
1836
1837  // Emit the full data.
1838  AT.Emit(Asm, SectionBegin, this);
1839}
1840
1841/// emitAccelNamespace - Emit namespace dies into a hashed accelerator
1842/// table.
1843void DwarfDebug::emitAccelNamespaces() {
1844  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1845                                           dwarf::DW_FORM_data4));
1846  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1847         E = CUMap.end(); I != E; ++I) {
1848    CompileUnit *TheCU = I->second;
1849    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
1850    for (StringMap<std::vector<DIE*> >::const_iterator
1851           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1852      const char *Name = GI->getKeyData();
1853      const std::vector<DIE *> &Entities = GI->second;
1854      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1855             DE = Entities.end(); DI != DE; ++DI)
1856        AT.AddName(Name, (*DI));
1857    }
1858  }
1859
1860  AT.FinalizeTable(Asm, "namespac");
1861  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1862                                 .getDwarfAccelNamespaceSection());
1863  MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
1864  Asm->OutStreamer.EmitLabel(SectionBegin);
1865
1866  // Emit the full data.
1867  AT.Emit(Asm, SectionBegin, this);
1868}
1869
1870/// emitAccelTypes() - Emit type dies into a hashed accelerator table.
1871void DwarfDebug::emitAccelTypes() {
1872  std::vector<DwarfAccelTable::Atom> Atoms;
1873  Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1874                                        dwarf::DW_FORM_data4));
1875  Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
1876                                        dwarf::DW_FORM_data2));
1877  Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
1878                                        dwarf::DW_FORM_data1));
1879  DwarfAccelTable AT(Atoms);
1880  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1881         E = CUMap.end(); I != E; ++I) {
1882    CompileUnit *TheCU = I->second;
1883    const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
1884      = TheCU->getAccelTypes();
1885    for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
1886           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1887      const char *Name = GI->getKeyData();
1888      const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
1889      for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
1890             = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
1891        AT.AddName(Name, (*DI).first, (*DI).second);
1892    }
1893  }
1894
1895  AT.FinalizeTable(Asm, "types");
1896  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1897                                 .getDwarfAccelTypesSection());
1898  MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
1899  Asm->OutStreamer.EmitLabel(SectionBegin);
1900
1901  // Emit the full data.
1902  AT.Emit(Asm, SectionBegin, this);
1903}
1904
1905void DwarfDebug::emitDebugPubTypes() {
1906  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1907         E = CUMap.end(); I != E; ++I) {
1908    CompileUnit *TheCU = I->second;
1909    // Start the dwarf pubtypes section.
1910    Asm->OutStreamer.SwitchSection(
1911      Asm->getObjFileLowering().getDwarfPubTypesSection());
1912    Asm->OutStreamer.AddComment("Length of Public Types Info");
1913    Asm->EmitLabelDifference(
1914      Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
1915      Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
1916
1917    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
1918                                                  TheCU->getID()));
1919
1920    if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
1921    Asm->EmitInt16(dwarf::DWARF_VERSION);
1922
1923    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1924    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1925                           DwarfInfoSectionSym);
1926
1927    Asm->OutStreamer.AddComment("Compilation Unit Length");
1928    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1929                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
1930                             4);
1931
1932    const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
1933    for (StringMap<DIE*>::const_iterator
1934           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1935      const char *Name = GI->getKeyData();
1936      DIE *Entity = GI->second;
1937
1938      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
1939      Asm->EmitInt32(Entity->getOffset());
1940
1941      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
1942      // Emit the name with a terminating null byte.
1943      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
1944    }
1945
1946    Asm->OutStreamer.AddComment("End Mark");
1947    Asm->EmitInt32(0);
1948    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
1949                                                  TheCU->getID()));
1950  }
1951}
1952
1953/// emitDebugStr - Emit visible names into a debug str section.
1954///
1955void DwarfDebug::emitDebugStr() {
1956  // Check to see if it is worth the effort.
1957  if (StringPool.empty()) return;
1958
1959  // Start the dwarf str section.
1960  Asm->OutStreamer.SwitchSection(
1961                                Asm->getObjFileLowering().getDwarfStrSection());
1962
1963  // Get all of the string pool entries and put them in an array by their ID so
1964  // we can sort them.
1965  SmallVector<std::pair<unsigned,
1966      StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
1967
1968  for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
1969       I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
1970    Entries.push_back(std::make_pair(I->second.second, &*I));
1971
1972  array_pod_sort(Entries.begin(), Entries.end());
1973
1974  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
1975    // Emit a label for reference from debug information entries.
1976    Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
1977
1978    // Emit the string itself with a terminating null byte.
1979    Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
1980                                         Entries[i].second->getKeyLength()+1),
1981                               0/*addrspace*/);
1982  }
1983}
1984
1985/// emitDebugLoc - Emit visible names into a debug loc section.
1986///
1987void DwarfDebug::emitDebugLoc() {
1988  if (DotDebugLocEntries.empty())
1989    return;
1990
1991  for (SmallVector<DotDebugLocEntry, 4>::iterator
1992         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1993       I != E; ++I) {
1994    DotDebugLocEntry &Entry = *I;
1995    if (I + 1 != DotDebugLocEntries.end())
1996      Entry.Merge(I+1);
1997  }
1998
1999  // Start the dwarf loc section.
2000  Asm->OutStreamer.SwitchSection(
2001    Asm->getObjFileLowering().getDwarfLocSection());
2002  unsigned char Size = Asm->getTargetData().getPointerSize();
2003  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2004  unsigned index = 1;
2005  for (SmallVector<DotDebugLocEntry, 4>::iterator
2006         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2007       I != E; ++I, ++index) {
2008    DotDebugLocEntry &Entry = *I;
2009    if (Entry.isMerged()) continue;
2010    if (Entry.isEmpty()) {
2011      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2012      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2013      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2014    } else {
2015      Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
2016      Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
2017      DIVariable DV(Entry.Variable);
2018      Asm->OutStreamer.AddComment("Loc expr size");
2019      MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2020      MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2021      Asm->EmitLabelDifference(end, begin, 2);
2022      Asm->OutStreamer.EmitLabel(begin);
2023      if (Entry.isInt()) {
2024        DIBasicType BTy(DV.getType());
2025        if (BTy.Verify() &&
2026            (BTy.getEncoding()  == dwarf::DW_ATE_signed
2027             || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2028          Asm->OutStreamer.AddComment("DW_OP_consts");
2029          Asm->EmitInt8(dwarf::DW_OP_consts);
2030          Asm->EmitSLEB128(Entry.getInt());
2031        } else {
2032          Asm->OutStreamer.AddComment("DW_OP_constu");
2033          Asm->EmitInt8(dwarf::DW_OP_constu);
2034          Asm->EmitULEB128(Entry.getInt());
2035        }
2036      } else if (Entry.isLocation()) {
2037        if (!DV.hasComplexAddress())
2038          // Regular entry.
2039          Asm->EmitDwarfRegOp(Entry.Loc);
2040        else {
2041          // Complex address entry.
2042          unsigned N = DV.getNumAddrElements();
2043          unsigned i = 0;
2044          if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2045            if (Entry.Loc.getOffset()) {
2046              i = 2;
2047              Asm->EmitDwarfRegOp(Entry.Loc);
2048              Asm->OutStreamer.AddComment("DW_OP_deref");
2049              Asm->EmitInt8(dwarf::DW_OP_deref);
2050              Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2051              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2052              Asm->EmitSLEB128(DV.getAddrElement(1));
2053            } else {
2054              // If first address element is OpPlus then emit
2055              // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2056              MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2057              Asm->EmitDwarfRegOp(Loc);
2058              i = 2;
2059            }
2060          } else {
2061            Asm->EmitDwarfRegOp(Entry.Loc);
2062          }
2063
2064          // Emit remaining complex address elements.
2065          for (; i < N; ++i) {
2066            uint64_t Element = DV.getAddrElement(i);
2067            if (Element == DIBuilder::OpPlus) {
2068              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2069              Asm->EmitULEB128(DV.getAddrElement(++i));
2070            } else if (Element == DIBuilder::OpDeref) {
2071              if (!Entry.Loc.isReg())
2072                Asm->EmitInt8(dwarf::DW_OP_deref);
2073            } else
2074              llvm_unreachable("unknown Opcode found in complex address");
2075          }
2076        }
2077      }
2078      // else ... ignore constant fp. There is not any good way to
2079      // to represent them here in dwarf.
2080      Asm->OutStreamer.EmitLabel(end);
2081    }
2082  }
2083}
2084
2085/// EmitDebugARanges - Emit visible names into a debug aranges section.
2086///
2087void DwarfDebug::EmitDebugARanges() {
2088  // Start the dwarf aranges section.
2089  Asm->OutStreamer.SwitchSection(
2090                          Asm->getObjFileLowering().getDwarfARangesSection());
2091}
2092
2093/// emitDebugRanges - Emit visible names into a debug ranges section.
2094///
2095void DwarfDebug::emitDebugRanges() {
2096  // Start the dwarf ranges section.
2097  Asm->OutStreamer.SwitchSection(
2098    Asm->getObjFileLowering().getDwarfRangesSection());
2099  unsigned char Size = Asm->getTargetData().getPointerSize();
2100  for (SmallVector<const MCSymbol *, 8>::iterator
2101         I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2102       I != E; ++I) {
2103    if (*I)
2104      Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2105    else
2106      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2107  }
2108}
2109
2110/// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2111///
2112void DwarfDebug::emitDebugMacInfo() {
2113  if (const MCSection *LineInfo =
2114      Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2115    // Start the dwarf macinfo section.
2116    Asm->OutStreamer.SwitchSection(LineInfo);
2117  }
2118}
2119
2120/// emitDebugInlineInfo - Emit inline info using following format.
2121/// Section Header:
2122/// 1. length of section
2123/// 2. Dwarf version number
2124/// 3. address size.
2125///
2126/// Entries (one "entry" for each function that was inlined):
2127///
2128/// 1. offset into __debug_str section for MIPS linkage name, if exists;
2129///   otherwise offset into __debug_str for regular function name.
2130/// 2. offset into __debug_str section for regular function name.
2131/// 3. an unsigned LEB128 number indicating the number of distinct inlining
2132/// instances for the function.
2133///
2134/// The rest of the entry consists of a {die_offset, low_pc} pair for each
2135/// inlined instance; the die_offset points to the inlined_subroutine die in the
2136/// __debug_info section, and the low_pc is the starting address for the
2137/// inlining instance.
2138void DwarfDebug::emitDebugInlineInfo() {
2139  if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2140    return;
2141
2142  if (!FirstCU)
2143    return;
2144
2145  Asm->OutStreamer.SwitchSection(
2146                        Asm->getObjFileLowering().getDwarfDebugInlineSection());
2147
2148  Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2149  Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2150                           Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2151
2152  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2153
2154  Asm->OutStreamer.AddComment("Dwarf Version");
2155  Asm->EmitInt16(dwarf::DWARF_VERSION);
2156  Asm->OutStreamer.AddComment("Address Size (in bytes)");
2157  Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2158
2159  for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2160         E = InlinedSPNodes.end(); I != E; ++I) {
2161
2162    const MDNode *Node = *I;
2163    DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2164      = InlineInfo.find(Node);
2165    SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2166    DISubprogram SP(Node);
2167    StringRef LName = SP.getLinkageName();
2168    StringRef Name = SP.getName();
2169
2170    Asm->OutStreamer.AddComment("MIPS linkage name");
2171    if (LName.empty())
2172      Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2173    else
2174      Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2175                             DwarfStrSectionSym);
2176
2177    Asm->OutStreamer.AddComment("Function name");
2178    Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2179    Asm->EmitULEB128(Labels.size(), "Inline count");
2180
2181    for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2182           LE = Labels.end(); LI != LE; ++LI) {
2183      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2184      Asm->EmitInt32(LI->second->getOffset());
2185
2186      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2187      Asm->OutStreamer.EmitSymbolValue(LI->first,
2188                                       Asm->getTargetData().getPointerSize(),0);
2189    }
2190  }
2191
2192  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2193}
2194