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