DwarfDebug.cpp revision a486f55569c584d00cfdde43a8755d68cdb68c4f
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 = dwarf::GIEL_STATIC;
2360
2361  // We could have a specification DIE that has our most of our knowledge,
2362  // look for that now.
2363  DIEValue *SpecVal = Die->findAttribute(dwarf::DW_AT_specification);
2364  if (SpecVal) {
2365    DIE *SpecDIE = cast<DIEEntry>(SpecVal)->getEntry();
2366    if (SpecDIE->findAttribute(dwarf::DW_AT_external))
2367      Linkage = dwarf::GIEL_EXTERNAL;
2368  } else if (Die->findAttribute(dwarf::DW_AT_external))
2369    Linkage = dwarf::GIEL_EXTERNAL;
2370
2371  switch (Die->getTag()) {
2372  case dwarf::DW_TAG_class_type:
2373  case dwarf::DW_TAG_structure_type:
2374  case dwarf::DW_TAG_union_type:
2375  case dwarf::DW_TAG_enumeration_type:
2376    return dwarf::PubIndexEntryDescriptor(
2377        dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
2378                              ? dwarf::GIEL_STATIC
2379                              : dwarf::GIEL_EXTERNAL);
2380  case dwarf::DW_TAG_typedef:
2381  case dwarf::DW_TAG_base_type:
2382  case dwarf::DW_TAG_subrange_type:
2383    return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
2384  case dwarf::DW_TAG_namespace:
2385    return dwarf::GIEK_TYPE;
2386  case dwarf::DW_TAG_subprogram:
2387    return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
2388  case dwarf::DW_TAG_constant:
2389  case dwarf::DW_TAG_variable:
2390    return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
2391  case dwarf::DW_TAG_enumerator:
2392    return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
2393                                          dwarf::GIEL_STATIC);
2394  default:
2395    return dwarf::GIEK_NONE;
2396  }
2397}
2398
2399/// emitDebugPubNames - Emit visible names into a debug pubnames section.
2400///
2401void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
2402  const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2403  const MCSection *PSec =
2404      GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
2405               : Asm->getObjFileLowering().getDwarfPubNamesSection();
2406
2407  typedef DenseMap<const MDNode*, CompileUnit*> CUMapType;
2408  for (CUMapType::iterator I = CUMap.begin(), E = CUMap.end(); I != E; ++I) {
2409    CompileUnit *TheCU = I->second;
2410    unsigned ID = TheCU->getUniqueID();
2411
2412    // Start the dwarf pubnames section.
2413    Asm->OutStreamer.SwitchSection(PSec);
2414
2415    // Emit a label so we can reference the beginning of this pubname section.
2416    if (GnuStyle)
2417      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("gnu_pubnames",
2418                                                    TheCU->getUniqueID()));
2419
2420    // Emit the header.
2421    Asm->OutStreamer.AddComment("Length of Public Names Info");
2422    Asm->EmitLabelDifference(Asm->GetTempSymbol("pubnames_end", ID),
2423                             Asm->GetTempSymbol("pubnames_begin", ID), 4);
2424
2425    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
2426
2427    Asm->OutStreamer.AddComment("DWARF Version");
2428    Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION);
2429
2430    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2431    Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2432                           DwarfInfoSectionSym);
2433
2434    Asm->OutStreamer.AddComment("Compilation Unit Length");
2435    Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(), ID),
2436                             Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2437                             4);
2438
2439    // Emit the pubnames for this compilation unit.
2440    const StringMap<DIE*> &Globals = TheCU->getGlobalNames();
2441    for (StringMap<DIE*>::const_iterator
2442           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2443      const char *Name = GI->getKeyData();
2444      DIE *Entity = GI->second;
2445
2446      Asm->OutStreamer.AddComment("DIE offset");
2447      Asm->EmitInt32(Entity->getOffset());
2448
2449      if (GnuStyle) {
2450        dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheCU, Entity);
2451        Asm->OutStreamer.AddComment(
2452            Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
2453            dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
2454        Asm->EmitInt8(Desc.toBits());
2455      }
2456
2457      if (Asm->isVerbose())
2458        Asm->OutStreamer.AddComment("External Name");
2459      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2460    }
2461
2462    Asm->OutStreamer.AddComment("End Mark");
2463    Asm->EmitInt32(0);
2464    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end", ID));
2465  }
2466}
2467
2468void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
2469  const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2470  const MCSection *PSec =
2471      GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
2472               : Asm->getObjFileLowering().getDwarfPubTypesSection();
2473
2474  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2475                                                         E = CUMap.end();
2476       I != E; ++I) {
2477    CompileUnit *TheCU = I->second;
2478    // Start the dwarf pubtypes section.
2479    Asm->OutStreamer.SwitchSection(PSec);
2480
2481    // Emit a label so we can reference the beginning of this pubtype section.
2482    if (GnuStyle)
2483      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("gnu_pubtypes",
2484                                                    TheCU->getUniqueID()));
2485
2486    // Emit the header.
2487    Asm->OutStreamer.AddComment("Length of Public Types Info");
2488    Asm->EmitLabelDifference(
2489        Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2490        Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2491
2492    Asm->OutStreamer.EmitLabel(
2493        Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()));
2494
2495    if (Asm->isVerbose())
2496      Asm->OutStreamer.AddComment("DWARF Version");
2497    Asm->EmitInt16(dwarf::DW_PUBTYPES_VERSION);
2498
2499    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2500    Asm->EmitSectionOffset(
2501        Asm->GetTempSymbol(ISec->getLabelBeginName(), TheCU->getUniqueID()),
2502        DwarfInfoSectionSym);
2503
2504    Asm->OutStreamer.AddComment("Compilation Unit Length");
2505    Asm->EmitLabelDifference(
2506        Asm->GetTempSymbol(ISec->getLabelEndName(), TheCU->getUniqueID()),
2507        Asm->GetTempSymbol(ISec->getLabelBeginName(), TheCU->getUniqueID()), 4);
2508
2509    // Emit the pubtypes.
2510    const StringMap<DIE *> &Globals = TheCU->getGlobalTypes();
2511    for (StringMap<DIE *>::const_iterator GI = Globals.begin(),
2512                                          GE = Globals.end();
2513         GI != GE; ++GI) {
2514      const char *Name = GI->getKeyData();
2515      DIE *Entity = GI->second;
2516
2517      if (Asm->isVerbose())
2518        Asm->OutStreamer.AddComment("DIE offset");
2519      Asm->EmitInt32(Entity->getOffset());
2520
2521      if (GnuStyle) {
2522        dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheCU, Entity);
2523        Asm->OutStreamer.AddComment(
2524            Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
2525            dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
2526        Asm->EmitInt8(Desc.toBits());
2527      }
2528
2529      if (Asm->isVerbose())
2530        Asm->OutStreamer.AddComment("External Name");
2531
2532      // Emit the name with a terminating null byte.
2533      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength() + 1));
2534    }
2535
2536    Asm->OutStreamer.AddComment("End Mark");
2537    Asm->EmitInt32(0);
2538    Asm->OutStreamer.EmitLabel(
2539        Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()));
2540  }
2541}
2542
2543// Emit strings into a string section.
2544void DwarfUnits::emitStrings(const MCSection *StrSection,
2545                             const MCSection *OffsetSection = NULL,
2546                             const MCSymbol *StrSecSym = NULL) {
2547
2548  if (StringPool.empty()) return;
2549
2550  // Start the dwarf str section.
2551  Asm->OutStreamer.SwitchSection(StrSection);
2552
2553  // Get all of the string pool entries and put them in an array by their ID so
2554  // we can sort them.
2555  SmallVector<std::pair<unsigned,
2556                 StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2557
2558  for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2559         I = StringPool.begin(), E = StringPool.end();
2560       I != E; ++I)
2561    Entries.push_back(std::make_pair(I->second.second, &*I));
2562
2563  array_pod_sort(Entries.begin(), Entries.end());
2564
2565  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2566    // Emit a label for reference from debug information entries.
2567    Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2568
2569    // Emit the string itself with a terminating null byte.
2570    Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2571                                         Entries[i].second->getKeyLength()+1));
2572  }
2573
2574  // If we've got an offset section go ahead and emit that now as well.
2575  if (OffsetSection) {
2576    Asm->OutStreamer.SwitchSection(OffsetSection);
2577    unsigned offset = 0;
2578    unsigned size = 4; // FIXME: DWARF64 is 8.
2579    for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2580      Asm->OutStreamer.EmitIntValue(offset, size);
2581      offset += Entries[i].second->getKeyLength() + 1;
2582    }
2583  }
2584}
2585
2586// Emit strings into a string section.
2587void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2588
2589  if (AddressPool.empty()) return;
2590
2591  // Start the dwarf addr section.
2592  Asm->OutStreamer.SwitchSection(AddrSection);
2593
2594  // Order the address pool entries by ID
2595  SmallVector<const MCExpr *, 64> Entries(AddressPool.size());
2596
2597  for (DenseMap<const MCExpr *, unsigned>::iterator I = AddressPool.begin(),
2598                                                    E = AddressPool.end();
2599       I != E; ++I)
2600    Entries[I->second] = I->first;
2601
2602  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2603    // Emit an expression for reference from debug information entries.
2604    if (const MCExpr *Expr = Entries[i])
2605      Asm->OutStreamer.EmitValue(Expr, Asm->getDataLayout().getPointerSize());
2606    else
2607      Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2608  }
2609
2610}
2611
2612// Emit visible names into a debug str section.
2613void DwarfDebug::emitDebugStr() {
2614  DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2615  Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2616}
2617
2618// Emit locations into the debug loc section.
2619void DwarfDebug::emitDebugLoc() {
2620  if (DotDebugLocEntries.empty())
2621    return;
2622
2623  for (SmallVectorImpl<DotDebugLocEntry>::iterator
2624         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2625       I != E; ++I) {
2626    DotDebugLocEntry &Entry = *I;
2627    if (I + 1 != DotDebugLocEntries.end())
2628      Entry.Merge(I+1);
2629  }
2630
2631  // Start the dwarf loc section.
2632  Asm->OutStreamer.SwitchSection(
2633    Asm->getObjFileLowering().getDwarfLocSection());
2634  unsigned char Size = Asm->getDataLayout().getPointerSize();
2635  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2636  unsigned index = 1;
2637  for (SmallVectorImpl<DotDebugLocEntry>::iterator
2638         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2639       I != E; ++I, ++index) {
2640    DotDebugLocEntry &Entry = *I;
2641    if (Entry.isMerged()) continue;
2642    if (Entry.isEmpty()) {
2643      Asm->OutStreamer.EmitIntValue(0, Size);
2644      Asm->OutStreamer.EmitIntValue(0, Size);
2645      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2646    } else {
2647      Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size);
2648      Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size);
2649      DIVariable DV(Entry.getVariable());
2650      Asm->OutStreamer.AddComment("Loc expr size");
2651      MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2652      MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2653      Asm->EmitLabelDifference(end, begin, 2);
2654      Asm->OutStreamer.EmitLabel(begin);
2655      if (Entry.isInt()) {
2656        DIBasicType BTy(DV.getType());
2657        if (BTy.Verify() &&
2658            (BTy.getEncoding()  == dwarf::DW_ATE_signed
2659             || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2660          Asm->OutStreamer.AddComment("DW_OP_consts");
2661          Asm->EmitInt8(dwarf::DW_OP_consts);
2662          Asm->EmitSLEB128(Entry.getInt());
2663        } else {
2664          Asm->OutStreamer.AddComment("DW_OP_constu");
2665          Asm->EmitInt8(dwarf::DW_OP_constu);
2666          Asm->EmitULEB128(Entry.getInt());
2667        }
2668      } else if (Entry.isLocation()) {
2669        MachineLocation Loc = Entry.getLoc();
2670        if (!DV.hasComplexAddress())
2671          // Regular entry.
2672          Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2673        else {
2674          // Complex address entry.
2675          unsigned N = DV.getNumAddrElements();
2676          unsigned i = 0;
2677          if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2678            if (Loc.getOffset()) {
2679              i = 2;
2680              Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2681              Asm->OutStreamer.AddComment("DW_OP_deref");
2682              Asm->EmitInt8(dwarf::DW_OP_deref);
2683              Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2684              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2685              Asm->EmitSLEB128(DV.getAddrElement(1));
2686            } else {
2687              // If first address element is OpPlus then emit
2688              // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2689              MachineLocation TLoc(Loc.getReg(), DV.getAddrElement(1));
2690              Asm->EmitDwarfRegOp(TLoc, DV.isIndirect());
2691              i = 2;
2692            }
2693          } else {
2694            Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2695          }
2696
2697          // Emit remaining complex address elements.
2698          for (; i < N; ++i) {
2699            uint64_t Element = DV.getAddrElement(i);
2700            if (Element == DIBuilder::OpPlus) {
2701              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2702              Asm->EmitULEB128(DV.getAddrElement(++i));
2703            } else if (Element == DIBuilder::OpDeref) {
2704              if (!Loc.isReg())
2705                Asm->EmitInt8(dwarf::DW_OP_deref);
2706            } else
2707              llvm_unreachable("unknown Opcode found in complex address");
2708          }
2709        }
2710      }
2711      // else ... ignore constant fp. There is not any good way to
2712      // to represent them here in dwarf.
2713      Asm->OutStreamer.EmitLabel(end);
2714    }
2715  }
2716}
2717
2718struct SymbolCUSorter {
2719  SymbolCUSorter(const MCStreamer &s) : Streamer(s) {}
2720  const MCStreamer &Streamer;
2721
2722  bool operator() (const SymbolCU &A, const SymbolCU &B) {
2723    unsigned IA = A.Sym ? Streamer.GetSymbolOrder(A.Sym) : 0;
2724    unsigned IB = B.Sym ? Streamer.GetSymbolOrder(B.Sym) : 0;
2725
2726    // Symbols with no order assigned should be placed at the end.
2727    // (e.g. section end labels)
2728    if (IA == 0)
2729      IA = (unsigned)(-1);
2730    if (IB == 0)
2731      IB = (unsigned)(-1);
2732    return IA < IB;
2733  }
2734};
2735
2736static bool CUSort(const CompileUnit *A, const CompileUnit *B) {
2737    return (A->getUniqueID() < B->getUniqueID());
2738}
2739
2740struct ArangeSpan {
2741  const MCSymbol *Start, *End;
2742};
2743
2744// Emit a debug aranges section, containing a CU lookup for any
2745// address we can tie back to a CU.
2746void DwarfDebug::emitDebugARanges() {
2747  // Start the dwarf aranges section.
2748  Asm->OutStreamer
2749      .SwitchSection(Asm->getObjFileLowering().getDwarfARangesSection());
2750
2751  typedef DenseMap<CompileUnit *, std::vector<ArangeSpan> > SpansType;
2752
2753  SpansType Spans;
2754
2755  // Build a list of sections used.
2756  std::vector<const MCSection *> Sections;
2757  for (SectionMapType::iterator it = SectionMap.begin(); it != SectionMap.end();
2758       it++) {
2759    const MCSection *Section = it->first;
2760    Sections.push_back(Section);
2761  }
2762
2763  // Sort the sections into order.
2764  // This is only done to ensure consistent output order across different runs.
2765  std::sort(Sections.begin(), Sections.end(), SectionSort);
2766
2767  // Build a set of address spans, sorted by CU.
2768  for (size_t SecIdx=0;SecIdx<Sections.size();SecIdx++) {
2769    const MCSection *Section = Sections[SecIdx];
2770    SmallVector<SymbolCU, 8> &List = SectionMap[Section];
2771    if (List.size() < 2)
2772      continue;
2773
2774    // Sort the symbols by offset within the section.
2775    SymbolCUSorter sorter(Asm->OutStreamer);
2776    std::sort(List.begin(), List.end(), sorter);
2777
2778    // If we have no section (e.g. common), just write out
2779    // individual spans for each symbol.
2780    if (Section == NULL) {
2781      for (size_t n = 0; n < List.size(); n++) {
2782        const SymbolCU &Cur = List[n];
2783
2784        ArangeSpan Span;
2785        Span.Start = Cur.Sym;
2786        Span.End = NULL;
2787        if (Cur.CU)
2788          Spans[Cur.CU].push_back(Span);
2789      }
2790    } else {
2791      // Build spans between each label.
2792      const MCSymbol *StartSym = List[0].Sym;
2793      for (size_t n = 1; n < List.size(); n++) {
2794        const SymbolCU &Prev = List[n - 1];
2795        const SymbolCU &Cur = List[n];
2796
2797        // Try and build the longest span we can within the same CU.
2798        if (Cur.CU != Prev.CU) {
2799          ArangeSpan Span;
2800          Span.Start = StartSym;
2801          Span.End = Cur.Sym;
2802          Spans[Prev.CU].push_back(Span);
2803          StartSym = Cur.Sym;
2804        }
2805      }
2806    }
2807  }
2808
2809  const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2810  unsigned PtrSize = Asm->getDataLayout().getPointerSize();
2811
2812  // Build a list of CUs used.
2813  std::vector<CompileUnit *> CUs;
2814  for (SpansType::iterator it = Spans.begin(); it != Spans.end(); it++) {
2815    CompileUnit *CU = it->first;
2816    CUs.push_back(CU);
2817  }
2818
2819  // Sort the CU list (again, to ensure consistent output order).
2820  std::sort(CUs.begin(), CUs.end(), CUSort);
2821
2822  // Emit an arange table for each CU we used.
2823  for (size_t CUIdx=0;CUIdx<CUs.size();CUIdx++) {
2824    CompileUnit *CU = CUs[CUIdx];
2825    std::vector<ArangeSpan> &List = Spans[CU];
2826
2827    // Emit size of content not including length itself.
2828    unsigned ContentSize
2829        = sizeof(int16_t) // DWARF ARange version number
2830        + sizeof(int32_t) // Offset of CU in the .debug_info section
2831        + sizeof(int8_t)  // Pointer Size (in bytes)
2832        + sizeof(int8_t); // Segment Size (in bytes)
2833
2834    unsigned TupleSize = PtrSize * 2;
2835
2836    // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
2837    unsigned Padding = 0;
2838    while (((sizeof(int32_t) + ContentSize + Padding) % TupleSize) != 0)
2839      Padding++;
2840
2841    ContentSize += Padding;
2842    ContentSize += (List.size() + 1) * TupleSize;
2843
2844    // For each compile unit, write the list of spans it covers.
2845    Asm->OutStreamer.AddComment("Length of ARange Set");
2846    Asm->EmitInt32(ContentSize);
2847    Asm->OutStreamer.AddComment("DWARF Arange version number");
2848    Asm->EmitInt16(dwarf::DW_ARANGES_VERSION);
2849    Asm->OutStreamer.AddComment("Offset Into Debug Info Section");
2850    Asm->EmitSectionOffset(
2851        Asm->GetTempSymbol(ISec->getLabelBeginName(), CU->getUniqueID()),
2852        DwarfInfoSectionSym);
2853    Asm->OutStreamer.AddComment("Address Size (in bytes)");
2854    Asm->EmitInt8(PtrSize);
2855    Asm->OutStreamer.AddComment("Segment Size (in bytes)");
2856    Asm->EmitInt8(0);
2857
2858    for (unsigned n = 0; n < Padding; n++)
2859      Asm->EmitInt8(0xff);
2860
2861    for (unsigned n = 0; n < List.size(); n++) {
2862      const ArangeSpan &Span = List[n];
2863      Asm->EmitLabelReference(Span.Start, PtrSize);
2864
2865      // Calculate the size as being from the span start to it's end.
2866      if (Span.End) {
2867        Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
2868      } else {
2869        // For symbols without an end marker (e.g. common), we
2870        // write a single arange entry containing just that one symbol.
2871        uint64_t Size = SymSize[Span.Start];
2872        if (Size == 0)
2873          Size = 1;
2874
2875        Asm->OutStreamer.EmitIntValue(Size, PtrSize);
2876      }
2877    }
2878
2879    Asm->OutStreamer.AddComment("ARange terminator");
2880    Asm->OutStreamer.EmitIntValue(0, PtrSize);
2881    Asm->OutStreamer.EmitIntValue(0, PtrSize);
2882  }
2883}
2884
2885// Emit visible names into a debug ranges section.
2886void DwarfDebug::emitDebugRanges() {
2887  // Start the dwarf ranges section.
2888  Asm->OutStreamer
2889      .SwitchSection(Asm->getObjFileLowering().getDwarfRangesSection());
2890  unsigned char Size = Asm->getDataLayout().getPointerSize();
2891  for (SmallVectorImpl<const MCSymbol *>::iterator
2892         I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2893       I != E; ++I) {
2894    if (*I)
2895      Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
2896    else
2897      Asm->OutStreamer.EmitIntValue(0, Size);
2898  }
2899}
2900
2901// Emit visible names into a debug macinfo section.
2902void DwarfDebug::emitDebugMacInfo() {
2903  if (const MCSection *LineInfo =
2904      Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2905    // Start the dwarf macinfo section.
2906    Asm->OutStreamer.SwitchSection(LineInfo);
2907  }
2908}
2909
2910// DWARF5 Experimental Separate Dwarf emitters.
2911
2912// This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2913// DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2914// DW_AT_ranges_base, DW_AT_addr_base.
2915CompileUnit *DwarfDebug::constructSkeletonCU(const CompileUnit *CU) {
2916
2917  DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2918  CompileUnit *NewCU = new CompileUnit(CU->getUniqueID(), Die, CU->getNode(),
2919                                       Asm, this, &SkeletonHolder);
2920
2921  NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2922                        DICompileUnit(CU->getNode()).getSplitDebugFilename());
2923
2924  // Relocate to the beginning of the addr_base section, else 0 for the
2925  // beginning of the one for this compile unit.
2926  if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2927    NewCU->addLabel(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset,
2928                    DwarfAddrSectionSym);
2929  else
2930    NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base,
2931                   dwarf::DW_FORM_sec_offset, 0);
2932
2933  // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2934  // into an entity. We're using 0, or a NULL label for this.
2935  NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2936
2937  // DW_AT_stmt_list is a offset of line number information for this
2938  // compile unit in debug_line section.
2939  // FIXME: Should handle multiple compile units.
2940  if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2941    NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2942                    DwarfLineSectionSym);
2943  else
2944    NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2945
2946  if (!CompilationDir.empty())
2947    NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2948
2949  // Flags to let the linker know we have emitted new style pubnames.
2950  if (GenerateGnuPubSections) {
2951    if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2952      NewCU->addLabel(Die, dwarf::DW_AT_GNU_pubnames, dwarf::DW_FORM_sec_offset,
2953                      Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID()));
2954    else
2955      NewCU->addDelta(Die, dwarf::DW_AT_GNU_pubnames, dwarf::DW_FORM_data4,
2956                      Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID()),
2957                      DwarfGnuPubNamesSectionSym);
2958
2959    if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2960      NewCU->addLabel(Die, dwarf::DW_AT_GNU_pubtypes, dwarf::DW_FORM_sec_offset,
2961                      Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID()));
2962    else
2963      NewCU->addDelta(Die, dwarf::DW_AT_GNU_pubtypes, dwarf::DW_FORM_data4,
2964                      Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID()),
2965                      DwarfGnuPubTypesSectionSym);
2966  }
2967
2968  // Flag if we've emitted any ranges and their location for the compile unit.
2969  if (DebugRangeSymbols.size()) {
2970    if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2971      NewCU->addLabel(Die, dwarf::DW_AT_GNU_ranges_base,
2972                      dwarf::DW_FORM_sec_offset, DwarfDebugRangeSectionSym);
2973    else
2974      NewCU->addUInt(Die, dwarf::DW_AT_GNU_ranges_base, dwarf::DW_FORM_data4,
2975                     0);
2976  }
2977
2978  SkeletonHolder.addUnit(NewCU);
2979  SkeletonCUs.push_back(NewCU);
2980
2981  return NewCU;
2982}
2983
2984void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
2985  assert(useSplitDwarf() && "No split dwarf debug info?");
2986  emitAbbrevs(Section, &SkeletonAbbrevs);
2987}
2988
2989// Emit the .debug_info.dwo section for separated dwarf. This contains the
2990// compile units that would normally be in debug_info.
2991void DwarfDebug::emitDebugInfoDWO() {
2992  assert(useSplitDwarf() && "No split dwarf debug info?");
2993  InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
2994                       Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2995                       DwarfAbbrevDWOSectionSym);
2996}
2997
2998// Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2999// abbreviations for the .debug_info.dwo section.
3000void DwarfDebug::emitDebugAbbrevDWO() {
3001  assert(useSplitDwarf() && "No split dwarf?");
3002  emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
3003              &Abbreviations);
3004}
3005
3006// Emit the .debug_str.dwo section for separated dwarf. This contains the
3007// string section and is identical in format to traditional .debug_str
3008// sections.
3009void DwarfDebug::emitDebugStrDWO() {
3010  assert(useSplitDwarf() && "No split dwarf?");
3011  const MCSection *OffSec = Asm->getObjFileLowering()
3012                            .getDwarfStrOffDWOSection();
3013  const MCSymbol *StrSym = DwarfStrSectionSym;
3014  InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
3015                         OffSec, StrSym);
3016}
3017