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