DwarfDebug.cpp revision 3655a21b15e135927826eeb1917b42299ac95d67
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.
468void 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}
511
512/// getCompileUnit - Get CompileUnit DIE.
513CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
514  assert (N && "Invalid DwarfDebug::getCompileUnit argument!");
515  DIDescriptor D(N);
516  const MDNode *CUNode = NULL;
517  if (D.isCompileUnit())
518    CUNode = N;
519  else if (D.isSubprogram())
520    CUNode = DISubprogram(N).getCompileUnit();
521  else if (D.isType())
522    CUNode = DIType(N).getCompileUnit();
523  else if (D.isGlobalVariable())
524    CUNode = DIGlobalVariable(N).getCompileUnit();
525  else if (D.isVariable())
526    CUNode = DIVariable(N).getCompileUnit();
527  else if (D.isNameSpace())
528    CUNode = DINameSpace(N).getCompileUnit();
529  else if (D.isFile())
530    CUNode = DIFile(N).getCompileUnit();
531  else
532    return FirstCU;
533
534  DenseMap<const MDNode *, CompileUnit *>::const_iterator I
535    = CUMap.find(CUNode);
536  if (I == CUMap.end())
537    return FirstCU;
538  return I->second;
539}
540
541/// constructGlobalVariableDIE - Construct global variable DIE.
542void DwarfDebug::constructGlobalVariableDIE(CompileUnit *TheCU,
543                                            const MDNode *N) {
544  DIGlobalVariable GV(N);
545
546  // If debug information is malformed then ignore it.
547  if (GV.Verify() == false)
548    return;
549
550  TheCU->createGlobalVariableDIE(N);
551  return;
552}
553
554/// construct SubprogramDIE - Construct subprogram DIE.
555void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
556                                        const MDNode *N) {
557  DISubprogram SP(N);
558  if (!SP.isDefinition())
559    // This is a method declaration which will be handled while constructing
560    // class type.
561    return;
562
563  DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
564
565  // Add to map.
566  TheCU->insertDIE(N, SubprogramDie);
567
568  // Add to context owner.
569  TheCU->addToContextOwner(SubprogramDie, SP.getContext());
570
571  // Expose as global.
572  TheCU->addGlobal(SP.getName(), SubprogramDie);
573
574  return;
575}
576
577/// beginModule - Emit all Dwarf sections that should come prior to the
578/// content. Create global DIEs and emit initial debug info sections.
579/// This is invoked by the target AsmPrinter.
580void DwarfDebug::beginModule(Module *M) {
581  if (DisableDebugInfoPrinting)
582    return;
583
584  // If module has named metadata anchors then use them, otherwise scan the
585  // module using debug info finder to collect debug info.
586  NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
587  if (CU_Nodes) {
588
589    NamedMDNode *GV_Nodes = M->getNamedMetadata("llvm.dbg.gv");
590    NamedMDNode *SP_Nodes = M->getNamedMetadata("llvm.dbg.sp");
591    if (!GV_Nodes && !SP_Nodes)
592      // If there are not any global variables or any functions then
593      // there is not any debug info in this module.
594      return;
595
596    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)
597      constructCompileUnit(CU_Nodes->getOperand(i));
598
599    if (GV_Nodes)
600      for (unsigned i = 0, e = GV_Nodes->getNumOperands(); i != e; ++i) {
601        const MDNode *N = GV_Nodes->getOperand(i);
602        constructGlobalVariableDIE(getCompileUnit(N), N);
603      }
604
605    if (SP_Nodes)
606      for (unsigned i = 0, e = SP_Nodes->getNumOperands(); i != e; ++i) {
607        const MDNode *N = SP_Nodes->getOperand(i);
608        constructSubprogramDIE(getCompileUnit(N), N);
609      }
610
611  } else {
612
613    DebugInfoFinder DbgFinder;
614    DbgFinder.processModule(*M);
615
616    bool HasDebugInfo = false;
617    // Scan all the compile-units to see if there are any marked as the main
618    // unit. If not, we do not generate debug info.
619    for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
620           E = DbgFinder.compile_unit_end(); I != E; ++I) {
621      if (DICompileUnit(*I).isMain()) {
622        HasDebugInfo = true;
623        break;
624      }
625    }
626    if (!HasDebugInfo) return;
627
628    // Create all the compile unit DIEs.
629    for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
630           E = DbgFinder.compile_unit_end(); I != E; ++I)
631      constructCompileUnit(*I);
632
633    // Create DIEs for each global variable.
634    for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
635           E = DbgFinder.global_variable_end(); I != E; ++I) {
636      const MDNode *N = *I;
637      if (DIGlobalVariable(N).getVersion() <= LLVMDebugVersion9)
638        constructGlobalVariableDIE(getCompileUnit(N), N);
639    }
640
641    // Create DIEs for each subprogram.
642    for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
643           E = DbgFinder.subprogram_end(); I != E; ++I) {
644      const MDNode *N = *I;
645      constructSubprogramDIE(getCompileUnit(N), N);
646    }
647  }
648
649  // Tell MMI that we have debug info.
650  MMI->setDebugInfoAvailability(true);
651
652  // Emit initial sections.
653  EmitSectionLabels();
654
655  //getOrCreateTypeDIE
656  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
657    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
658      DIType Ty(NMD->getOperand(i));
659      getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
660    }
661
662  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
663    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
664      DIType Ty(NMD->getOperand(i));
665      getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
666    }
667
668  // Prime section data.
669  SectionMap.insert(Asm->getObjFileLowering().getTextSection());
670}
671
672/// endModule - Emit all Dwarf sections that should come after the content.
673///
674void DwarfDebug::endModule() {
675  if (!FirstCU) return;
676  const Module *M = MMI->getModule();
677  DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
678  if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
679    for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
680      if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
681      DISubprogram SP(AllSPs->getOperand(SI));
682      if (!SP.Verify()) continue;
683
684      // Collect info for variables that were optimized out.
685      if (!SP.isDefinition()) continue;
686      StringRef FName = SP.getLinkageName();
687      if (FName.empty())
688        FName = SP.getName();
689      NamedMDNode *NMD = getFnSpecificMDNode(*(MMI->getModule()), FName);
690      if (!NMD) continue;
691      unsigned E = NMD->getNumOperands();
692      if (!E) continue;
693      LexicalScope *Scope = new LexicalScope(NULL, DIDescriptor(SP), NULL,
694                                             false);
695      DeadFnScopeMap[SP] = Scope;
696      SmallVector<DbgVariable, 8> Variables;
697      for (unsigned I = 0; I != E; ++I) {
698        DIVariable DV(NMD->getOperand(I));
699        if (!DV.Verify()) continue;
700        Variables.push_back(DbgVariable(DV, NULL));
701      }
702
703      // Construct subprogram DIE and add variables DIEs.
704      CompileUnit *SPCU = getCompileUnit(SP);
705      constructSubprogramDIE(SPCU, SP);
706      DIE *ScopeDIE = SPCU->getDIE(SP);
707      for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
708        if (DIE *VariableDIE =
709            SPCU->constructVariableDIE(&Variables[i], Scope->isAbstractScope()))
710          ScopeDIE->addChild(VariableDIE);
711      }
712    }
713  }
714
715  // Attach DW_AT_inline attribute with inlined subprogram DIEs.
716  for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
717         AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
718    DIE *ISP = *AI;
719    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
720  }
721
722  // Emit DW_AT_containing_type attribute to connect types with their
723  // vtable holding type.
724  for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
725         CUE = CUMap.end(); CUI != CUE; ++CUI) {
726    CompileUnit *TheCU = CUI->second;
727    TheCU->constructContainingTypeDIEs();
728  }
729
730  // Standard sections final addresses.
731  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
732  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
733  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
734  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
735
736  // End text sections.
737  for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
738    Asm->OutStreamer.SwitchSection(SectionMap[i]);
739    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
740  }
741
742  // Compute DIE offsets and sizes.
743  computeSizeAndOffsets();
744
745  // Emit all the DIEs into a debug info section
746  emitDebugInfo();
747
748  // Corresponding abbreviations into a abbrev section.
749  emitAbbreviations();
750
751  // Emit info into a debug pubnames section.
752  emitDebugPubNames();
753
754  // Emit info into a debug pubtypes section.
755  emitDebugPubTypes();
756
757  // Emit info into a debug loc section.
758  emitDebugLoc();
759
760  // Emit info into a debug aranges section.
761  EmitDebugARanges();
762
763  // Emit info into a debug ranges section.
764  emitDebugRanges();
765
766  // Emit info into a debug macinfo section.
767  emitDebugMacInfo();
768
769  // Emit inline info.
770  emitDebugInlineInfo();
771
772  // Emit info into a debug str section.
773  emitDebugStr();
774
775  // clean up.
776  DeleteContainerSeconds(DeadFnScopeMap);
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 = getCompileUnit(FnScope->getScopeNode());
1327
1328  // Construct abstract scopes.
1329  ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1330  for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1331    LexicalScope *AScope = AList[i];
1332    DISubprogram SP(AScope->getScopeNode());
1333    if (SP.Verify()) {
1334      // Collect info for variables that were optimized out.
1335      StringRef FName = SP.getLinkageName();
1336      if (FName.empty())
1337        FName = SP.getName();
1338      if (NamedMDNode *NMD =
1339          getFnSpecificMDNode(*(MF->getFunction()->getParent()), FName)) {
1340        for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1341          DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
1342          if (!DV || !ProcessedVars.insert(DV))
1343            continue;
1344          if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1345            addScopeVariable(Scope, new DbgVariable(DV, NULL));
1346        }
1347      }
1348    }
1349    if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1350      constructScopeDIE(TheCU, AScope);
1351  }
1352
1353  DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1354
1355  if (!DisableFramePointerElim(*MF))
1356    TheCU->addUInt(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr,
1357                   dwarf::DW_FORM_flag, 1);
1358
1359  DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1360                                               MMI->getFrameMoves()));
1361
1362  // Clear debug info
1363  for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1364         I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1365    DeleteContainerPointers(I->second);
1366  ScopeVariables.clear();
1367  DeleteContainerPointers(CurrentFnArguments);
1368  UserVariables.clear();
1369  DbgValues.clear();
1370  AbstractVariables.clear();
1371  LabelsBeforeInsn.clear();
1372  LabelsAfterInsn.clear();
1373  PrevLabel = NULL;
1374}
1375
1376/// recordSourceLine - Register a source line with debug info. Returns the
1377/// unique label that was emitted and which provides correspondence to
1378/// the source line list.
1379void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1380                                  unsigned Flags) {
1381  StringRef Fn;
1382  StringRef Dir;
1383  unsigned Src = 1;
1384  if (S) {
1385    DIDescriptor Scope(S);
1386
1387    if (Scope.isCompileUnit()) {
1388      DICompileUnit CU(S);
1389      Fn = CU.getFilename();
1390      Dir = CU.getDirectory();
1391    } else if (Scope.isFile()) {
1392      DIFile F(S);
1393      Fn = F.getFilename();
1394      Dir = F.getDirectory();
1395    } else if (Scope.isSubprogram()) {
1396      DISubprogram SP(S);
1397      Fn = SP.getFilename();
1398      Dir = SP.getDirectory();
1399    } else if (Scope.isLexicalBlock()) {
1400      DILexicalBlock DB(S);
1401      Fn = DB.getFilename();
1402      Dir = DB.getDirectory();
1403    } else
1404      assert(0 && "Unexpected scope info");
1405
1406    Src = GetOrCreateSourceID(Fn, Dir);
1407  }
1408  Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1409}
1410
1411//===----------------------------------------------------------------------===//
1412// Emit Methods
1413//===----------------------------------------------------------------------===//
1414
1415/// computeSizeAndOffset - Compute the size and offset of a DIE.
1416///
1417unsigned
1418DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
1419  // Get the children.
1420  const std::vector<DIE *> &Children = Die->getChildren();
1421
1422  // If not last sibling and has children then add sibling offset attribute.
1423  if (!Last && !Children.empty())
1424    Die->addSiblingOffset(DIEValueAllocator);
1425
1426  // Record the abbreviation.
1427  assignAbbrevNumber(Die->getAbbrev());
1428
1429  // Get the abbreviation for this DIE.
1430  unsigned AbbrevNumber = Die->getAbbrevNumber();
1431  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1432
1433  // Set DIE offset
1434  Die->setOffset(Offset);
1435
1436  // Start the size with the size of abbreviation code.
1437  Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1438
1439  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1440  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1441
1442  // Size the DIE attribute values.
1443  for (unsigned i = 0, N = Values.size(); i < N; ++i)
1444    // Size attribute value.
1445    Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1446
1447  // Size the DIE children if any.
1448  if (!Children.empty()) {
1449    assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1450           "Children flag not set");
1451
1452    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1453      Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
1454
1455    // End of children marker.
1456    Offset += sizeof(int8_t);
1457  }
1458
1459  Die->setSize(Offset - Die->getOffset());
1460  return Offset;
1461}
1462
1463/// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
1464///
1465void DwarfDebug::computeSizeAndOffsets() {
1466  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1467         E = CUMap.end(); I != E; ++I) {
1468    // Compute size of compile unit header.
1469    unsigned Offset =
1470      sizeof(int32_t) + // Length of Compilation Unit Info
1471      sizeof(int16_t) + // DWARF version number
1472      sizeof(int32_t) + // Offset Into Abbrev. Section
1473      sizeof(int8_t);   // Pointer Size (in bytes)
1474    computeSizeAndOffset(I->second->getCUDie(), Offset, true);
1475  }
1476}
1477
1478/// EmitSectionSym - Switch to the specified MCSection and emit an assembler
1479/// temporary label to it if SymbolStem is specified.
1480static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
1481                                const char *SymbolStem = 0) {
1482  Asm->OutStreamer.SwitchSection(Section);
1483  if (!SymbolStem) return 0;
1484
1485  MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
1486  Asm->OutStreamer.EmitLabel(TmpSym);
1487  return TmpSym;
1488}
1489
1490/// EmitSectionLabels - Emit initial Dwarf sections with a label at
1491/// the start of each one.
1492void DwarfDebug::EmitSectionLabels() {
1493  const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1494
1495  // Dwarf sections base addresses.
1496  DwarfInfoSectionSym =
1497    EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1498  DwarfAbbrevSectionSym =
1499    EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1500  EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
1501
1502  if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1503    EmitSectionSym(Asm, MacroInfo);
1504
1505  EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1506  EmitSectionSym(Asm, TLOF.getDwarfLocSection());
1507  EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1508  EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1509  DwarfStrSectionSym =
1510    EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
1511  DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1512                                             "debug_range");
1513
1514  DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
1515                                           "section_debug_loc");
1516
1517  TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1518  EmitSectionSym(Asm, TLOF.getDataSection());
1519}
1520
1521/// emitDIE - Recursively emits a debug information entry.
1522///
1523void DwarfDebug::emitDIE(DIE *Die) {
1524  // Get the abbreviation for this DIE.
1525  unsigned AbbrevNumber = Die->getAbbrevNumber();
1526  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1527
1528  // Emit the code (index) for the abbreviation.
1529  if (Asm->isVerbose())
1530    Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1531                                Twine::utohexstr(Die->getOffset()) + ":0x" +
1532                                Twine::utohexstr(Die->getSize()) + " " +
1533                                dwarf::TagString(Abbrev->getTag()));
1534  Asm->EmitULEB128(AbbrevNumber);
1535
1536  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1537  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1538
1539  // Emit the DIE attribute values.
1540  for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1541    unsigned Attr = AbbrevData[i].getAttribute();
1542    unsigned Form = AbbrevData[i].getForm();
1543    assert(Form && "Too many attributes for DIE (check abbreviation)");
1544
1545    if (Asm->isVerbose())
1546      Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1547
1548    switch (Attr) {
1549    case dwarf::DW_AT_sibling:
1550      Asm->EmitInt32(Die->getSiblingOffset());
1551      break;
1552    case dwarf::DW_AT_abstract_origin: {
1553      DIEEntry *E = cast<DIEEntry>(Values[i]);
1554      DIE *Origin = E->getEntry();
1555      unsigned Addr = Origin->getOffset();
1556      Asm->EmitInt32(Addr);
1557      break;
1558    }
1559    case dwarf::DW_AT_ranges: {
1560      // DW_AT_range Value encodes offset in debug_range section.
1561      DIEInteger *V = cast<DIEInteger>(Values[i]);
1562
1563      if (Asm->MAI->doesDwarfUsesLabelOffsetForRanges()) {
1564        Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1565                                 V->getValue(),
1566                                 4);
1567      } else {
1568        Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1569                                       V->getValue(),
1570                                       DwarfDebugRangeSectionSym,
1571                                       4);
1572      }
1573      break;
1574    }
1575    case dwarf::DW_AT_location: {
1576      if (DIELabel *L = dyn_cast<DIELabel>(Values[i]))
1577        Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1578      else
1579        Values[i]->EmitValue(Asm, Form);
1580      break;
1581    }
1582    case dwarf::DW_AT_accessibility: {
1583      if (Asm->isVerbose()) {
1584        DIEInteger *V = cast<DIEInteger>(Values[i]);
1585        Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1586      }
1587      Values[i]->EmitValue(Asm, Form);
1588      break;
1589    }
1590    default:
1591      // Emit an attribute using the defined form.
1592      Values[i]->EmitValue(Asm, Form);
1593      break;
1594    }
1595  }
1596
1597  // Emit the DIE children if any.
1598  if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1599    const std::vector<DIE *> &Children = Die->getChildren();
1600
1601    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1602      emitDIE(Children[j]);
1603
1604    if (Asm->isVerbose())
1605      Asm->OutStreamer.AddComment("End Of Children Mark");
1606    Asm->EmitInt8(0);
1607  }
1608}
1609
1610/// emitDebugInfo - Emit the debug info section.
1611///
1612void DwarfDebug::emitDebugInfo() {
1613  // Start debug info section.
1614  Asm->OutStreamer.SwitchSection(
1615                            Asm->getObjFileLowering().getDwarfInfoSection());
1616  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1617         E = CUMap.end(); I != E; ++I) {
1618    CompileUnit *TheCU = I->second;
1619    DIE *Die = TheCU->getCUDie();
1620
1621    // Emit the compile units header.
1622    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
1623                                                  TheCU->getID()));
1624
1625    // Emit size of content not including length itself
1626    unsigned ContentSize = Die->getSize() +
1627      sizeof(int16_t) + // DWARF version number
1628      sizeof(int32_t) + // Offset Into Abbrev. Section
1629      sizeof(int8_t);   // Pointer Size (in bytes)
1630
1631    Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1632    Asm->EmitInt32(ContentSize);
1633    Asm->OutStreamer.AddComment("DWARF version number");
1634    Asm->EmitInt16(dwarf::DWARF_VERSION);
1635    Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1636    Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
1637                           DwarfAbbrevSectionSym);
1638    Asm->OutStreamer.AddComment("Address Size (in bytes)");
1639    Asm->EmitInt8(Asm->getTargetData().getPointerSize());
1640
1641    emitDIE(Die);
1642    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
1643  }
1644}
1645
1646/// emitAbbreviations - Emit the abbreviation section.
1647///
1648void DwarfDebug::emitAbbreviations() const {
1649  // Check to see if it is worth the effort.
1650  if (!Abbreviations.empty()) {
1651    // Start the debug abbrev section.
1652    Asm->OutStreamer.SwitchSection(
1653                            Asm->getObjFileLowering().getDwarfAbbrevSection());
1654
1655    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
1656
1657    // For each abbrevation.
1658    for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
1659      // Get abbreviation data
1660      const DIEAbbrev *Abbrev = Abbreviations[i];
1661
1662      // Emit the abbrevations code (base 1 index.)
1663      Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1664
1665      // Emit the abbreviations data.
1666      Abbrev->Emit(Asm);
1667    }
1668
1669    // Mark end of abbreviations.
1670    Asm->EmitULEB128(0, "EOM(3)");
1671
1672    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
1673  }
1674}
1675
1676/// emitEndOfLineMatrix - Emit the last address of the section and the end of
1677/// the line matrix.
1678///
1679void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1680  // Define last address of section.
1681  Asm->OutStreamer.AddComment("Extended Op");
1682  Asm->EmitInt8(0);
1683
1684  Asm->OutStreamer.AddComment("Op size");
1685  Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
1686  Asm->OutStreamer.AddComment("DW_LNE_set_address");
1687  Asm->EmitInt8(dwarf::DW_LNE_set_address);
1688
1689  Asm->OutStreamer.AddComment("Section end label");
1690
1691  Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1692                                   Asm->getTargetData().getPointerSize(),
1693                                   0/*AddrSpace*/);
1694
1695  // Mark end of matrix.
1696  Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1697  Asm->EmitInt8(0);
1698  Asm->EmitInt8(1);
1699  Asm->EmitInt8(1);
1700}
1701
1702/// emitDebugPubNames - Emit visible names into a debug pubnames section.
1703///
1704void DwarfDebug::emitDebugPubNames() {
1705  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1706         E = CUMap.end(); I != E; ++I) {
1707    CompileUnit *TheCU = I->second;
1708    // Start the dwarf pubnames section.
1709    Asm->OutStreamer.SwitchSection(
1710      Asm->getObjFileLowering().getDwarfPubNamesSection());
1711
1712    Asm->OutStreamer.AddComment("Length of Public Names Info");
1713    Asm->EmitLabelDifference(
1714      Asm->GetTempSymbol("pubnames_end", TheCU->getID()),
1715      Asm->GetTempSymbol("pubnames_begin", TheCU->getID()), 4);
1716
1717    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin",
1718                                                  TheCU->getID()));
1719
1720    Asm->OutStreamer.AddComment("DWARF Version");
1721    Asm->EmitInt16(dwarf::DWARF_VERSION);
1722
1723    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1724    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1725                           DwarfInfoSectionSym);
1726
1727    Asm->OutStreamer.AddComment("Compilation Unit Length");
1728    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1729                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
1730                             4);
1731
1732    const StringMap<DIE*> &Globals = TheCU->getGlobals();
1733    for (StringMap<DIE*>::const_iterator
1734           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1735      const char *Name = GI->getKeyData();
1736      DIE *Entity = GI->second;
1737
1738      Asm->OutStreamer.AddComment("DIE offset");
1739      Asm->EmitInt32(Entity->getOffset());
1740
1741      if (Asm->isVerbose())
1742        Asm->OutStreamer.AddComment("External Name");
1743      Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
1744    }
1745
1746    Asm->OutStreamer.AddComment("End Mark");
1747    Asm->EmitInt32(0);
1748    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end",
1749                                                  TheCU->getID()));
1750  }
1751}
1752
1753void DwarfDebug::emitDebugPubTypes() {
1754  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1755         E = CUMap.end(); I != E; ++I) {
1756    CompileUnit *TheCU = I->second;
1757    // Start the dwarf pubnames section.
1758    Asm->OutStreamer.SwitchSection(
1759      Asm->getObjFileLowering().getDwarfPubTypesSection());
1760    Asm->OutStreamer.AddComment("Length of Public Types Info");
1761    Asm->EmitLabelDifference(
1762      Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
1763      Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
1764
1765    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
1766                                                  TheCU->getID()));
1767
1768    if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
1769    Asm->EmitInt16(dwarf::DWARF_VERSION);
1770
1771    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1772    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1773                           DwarfInfoSectionSym);
1774
1775    Asm->OutStreamer.AddComment("Compilation Unit Length");
1776    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1777                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
1778                             4);
1779
1780    const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
1781    for (StringMap<DIE*>::const_iterator
1782           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1783      const char *Name = GI->getKeyData();
1784      DIE *Entity = GI->second;
1785
1786      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
1787      Asm->EmitInt32(Entity->getOffset());
1788
1789      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
1790      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
1791    }
1792
1793    Asm->OutStreamer.AddComment("End Mark");
1794    Asm->EmitInt32(0);
1795    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
1796                                                  TheCU->getID()));
1797  }
1798}
1799
1800/// emitDebugStr - Emit visible names into a debug str section.
1801///
1802void DwarfDebug::emitDebugStr() {
1803  // Check to see if it is worth the effort.
1804  if (StringPool.empty()) return;
1805
1806  // Start the dwarf str section.
1807  Asm->OutStreamer.SwitchSection(
1808                                Asm->getObjFileLowering().getDwarfStrSection());
1809
1810  // Get all of the string pool entries and put them in an array by their ID so
1811  // we can sort them.
1812  SmallVector<std::pair<unsigned,
1813      StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
1814
1815  for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
1816       I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
1817    Entries.push_back(std::make_pair(I->second.second, &*I));
1818
1819  array_pod_sort(Entries.begin(), Entries.end());
1820
1821  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
1822    // Emit a label for reference from debug information entries.
1823    Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
1824
1825    // Emit the string itself.
1826    Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
1827  }
1828}
1829
1830/// emitDebugLoc - Emit visible names into a debug loc section.
1831///
1832void DwarfDebug::emitDebugLoc() {
1833  if (DotDebugLocEntries.empty())
1834    return;
1835
1836  for (SmallVector<DotDebugLocEntry, 4>::iterator
1837         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1838       I != E; ++I) {
1839    DotDebugLocEntry &Entry = *I;
1840    if (I + 1 != DotDebugLocEntries.end())
1841      Entry.Merge(I+1);
1842  }
1843
1844  // Start the dwarf loc section.
1845  Asm->OutStreamer.SwitchSection(
1846    Asm->getObjFileLowering().getDwarfLocSection());
1847  unsigned char Size = Asm->getTargetData().getPointerSize();
1848  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
1849  unsigned index = 1;
1850  for (SmallVector<DotDebugLocEntry, 4>::iterator
1851         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1852       I != E; ++I, ++index) {
1853    DotDebugLocEntry &Entry = *I;
1854    if (Entry.isMerged()) continue;
1855    if (Entry.isEmpty()) {
1856      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1857      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1858      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
1859    } else {
1860      Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
1861      Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
1862      DIVariable DV(Entry.Variable);
1863      Asm->OutStreamer.AddComment("Loc expr size");
1864      MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
1865      MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
1866      Asm->EmitLabelDifference(end, begin, 2);
1867      Asm->OutStreamer.EmitLabel(begin);
1868      if (Entry.isInt()) {
1869        DIBasicType BTy(DV.getType());
1870        if (BTy.Verify() &&
1871            (BTy.getEncoding()  == dwarf::DW_ATE_signed
1872             || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
1873          Asm->OutStreamer.AddComment("DW_OP_consts");
1874          Asm->EmitInt8(dwarf::DW_OP_consts);
1875          Asm->EmitSLEB128(Entry.getInt());
1876        } else {
1877          Asm->OutStreamer.AddComment("DW_OP_constu");
1878          Asm->EmitInt8(dwarf::DW_OP_constu);
1879          Asm->EmitULEB128(Entry.getInt());
1880        }
1881      } else if (Entry.isLocation()) {
1882        if (!DV.hasComplexAddress())
1883          // Regular entry.
1884          Asm->EmitDwarfRegOp(Entry.Loc);
1885        else {
1886          // Complex address entry.
1887          unsigned N = DV.getNumAddrElements();
1888          unsigned i = 0;
1889          if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
1890            if (Entry.Loc.getOffset()) {
1891              i = 2;
1892              Asm->EmitDwarfRegOp(Entry.Loc);
1893              Asm->OutStreamer.AddComment("DW_OP_deref");
1894              Asm->EmitInt8(dwarf::DW_OP_deref);
1895              Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
1896              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
1897              Asm->EmitSLEB128(DV.getAddrElement(1));
1898            } else {
1899              // If first address element is OpPlus then emit
1900              // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
1901              MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
1902              Asm->EmitDwarfRegOp(Loc);
1903              i = 2;
1904            }
1905          } else {
1906            Asm->EmitDwarfRegOp(Entry.Loc);
1907          }
1908
1909          // Emit remaining complex address elements.
1910          for (; i < N; ++i) {
1911            uint64_t Element = DV.getAddrElement(i);
1912            if (Element == DIBuilder::OpPlus) {
1913              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
1914              Asm->EmitULEB128(DV.getAddrElement(++i));
1915            } else if (Element == DIBuilder::OpDeref)
1916              Asm->EmitInt8(dwarf::DW_OP_deref);
1917            else llvm_unreachable("unknown Opcode found in complex address");
1918          }
1919        }
1920      }
1921      // else ... ignore constant fp. There is not any good way to
1922      // to represent them here in dwarf.
1923      Asm->OutStreamer.EmitLabel(end);
1924    }
1925  }
1926}
1927
1928/// EmitDebugARanges - Emit visible names into a debug aranges section.
1929///
1930void DwarfDebug::EmitDebugARanges() {
1931  // Start the dwarf aranges section.
1932  Asm->OutStreamer.SwitchSection(
1933                          Asm->getObjFileLowering().getDwarfARangesSection());
1934}
1935
1936/// emitDebugRanges - Emit visible names into a debug ranges section.
1937///
1938void DwarfDebug::emitDebugRanges() {
1939  // Start the dwarf ranges section.
1940  Asm->OutStreamer.SwitchSection(
1941    Asm->getObjFileLowering().getDwarfRangesSection());
1942  unsigned char Size = Asm->getTargetData().getPointerSize();
1943  for (SmallVector<const MCSymbol *, 8>::iterator
1944         I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
1945       I != E; ++I) {
1946    if (*I)
1947      Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
1948    else
1949      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1950  }
1951}
1952
1953/// emitDebugMacInfo - Emit visible names into a debug macinfo section.
1954///
1955void DwarfDebug::emitDebugMacInfo() {
1956  if (const MCSection *LineInfo =
1957      Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
1958    // Start the dwarf macinfo section.
1959    Asm->OutStreamer.SwitchSection(LineInfo);
1960  }
1961}
1962
1963/// emitDebugInlineInfo - Emit inline info using following format.
1964/// Section Header:
1965/// 1. length of section
1966/// 2. Dwarf version number
1967/// 3. address size.
1968///
1969/// Entries (one "entry" for each function that was inlined):
1970///
1971/// 1. offset into __debug_str section for MIPS linkage name, if exists;
1972///   otherwise offset into __debug_str for regular function name.
1973/// 2. offset into __debug_str section for regular function name.
1974/// 3. an unsigned LEB128 number indicating the number of distinct inlining
1975/// instances for the function.
1976///
1977/// The rest of the entry consists of a {die_offset, low_pc} pair for each
1978/// inlined instance; the die_offset points to the inlined_subroutine die in the
1979/// __debug_info section, and the low_pc is the starting address for the
1980/// inlining instance.
1981void DwarfDebug::emitDebugInlineInfo() {
1982  if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
1983    return;
1984
1985  if (!FirstCU)
1986    return;
1987
1988  Asm->OutStreamer.SwitchSection(
1989                        Asm->getObjFileLowering().getDwarfDebugInlineSection());
1990
1991  Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
1992  Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
1993                           Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
1994
1995  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
1996
1997  Asm->OutStreamer.AddComment("Dwarf Version");
1998  Asm->EmitInt16(dwarf::DWARF_VERSION);
1999  Asm->OutStreamer.AddComment("Address Size (in bytes)");
2000  Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2001
2002  for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2003         E = InlinedSPNodes.end(); I != E; ++I) {
2004
2005    const MDNode *Node = *I;
2006    DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2007      = InlineInfo.find(Node);
2008    SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2009    DISubprogram SP(Node);
2010    StringRef LName = SP.getLinkageName();
2011    StringRef Name = SP.getName();
2012
2013    Asm->OutStreamer.AddComment("MIPS linkage name");
2014    if (LName.empty()) {
2015      Asm->OutStreamer.EmitBytes(Name, 0);
2016      Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
2017    } else
2018      Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2019                             DwarfStrSectionSym);
2020
2021    Asm->OutStreamer.AddComment("Function name");
2022    Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2023    Asm->EmitULEB128(Labels.size(), "Inline count");
2024
2025    for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2026           LE = Labels.end(); LI != LE; ++LI) {
2027      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2028      Asm->EmitInt32(LI->second->getOffset());
2029
2030      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2031      Asm->OutStreamer.EmitSymbolValue(LI->first,
2032                                       Asm->getTargetData().getPointerSize(),0);
2033    }
2034  }
2035
2036  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2037}
2038