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