DwarfDebug.cpp revision 05497cc965b59dff8a8170c5cbbcef3dff251262
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 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.
970static StringRef getDIEStringAttr(DIE *Die, unsigned Attr) {
971  const SmallVectorImpl<DIEValue *> &Values = Die->getValues();
972  const DIEAbbrev &Abbrevs = Die->getAbbrev();
973
974  // Iterate through all the attributes until we find the one we're
975  // looking for, if we can't find it return an empty string.
976  for (size_t i = 0; i < Values.size(); ++i) {
977    if (Abbrevs.getData()[i].getAttribute() == Attr) {
978      DIEValue *V = Values[i];
979      assert(isa<DIEString>(V) && "String requested. Not a string.");
980      DIEString *S = cast<DIEString>(V);
981      return S->getString();
982    }
983  }
984  return StringRef("");
985}
986
987/// \brief Adds the string in \p Str to the hash in \p Hash. This also hashes
988/// a trailing NULL with the string.
989static void addStringToHash(MD5 &Hash, StringRef Str) {
990  DEBUG(dbgs() << "Adding string " << Str << " to hash.\n");
991  HashValue SVal((const uint8_t *)Str.data(), Str.size());
992  const uint8_t NB = '\0';
993  HashValue NBVal((const uint8_t *)&NB, 1);
994  Hash.update(SVal);
995  Hash.update(NBVal);
996}
997
998// FIXME: These are copied and only slightly modified out of LEB128.h.
999
1000/// \brief Adds the unsigned in \p N to the hash in \p Hash. This also encodes
1001/// the unsigned as a ULEB128.
1002static void addULEB128ToHash(MD5 &Hash, uint64_t Value) {
1003  DEBUG(dbgs() << "Adding ULEB128 " << Value << " to hash.\n");
1004  do {
1005    uint8_t Byte = Value & 0x7f;
1006    Value >>= 7;
1007    if (Value != 0)
1008      Byte |= 0x80; // Mark this byte to show that more bytes will follow.
1009    Hash.update(Byte);
1010  } while (Value != 0);
1011}
1012
1013/// \brief Including \p Parent adds the context of Parent to \p Hash.
1014static void addParentContextToHash(MD5 &Hash, DIE *Parent) {
1015  unsigned Tag = Parent->getTag();
1016
1017  DEBUG(dbgs() << "Adding parent context to hash...\n");
1018
1019  // For each surrounding type or namespace...
1020  if (Tag != dwarf::DW_TAG_namespace && Tag != dwarf::DW_TAG_class_type &&
1021      Tag != dwarf::DW_TAG_structure_type)
1022    return;
1023
1024  // ... beginning with the outermost such construct...
1025  if (Parent->getParent() != NULL)
1026    addParentContextToHash(Hash, Parent->getParent());
1027
1028  // Append the letter "C" to the sequence.
1029  addULEB128ToHash(Hash, 'C');
1030
1031  // Followed by the DWARF tag of the construct.
1032  addULEB128ToHash(Hash, Parent->getTag());
1033
1034  // Then the name, taken from the DW_AT_name attribute.
1035  StringRef Name = getDIEStringAttr(Parent, dwarf::DW_AT_name);
1036  if (!Name.empty())
1037    addStringToHash(Hash, Name);
1038}
1039
1040/// This is based on the type signature computation given in section 7.27 of the
1041/// DWARF4 standard. It is the md5 hash of a flattened description of the DIE.
1042static void addDIEODRSignature(MD5 &Hash, CompileUnit *CU, DIE *Die) {
1043
1044  // Add the contexts to the hash.
1045  DIE *Parent = Die->getParent();
1046  if (Parent)
1047    addParentContextToHash(Hash, Parent);
1048
1049  // Add the current DIE information.
1050
1051  // Add the DWARF tag of the DIE.
1052  addULEB128ToHash(Hash, Die->getTag());
1053
1054  // Add the name of the type to the hash.
1055  addStringToHash(Hash, getDIEStringAttr(Die, dwarf::DW_AT_name));
1056
1057  // Now get the result.
1058  MD5::MD5Result Result;
1059  Hash.final(Result);
1060
1061  // ... take the least significant 8 bytes and store those as the attribute.
1062  uint64_t Signature;
1063  memcpy(&Signature, &Result[8], 8);
1064
1065  // FIXME: This should be added onto the type unit, not the type, but this
1066  // works as an intermediate stage.
1067  CU->addUInt(Die, dwarf::DW_AT_GNU_odr_signature, dwarf::DW_FORM_data8,
1068              Signature);
1069}
1070
1071/// Return true if the current DIE is contained within an anonymous namespace.
1072static bool isContainedInAnonNamespace(DIE *Die) {
1073  DIE *Parent = Die->getParent();
1074
1075  while (Parent) {
1076    if (Die->getTag() == dwarf::DW_TAG_namespace &&
1077        getDIEStringAttr(Die, dwarf::DW_AT_name) == "")
1078      return true;
1079    Parent = Parent->getParent();
1080  }
1081
1082  return false;
1083}
1084
1085void DwarfDebug::finalizeModuleInfo() {
1086  // Collect info for variables that were optimized out.
1087  collectDeadVariables();
1088
1089  // Attach DW_AT_inline attribute with inlined subprogram DIEs.
1090  computeInlinedDIEs();
1091
1092  // Emit DW_AT_containing_type attribute to connect types with their
1093  // vtable holding type.
1094  for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
1095         CUE = CUMap.end(); CUI != CUE; ++CUI) {
1096    CompileUnit *TheCU = CUI->second;
1097    TheCU->constructContainingTypeDIEs();
1098  }
1099
1100  // For types that we'd like to move to type units or ODR check go ahead
1101  // and either move the types out or add the ODR attribute now.
1102  // FIXME: Do type splitting.
1103  for (unsigned i = 0, e = TypeUnits.size(); i != e; ++i) {
1104    MD5 Hash;
1105    DIE *Die = TypeUnits[i];
1106    // If we're in C++ and we want to generate the hash then go ahead and do
1107    // that now.
1108    if (GenerateODRHash &&
1109        CUMap.begin()->second->getLanguage() == dwarf::DW_LANG_C_plus_plus &&
1110        !isContainedInAnonNamespace(Die))
1111      addDIEODRSignature(Hash, CUMap.begin()->second, Die);
1112  }
1113
1114   // Compute DIE offsets and sizes.
1115  InfoHolder.computeSizeAndOffsets();
1116  if (useSplitDwarf())
1117    SkeletonHolder.computeSizeAndOffsets();
1118}
1119
1120void DwarfDebug::endSections() {
1121  // Standard sections final addresses.
1122  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
1123  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
1124  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
1125  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
1126
1127  // End text sections.
1128  for (unsigned I = 0, E = SectionMap.size(); I != E; ++I) {
1129    Asm->OutStreamer.SwitchSection(SectionMap[I]);
1130    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", I+1));
1131  }
1132}
1133
1134// Emit all Dwarf sections that should come after the content.
1135void DwarfDebug::endModule() {
1136
1137  if (!FirstCU) return;
1138
1139  // End any existing sections.
1140  // TODO: Does this need to happen?
1141  endSections();
1142
1143  // Finalize the debug info for the module.
1144  finalizeModuleInfo();
1145
1146  if (!useSplitDwarf()) {
1147    // Emit all the DIEs into a debug info section.
1148    emitDebugInfo();
1149
1150    // Corresponding abbreviations into a abbrev section.
1151    emitAbbreviations();
1152
1153    // Emit info into a debug loc section.
1154    emitDebugLoc();
1155
1156    // Emit info into a debug aranges section.
1157    emitDebugARanges();
1158
1159    // Emit info into a debug ranges section.
1160    emitDebugRanges();
1161
1162    // Emit info into a debug macinfo section.
1163    emitDebugMacInfo();
1164
1165    // Emit inline info.
1166    // TODO: When we don't need the option anymore we
1167    // can remove all of the code that this section
1168    // depends upon.
1169    if (useDarwinGDBCompat())
1170      emitDebugInlineInfo();
1171  } else {
1172    // TODO: Fill this in for separated debug sections and separate
1173    // out information into new sections.
1174
1175    // Emit the debug info section and compile units.
1176    emitDebugInfo();
1177    emitDebugInfoDWO();
1178
1179    // Corresponding abbreviations into a abbrev section.
1180    emitAbbreviations();
1181    emitDebugAbbrevDWO();
1182
1183    // Emit info into a debug loc section.
1184    emitDebugLoc();
1185
1186    // Emit info into a debug aranges section.
1187    emitDebugARanges();
1188
1189    // Emit info into a debug ranges section.
1190    emitDebugRanges();
1191
1192    // Emit info into a debug macinfo section.
1193    emitDebugMacInfo();
1194
1195    // Emit DWO addresses.
1196    InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1197
1198    // Emit inline info.
1199    // TODO: When we don't need the option anymore we
1200    // can remove all of the code that this section
1201    // depends upon.
1202    if (useDarwinGDBCompat())
1203      emitDebugInlineInfo();
1204  }
1205
1206  // Emit info into the dwarf accelerator table sections.
1207  if (useDwarfAccelTables()) {
1208    emitAccelNames();
1209    emitAccelObjC();
1210    emitAccelNamespaces();
1211    emitAccelTypes();
1212  }
1213
1214  // Emit info into a debug pubnames section, if requested.
1215  if (GenerateDwarfPubNamesSection)
1216    emitDebugPubnames();
1217
1218  // Emit info into a debug pubtypes section.
1219  // TODO: When we don't need the option anymore we can
1220  // remove all of the code that adds to the table.
1221  if (useDarwinGDBCompat())
1222    emitDebugPubTypes();
1223
1224  // Finally emit string information into a string table.
1225  emitDebugStr();
1226  if (useSplitDwarf())
1227    emitDebugStrDWO();
1228
1229  // clean up.
1230  SPMap.clear();
1231  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1232         E = CUMap.end(); I != E; ++I)
1233    delete I->second;
1234
1235  for (SmallVectorImpl<CompileUnit *>::iterator I = SkeletonCUs.begin(),
1236         E = SkeletonCUs.end(); I != E; ++I)
1237    delete *I;
1238
1239  // Reset these for the next Module if we have one.
1240  FirstCU = NULL;
1241}
1242
1243// Find abstract variable, if any, associated with Var.
1244DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1245                                              DebugLoc ScopeLoc) {
1246  LLVMContext &Ctx = DV->getContext();
1247  // More then one inlined variable corresponds to one abstract variable.
1248  DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1249  DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1250  if (AbsDbgVariable)
1251    return AbsDbgVariable;
1252
1253  LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1254  if (!Scope)
1255    return NULL;
1256
1257  AbsDbgVariable = new DbgVariable(Var, NULL);
1258  addScopeVariable(Scope, AbsDbgVariable);
1259  AbstractVariables[Var] = AbsDbgVariable;
1260  return AbsDbgVariable;
1261}
1262
1263// If Var is a current function argument then add it to CurrentFnArguments list.
1264bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1265                                      DbgVariable *Var, LexicalScope *Scope) {
1266  if (!LScopes.isCurrentFunctionScope(Scope))
1267    return false;
1268  DIVariable DV = Var->getVariable();
1269  if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1270    return false;
1271  unsigned ArgNo = DV.getArgNumber();
1272  if (ArgNo == 0)
1273    return false;
1274
1275  size_t Size = CurrentFnArguments.size();
1276  if (Size == 0)
1277    CurrentFnArguments.resize(MF->getFunction()->arg_size());
1278  // llvm::Function argument size is not good indicator of how many
1279  // arguments does the function have at source level.
1280  if (ArgNo > Size)
1281    CurrentFnArguments.resize(ArgNo * 2);
1282  CurrentFnArguments[ArgNo - 1] = Var;
1283  return true;
1284}
1285
1286// Collect variable information from side table maintained by MMI.
1287void
1288DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
1289                                   SmallPtrSet<const MDNode *, 16> &Processed) {
1290  MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1291  for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1292         VE = VMap.end(); VI != VE; ++VI) {
1293    const MDNode *Var = VI->first;
1294    if (!Var) continue;
1295    Processed.insert(Var);
1296    DIVariable DV(Var);
1297    const std::pair<unsigned, DebugLoc> &VP = VI->second;
1298
1299    LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
1300
1301    // If variable scope is not found then skip this variable.
1302    if (Scope == 0)
1303      continue;
1304
1305    DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1306    DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
1307    RegVar->setFrameIndex(VP.first);
1308    if (!addCurrentFnArgument(MF, RegVar, Scope))
1309      addScopeVariable(Scope, RegVar);
1310    if (AbsDbgVariable)
1311      AbsDbgVariable->setFrameIndex(VP.first);
1312  }
1313}
1314
1315// Return true if debug value, encoded by DBG_VALUE instruction, is in a
1316// defined reg.
1317static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1318  assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1319  return MI->getNumOperands() == 3 &&
1320         MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1321         (MI->getOperand(1).isImm() ||
1322          (MI->getOperand(1).isReg() && MI->getOperand(1).getReg() == 0U));
1323}
1324
1325// Get .debug_loc entry for the instruction range starting at MI.
1326static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1327                                         const MCSymbol *FLabel,
1328                                         const MCSymbol *SLabel,
1329                                         const MachineInstr *MI) {
1330  const MDNode *Var =  MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1331
1332  assert(MI->getNumOperands() == 3);
1333  if (MI->getOperand(0).isReg()) {
1334    MachineLocation MLoc;
1335    // If the second operand is an immediate, this is a
1336    // register-indirect address.
1337    if (!MI->getOperand(1).isImm())
1338      MLoc.set(MI->getOperand(0).getReg());
1339    else
1340      MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1341    return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1342  }
1343  if (MI->getOperand(0).isImm())
1344    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1345  if (MI->getOperand(0).isFPImm())
1346    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1347  if (MI->getOperand(0).isCImm())
1348    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1349
1350  llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1351}
1352
1353// Find variables for each lexical scope.
1354void
1355DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1356                                SmallPtrSet<const MDNode *, 16> &Processed) {
1357
1358  // Grab the variable info that was squirreled away in the MMI side-table.
1359  collectVariableInfoFromMMITable(MF, Processed);
1360
1361  for (SmallVectorImpl<const MDNode*>::const_iterator
1362         UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1363         ++UVI) {
1364    const MDNode *Var = *UVI;
1365    if (Processed.count(Var))
1366      continue;
1367
1368    // History contains relevant DBG_VALUE instructions for Var and instructions
1369    // clobbering it.
1370    SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1371    if (History.empty())
1372      continue;
1373    const MachineInstr *MInsn = History.front();
1374
1375    DIVariable DV(Var);
1376    LexicalScope *Scope = NULL;
1377    if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1378        DISubprogram(DV.getContext()).describes(MF->getFunction()))
1379      Scope = LScopes.getCurrentFunctionScope();
1380    else if (MDNode *IA = DV.getInlinedAt())
1381      Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1382    else
1383      Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1384    // If variable scope is not found then skip this variable.
1385    if (!Scope)
1386      continue;
1387
1388    Processed.insert(DV);
1389    assert(MInsn->isDebugValue() && "History must begin with debug value");
1390    DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1391    DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1392    if (!addCurrentFnArgument(MF, RegVar, Scope))
1393      addScopeVariable(Scope, RegVar);
1394    if (AbsVar)
1395      AbsVar->setMInsn(MInsn);
1396
1397    // Simplify ranges that are fully coalesced.
1398    if (History.size() <= 1 || (History.size() == 2 &&
1399                                MInsn->isIdenticalTo(History.back()))) {
1400      RegVar->setMInsn(MInsn);
1401      continue;
1402    }
1403
1404    // Handle multiple DBG_VALUE instructions describing one variable.
1405    RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1406
1407    for (SmallVectorImpl<const MachineInstr*>::const_iterator
1408           HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1409      const MachineInstr *Begin = *HI;
1410      assert(Begin->isDebugValue() && "Invalid History entry");
1411
1412      // Check if DBG_VALUE is truncating a range.
1413      if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1414          && !Begin->getOperand(0).getReg())
1415        continue;
1416
1417      // Compute the range for a register location.
1418      const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1419      const MCSymbol *SLabel = 0;
1420
1421      if (HI + 1 == HE)
1422        // If Begin is the last instruction in History then its value is valid
1423        // until the end of the function.
1424        SLabel = FunctionEndSym;
1425      else {
1426        const MachineInstr *End = HI[1];
1427        DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1428              << "\t" << *Begin << "\t" << *End << "\n");
1429        if (End->isDebugValue())
1430          SLabel = getLabelBeforeInsn(End);
1431        else {
1432          // End is a normal instruction clobbering the range.
1433          SLabel = getLabelAfterInsn(End);
1434          assert(SLabel && "Forgot label after clobber instruction");
1435          ++HI;
1436        }
1437      }
1438
1439      // The value is valid until the next DBG_VALUE or clobber.
1440      DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1441                                                    Begin));
1442    }
1443    DotDebugLocEntries.push_back(DotDebugLocEntry());
1444  }
1445
1446  // Collect info for variables that were optimized out.
1447  LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1448  DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1449  for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1450    DIVariable DV(Variables.getElement(i));
1451    if (!DV || !DV.isVariable() || !Processed.insert(DV))
1452      continue;
1453    if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1454      addScopeVariable(Scope, new DbgVariable(DV, NULL));
1455  }
1456}
1457
1458// Return Label preceding the instruction.
1459MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1460  MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1461  assert(Label && "Didn't insert label before instruction");
1462  return Label;
1463}
1464
1465// Return Label immediately following the instruction.
1466MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1467  return LabelsAfterInsn.lookup(MI);
1468}
1469
1470// Process beginning of an instruction.
1471void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1472  // Check if source location changes, but ignore DBG_VALUE locations.
1473  if (!MI->isDebugValue()) {
1474    DebugLoc DL = MI->getDebugLoc();
1475    if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1476      unsigned Flags = 0;
1477      PrevInstLoc = DL;
1478      if (DL == PrologEndLoc) {
1479        Flags |= DWARF2_FLAG_PROLOGUE_END;
1480        PrologEndLoc = DebugLoc();
1481      }
1482      if (PrologEndLoc.isUnknown())
1483        Flags |= DWARF2_FLAG_IS_STMT;
1484
1485      if (!DL.isUnknown()) {
1486        const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1487        recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1488      } else
1489        recordSourceLine(0, 0, 0, 0);
1490    }
1491  }
1492
1493  // Insert labels where requested.
1494  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1495    LabelsBeforeInsn.find(MI);
1496
1497  // No label needed.
1498  if (I == LabelsBeforeInsn.end())
1499    return;
1500
1501  // Label already assigned.
1502  if (I->second)
1503    return;
1504
1505  if (!PrevLabel) {
1506    PrevLabel = MMI->getContext().CreateTempSymbol();
1507    Asm->OutStreamer.EmitLabel(PrevLabel);
1508  }
1509  I->second = PrevLabel;
1510}
1511
1512// Process end of an instruction.
1513void DwarfDebug::endInstruction(const MachineInstr *MI) {
1514  // Don't create a new label after DBG_VALUE instructions.
1515  // They don't generate code.
1516  if (!MI->isDebugValue())
1517    PrevLabel = 0;
1518
1519  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1520    LabelsAfterInsn.find(MI);
1521
1522  // No label needed.
1523  if (I == LabelsAfterInsn.end())
1524    return;
1525
1526  // Label already assigned.
1527  if (I->second)
1528    return;
1529
1530  // We need a label after this instruction.
1531  if (!PrevLabel) {
1532    PrevLabel = MMI->getContext().CreateTempSymbol();
1533    Asm->OutStreamer.EmitLabel(PrevLabel);
1534  }
1535  I->second = PrevLabel;
1536}
1537
1538// Each LexicalScope has first instruction and last instruction to mark
1539// beginning and end of a scope respectively. Create an inverse map that list
1540// scopes starts (and ends) with an instruction. One instruction may start (or
1541// end) multiple scopes. Ignore scopes that are not reachable.
1542void DwarfDebug::identifyScopeMarkers() {
1543  SmallVector<LexicalScope *, 4> WorkList;
1544  WorkList.push_back(LScopes.getCurrentFunctionScope());
1545  while (!WorkList.empty()) {
1546    LexicalScope *S = WorkList.pop_back_val();
1547
1548    const SmallVectorImpl<LexicalScope *> &Children = S->getChildren();
1549    if (!Children.empty())
1550      for (SmallVectorImpl<LexicalScope *>::const_iterator SI = Children.begin(),
1551             SE = Children.end(); SI != SE; ++SI)
1552        WorkList.push_back(*SI);
1553
1554    if (S->isAbstractScope())
1555      continue;
1556
1557    const SmallVectorImpl<InsnRange> &Ranges = S->getRanges();
1558    if (Ranges.empty())
1559      continue;
1560    for (SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin(),
1561           RE = Ranges.end(); RI != RE; ++RI) {
1562      assert(RI->first && "InsnRange does not have first instruction!");
1563      assert(RI->second && "InsnRange does not have second instruction!");
1564      requestLabelBeforeInsn(RI->first);
1565      requestLabelAfterInsn(RI->second);
1566    }
1567  }
1568}
1569
1570// Get MDNode for DebugLoc's scope.
1571static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1572  if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1573    return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1574  return DL.getScope(Ctx);
1575}
1576
1577// Walk up the scope chain of given debug loc and find line number info
1578// for the function.
1579static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1580  const MDNode *Scope = getScopeNode(DL, Ctx);
1581  DISubprogram SP = getDISubprogram(Scope);
1582  if (SP.isSubprogram()) {
1583    // Check for number of operands since the compatibility is
1584    // cheap here.
1585    if (SP->getNumOperands() > 19)
1586      return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1587    else
1588      return DebugLoc::get(SP.getLineNumber(), 0, SP);
1589  }
1590
1591  return DebugLoc();
1592}
1593
1594// Gather pre-function debug information.  Assumes being called immediately
1595// after the function entry point has been emitted.
1596void DwarfDebug::beginFunction(const MachineFunction *MF) {
1597  if (!MMI->hasDebugInfo()) return;
1598  LScopes.initialize(*MF);
1599  if (LScopes.empty()) return;
1600  identifyScopeMarkers();
1601
1602  // Set DwarfCompileUnitID in MCContext to the Compile Unit this function
1603  // belongs to.
1604  LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1605  CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1606  assert(TheCU && "Unable to find compile unit!");
1607  if (Asm->TM.hasMCUseLoc() &&
1608      Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer)
1609    // Use a single line table if we are using .loc and generating assembly.
1610    Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1611  else
1612    Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1613
1614  FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1615                                        Asm->getFunctionNumber());
1616  // Assumes in correct section after the entry point.
1617  Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1618
1619  assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1620
1621  const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1622  // LiveUserVar - Map physreg numbers to the MDNode they contain.
1623  std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1624
1625  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1626       I != E; ++I) {
1627    bool AtBlockEntry = true;
1628    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1629         II != IE; ++II) {
1630      const MachineInstr *MI = II;
1631
1632      if (MI->isDebugValue()) {
1633        assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1634
1635        // Keep track of user variables.
1636        const MDNode *Var =
1637          MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1638
1639        // Variable is in a register, we need to check for clobbers.
1640        if (isDbgValueInDefinedReg(MI))
1641          LiveUserVar[MI->getOperand(0).getReg()] = Var;
1642
1643        // Check the history of this variable.
1644        SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1645        if (History.empty()) {
1646          UserVariables.push_back(Var);
1647          // The first mention of a function argument gets the FunctionBeginSym
1648          // label, so arguments are visible when breaking at function entry.
1649          DIVariable DV(Var);
1650          if (DV.isVariable() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1651              DISubprogram(getDISubprogram(DV.getContext()))
1652                .describes(MF->getFunction()))
1653            LabelsBeforeInsn[MI] = FunctionBeginSym;
1654        } else {
1655          // We have seen this variable before. Try to coalesce DBG_VALUEs.
1656          const MachineInstr *Prev = History.back();
1657          if (Prev->isDebugValue()) {
1658            // Coalesce identical entries at the end of History.
1659            if (History.size() >= 2 &&
1660                Prev->isIdenticalTo(History[History.size() - 2])) {
1661              DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1662                    << "\t" << *Prev
1663                    << "\t" << *History[History.size() - 2] << "\n");
1664              History.pop_back();
1665            }
1666
1667            // Terminate old register assignments that don't reach MI;
1668            MachineFunction::const_iterator PrevMBB = Prev->getParent();
1669            if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1670                isDbgValueInDefinedReg(Prev)) {
1671              // Previous register assignment needs to terminate at the end of
1672              // its basic block.
1673              MachineBasicBlock::const_iterator LastMI =
1674                PrevMBB->getLastNonDebugInstr();
1675              if (LastMI == PrevMBB->end()) {
1676                // Drop DBG_VALUE for empty range.
1677                DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1678                      << "\t" << *Prev << "\n");
1679                History.pop_back();
1680              } else if (llvm::next(PrevMBB) != PrevMBB->getParent()->end())
1681                // Terminate after LastMI.
1682                History.push_back(LastMI);
1683            }
1684          }
1685        }
1686        History.push_back(MI);
1687      } else {
1688        // Not a DBG_VALUE instruction.
1689        if (!MI->isLabel())
1690          AtBlockEntry = false;
1691
1692        // First known non-DBG_VALUE and non-frame setup location marks
1693        // the beginning of the function body.
1694        if (!MI->getFlag(MachineInstr::FrameSetup) &&
1695            (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1696          PrologEndLoc = MI->getDebugLoc();
1697
1698        // Check if the instruction clobbers any registers with debug vars.
1699        for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1700               MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1701          if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1702            continue;
1703          for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1704               AI.isValid(); ++AI) {
1705            unsigned Reg = *AI;
1706            const MDNode *Var = LiveUserVar[Reg];
1707            if (!Var)
1708              continue;
1709            // Reg is now clobbered.
1710            LiveUserVar[Reg] = 0;
1711
1712            // Was MD last defined by a DBG_VALUE referring to Reg?
1713            DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1714            if (HistI == DbgValues.end())
1715              continue;
1716            SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1717            if (History.empty())
1718              continue;
1719            const MachineInstr *Prev = History.back();
1720            // Sanity-check: Register assignments are terminated at the end of
1721            // their block.
1722            if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1723              continue;
1724            // Is the variable still in Reg?
1725            if (!isDbgValueInDefinedReg(Prev) ||
1726                Prev->getOperand(0).getReg() != Reg)
1727              continue;
1728            // Var is clobbered. Make sure the next instruction gets a label.
1729            History.push_back(MI);
1730          }
1731        }
1732      }
1733    }
1734  }
1735
1736  for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1737       I != E; ++I) {
1738    SmallVectorImpl<const MachineInstr*> &History = I->second;
1739    if (History.empty())
1740      continue;
1741
1742    // Make sure the final register assignments are terminated.
1743    const MachineInstr *Prev = History.back();
1744    if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1745      const MachineBasicBlock *PrevMBB = Prev->getParent();
1746      MachineBasicBlock::const_iterator LastMI =
1747        PrevMBB->getLastNonDebugInstr();
1748      if (LastMI == PrevMBB->end())
1749        // Drop DBG_VALUE for empty range.
1750        History.pop_back();
1751      else if (PrevMBB != &PrevMBB->getParent()->back()) {
1752        // Terminate after LastMI.
1753        History.push_back(LastMI);
1754      }
1755    }
1756    // Request labels for the full history.
1757    for (unsigned i = 0, e = History.size(); i != e; ++i) {
1758      const MachineInstr *MI = History[i];
1759      if (MI->isDebugValue())
1760        requestLabelBeforeInsn(MI);
1761      else
1762        requestLabelAfterInsn(MI);
1763    }
1764  }
1765
1766  PrevInstLoc = DebugLoc();
1767  PrevLabel = FunctionBeginSym;
1768
1769  // Record beginning of function.
1770  if (!PrologEndLoc.isUnknown()) {
1771    DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1772                                       MF->getFunction()->getContext());
1773    recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1774                     FnStartDL.getScope(MF->getFunction()->getContext()),
1775    // We'd like to list the prologue as "not statements" but GDB behaves
1776    // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1777                     DWARF2_FLAG_IS_STMT);
1778  }
1779}
1780
1781void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1782  SmallVectorImpl<DbgVariable *> &Vars = ScopeVariables[LS];
1783  DIVariable DV = Var->getVariable();
1784  // Variables with positive arg numbers are parameters.
1785  if (unsigned ArgNum = DV.getArgNumber()) {
1786    // Keep all parameters in order at the start of the variable list to ensure
1787    // function types are correct (no out-of-order parameters)
1788    //
1789    // This could be improved by only doing it for optimized builds (unoptimized
1790    // builds have the right order to begin with), searching from the back (this
1791    // would catch the unoptimized case quickly), or doing a binary search
1792    // rather than linear search.
1793    SmallVectorImpl<DbgVariable *>::iterator I = Vars.begin();
1794    while (I != Vars.end()) {
1795      unsigned CurNum = (*I)->getVariable().getArgNumber();
1796      // A local (non-parameter) variable has been found, insert immediately
1797      // before it.
1798      if (CurNum == 0)
1799        break;
1800      // A later indexed parameter has been found, insert immediately before it.
1801      if (CurNum > ArgNum)
1802        break;
1803      ++I;
1804    }
1805    Vars.insert(I, Var);
1806    return;
1807  }
1808
1809  Vars.push_back(Var);
1810}
1811
1812// Gather and emit post-function debug information.
1813void DwarfDebug::endFunction(const MachineFunction *MF) {
1814  if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1815
1816  // Define end label for subprogram.
1817  FunctionEndSym = Asm->GetTempSymbol("func_end",
1818                                      Asm->getFunctionNumber());
1819  // Assumes in correct section after the entry point.
1820  Asm->OutStreamer.EmitLabel(FunctionEndSym);
1821  // Set DwarfCompileUnitID in MCContext to default value.
1822  Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1823
1824  SmallPtrSet<const MDNode *, 16> ProcessedVars;
1825  collectVariableInfo(MF, ProcessedVars);
1826
1827  LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1828  CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1829  assert(TheCU && "Unable to find compile unit!");
1830
1831  // Construct abstract scopes.
1832  ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1833  for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1834    LexicalScope *AScope = AList[i];
1835    DISubprogram SP(AScope->getScopeNode());
1836    if (SP.isSubprogram()) {
1837      // Collect info for variables that were optimized out.
1838      DIArray Variables = SP.getVariables();
1839      for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1840        DIVariable DV(Variables.getElement(i));
1841        if (!DV || !DV.isVariable() || !ProcessedVars.insert(DV))
1842          continue;
1843        // Check that DbgVariable for DV wasn't created earlier, when
1844        // findAbstractVariable() was called for inlined instance of DV.
1845        LLVMContext &Ctx = DV->getContext();
1846        DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1847        if (AbstractVariables.lookup(CleanDV))
1848          continue;
1849        if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1850          addScopeVariable(Scope, new DbgVariable(DV, NULL));
1851      }
1852    }
1853    if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1854      constructScopeDIE(TheCU, AScope);
1855  }
1856
1857  DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1858
1859  if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1860    TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1861
1862  // Clear debug info
1863  for (ScopeVariablesMap::iterator
1864         I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1865    DeleteContainerPointers(I->second);
1866  ScopeVariables.clear();
1867  DeleteContainerPointers(CurrentFnArguments);
1868  UserVariables.clear();
1869  DbgValues.clear();
1870  AbstractVariables.clear();
1871  LabelsBeforeInsn.clear();
1872  LabelsAfterInsn.clear();
1873  PrevLabel = NULL;
1874}
1875
1876// Register a source line with debug info. Returns the  unique label that was
1877// emitted and which provides correspondence to the source line list.
1878void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1879                                  unsigned Flags) {
1880  StringRef Fn;
1881  StringRef Dir;
1882  unsigned Src = 1;
1883  if (S) {
1884    DIDescriptor Scope(S);
1885
1886    if (Scope.isCompileUnit()) {
1887      DICompileUnit CU(S);
1888      Fn = CU.getFilename();
1889      Dir = CU.getDirectory();
1890    } else if (Scope.isFile()) {
1891      DIFile F(S);
1892      Fn = F.getFilename();
1893      Dir = F.getDirectory();
1894    } else if (Scope.isSubprogram()) {
1895      DISubprogram SP(S);
1896      Fn = SP.getFilename();
1897      Dir = SP.getDirectory();
1898    } else if (Scope.isLexicalBlockFile()) {
1899      DILexicalBlockFile DBF(S);
1900      Fn = DBF.getFilename();
1901      Dir = DBF.getDirectory();
1902    } else if (Scope.isLexicalBlock()) {
1903      DILexicalBlock DB(S);
1904      Fn = DB.getFilename();
1905      Dir = DB.getDirectory();
1906    } else
1907      llvm_unreachable("Unexpected scope info");
1908
1909    Src = getOrCreateSourceID(Fn, Dir,
1910            Asm->OutStreamer.getContext().getDwarfCompileUnitID());
1911  }
1912  Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1913}
1914
1915//===----------------------------------------------------------------------===//
1916// Emit Methods
1917//===----------------------------------------------------------------------===//
1918
1919// Compute the size and offset of a DIE.
1920unsigned
1921DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1922  // Get the children.
1923  const std::vector<DIE *> &Children = Die->getChildren();
1924
1925  // Record the abbreviation.
1926  assignAbbrevNumber(Die->getAbbrev());
1927
1928  // Get the abbreviation for this DIE.
1929  unsigned AbbrevNumber = Die->getAbbrevNumber();
1930  const DIEAbbrev *Abbrev = Abbreviations->at(AbbrevNumber - 1);
1931
1932  // Set DIE offset
1933  Die->setOffset(Offset);
1934
1935  // Start the size with the size of abbreviation code.
1936  Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1937
1938  const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
1939  const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
1940
1941  // Size the DIE attribute values.
1942  for (unsigned i = 0, N = Values.size(); i < N; ++i)
1943    // Size attribute value.
1944    Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1945
1946  // Size the DIE children if any.
1947  if (!Children.empty()) {
1948    assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1949           "Children flag not set");
1950
1951    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1952      Offset = computeSizeAndOffset(Children[j], Offset);
1953
1954    // End of children marker.
1955    Offset += sizeof(int8_t);
1956  }
1957
1958  Die->setSize(Offset - Die->getOffset());
1959  return Offset;
1960}
1961
1962// Compute the size and offset of all the DIEs.
1963void DwarfUnits::computeSizeAndOffsets() {
1964  // Offset from the beginning of debug info section.
1965  unsigned SecOffset = 0;
1966  for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1967         E = CUs.end(); I != E; ++I) {
1968    (*I)->setDebugInfoOffset(SecOffset);
1969    unsigned Offset =
1970      sizeof(int32_t) + // Length of Compilation Unit Info
1971      sizeof(int16_t) + // DWARF version number
1972      sizeof(int32_t) + // Offset Into Abbrev. Section
1973      sizeof(int8_t);   // Pointer Size (in bytes)
1974
1975    unsigned EndOffset = computeSizeAndOffset((*I)->getCUDie(), Offset);
1976    SecOffset += EndOffset;
1977  }
1978}
1979
1980// Emit initial Dwarf sections with a label at the start of each one.
1981void DwarfDebug::emitSectionLabels() {
1982  const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1983
1984  // Dwarf sections base addresses.
1985  DwarfInfoSectionSym =
1986    emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1987  DwarfAbbrevSectionSym =
1988    emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1989  if (useSplitDwarf())
1990    DwarfAbbrevDWOSectionSym =
1991      emitSectionSym(Asm, TLOF.getDwarfAbbrevDWOSection(),
1992                     "section_abbrev_dwo");
1993  emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1994
1995  if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1996    emitSectionSym(Asm, MacroInfo);
1997
1998  DwarfLineSectionSym =
1999    emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
2000  emitSectionSym(Asm, TLOF.getDwarfLocSection());
2001  if (GenerateDwarfPubNamesSection)
2002    emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
2003  emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
2004  DwarfStrSectionSym =
2005    emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
2006  if (useSplitDwarf()) {
2007    DwarfStrDWOSectionSym =
2008      emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
2009    DwarfAddrSectionSym =
2010      emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
2011  }
2012  DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
2013                                             "debug_range");
2014
2015  DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
2016                                           "section_debug_loc");
2017
2018  TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
2019  emitSectionSym(Asm, TLOF.getDataSection());
2020}
2021
2022// Recursively emits a debug information entry.
2023void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
2024  // Get the abbreviation for this DIE.
2025  unsigned AbbrevNumber = Die->getAbbrevNumber();
2026  const DIEAbbrev *Abbrev = Abbrevs->at(AbbrevNumber - 1);
2027
2028  // Emit the code (index) for the abbreviation.
2029  if (Asm->isVerbose())
2030    Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
2031                                Twine::utohexstr(Die->getOffset()) + ":0x" +
2032                                Twine::utohexstr(Die->getSize()) + " " +
2033                                dwarf::TagString(Abbrev->getTag()));
2034  Asm->EmitULEB128(AbbrevNumber);
2035
2036  const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
2037  const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
2038
2039  // Emit the DIE attribute values.
2040  for (unsigned i = 0, N = Values.size(); i < N; ++i) {
2041    unsigned Attr = AbbrevData[i].getAttribute();
2042    unsigned Form = AbbrevData[i].getForm();
2043    assert(Form && "Too many attributes for DIE (check abbreviation)");
2044
2045    if (Asm->isVerbose())
2046      Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
2047
2048    switch (Attr) {
2049    case dwarf::DW_AT_abstract_origin: {
2050      DIEEntry *E = cast<DIEEntry>(Values[i]);
2051      DIE *Origin = E->getEntry();
2052      unsigned Addr = Origin->getOffset();
2053      if (Form == dwarf::DW_FORM_ref_addr) {
2054        // For DW_FORM_ref_addr, output the offset from beginning of debug info
2055        // section. Origin->getOffset() returns the offset from start of the
2056        // compile unit.
2057        DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2058        Addr += Holder.getCUOffset(Origin->getCompileUnit());
2059      }
2060      Asm->OutStreamer.EmitIntValue(Addr,
2061          Form == dwarf::DW_FORM_ref_addr ? DIEEntry::getRefAddrSize(Asm) : 4);
2062      break;
2063    }
2064    case dwarf::DW_AT_ranges: {
2065      // DW_AT_range Value encodes offset in debug_range section.
2066      DIEInteger *V = cast<DIEInteger>(Values[i]);
2067
2068      if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
2069        Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
2070                                 V->getValue(),
2071                                 4);
2072      } else {
2073        Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
2074                                       V->getValue(),
2075                                       DwarfDebugRangeSectionSym,
2076                                       4);
2077      }
2078      break;
2079    }
2080    case dwarf::DW_AT_location: {
2081      if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
2082        if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2083          Asm->EmitLabelReference(L->getValue(), 4);
2084        else
2085          Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
2086      } else {
2087        Values[i]->EmitValue(Asm, Form);
2088      }
2089      break;
2090    }
2091    case dwarf::DW_AT_accessibility: {
2092      if (Asm->isVerbose()) {
2093        DIEInteger *V = cast<DIEInteger>(Values[i]);
2094        Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
2095      }
2096      Values[i]->EmitValue(Asm, Form);
2097      break;
2098    }
2099    default:
2100      // Emit an attribute using the defined form.
2101      Values[i]->EmitValue(Asm, Form);
2102      break;
2103    }
2104  }
2105
2106  // Emit the DIE children if any.
2107  if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
2108    const std::vector<DIE *> &Children = Die->getChildren();
2109
2110    for (unsigned j = 0, M = Children.size(); j < M; ++j)
2111      emitDIE(Children[j], Abbrevs);
2112
2113    if (Asm->isVerbose())
2114      Asm->OutStreamer.AddComment("End Of Children Mark");
2115    Asm->EmitInt8(0);
2116  }
2117}
2118
2119// Emit the various dwarf units to the unit section USection with
2120// the abbreviations going into ASection.
2121void DwarfUnits::emitUnits(DwarfDebug *DD,
2122                           const MCSection *USection,
2123                           const MCSection *ASection,
2124                           const MCSymbol *ASectionSym) {
2125  Asm->OutStreamer.SwitchSection(USection);
2126  for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
2127         E = CUs.end(); I != E; ++I) {
2128    CompileUnit *TheCU = *I;
2129    DIE *Die = TheCU->getCUDie();
2130
2131    // Emit the compile units header.
2132    Asm->OutStreamer
2133      .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(),
2134                                    TheCU->getUniqueID()));
2135
2136    // Emit size of content not including length itself
2137    unsigned ContentSize = Die->getSize() +
2138      sizeof(int16_t) + // DWARF version number
2139      sizeof(int32_t) + // Offset Into Abbrev. Section
2140      sizeof(int8_t);   // Pointer Size (in bytes)
2141
2142    Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
2143    Asm->EmitInt32(ContentSize);
2144    Asm->OutStreamer.AddComment("DWARF version number");
2145    Asm->EmitInt16(DD->getDwarfVersion());
2146    Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2147    Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
2148                           ASectionSym);
2149    Asm->OutStreamer.AddComment("Address Size (in bytes)");
2150    Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2151
2152    DD->emitDIE(Die, Abbreviations);
2153    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(),
2154                                                  TheCU->getUniqueID()));
2155  }
2156}
2157
2158/// For a given compile unit DIE, returns offset from beginning of debug info.
2159unsigned DwarfUnits::getCUOffset(DIE *Die) {
2160  assert(Die->getTag() == dwarf::DW_TAG_compile_unit  &&
2161         "Input DIE should be compile unit in getCUOffset.");
2162  for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
2163       E = CUs.end(); I != E; ++I) {
2164    CompileUnit *TheCU = *I;
2165    if (TheCU->getCUDie() == Die)
2166      return TheCU->getDebugInfoOffset();
2167  }
2168  llvm_unreachable("The compile unit DIE should belong to CUs in DwarfUnits.");
2169}
2170
2171// Emit the debug info section.
2172void DwarfDebug::emitDebugInfo() {
2173  DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2174
2175  Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(),
2176                   Asm->getObjFileLowering().getDwarfAbbrevSection(),
2177                   DwarfAbbrevSectionSym);
2178}
2179
2180// Emit the abbreviation section.
2181void DwarfDebug::emitAbbreviations() {
2182  if (!useSplitDwarf())
2183    emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
2184                &Abbreviations);
2185  else
2186    emitSkeletonAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
2187}
2188
2189void DwarfDebug::emitAbbrevs(const MCSection *Section,
2190                             std::vector<DIEAbbrev *> *Abbrevs) {
2191  // Check to see if it is worth the effort.
2192  if (!Abbrevs->empty()) {
2193    // Start the debug abbrev section.
2194    Asm->OutStreamer.SwitchSection(Section);
2195
2196    MCSymbol *Begin = Asm->GetTempSymbol(Section->getLabelBeginName());
2197    Asm->OutStreamer.EmitLabel(Begin);
2198
2199    // For each abbrevation.
2200    for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
2201      // Get abbreviation data
2202      const DIEAbbrev *Abbrev = Abbrevs->at(i);
2203
2204      // Emit the abbrevations code (base 1 index.)
2205      Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2206
2207      // Emit the abbreviations data.
2208      Abbrev->Emit(Asm);
2209    }
2210
2211    // Mark end of abbreviations.
2212    Asm->EmitULEB128(0, "EOM(3)");
2213
2214    MCSymbol *End = Asm->GetTempSymbol(Section->getLabelEndName());
2215    Asm->OutStreamer.EmitLabel(End);
2216  }
2217}
2218
2219// Emit the last address of the section and the end of the line matrix.
2220void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2221  // Define last address of section.
2222  Asm->OutStreamer.AddComment("Extended Op");
2223  Asm->EmitInt8(0);
2224
2225  Asm->OutStreamer.AddComment("Op size");
2226  Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
2227  Asm->OutStreamer.AddComment("DW_LNE_set_address");
2228  Asm->EmitInt8(dwarf::DW_LNE_set_address);
2229
2230  Asm->OutStreamer.AddComment("Section end label");
2231
2232  Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2233                                   Asm->getDataLayout().getPointerSize());
2234
2235  // Mark end of matrix.
2236  Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2237  Asm->EmitInt8(0);
2238  Asm->EmitInt8(1);
2239  Asm->EmitInt8(1);
2240}
2241
2242// Emit visible names into a hashed accelerator table section.
2243void DwarfDebug::emitAccelNames() {
2244  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2245                                           dwarf::DW_FORM_data4));
2246  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2247         E = CUMap.end(); I != E; ++I) {
2248    CompileUnit *TheCU = I->second;
2249    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
2250    for (StringMap<std::vector<DIE*> >::const_iterator
2251           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2252      StringRef Name = GI->getKey();
2253      const std::vector<DIE *> &Entities = GI->second;
2254      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2255             DE = Entities.end(); DI != DE; ++DI)
2256        AT.AddName(Name, (*DI));
2257    }
2258  }
2259
2260  AT.FinalizeTable(Asm, "Names");
2261  Asm->OutStreamer.SwitchSection(
2262    Asm->getObjFileLowering().getDwarfAccelNamesSection());
2263  MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2264  Asm->OutStreamer.EmitLabel(SectionBegin);
2265
2266  // Emit the full data.
2267  AT.Emit(Asm, SectionBegin, &InfoHolder);
2268}
2269
2270// Emit objective C classes and categories into a hashed accelerator table
2271// section.
2272void DwarfDebug::emitAccelObjC() {
2273  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2274                                           dwarf::DW_FORM_data4));
2275  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2276         E = CUMap.end(); I != E; ++I) {
2277    CompileUnit *TheCU = I->second;
2278    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
2279    for (StringMap<std::vector<DIE*> >::const_iterator
2280           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2281      StringRef Name = GI->getKey();
2282      const std::vector<DIE *> &Entities = GI->second;
2283      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2284             DE = Entities.end(); DI != DE; ++DI)
2285        AT.AddName(Name, (*DI));
2286    }
2287  }
2288
2289  AT.FinalizeTable(Asm, "ObjC");
2290  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2291                                 .getDwarfAccelObjCSection());
2292  MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2293  Asm->OutStreamer.EmitLabel(SectionBegin);
2294
2295  // Emit the full data.
2296  AT.Emit(Asm, SectionBegin, &InfoHolder);
2297}
2298
2299// Emit namespace dies into a hashed accelerator table.
2300void DwarfDebug::emitAccelNamespaces() {
2301  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2302                                           dwarf::DW_FORM_data4));
2303  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2304         E = CUMap.end(); I != E; ++I) {
2305    CompileUnit *TheCU = I->second;
2306    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
2307    for (StringMap<std::vector<DIE*> >::const_iterator
2308           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2309      StringRef Name = GI->getKey();
2310      const std::vector<DIE *> &Entities = GI->second;
2311      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2312             DE = Entities.end(); DI != DE; ++DI)
2313        AT.AddName(Name, (*DI));
2314    }
2315  }
2316
2317  AT.FinalizeTable(Asm, "namespac");
2318  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2319                                 .getDwarfAccelNamespaceSection());
2320  MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2321  Asm->OutStreamer.EmitLabel(SectionBegin);
2322
2323  // Emit the full data.
2324  AT.Emit(Asm, SectionBegin, &InfoHolder);
2325}
2326
2327// Emit type dies into a hashed accelerator table.
2328void DwarfDebug::emitAccelTypes() {
2329  std::vector<DwarfAccelTable::Atom> Atoms;
2330  Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2331                                        dwarf::DW_FORM_data4));
2332  Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
2333                                        dwarf::DW_FORM_data2));
2334  Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
2335                                        dwarf::DW_FORM_data1));
2336  DwarfAccelTable AT(Atoms);
2337  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2338         E = CUMap.end(); I != E; ++I) {
2339    CompileUnit *TheCU = I->second;
2340    const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
2341      = TheCU->getAccelTypes();
2342    for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
2343           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2344      StringRef Name = GI->getKey();
2345      const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2346      for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
2347             = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
2348        AT.AddName(Name, (*DI).first, (*DI).second);
2349    }
2350  }
2351
2352  AT.FinalizeTable(Asm, "types");
2353  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2354                                 .getDwarfAccelTypesSection());
2355  MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2356  Asm->OutStreamer.EmitLabel(SectionBegin);
2357
2358  // Emit the full data.
2359  AT.Emit(Asm, SectionBegin, &InfoHolder);
2360}
2361
2362/// emitDebugPubnames - Emit visible names into a debug pubnames section.
2363///
2364void DwarfDebug::emitDebugPubnames() {
2365  const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2366
2367  typedef DenseMap<const MDNode*, CompileUnit*> CUMapType;
2368  for (CUMapType::iterator I = CUMap.begin(), E = CUMap.end(); I != E; ++I) {
2369    CompileUnit *TheCU = I->second;
2370    unsigned ID = TheCU->getUniqueID();
2371
2372    if (TheCU->getGlobalNames().empty())
2373      continue;
2374
2375    // Start the dwarf pubnames section.
2376    Asm->OutStreamer.SwitchSection(
2377      Asm->getObjFileLowering().getDwarfPubNamesSection());
2378
2379    Asm->OutStreamer.AddComment("Length of Public Names Info");
2380    Asm->EmitLabelDifference(Asm->GetTempSymbol("pubnames_end", ID),
2381                             Asm->GetTempSymbol("pubnames_begin", ID), 4);
2382
2383    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
2384
2385    Asm->OutStreamer.AddComment("DWARF Version");
2386    Asm->EmitInt16(DwarfVersion);
2387
2388    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2389    Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2390                           DwarfInfoSectionSym);
2391
2392    Asm->OutStreamer.AddComment("Compilation Unit Length");
2393    Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(), ID),
2394                             Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2395                             4);
2396
2397    const StringMap<DIE*> &Globals = TheCU->getGlobalNames();
2398    for (StringMap<DIE*>::const_iterator
2399           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2400      const char *Name = GI->getKeyData();
2401      const DIE *Entity = GI->second;
2402
2403      Asm->OutStreamer.AddComment("DIE offset");
2404      Asm->EmitInt32(Entity->getOffset());
2405
2406      if (Asm->isVerbose())
2407        Asm->OutStreamer.AddComment("External Name");
2408      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2409    }
2410
2411    Asm->OutStreamer.AddComment("End Mark");
2412    Asm->EmitInt32(0);
2413    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end", ID));
2414  }
2415}
2416
2417void DwarfDebug::emitDebugPubTypes() {
2418  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2419         E = CUMap.end(); I != E; ++I) {
2420    CompileUnit *TheCU = I->second;
2421    // Start the dwarf pubtypes section.
2422    Asm->OutStreamer.SwitchSection(
2423      Asm->getObjFileLowering().getDwarfPubTypesSection());
2424    Asm->OutStreamer.AddComment("Length of Public Types Info");
2425    Asm->EmitLabelDifference(
2426      Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2427      Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2428
2429    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2430                                                  TheCU->getUniqueID()));
2431
2432    if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2433    Asm->EmitInt16(DwarfVersion);
2434
2435    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2436    const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2437    Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(),
2438                                              TheCU->getUniqueID()),
2439                           DwarfInfoSectionSym);
2440
2441    Asm->OutStreamer.AddComment("Compilation Unit Length");
2442    Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(),
2443                                                TheCU->getUniqueID()),
2444                             Asm->GetTempSymbol(ISec->getLabelBeginName(),
2445                                                TheCU->getUniqueID()),
2446                             4);
2447
2448    const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2449    for (StringMap<DIE*>::const_iterator
2450           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2451      const char *Name = GI->getKeyData();
2452      DIE *Entity = GI->second;
2453
2454      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2455      Asm->EmitInt32(Entity->getOffset());
2456
2457      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2458      // Emit the name with a terminating null byte.
2459      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2460    }
2461
2462    Asm->OutStreamer.AddComment("End Mark");
2463    Asm->EmitInt32(0);
2464    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2465                                                  TheCU->getUniqueID()));
2466  }
2467}
2468
2469// Emit strings into a string section.
2470void DwarfUnits::emitStrings(const MCSection *StrSection,
2471                             const MCSection *OffsetSection = NULL,
2472                             const MCSymbol *StrSecSym = NULL) {
2473
2474  if (StringPool.empty()) return;
2475
2476  // Start the dwarf str section.
2477  Asm->OutStreamer.SwitchSection(StrSection);
2478
2479  // Get all of the string pool entries and put them in an array by their ID so
2480  // we can sort them.
2481  SmallVector<std::pair<unsigned,
2482                 StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2483
2484  for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2485         I = StringPool.begin(), E = StringPool.end();
2486       I != E; ++I)
2487    Entries.push_back(std::make_pair(I->second.second, &*I));
2488
2489  array_pod_sort(Entries.begin(), Entries.end());
2490
2491  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2492    // Emit a label for reference from debug information entries.
2493    Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2494
2495    // Emit the string itself with a terminating null byte.
2496    Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2497                                         Entries[i].second->getKeyLength()+1));
2498  }
2499
2500  // If we've got an offset section go ahead and emit that now as well.
2501  if (OffsetSection) {
2502    Asm->OutStreamer.SwitchSection(OffsetSection);
2503    unsigned offset = 0;
2504    unsigned size = 4; // FIXME: DWARF64 is 8.
2505    for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2506      Asm->OutStreamer.EmitIntValue(offset, size);
2507      offset += Entries[i].second->getKeyLength() + 1;
2508    }
2509  }
2510}
2511
2512// Emit strings into a string section.
2513void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2514
2515  if (AddressPool.empty()) return;
2516
2517  // Start the dwarf addr section.
2518  Asm->OutStreamer.SwitchSection(AddrSection);
2519
2520  // Order the address pool entries by ID
2521  SmallVector<const MCExpr *, 64> Entries(AddressPool.size());
2522
2523  for (DenseMap<const MCExpr *, unsigned>::iterator I = AddressPool.begin(),
2524                                                    E = AddressPool.end();
2525       I != E; ++I)
2526    Entries[I->second] = I->first;
2527
2528  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2529    // Emit an expression for reference from debug information entries.
2530    if (const MCExpr *Expr = Entries[i])
2531      Asm->OutStreamer.EmitValue(Expr, Asm->getDataLayout().getPointerSize());
2532    else
2533      Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2534  }
2535
2536}
2537
2538// Emit visible names into a debug str section.
2539void DwarfDebug::emitDebugStr() {
2540  DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2541  Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2542}
2543
2544// Emit locations into the debug loc section.
2545void DwarfDebug::emitDebugLoc() {
2546  if (DotDebugLocEntries.empty())
2547    return;
2548
2549  for (SmallVectorImpl<DotDebugLocEntry>::iterator
2550         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2551       I != E; ++I) {
2552    DotDebugLocEntry &Entry = *I;
2553    if (I + 1 != DotDebugLocEntries.end())
2554      Entry.Merge(I+1);
2555  }
2556
2557  // Start the dwarf loc section.
2558  Asm->OutStreamer.SwitchSection(
2559    Asm->getObjFileLowering().getDwarfLocSection());
2560  unsigned char Size = Asm->getDataLayout().getPointerSize();
2561  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2562  unsigned index = 1;
2563  for (SmallVectorImpl<DotDebugLocEntry>::iterator
2564         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2565       I != E; ++I, ++index) {
2566    DotDebugLocEntry &Entry = *I;
2567    if (Entry.isMerged()) continue;
2568    if (Entry.isEmpty()) {
2569      Asm->OutStreamer.EmitIntValue(0, Size);
2570      Asm->OutStreamer.EmitIntValue(0, Size);
2571      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2572    } else {
2573      Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size);
2574      Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size);
2575      DIVariable DV(Entry.getVariable());
2576      Asm->OutStreamer.AddComment("Loc expr size");
2577      MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2578      MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2579      Asm->EmitLabelDifference(end, begin, 2);
2580      Asm->OutStreamer.EmitLabel(begin);
2581      if (Entry.isInt()) {
2582        DIBasicType BTy(DV.getType());
2583        if (BTy.Verify() &&
2584            (BTy.getEncoding()  == dwarf::DW_ATE_signed
2585             || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2586          Asm->OutStreamer.AddComment("DW_OP_consts");
2587          Asm->EmitInt8(dwarf::DW_OP_consts);
2588          Asm->EmitSLEB128(Entry.getInt());
2589        } else {
2590          Asm->OutStreamer.AddComment("DW_OP_constu");
2591          Asm->EmitInt8(dwarf::DW_OP_constu);
2592          Asm->EmitULEB128(Entry.getInt());
2593        }
2594      } else if (Entry.isLocation()) {
2595        MachineLocation Loc = Entry.getLoc();
2596        if (!DV.hasComplexAddress())
2597          // Regular entry.
2598          Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2599        else {
2600          // Complex address entry.
2601          unsigned N = DV.getNumAddrElements();
2602          unsigned i = 0;
2603          if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2604            if (Loc.getOffset()) {
2605              i = 2;
2606              Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2607              Asm->OutStreamer.AddComment("DW_OP_deref");
2608              Asm->EmitInt8(dwarf::DW_OP_deref);
2609              Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2610              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2611              Asm->EmitSLEB128(DV.getAddrElement(1));
2612            } else {
2613              // If first address element is OpPlus then emit
2614              // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2615              MachineLocation TLoc(Loc.getReg(), DV.getAddrElement(1));
2616              Asm->EmitDwarfRegOp(TLoc, DV.isIndirect());
2617              i = 2;
2618            }
2619          } else {
2620            Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2621          }
2622
2623          // Emit remaining complex address elements.
2624          for (; i < N; ++i) {
2625            uint64_t Element = DV.getAddrElement(i);
2626            if (Element == DIBuilder::OpPlus) {
2627              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2628              Asm->EmitULEB128(DV.getAddrElement(++i));
2629            } else if (Element == DIBuilder::OpDeref) {
2630              if (!Loc.isReg())
2631                Asm->EmitInt8(dwarf::DW_OP_deref);
2632            } else
2633              llvm_unreachable("unknown Opcode found in complex address");
2634          }
2635        }
2636      }
2637      // else ... ignore constant fp. There is not any good way to
2638      // to represent them here in dwarf.
2639      Asm->OutStreamer.EmitLabel(end);
2640    }
2641  }
2642}
2643
2644// Emit visible names into a debug aranges section.
2645void DwarfDebug::emitDebugARanges() {
2646  // Start the dwarf aranges section.
2647  Asm->OutStreamer.SwitchSection(
2648                          Asm->getObjFileLowering().getDwarfARangesSection());
2649}
2650
2651// Emit visible names into a debug ranges section.
2652void DwarfDebug::emitDebugRanges() {
2653  // Start the dwarf ranges section.
2654  Asm->OutStreamer.SwitchSection(
2655    Asm->getObjFileLowering().getDwarfRangesSection());
2656  unsigned char Size = Asm->getDataLayout().getPointerSize();
2657  for (SmallVectorImpl<const MCSymbol *>::iterator
2658         I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2659       I != E; ++I) {
2660    if (*I)
2661      Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
2662    else
2663      Asm->OutStreamer.EmitIntValue(0, Size);
2664  }
2665}
2666
2667// Emit visible names into a debug macinfo section.
2668void DwarfDebug::emitDebugMacInfo() {
2669  if (const MCSection *LineInfo =
2670      Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2671    // Start the dwarf macinfo section.
2672    Asm->OutStreamer.SwitchSection(LineInfo);
2673  }
2674}
2675
2676// Emit inline info using following format.
2677// Section Header:
2678// 1. length of section
2679// 2. Dwarf version number
2680// 3. address size.
2681//
2682// Entries (one "entry" for each function that was inlined):
2683//
2684// 1. offset into __debug_str section for MIPS linkage name, if exists;
2685//   otherwise offset into __debug_str for regular function name.
2686// 2. offset into __debug_str section for regular function name.
2687// 3. an unsigned LEB128 number indicating the number of distinct inlining
2688// instances for the function.
2689//
2690// The rest of the entry consists of a {die_offset, low_pc} pair for each
2691// inlined instance; the die_offset points to the inlined_subroutine die in the
2692// __debug_info section, and the low_pc is the starting address for the
2693// inlining instance.
2694void DwarfDebug::emitDebugInlineInfo() {
2695  if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2696    return;
2697
2698  if (!FirstCU)
2699    return;
2700
2701  Asm->OutStreamer.SwitchSection(
2702                        Asm->getObjFileLowering().getDwarfDebugInlineSection());
2703
2704  Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2705  Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2706                           Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2707
2708  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2709
2710  Asm->OutStreamer.AddComment("Dwarf Version");
2711  Asm->EmitInt16(DwarfVersion);
2712  Asm->OutStreamer.AddComment("Address Size (in bytes)");
2713  Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2714
2715  for (SmallVectorImpl<const MDNode *>::iterator I = InlinedSPNodes.begin(),
2716         E = InlinedSPNodes.end(); I != E; ++I) {
2717
2718    const MDNode *Node = *I;
2719    InlineInfoMap::iterator II = InlineInfo.find(Node);
2720    SmallVectorImpl<InlineInfoLabels> &Labels = II->second;
2721    DISubprogram SP(Node);
2722    StringRef LName = SP.getLinkageName();
2723    StringRef Name = SP.getName();
2724
2725    Asm->OutStreamer.AddComment("MIPS linkage name");
2726    if (LName.empty())
2727      Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2728                             DwarfStrSectionSym);
2729    else
2730      Asm->EmitSectionOffset(
2731          InfoHolder.getStringPoolEntry(Function::getRealLinkageName(LName)),
2732          DwarfStrSectionSym);
2733
2734    Asm->OutStreamer.AddComment("Function name");
2735    Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2736                           DwarfStrSectionSym);
2737    Asm->EmitULEB128(Labels.size(), "Inline count");
2738
2739    for (SmallVectorImpl<InlineInfoLabels>::iterator LI = Labels.begin(),
2740           LE = Labels.end(); LI != LE; ++LI) {
2741      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2742      Asm->EmitInt32(LI->second->getOffset());
2743
2744      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2745      Asm->OutStreamer.EmitSymbolValue(LI->first,
2746                                       Asm->getDataLayout().getPointerSize());
2747    }
2748  }
2749
2750  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2751}
2752
2753// DWARF5 Experimental Separate Dwarf emitters.
2754
2755// This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2756// DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2757// DW_AT_ranges_base, DW_AT_addr_base. If DW_AT_ranges is present,
2758// DW_AT_low_pc and DW_AT_high_pc are not used, and vice versa.
2759CompileUnit *DwarfDebug::constructSkeletonCU(const MDNode *N) {
2760  DICompileUnit DIUnit(N);
2761  CompilationDir = DIUnit.getDirectory();
2762
2763  DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2764  CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
2765                                       DIUnit.getLanguage(), Die, N, Asm,
2766                                       this, &SkeletonHolder);
2767
2768  NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2769                        DIUnit.getSplitDebugFilename());
2770
2771  // This should be a unique identifier when we want to build .dwp files.
2772  NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
2773
2774  // Relocate to the beginning of the addr_base section, else 0 for the
2775  // beginning of the one for this compile unit.
2776  if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2777    NewCU->addLabel(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset,
2778                    DwarfAddrSectionSym);
2779  else
2780    NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base,
2781                   dwarf::DW_FORM_sec_offset, 0);
2782
2783  // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2784  // into an entity. We're using 0, or a NULL label for this.
2785  NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2786
2787  // DW_AT_stmt_list is a offset of line number information for this
2788  // compile unit in debug_line section.
2789  // FIXME: Should handle multiple compile units.
2790  if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2791    NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2792                    DwarfLineSectionSym);
2793  else
2794    NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2795
2796  if (!CompilationDir.empty())
2797    NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2798
2799  SkeletonHolder.addUnit(NewCU);
2800  SkeletonCUs.push_back(NewCU);
2801
2802  return NewCU;
2803}
2804
2805void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
2806  assert(useSplitDwarf() && "No split dwarf debug info?");
2807  emitAbbrevs(Section, &SkeletonAbbrevs);
2808}
2809
2810// Emit the .debug_info.dwo section for separated dwarf. This contains the
2811// compile units that would normally be in debug_info.
2812void DwarfDebug::emitDebugInfoDWO() {
2813  assert(useSplitDwarf() && "No split dwarf debug info?");
2814  InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
2815                       Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2816                       DwarfAbbrevDWOSectionSym);
2817}
2818
2819// Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2820// abbreviations for the .debug_info.dwo section.
2821void DwarfDebug::emitDebugAbbrevDWO() {
2822  assert(useSplitDwarf() && "No split dwarf?");
2823  emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2824              &Abbreviations);
2825}
2826
2827// Emit the .debug_str.dwo section for separated dwarf. This contains the
2828// string section and is identical in format to traditional .debug_str
2829// sections.
2830void DwarfDebug::emitDebugStrDWO() {
2831  assert(useSplitDwarf() && "No split dwarf?");
2832  const MCSection *OffSec = Asm->getObjFileLowering()
2833                            .getDwarfStrOffDWOSection();
2834  const MCSymbol *StrSym = DwarfStrSectionSym;
2835  InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
2836                         OffSec, StrSym);
2837}
2838