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