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