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