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