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