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