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