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