DwarfDebug.cpp revision 9ec87b3c86151d065b58a1f4f94c37034aae97da
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 "DwarfAccelTable.h"
18#include "DwarfCompileUnit.h"
19#include "llvm/ADT/STLExtras.h"
20#include "llvm/ADT/Statistic.h"
21#include "llvm/ADT/StringExtras.h"
22#include "llvm/ADT/Triple.h"
23#include "llvm/CodeGen/MachineFunction.h"
24#include "llvm/CodeGen/MachineModuleInfo.h"
25#include "llvm/Constants.h"
26#include "llvm/DIBuilder.h"
27#include "llvm/DataLayout.h"
28#include "llvm/DebugInfo.h"
29#include "llvm/Instructions.h"
30#include "llvm/MC/MCAsmInfo.h"
31#include "llvm/MC/MCSection.h"
32#include "llvm/MC/MCStreamer.h"
33#include "llvm/MC/MCSymbol.h"
34#include "llvm/Module.h"
35#include "llvm/Support/CommandLine.h"
36#include "llvm/Support/Debug.h"
37#include "llvm/Support/ErrorHandling.h"
38#include "llvm/Support/FormattedStream.h"
39#include "llvm/Support/Path.h"
40#include "llvm/Support/Timer.h"
41#include "llvm/Support/ValueHandle.h"
42#include "llvm/Target/TargetFrameLowering.h"
43#include "llvm/Target/TargetLoweringObjectFile.h"
44#include "llvm/Target/TargetMachine.h"
45#include "llvm/Target/TargetOptions.h"
46#include "llvm/Target/TargetRegisterInfo.h"
47using namespace llvm;
48
49static cl::opt<bool> DisableDebugInfoPrinting("disable-debug-info-print",
50                                              cl::Hidden,
51     cl::desc("Disable debug info printing"));
52
53static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
54     cl::desc("Make an absence of debug location information explicit."),
55     cl::init(false));
56
57namespace {
58  enum DefaultOnOff {
59    Default, Enable, Disable
60  };
61}
62
63static cl::opt<DefaultOnOff> DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
64     cl::desc("Output prototype dwarf accelerator tables."),
65     cl::values(
66                clEnumVal(Default, "Default for platform"),
67                clEnumVal(Enable, "Enabled"),
68                clEnumVal(Disable, "Disabled"),
69                clEnumValEnd),
70     cl::init(Default));
71
72static cl::opt<DefaultOnOff> DarwinGDBCompat("darwin-gdb-compat", cl::Hidden,
73     cl::desc("Compatibility with Darwin gdb."),
74     cl::values(
75                clEnumVal(Default, "Default for platform"),
76                clEnumVal(Enable, "Enabled"),
77                clEnumVal(Disable, "Disabled"),
78                clEnumValEnd),
79     cl::init(Default));
80
81static cl::opt<DefaultOnOff> DwarfFission("dwarf-fission", cl::Hidden,
82     cl::desc("Output prototype dwarf fission."),
83     cl::values(
84                clEnumVal(Default, "Default for platform"),
85                clEnumVal(Enable, "Enabled"),
86                clEnumVal(Disable, "Disabled"),
87                clEnumValEnd),
88     cl::init(Default));
89
90namespace {
91  const char *DWARFGroupName = "DWARF Emission";
92  const char *DbgTimerName = "DWARF Debug Writer";
93} // end anonymous namespace
94
95//===----------------------------------------------------------------------===//
96
97// Configuration values for initial hash set sizes (log2).
98//
99static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
100
101namespace llvm {
102
103DIType DbgVariable::getType() const {
104  DIType Ty = Var.getType();
105  // FIXME: isBlockByrefVariable should be reformulated in terms of complex
106  // addresses instead.
107  if (Var.isBlockByrefVariable()) {
108    /* Byref variables, in Blocks, are declared by the programmer as
109       "SomeType VarName;", but the compiler creates a
110       __Block_byref_x_VarName struct, and gives the variable VarName
111       either the struct, or a pointer to the struct, as its type.  This
112       is necessary for various behind-the-scenes things the compiler
113       needs to do with by-reference variables in blocks.
114
115       However, as far as the original *programmer* is concerned, the
116       variable should still have type 'SomeType', as originally declared.
117
118       The following function dives into the __Block_byref_x_VarName
119       struct to find the original type of the variable.  This will be
120       passed back to the code generating the type for the Debug
121       Information Entry for the variable 'VarName'.  'VarName' will then
122       have the original type 'SomeType' in its debug information.
123
124       The original type 'SomeType' will be the type of the field named
125       'VarName' inside the __Block_byref_x_VarName struct.
126
127       NOTE: In order for this to not completely fail on the debugger
128       side, the Debug Information Entry for the variable VarName needs to
129       have a DW_AT_location that tells the debugger how to unwind through
130       the pointers and __Block_byref_x_VarName struct to find the actual
131       value of the variable.  The function addBlockByrefType does this.  */
132    DIType subType = Ty;
133    unsigned tag = Ty.getTag();
134
135    if (tag == dwarf::DW_TAG_pointer_type) {
136      DIDerivedType DTy = DIDerivedType(Ty);
137      subType = DTy.getTypeDerivedFrom();
138    }
139
140    DICompositeType blockStruct = DICompositeType(subType);
141    DIArray Elements = blockStruct.getTypeArray();
142
143    for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
144      DIDescriptor Element = Elements.getElement(i);
145      DIDerivedType DT = DIDerivedType(Element);
146      if (getName() == DT.getName())
147        return (DT.getTypeDerivedFrom());
148    }
149  }
150  return Ty;
151}
152
153} // end llvm namespace
154
155DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
156  : Asm(A), MMI(Asm->MMI), FirstCU(0),
157    AbbreviationsSet(InitAbbreviationsSetSize),
158    SourceIdMap(DIEValueAllocator), StringPool(DIEValueAllocator),
159    PrevLabel(NULL), GlobalCUIndexCount(0), FissionCU(0) {
160  NextStringPoolNumber = 0;
161
162  DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
163  DwarfStrSectionSym = TextSectionSym = 0;
164  DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
165  FunctionBeginSym = FunctionEndSym = 0;
166
167  // Turn on accelerator tables and older gdb compatibility
168  // for Darwin.
169  bool IsDarwin = Triple(M->getTargetTriple()).isOSDarwin();
170  if (DarwinGDBCompat == Default) {
171    if (IsDarwin)
172      IsDarwinGDBCompat = true;
173    else
174      IsDarwinGDBCompat = false;
175  } else
176    IsDarwinGDBCompat = DarwinGDBCompat == Enable ? true : false;
177
178  if (DwarfAccelTables == Default) {
179    if (IsDarwin)
180      HasDwarfAccelTables = true;
181    else
182      HasDwarfAccelTables = false;
183  } else
184    HasDwarfAccelTables = DwarfAccelTables == Enable ? true : false;
185
186  if (DwarfFission == Default)
187    HasDwarfFission = false;
188  else
189    HasDwarfFission = DwarfFission == Enable ? true : false;
190
191  {
192    NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
193    beginModule();
194  }
195}
196DwarfDebug::~DwarfDebug() {
197}
198
199// Switch to the specified MCSection and emit an assembler
200// temporary label to it if SymbolStem is specified.
201static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section,
202                                const char *SymbolStem = 0) {
203  Asm->OutStreamer.SwitchSection(Section);
204  if (!SymbolStem) return 0;
205
206  MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
207  Asm->OutStreamer.EmitLabel(TmpSym);
208  return TmpSym;
209}
210
211MCSymbol *DwarfDebug::getStringPool() {
212  return Asm->GetTempSymbol("section_str");
213}
214
215MCSymbol *DwarfDebug::getStringPoolEntry(StringRef Str) {
216  std::pair<MCSymbol*, unsigned> &Entry = StringPool[Str];
217  if (Entry.first) return Entry.first;
218
219  Entry.second = NextStringPoolNumber++;
220  return Entry.first = Asm->GetTempSymbol("string", Entry.second);
221}
222
223// Define a unique number for the abbreviation.
224//
225void DwarfDebug::assignAbbrevNumber(DIEAbbrev &Abbrev) {
226  // Profile the node so that we can make it unique.
227  FoldingSetNodeID ID;
228  Abbrev.Profile(ID);
229
230  // Check the set for priors.
231  DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
232
233  // If it's newly added.
234  if (InSet == &Abbrev) {
235    // Add to abbreviation list.
236    Abbreviations.push_back(&Abbrev);
237
238    // Assign the vector position + 1 as its number.
239    Abbrev.setNumber(Abbreviations.size());
240  } else {
241    // Assign existing abbreviation number.
242    Abbrev.setNumber(InSet->getNumber());
243  }
244}
245
246// If special LLVM prefix that is used to inform the asm
247// printer to not emit usual symbol prefix before the symbol name is used then
248// return linkage name after skipping this special LLVM prefix.
249static StringRef getRealLinkageName(StringRef LinkageName) {
250  char One = '\1';
251  if (LinkageName.startswith(StringRef(&One, 1)))
252    return LinkageName.substr(1);
253  return LinkageName;
254}
255
256static bool isObjCClass(StringRef Name) {
257  return Name.startswith("+") || Name.startswith("-");
258}
259
260static bool hasObjCCategory(StringRef Name) {
261  if (!isObjCClass(Name)) return false;
262
263  size_t pos = Name.find(')');
264  if (pos != std::string::npos) {
265    if (Name[pos+1] != ' ') return false;
266    return true;
267  }
268  return false;
269}
270
271static void getObjCClassCategory(StringRef In, StringRef &Class,
272                                 StringRef &Category) {
273  if (!hasObjCCategory(In)) {
274    Class = In.slice(In.find('[') + 1, In.find(' '));
275    Category = "";
276    return;
277  }
278
279  Class = In.slice(In.find('[') + 1, In.find('('));
280  Category = In.slice(In.find('[') + 1, In.find(' '));
281  return;
282}
283
284static StringRef getObjCMethodName(StringRef In) {
285  return In.slice(In.find(' ') + 1, In.find(']'));
286}
287
288// Add the various names to the Dwarf accelerator table names.
289static void addSubprogramNames(CompileUnit *TheCU, DISubprogram SP,
290                               DIE* Die) {
291  if (!SP.isDefinition()) return;
292
293  TheCU->addAccelName(SP.getName(), Die);
294
295  // If the linkage name is different than the name, go ahead and output
296  // that as well into the name table.
297  if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
298    TheCU->addAccelName(SP.getLinkageName(), Die);
299
300  // If this is an Objective-C selector name add it to the ObjC accelerator
301  // too.
302  if (isObjCClass(SP.getName())) {
303    StringRef Class, Category;
304    getObjCClassCategory(SP.getName(), Class, Category);
305    TheCU->addAccelObjC(Class, Die);
306    if (Category != "")
307      TheCU->addAccelObjC(Category, Die);
308    // Also add the base method name to the name table.
309    TheCU->addAccelName(getObjCMethodName(SP.getName()), Die);
310  }
311}
312
313// Find DIE for the given subprogram and attach appropriate DW_AT_low_pc
314// and DW_AT_high_pc attributes. If there are global variables in this
315// scope then create and insert DIEs for these variables.
316DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
317                                          const MDNode *SPNode) {
318  DIE *SPDie = SPCU->getDIE(SPNode);
319
320  assert(SPDie && "Unable to find subprogram DIE!");
321  DISubprogram SP(SPNode);
322
323  // If we're updating an abstract DIE, then we will be adding the children and
324  // object pointer later on. But what we don't want to do is process the
325  // concrete DIE twice.
326  if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
327    // Pick up abstract subprogram DIE.
328    SPDie = new DIE(dwarf::DW_TAG_subprogram);
329    SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
330                      dwarf::DW_FORM_ref4, AbsSPDIE);
331    SPCU->addDie(SPDie);
332  } else {
333    DISubprogram SPDecl = SP.getFunctionDeclaration();
334    if (!SPDecl.isSubprogram()) {
335      // There is not any need to generate specification DIE for a function
336      // defined at compile unit level. If a function is defined inside another
337      // function then gdb prefers the definition at top level and but does not
338      // expect specification DIE in parent function. So avoid creating
339      // specification DIE for a function defined inside a function.
340      if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
341          !SP.getContext().isFile() &&
342          !isSubprogramContext(SP.getContext())) {
343        SPCU->addFlag(SPDie, dwarf::DW_AT_declaration);
344
345        // Add arguments.
346        DICompositeType SPTy = SP.getType();
347        DIArray Args = SPTy.getTypeArray();
348        unsigned SPTag = SPTy.getTag();
349        if (SPTag == dwarf::DW_TAG_subroutine_type)
350          for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
351            DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
352            DIType ATy = DIType(Args.getElement(i));
353            SPCU->addType(Arg, ATy);
354            if (ATy.isArtificial())
355              SPCU->addFlag(Arg, dwarf::DW_AT_artificial);
356            if (ATy.isObjectPointer())
357              SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer,
358                                dwarf::DW_FORM_ref4, Arg);
359            SPDie->addChild(Arg);
360          }
361        DIE *SPDeclDie = SPDie;
362        SPDie = new DIE(dwarf::DW_TAG_subprogram);
363        SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification,
364                          dwarf::DW_FORM_ref4, SPDeclDie);
365        SPCU->addDie(SPDie);
366      }
367    }
368  }
369
370  SPCU->addLabel(SPDie, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
371                 Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber()));
372  SPCU->addLabel(SPDie, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
373                 Asm->GetTempSymbol("func_end", Asm->getFunctionNumber()));
374  const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
375  MachineLocation Location(RI->getFrameRegister(*Asm->MF));
376  SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
377
378  // Add name to the name table, we do this here because we're guaranteed
379  // to have concrete versions of our DW_TAG_subprogram nodes.
380  addSubprogramNames(SPCU, SP, SPDie);
381
382  return SPDie;
383}
384
385// Construct new DW_TAG_lexical_block for this scope and attach
386// DW_AT_low_pc/DW_AT_high_pc labels.
387DIE *DwarfDebug::constructLexicalScopeDIE(CompileUnit *TheCU,
388                                          LexicalScope *Scope) {
389  DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
390  if (Scope->isAbstractScope())
391    return ScopeDIE;
392
393  const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
394  if (Ranges.empty())
395    return 0;
396
397  SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
398  if (Ranges.size() > 1) {
399    // .debug_range section has not been laid out yet. Emit offset in
400    // .debug_range as a uint, size 4, for now. emitDIE will handle
401    // DW_AT_ranges appropriately.
402    TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
403                   DebugRangeSymbols.size()
404                   * Asm->getDataLayout().getPointerSize());
405    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
406         RE = Ranges.end(); RI != RE; ++RI) {
407      DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
408      DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
409    }
410    DebugRangeSymbols.push_back(NULL);
411    DebugRangeSymbols.push_back(NULL);
412    return ScopeDIE;
413  }
414
415  const MCSymbol *Start = getLabelBeforeInsn(RI->first);
416  const MCSymbol *End = getLabelAfterInsn(RI->second);
417
418  if (End == 0) return 0;
419
420  assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
421  assert(End->isDefined() && "Invalid end label for an inlined scope!");
422
423  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, Start);
424  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, End);
425
426  return ScopeDIE;
427}
428
429// This scope represents inlined body of a function. Construct DIE to
430// represent this concrete inlined copy of the function.
431DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
432                                          LexicalScope *Scope) {
433  const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
434  assert(Ranges.empty() == false &&
435         "LexicalScope does not have instruction markers!");
436
437  if (!Scope->getScopeNode())
438    return NULL;
439  DIScope DS(Scope->getScopeNode());
440  DISubprogram InlinedSP = getDISubprogram(DS);
441  DIE *OriginDIE = TheCU->getDIE(InlinedSP);
442  if (!OriginDIE) {
443    DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram.");
444    return NULL;
445  }
446
447  SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
448  const MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
449  const MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
450
451  if (StartLabel == 0 || EndLabel == 0) {
452    llvm_unreachable("Unexpected Start and End labels for an inlined scope!");
453  }
454  assert(StartLabel->isDefined() &&
455         "Invalid starting label for an inlined scope!");
456  assert(EndLabel->isDefined() &&
457         "Invalid end label for an inlined scope!");
458
459  DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
460  TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
461                     dwarf::DW_FORM_ref4, OriginDIE);
462
463  if (Ranges.size() > 1) {
464    // .debug_range section has not been laid out yet. Emit offset in
465    // .debug_range as a uint, size 4, for now. emitDIE will handle
466    // DW_AT_ranges appropriately.
467    TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
468                   DebugRangeSymbols.size()
469                   * Asm->getDataLayout().getPointerSize());
470    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
471         RE = Ranges.end(); RI != RE; ++RI) {
472      DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
473      DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
474    }
475    DebugRangeSymbols.push_back(NULL);
476    DebugRangeSymbols.push_back(NULL);
477  } else {
478    TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
479                    StartLabel);
480    TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
481                    EndLabel);
482  }
483
484  InlinedSubprogramDIEs.insert(OriginDIE);
485
486  // Track the start label for this inlined function.
487  //.debug_inlined section specification does not clearly state how
488  // to emit inlined scope that is split into multiple instruction ranges.
489  // For now, use first instruction range and emit low_pc/high_pc pair and
490  // corresponding .debug_inlined section entry for this pair.
491  DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
492    I = InlineInfo.find(InlinedSP);
493
494  if (I == InlineInfo.end()) {
495    InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel, ScopeDIE));
496    InlinedSPNodes.push_back(InlinedSP);
497  } else
498    I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
499
500  DILocation DL(Scope->getInlinedAt());
501  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0,
502                 getOrCreateSourceID(DL.getFilename(), DL.getDirectory()));
503  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
504
505  // Add name to the name table, we do this here because we're guaranteed
506  // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
507  addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
508
509  return ScopeDIE;
510}
511
512// Construct a DIE for this scope.
513DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
514  if (!Scope || !Scope->getScopeNode())
515    return NULL;
516
517  SmallVector<DIE *, 8> Children;
518  DIE *ObjectPointer = NULL;
519
520  // Collect arguments for current function.
521  if (LScopes.isCurrentFunctionScope(Scope))
522    for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
523      if (DbgVariable *ArgDV = CurrentFnArguments[i])
524        if (DIE *Arg =
525            TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope())) {
526          Children.push_back(Arg);
527          if (ArgDV->isObjectPointer()) ObjectPointer = Arg;
528        }
529
530  // Collect lexical scope children first.
531  const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
532  for (unsigned i = 0, N = Variables.size(); i < N; ++i)
533    if (DIE *Variable =
534        TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope())) {
535      Children.push_back(Variable);
536      if (Variables[i]->isObjectPointer()) ObjectPointer = Variable;
537    }
538  const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
539  for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
540    if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
541      Children.push_back(Nested);
542  DIScope DS(Scope->getScopeNode());
543  DIE *ScopeDIE = NULL;
544  if (Scope->getInlinedAt())
545    ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
546  else if (DS.isSubprogram()) {
547    ProcessedSPNodes.insert(DS);
548    if (Scope->isAbstractScope()) {
549      ScopeDIE = TheCU->getDIE(DS);
550      // Note down abstract DIE.
551      if (ScopeDIE)
552        AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
553    }
554    else
555      ScopeDIE = updateSubprogramScopeDIE(TheCU, DS);
556  }
557  else {
558    // There is no need to emit empty lexical block DIE.
559    if (Children.empty())
560      return NULL;
561    ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
562  }
563
564  if (!ScopeDIE) return NULL;
565
566  // Add children
567  for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
568         E = Children.end(); I != E; ++I)
569    ScopeDIE->addChild(*I);
570
571  if (DS.isSubprogram() && ObjectPointer != NULL)
572    TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer,
573                       dwarf::DW_FORM_ref4, ObjectPointer);
574
575  if (DS.isSubprogram())
576    TheCU->addPubTypes(DISubprogram(DS));
577
578  return ScopeDIE;
579}
580
581// Look up the source id with the given directory and source file names.
582// If none currently exists, create a new id and insert it in the
583// SourceIds map. This can update DirectoryNames and SourceFileNames maps
584// as well.
585unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName,
586                                         StringRef DirName) {
587  // If FE did not provide a file name, then assume stdin.
588  if (FileName.empty())
589    return getOrCreateSourceID("<stdin>", StringRef());
590
591  // TODO: this might not belong here. See if we can factor this better.
592  if (DirName == CompilationDir)
593    DirName = "";
594
595  unsigned SrcId = SourceIdMap.size()+1;
596
597  // We look up the file/dir pair by concatenating them with a zero byte.
598  SmallString<128> NamePair;
599  NamePair += DirName;
600  NamePair += '\0'; // Zero bytes are not allowed in paths.
601  NamePair += FileName;
602
603  StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId);
604  if (Ent.getValue() != SrcId)
605    return Ent.getValue();
606
607  // Print out a .file directive to specify files for .loc directives.
608  Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName);
609
610  return SrcId;
611}
612
613// Create new CompileUnit for the given metadata node with tag DW_TAG_compile_unit.
614CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) {
615  DICompileUnit DIUnit(N);
616  StringRef FN = DIUnit.getFilename();
617  CompilationDir = DIUnit.getDirectory();
618  // Call this to emit a .file directive if it wasn't emitted for the source
619  // file this CU comes from yet.
620  getOrCreateSourceID(FN, CompilationDir);
621
622  DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
623  CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
624                                       DIUnit.getLanguage(), Die, Asm, this);
625  NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
626  NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
627                 DIUnit.getLanguage());
628  NewCU->addString(Die, dwarf::DW_AT_name, FN);
629  // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
630  // into an entity.
631  NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
632  // DW_AT_stmt_list is a offset of line number information for this
633  // compile unit in debug_line section.
634  if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
635    NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
636                    Asm->GetTempSymbol("section_line"));
637  else
638    NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
639
640  if (!CompilationDir.empty())
641    NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
642  if (DIUnit.isOptimized())
643    NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized);
644
645  StringRef Flags = DIUnit.getFlags();
646  if (!Flags.empty())
647    NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
648
649  if (unsigned RVer = DIUnit.getRunTimeVersion())
650    NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
651            dwarf::DW_FORM_data1, RVer);
652
653  if (!FirstCU)
654    FirstCU = NewCU;
655  if (useDwarfFission() && !FissionCU)
656    FissionCU = constructFissionCU(N);
657
658  CUMap.insert(std::make_pair(N, NewCU));
659  return NewCU;
660}
661
662// Construct subprogram DIE.
663void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
664                                        const MDNode *N) {
665  CompileUnit *&CURef = SPMap[N];
666  if (CURef)
667    return;
668  CURef = TheCU;
669
670  DISubprogram SP(N);
671  if (!SP.isDefinition())
672    // This is a method declaration which will be handled while constructing
673    // class type.
674    return;
675
676  DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
677
678  // Add to map.
679  TheCU->insertDIE(N, SubprogramDie);
680
681  // Add to context owner.
682  TheCU->addToContextOwner(SubprogramDie, SP.getContext());
683
684  return;
685}
686
687// Collect debug info from named mdnodes such as llvm.dbg.enum and llvm.dbg.ty.
688void DwarfDebug::collectInfoFromNamedMDNodes(const Module *M) {
689  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.sp"))
690    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
691      const MDNode *N = NMD->getOperand(i);
692      if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
693        constructSubprogramDIE(CU, N);
694    }
695
696  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv"))
697    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
698      const MDNode *N = NMD->getOperand(i);
699      if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
700        CU->createGlobalVariableDIE(N);
701    }
702
703  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
704    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
705      DIType Ty(NMD->getOperand(i));
706      if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
707        CU->getOrCreateTypeDIE(Ty);
708    }
709
710  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
711    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
712      DIType Ty(NMD->getOperand(i));
713      if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
714        CU->getOrCreateTypeDIE(Ty);
715    }
716}
717
718// Collect debug info using DebugInfoFinder.
719// FIXME - Remove this when dragonegg switches to DIBuilder.
720bool DwarfDebug::collectLegacyDebugInfo(const Module *M) {
721  DebugInfoFinder DbgFinder;
722  DbgFinder.processModule(*M);
723
724  bool HasDebugInfo = false;
725  // Scan all the compile-units to see if there are any marked as the main
726  // unit. If not, we do not generate debug info.
727  for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
728         E = DbgFinder.compile_unit_end(); I != E; ++I) {
729    if (DICompileUnit(*I).isMain()) {
730      HasDebugInfo = true;
731      break;
732    }
733  }
734  if (!HasDebugInfo) return false;
735
736  // Create all the compile unit DIEs.
737  for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
738         E = DbgFinder.compile_unit_end(); I != E; ++I)
739    constructCompileUnit(*I);
740
741  // Create DIEs for each global variable.
742  for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
743         E = DbgFinder.global_variable_end(); I != E; ++I) {
744    const MDNode *N = *I;
745    if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
746      CU->createGlobalVariableDIE(N);
747  }
748
749  // Create DIEs for each subprogram.
750  for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
751         E = DbgFinder.subprogram_end(); I != E; ++I) {
752    const MDNode *N = *I;
753    if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
754      constructSubprogramDIE(CU, N);
755  }
756
757  return HasDebugInfo;
758}
759
760// Emit all Dwarf sections that should come prior to the content. Create
761// global DIEs and emit initial debug info sections. This is invoked by
762// the target AsmPrinter.
763void DwarfDebug::beginModule() {
764  if (DisableDebugInfoPrinting)
765    return;
766
767  const Module *M = MMI->getModule();
768
769  // If module has named metadata anchors then use them, otherwise scan the
770  // module using debug info finder to collect debug info.
771  NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
772  if (CU_Nodes) {
773    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
774      DICompileUnit CUNode(CU_Nodes->getOperand(i));
775      CompileUnit *CU = constructCompileUnit(CUNode);
776      DIArray GVs = CUNode.getGlobalVariables();
777      for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
778        CU->createGlobalVariableDIE(GVs.getElement(i));
779      DIArray SPs = CUNode.getSubprograms();
780      for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
781        constructSubprogramDIE(CU, SPs.getElement(i));
782      DIArray EnumTypes = CUNode.getEnumTypes();
783      for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
784        CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
785      DIArray RetainedTypes = CUNode.getRetainedTypes();
786      for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
787        CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
788    }
789  } else if (!collectLegacyDebugInfo(M))
790    return;
791
792  collectInfoFromNamedMDNodes(M);
793
794  // Tell MMI that we have debug info.
795  MMI->setDebugInfoAvailability(true);
796
797  // Prime section data.
798  SectionMap.insert(Asm->getObjFileLowering().getTextSection());
799}
800
801// Attach DW_AT_inline attribute with inlined subprogram DIEs.
802void DwarfDebug::computeInlinedDIEs() {
803  // Attach DW_AT_inline attribute with inlined subprogram DIEs.
804  for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
805         AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
806    DIE *ISP = *AI;
807    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
808  }
809  for (DenseMap<const MDNode *, DIE *>::iterator AI = AbstractSPDies.begin(),
810         AE = AbstractSPDies.end(); AI != AE; ++AI) {
811    DIE *ISP = AI->second;
812    if (InlinedSubprogramDIEs.count(ISP))
813      continue;
814    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
815  }
816}
817
818// Collect info for variables that were optimized out.
819void DwarfDebug::collectDeadVariables() {
820  const Module *M = MMI->getModule();
821  DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
822
823  if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
824    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
825      DICompileUnit TheCU(CU_Nodes->getOperand(i));
826      DIArray Subprograms = TheCU.getSubprograms();
827      for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
828        DISubprogram SP(Subprograms.getElement(i));
829        if (ProcessedSPNodes.count(SP) != 0) continue;
830        if (!SP.Verify()) continue;
831        if (!SP.isDefinition()) continue;
832        DIArray Variables = SP.getVariables();
833        if (Variables.getNumElements() == 0) continue;
834
835        LexicalScope *Scope =
836          new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
837        DeadFnScopeMap[SP] = Scope;
838
839        // Construct subprogram DIE and add variables DIEs.
840        CompileUnit *SPCU = CUMap.lookup(TheCU);
841        assert(SPCU && "Unable to find Compile Unit!");
842        constructSubprogramDIE(SPCU, SP);
843        DIE *ScopeDIE = SPCU->getDIE(SP);
844        for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
845          DIVariable DV(Variables.getElement(vi));
846          if (!DV.Verify()) continue;
847          DbgVariable *NewVar = new DbgVariable(DV, NULL);
848          if (DIE *VariableDIE =
849              SPCU->constructVariableDIE(NewVar, Scope->isAbstractScope()))
850            ScopeDIE->addChild(VariableDIE);
851        }
852      }
853    }
854  }
855  DeleteContainerSeconds(DeadFnScopeMap);
856}
857
858void DwarfDebug::finalizeModuleInfo() {
859  // Collect info for variables that were optimized out.
860  collectDeadVariables();
861
862  // Attach DW_AT_inline attribute with inlined subprogram DIEs.
863  computeInlinedDIEs();
864
865  // Emit DW_AT_containing_type attribute to connect types with their
866  // vtable holding type.
867  for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
868         CUE = CUMap.end(); CUI != CUE; ++CUI) {
869    CompileUnit *TheCU = CUI->second;
870    TheCU->constructContainingTypeDIEs();
871  }
872
873   // Compute DIE offsets and sizes.
874  computeSizeAndOffsets();
875}
876
877void DwarfDebug::endSections() {
878  // Standard sections final addresses.
879  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
880  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
881  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
882  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
883
884  // End text sections.
885  for (unsigned I = 0, E = SectionMap.size(); I != E; ++I) {
886    Asm->OutStreamer.SwitchSection(SectionMap[I]);
887    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", I+1));
888  }
889}
890
891// Emit all Dwarf sections that should come after the content.
892void DwarfDebug::endModule() {
893
894  if (!FirstCU) return;
895
896  // End any existing sections.
897  // TODO: Does this need to happen?
898  endSections();
899
900  // Finalize the debug info for the module.
901  finalizeModuleInfo();
902
903  // Emit initial sections.
904  emitSectionLabels();
905
906  if (!useDwarfFission()) {
907    // Emit all the DIEs into a debug info section.
908    emitDebugInfo();
909
910    // Corresponding abbreviations into a abbrev section.
911    emitAbbreviations();
912
913    // Emit info into a debug loc section.
914    emitDebugLoc();
915
916    // Emit info into a debug aranges section.
917    emitDebugARanges();
918
919    // Emit info into a debug ranges section.
920    emitDebugRanges();
921
922    // Emit info into a debug macinfo section.
923    emitDebugMacInfo();
924
925    // Emit inline info.
926    // TODO: When we don't need the option anymore we
927    // can remove all of the code that this section
928    // depends upon.
929    if (useDarwinGDBCompat())
930      emitDebugInlineInfo();
931  } else {
932    // TODO: Fill this in for Fission sections and separate
933    // out information into new sections.
934
935    // Emit the debug info section and compile units.
936    emitDebugInfo();
937    emitDebugInfoDWO();
938
939    // Corresponding abbreviations into a abbrev section.
940    emitAbbreviations();
941
942    // Emit info into a debug loc section.
943    emitDebugLoc();
944
945    // Emit info into a debug aranges section.
946    emitDebugARanges();
947
948    // Emit info into a debug ranges section.
949    emitDebugRanges();
950
951    // Emit info into a debug macinfo section.
952    emitDebugMacInfo();
953
954    // Emit inline info.
955    // TODO: When we don't need the option anymore we
956    // can remove all of the code that this section
957    // depends upon.
958    if (useDarwinGDBCompat())
959      emitDebugInlineInfo();
960  }
961
962  // Emit info into the dwarf accelerator table sections.
963  if (useDwarfAccelTables()) {
964    emitAccelNames();
965    emitAccelObjC();
966    emitAccelNamespaces();
967    emitAccelTypes();
968  }
969
970  // Emit info into a debug pubtypes section.
971  // TODO: When we don't need the option anymore we can
972  // remove all of the code that adds to the table.
973  if (useDarwinGDBCompat())
974    emitDebugPubTypes();
975
976  // Finally emit string information into a string table.
977  emitDebugStr();
978
979  // clean up.
980  SPMap.clear();
981  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
982         E = CUMap.end(); I != E; ++I)
983    delete I->second;
984
985  delete FissionCU;
986
987  // Reset these for the next Module if we have one.
988  FirstCU = NULL;
989  FissionCU = NULL;
990}
991
992// Find abstract variable, if any, associated with Var.
993DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
994                                              DebugLoc ScopeLoc) {
995  LLVMContext &Ctx = DV->getContext();
996  // More then one inlined variable corresponds to one abstract variable.
997  DIVariable Var = cleanseInlinedVariable(DV, Ctx);
998  DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
999  if (AbsDbgVariable)
1000    return AbsDbgVariable;
1001
1002  LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1003  if (!Scope)
1004    return NULL;
1005
1006  AbsDbgVariable = new DbgVariable(Var, NULL);
1007  addScopeVariable(Scope, AbsDbgVariable);
1008  AbstractVariables[Var] = AbsDbgVariable;
1009  return AbsDbgVariable;
1010}
1011
1012// If Var is a current function argument then add it to CurrentFnArguments list.
1013bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1014                                      DbgVariable *Var, LexicalScope *Scope) {
1015  if (!LScopes.isCurrentFunctionScope(Scope))
1016    return false;
1017  DIVariable DV = Var->getVariable();
1018  if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1019    return false;
1020  unsigned ArgNo = DV.getArgNumber();
1021  if (ArgNo == 0)
1022    return false;
1023
1024  size_t Size = CurrentFnArguments.size();
1025  if (Size == 0)
1026    CurrentFnArguments.resize(MF->getFunction()->arg_size());
1027  // llvm::Function argument size is not good indicator of how many
1028  // arguments does the function have at source level.
1029  if (ArgNo > Size)
1030    CurrentFnArguments.resize(ArgNo * 2);
1031  CurrentFnArguments[ArgNo - 1] = Var;
1032  return true;
1033}
1034
1035// Collect variable information from side table maintained by MMI.
1036void
1037DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
1038                                   SmallPtrSet<const MDNode *, 16> &Processed) {
1039  MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1040  for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1041         VE = VMap.end(); VI != VE; ++VI) {
1042    const MDNode *Var = VI->first;
1043    if (!Var) continue;
1044    Processed.insert(Var);
1045    DIVariable DV(Var);
1046    const std::pair<unsigned, DebugLoc> &VP = VI->second;
1047
1048    LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
1049
1050    // If variable scope is not found then skip this variable.
1051    if (Scope == 0)
1052      continue;
1053
1054    DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1055    DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
1056    RegVar->setFrameIndex(VP.first);
1057    if (!addCurrentFnArgument(MF, RegVar, Scope))
1058      addScopeVariable(Scope, RegVar);
1059    if (AbsDbgVariable)
1060      AbsDbgVariable->setFrameIndex(VP.first);
1061  }
1062}
1063
1064// Return true if debug value, encoded by DBG_VALUE instruction, is in a
1065// defined reg.
1066static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1067  assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1068  return MI->getNumOperands() == 3 &&
1069         MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1070         MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1071}
1072
1073// Get .debug_loc entry for the instruction range starting at MI.
1074static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1075                                         const MCSymbol *FLabel,
1076                                         const MCSymbol *SLabel,
1077                                         const MachineInstr *MI) {
1078  const MDNode *Var =  MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1079
1080  if (MI->getNumOperands() != 3) {
1081    MachineLocation MLoc = Asm->getDebugValueLocation(MI);
1082    return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1083  }
1084  if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
1085    MachineLocation MLoc;
1086    MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1087    return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1088  }
1089  if (MI->getOperand(0).isImm())
1090    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1091  if (MI->getOperand(0).isFPImm())
1092    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1093  if (MI->getOperand(0).isCImm())
1094    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1095
1096  llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1097}
1098
1099// Find variables for each lexical scope.
1100void
1101DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1102                                SmallPtrSet<const MDNode *, 16> &Processed) {
1103
1104  // collection info from MMI table.
1105  collectVariableInfoFromMMITable(MF, Processed);
1106
1107  for (SmallVectorImpl<const MDNode*>::const_iterator
1108         UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1109         ++UVI) {
1110    const MDNode *Var = *UVI;
1111    if (Processed.count(Var))
1112      continue;
1113
1114    // History contains relevant DBG_VALUE instructions for Var and instructions
1115    // clobbering it.
1116    SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1117    if (History.empty())
1118      continue;
1119    const MachineInstr *MInsn = History.front();
1120
1121    DIVariable DV(Var);
1122    LexicalScope *Scope = NULL;
1123    if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1124        DISubprogram(DV.getContext()).describes(MF->getFunction()))
1125      Scope = LScopes.getCurrentFunctionScope();
1126    else {
1127      if (DV.getVersion() <= LLVMDebugVersion9)
1128        Scope = LScopes.findLexicalScope(MInsn->getDebugLoc());
1129      else {
1130        if (MDNode *IA = DV.getInlinedAt())
1131          Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1132        else
1133          Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1134      }
1135    }
1136    // If variable scope is not found then skip this variable.
1137    if (!Scope)
1138      continue;
1139
1140    Processed.insert(DV);
1141    assert(MInsn->isDebugValue() && "History must begin with debug value");
1142    DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1143    DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1144    if (!addCurrentFnArgument(MF, RegVar, Scope))
1145      addScopeVariable(Scope, RegVar);
1146    if (AbsVar)
1147      AbsVar->setMInsn(MInsn);
1148
1149    // Simplify ranges that are fully coalesced.
1150    if (History.size() <= 1 || (History.size() == 2 &&
1151                                MInsn->isIdenticalTo(History.back()))) {
1152      RegVar->setMInsn(MInsn);
1153      continue;
1154    }
1155
1156    // handle multiple DBG_VALUE instructions describing one variable.
1157    RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1158
1159    for (SmallVectorImpl<const MachineInstr*>::const_iterator
1160           HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1161      const MachineInstr *Begin = *HI;
1162      assert(Begin->isDebugValue() && "Invalid History entry");
1163
1164      // Check if DBG_VALUE is truncating a range.
1165      if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1166          && !Begin->getOperand(0).getReg())
1167        continue;
1168
1169      // Compute the range for a register location.
1170      const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1171      const MCSymbol *SLabel = 0;
1172
1173      if (HI + 1 == HE)
1174        // If Begin is the last instruction in History then its value is valid
1175        // until the end of the function.
1176        SLabel = FunctionEndSym;
1177      else {
1178        const MachineInstr *End = HI[1];
1179        DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1180              << "\t" << *Begin << "\t" << *End << "\n");
1181        if (End->isDebugValue())
1182          SLabel = getLabelBeforeInsn(End);
1183        else {
1184          // End is a normal instruction clobbering the range.
1185          SLabel = getLabelAfterInsn(End);
1186          assert(SLabel && "Forgot label after clobber instruction");
1187          ++HI;
1188        }
1189      }
1190
1191      // The value is valid until the next DBG_VALUE or clobber.
1192      DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1193                                                    Begin));
1194    }
1195    DotDebugLocEntries.push_back(DotDebugLocEntry());
1196  }
1197
1198  // Collect info for variables that were optimized out.
1199  LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1200  DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1201  for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1202    DIVariable DV(Variables.getElement(i));
1203    if (!DV || !DV.Verify() || !Processed.insert(DV))
1204      continue;
1205    if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1206      addScopeVariable(Scope, new DbgVariable(DV, NULL));
1207  }
1208}
1209
1210// Return Label preceding the instruction.
1211const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1212  MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1213  assert(Label && "Didn't insert label before instruction");
1214  return Label;
1215}
1216
1217// Return Label immediately following the instruction.
1218const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1219  return LabelsAfterInsn.lookup(MI);
1220}
1221
1222// Process beginning of an instruction.
1223void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1224  // Check if source location changes, but ignore DBG_VALUE locations.
1225  if (!MI->isDebugValue()) {
1226    DebugLoc DL = MI->getDebugLoc();
1227    if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1228      unsigned Flags = 0;
1229      PrevInstLoc = DL;
1230      if (DL == PrologEndLoc) {
1231        Flags |= DWARF2_FLAG_PROLOGUE_END;
1232        PrologEndLoc = DebugLoc();
1233      }
1234      if (PrologEndLoc.isUnknown())
1235        Flags |= DWARF2_FLAG_IS_STMT;
1236
1237      if (!DL.isUnknown()) {
1238        const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1239        recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1240      } else
1241        recordSourceLine(0, 0, 0, 0);
1242    }
1243  }
1244
1245  // Insert labels where requested.
1246  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1247    LabelsBeforeInsn.find(MI);
1248
1249  // No label needed.
1250  if (I == LabelsBeforeInsn.end())
1251    return;
1252
1253  // Label already assigned.
1254  if (I->second)
1255    return;
1256
1257  if (!PrevLabel) {
1258    PrevLabel = MMI->getContext().CreateTempSymbol();
1259    Asm->OutStreamer.EmitLabel(PrevLabel);
1260  }
1261  I->second = PrevLabel;
1262}
1263
1264// Process end of an instruction.
1265void DwarfDebug::endInstruction(const MachineInstr *MI) {
1266  // Don't create a new label after DBG_VALUE instructions.
1267  // They don't generate code.
1268  if (!MI->isDebugValue())
1269    PrevLabel = 0;
1270
1271  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1272    LabelsAfterInsn.find(MI);
1273
1274  // No label needed.
1275  if (I == LabelsAfterInsn.end())
1276    return;
1277
1278  // Label already assigned.
1279  if (I->second)
1280    return;
1281
1282  // We need a label after this instruction.
1283  if (!PrevLabel) {
1284    PrevLabel = MMI->getContext().CreateTempSymbol();
1285    Asm->OutStreamer.EmitLabel(PrevLabel);
1286  }
1287  I->second = PrevLabel;
1288}
1289
1290// Each LexicalScope has first instruction and last instruction to mark
1291// beginning and end of a scope respectively. Create an inverse map that list
1292// scopes starts (and ends) with an instruction. One instruction may start (or
1293// end) multiple scopes. Ignore scopes that are not reachable.
1294void DwarfDebug::identifyScopeMarkers() {
1295  SmallVector<LexicalScope *, 4> WorkList;
1296  WorkList.push_back(LScopes.getCurrentFunctionScope());
1297  while (!WorkList.empty()) {
1298    LexicalScope *S = WorkList.pop_back_val();
1299
1300    const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1301    if (!Children.empty())
1302      for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1303             SE = Children.end(); SI != SE; ++SI)
1304        WorkList.push_back(*SI);
1305
1306    if (S->isAbstractScope())
1307      continue;
1308
1309    const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1310    if (Ranges.empty())
1311      continue;
1312    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1313           RE = Ranges.end(); RI != RE; ++RI) {
1314      assert(RI->first && "InsnRange does not have first instruction!");
1315      assert(RI->second && "InsnRange does not have second instruction!");
1316      requestLabelBeforeInsn(RI->first);
1317      requestLabelAfterInsn(RI->second);
1318    }
1319  }
1320}
1321
1322// Get MDNode for DebugLoc's scope.
1323static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1324  if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1325    return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1326  return DL.getScope(Ctx);
1327}
1328
1329// Walk up the scope chain of given debug loc and find line number info
1330// for the function.
1331static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1332  const MDNode *Scope = getScopeNode(DL, Ctx);
1333  DISubprogram SP = getDISubprogram(Scope);
1334  if (SP.Verify()) {
1335    // Check for number of operands since the compatibility is
1336    // cheap here.
1337    if (SP->getNumOperands() > 19)
1338      return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1339    else
1340      return DebugLoc::get(SP.getLineNumber(), 0, SP);
1341  }
1342
1343  return DebugLoc();
1344}
1345
1346// Gather pre-function debug information.  Assumes being called immediately
1347// after the function entry point has been emitted.
1348void DwarfDebug::beginFunction(const MachineFunction *MF) {
1349  if (!MMI->hasDebugInfo()) return;
1350  LScopes.initialize(*MF);
1351  if (LScopes.empty()) return;
1352  identifyScopeMarkers();
1353
1354  FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1355                                        Asm->getFunctionNumber());
1356  // Assumes in correct section after the entry point.
1357  Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1358
1359  assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1360
1361  const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1362  // LiveUserVar - Map physreg numbers to the MDNode they contain.
1363  std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1364
1365  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1366       I != E; ++I) {
1367    bool AtBlockEntry = true;
1368    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1369         II != IE; ++II) {
1370      const MachineInstr *MI = II;
1371
1372      if (MI->isDebugValue()) {
1373        assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1374
1375        // Keep track of user variables.
1376        const MDNode *Var =
1377          MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1378
1379        // Variable is in a register, we need to check for clobbers.
1380        if (isDbgValueInDefinedReg(MI))
1381          LiveUserVar[MI->getOperand(0).getReg()] = Var;
1382
1383        // Check the history of this variable.
1384        SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1385        if (History.empty()) {
1386          UserVariables.push_back(Var);
1387          // The first mention of a function argument gets the FunctionBeginSym
1388          // label, so arguments are visible when breaking at function entry.
1389          DIVariable DV(Var);
1390          if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1391              DISubprogram(getDISubprogram(DV.getContext()))
1392                .describes(MF->getFunction()))
1393            LabelsBeforeInsn[MI] = FunctionBeginSym;
1394        } else {
1395          // We have seen this variable before. Try to coalesce DBG_VALUEs.
1396          const MachineInstr *Prev = History.back();
1397          if (Prev->isDebugValue()) {
1398            // Coalesce identical entries at the end of History.
1399            if (History.size() >= 2 &&
1400                Prev->isIdenticalTo(History[History.size() - 2])) {
1401              DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1402                    << "\t" << *Prev
1403                    << "\t" << *History[History.size() - 2] << "\n");
1404              History.pop_back();
1405            }
1406
1407            // Terminate old register assignments that don't reach MI;
1408            MachineFunction::const_iterator PrevMBB = Prev->getParent();
1409            if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1410                isDbgValueInDefinedReg(Prev)) {
1411              // Previous register assignment needs to terminate at the end of
1412              // its basic block.
1413              MachineBasicBlock::const_iterator LastMI =
1414                PrevMBB->getLastNonDebugInstr();
1415              if (LastMI == PrevMBB->end()) {
1416                // Drop DBG_VALUE for empty range.
1417                DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1418                      << "\t" << *Prev << "\n");
1419                History.pop_back();
1420              }
1421              else {
1422                // Terminate after LastMI.
1423                History.push_back(LastMI);
1424              }
1425            }
1426          }
1427        }
1428        History.push_back(MI);
1429      } else {
1430        // Not a DBG_VALUE instruction.
1431        if (!MI->isLabel())
1432          AtBlockEntry = false;
1433
1434        // First known non-DBG_VALUE and non-frame setup location marks
1435        // the beginning of the function body.
1436        if (!MI->getFlag(MachineInstr::FrameSetup) &&
1437            (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1438          PrologEndLoc = MI->getDebugLoc();
1439
1440        // Check if the instruction clobbers any registers with debug vars.
1441        for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1442               MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1443          if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1444            continue;
1445          for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1446               AI.isValid(); ++AI) {
1447            unsigned Reg = *AI;
1448            const MDNode *Var = LiveUserVar[Reg];
1449            if (!Var)
1450              continue;
1451            // Reg is now clobbered.
1452            LiveUserVar[Reg] = 0;
1453
1454            // Was MD last defined by a DBG_VALUE referring to Reg?
1455            DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1456            if (HistI == DbgValues.end())
1457              continue;
1458            SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1459            if (History.empty())
1460              continue;
1461            const MachineInstr *Prev = History.back();
1462            // Sanity-check: Register assignments are terminated at the end of
1463            // their block.
1464            if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1465              continue;
1466            // Is the variable still in Reg?
1467            if (!isDbgValueInDefinedReg(Prev) ||
1468                Prev->getOperand(0).getReg() != Reg)
1469              continue;
1470            // Var is clobbered. Make sure the next instruction gets a label.
1471            History.push_back(MI);
1472          }
1473        }
1474      }
1475    }
1476  }
1477
1478  for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1479       I != E; ++I) {
1480    SmallVectorImpl<const MachineInstr*> &History = I->second;
1481    if (History.empty())
1482      continue;
1483
1484    // Make sure the final register assignments are terminated.
1485    const MachineInstr *Prev = History.back();
1486    if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1487      const MachineBasicBlock *PrevMBB = Prev->getParent();
1488      MachineBasicBlock::const_iterator LastMI =
1489        PrevMBB->getLastNonDebugInstr();
1490      if (LastMI == PrevMBB->end())
1491        // Drop DBG_VALUE for empty range.
1492        History.pop_back();
1493      else {
1494        // Terminate after LastMI.
1495        History.push_back(LastMI);
1496      }
1497    }
1498    // Request labels for the full history.
1499    for (unsigned i = 0, e = History.size(); i != e; ++i) {
1500      const MachineInstr *MI = History[i];
1501      if (MI->isDebugValue())
1502        requestLabelBeforeInsn(MI);
1503      else
1504        requestLabelAfterInsn(MI);
1505    }
1506  }
1507
1508  PrevInstLoc = DebugLoc();
1509  PrevLabel = FunctionBeginSym;
1510
1511  // Record beginning of function.
1512  if (!PrologEndLoc.isUnknown()) {
1513    DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1514                                       MF->getFunction()->getContext());
1515    recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1516                     FnStartDL.getScope(MF->getFunction()->getContext()),
1517    // We'd like to list the prologue as "not statements" but GDB behaves
1518    // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1519                     DWARF2_FLAG_IS_STMT);
1520  }
1521}
1522
1523void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1524//  SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1525  ScopeVariables[LS].push_back(Var);
1526//  Vars.push_back(Var);
1527}
1528
1529// Gather and emit post-function debug information.
1530void DwarfDebug::endFunction(const MachineFunction *MF) {
1531  if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1532
1533  // Define end label for subprogram.
1534  FunctionEndSym = Asm->GetTempSymbol("func_end",
1535                                      Asm->getFunctionNumber());
1536  // Assumes in correct section after the entry point.
1537  Asm->OutStreamer.EmitLabel(FunctionEndSym);
1538
1539  SmallPtrSet<const MDNode *, 16> ProcessedVars;
1540  collectVariableInfo(MF, ProcessedVars);
1541
1542  LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1543  CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1544  assert(TheCU && "Unable to find compile unit!");
1545
1546  // Construct abstract scopes.
1547  ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1548  for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1549    LexicalScope *AScope = AList[i];
1550    DISubprogram SP(AScope->getScopeNode());
1551    if (SP.Verify()) {
1552      // Collect info for variables that were optimized out.
1553      DIArray Variables = SP.getVariables();
1554      for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1555        DIVariable DV(Variables.getElement(i));
1556        if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1557          continue;
1558        // Check that DbgVariable for DV wasn't created earlier, when
1559        // findAbstractVariable() was called for inlined instance of DV.
1560        LLVMContext &Ctx = DV->getContext();
1561        DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1562        if (AbstractVariables.lookup(CleanDV))
1563          continue;
1564        if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1565          addScopeVariable(Scope, new DbgVariable(DV, NULL));
1566      }
1567    }
1568    if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1569      constructScopeDIE(TheCU, AScope);
1570  }
1571
1572  DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1573
1574  if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1575    TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1576
1577  DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1578                                               MMI->getFrameMoves()));
1579
1580  // Clear debug info
1581  for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1582         I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1583    DeleteContainerPointers(I->second);
1584  ScopeVariables.clear();
1585  DeleteContainerPointers(CurrentFnArguments);
1586  UserVariables.clear();
1587  DbgValues.clear();
1588  AbstractVariables.clear();
1589  LabelsBeforeInsn.clear();
1590  LabelsAfterInsn.clear();
1591  PrevLabel = NULL;
1592}
1593
1594// Register a source line with debug info. Returns the  unique label that was
1595// emitted and which provides correspondence to the source line list.
1596void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1597                                  unsigned Flags) {
1598  StringRef Fn;
1599  StringRef Dir;
1600  unsigned Src = 1;
1601  if (S) {
1602    DIDescriptor Scope(S);
1603
1604    if (Scope.isCompileUnit()) {
1605      DICompileUnit CU(S);
1606      Fn = CU.getFilename();
1607      Dir = CU.getDirectory();
1608    } else if (Scope.isFile()) {
1609      DIFile F(S);
1610      Fn = F.getFilename();
1611      Dir = F.getDirectory();
1612    } else if (Scope.isSubprogram()) {
1613      DISubprogram SP(S);
1614      Fn = SP.getFilename();
1615      Dir = SP.getDirectory();
1616    } else if (Scope.isLexicalBlockFile()) {
1617      DILexicalBlockFile DBF(S);
1618      Fn = DBF.getFilename();
1619      Dir = DBF.getDirectory();
1620    } else if (Scope.isLexicalBlock()) {
1621      DILexicalBlock DB(S);
1622      Fn = DB.getFilename();
1623      Dir = DB.getDirectory();
1624    } else
1625      llvm_unreachable("Unexpected scope info");
1626
1627    Src = getOrCreateSourceID(Fn, Dir);
1628  }
1629  Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1630}
1631
1632//===----------------------------------------------------------------------===//
1633// Emit Methods
1634//===----------------------------------------------------------------------===//
1635
1636// Compute the size and offset of a DIE.
1637unsigned
1638DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1639  // Get the children.
1640  const std::vector<DIE *> &Children = Die->getChildren();
1641
1642  // Record the abbreviation.
1643  assignAbbrevNumber(Die->getAbbrev());
1644
1645  // Get the abbreviation for this DIE.
1646  unsigned AbbrevNumber = Die->getAbbrevNumber();
1647  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1648
1649  // Set DIE offset
1650  Die->setOffset(Offset);
1651
1652  // Start the size with the size of abbreviation code.
1653  Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1654
1655  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1656  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1657
1658  // Size the DIE attribute values.
1659  for (unsigned i = 0, N = Values.size(); i < N; ++i)
1660    // Size attribute value.
1661    Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1662
1663  // Size the DIE children if any.
1664  if (!Children.empty()) {
1665    assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1666           "Children flag not set");
1667
1668    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1669      Offset = computeSizeAndOffset(Children[j], Offset);
1670
1671    // End of children marker.
1672    Offset += sizeof(int8_t);
1673  }
1674
1675  Die->setSize(Offset - Die->getOffset());
1676  return Offset;
1677}
1678
1679// Compute the size and offset of all the DIEs.
1680void DwarfDebug::computeSizeAndOffsets() {
1681  if (FissionCU) {
1682    unsigned Offset =
1683      sizeof(int32_t) + // Length of Compilation Unit Info
1684      sizeof(int16_t) + // DWARF version number
1685      sizeof(int32_t) + // Offset Into Abbrev. Section
1686      sizeof(int8_t);   // Pointer Size (in bytes)
1687
1688    computeSizeAndOffset(FissionCU->getCUDie(), Offset);
1689  }
1690  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1691         E = CUMap.end(); I != E; ++I) {
1692    // Compute size of compile unit header.
1693    unsigned Offset =
1694      sizeof(int32_t) + // Length of Compilation Unit Info
1695      sizeof(int16_t) + // DWARF version number
1696      sizeof(int32_t) + // Offset Into Abbrev. Section
1697      sizeof(int8_t);   // Pointer Size (in bytes)
1698    computeSizeAndOffset(I->second->getCUDie(), Offset);
1699  }
1700}
1701
1702// Emit initial Dwarf sections with a label at the start of each one.
1703void DwarfDebug::emitSectionLabels() {
1704  const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1705
1706  // Dwarf sections base addresses.
1707  DwarfInfoSectionSym =
1708    emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1709  DwarfAbbrevSectionSym =
1710    emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1711  emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1712
1713  if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1714    emitSectionSym(Asm, MacroInfo);
1715
1716  emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1717  emitSectionSym(Asm, TLOF.getDwarfLocSection());
1718  emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1719  DwarfStrSectionSym =
1720    emitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
1721  DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1722                                             "debug_range");
1723
1724  DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
1725                                           "section_debug_loc");
1726
1727  TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1728  emitSectionSym(Asm, TLOF.getDataSection());
1729}
1730
1731// Recursively emits a debug information entry.
1732void DwarfDebug::emitDIE(DIE *Die) {
1733  // Get the abbreviation for this DIE.
1734  unsigned AbbrevNumber = Die->getAbbrevNumber();
1735  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1736
1737  // Emit the code (index) for the abbreviation.
1738  if (Asm->isVerbose())
1739    Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1740                                Twine::utohexstr(Die->getOffset()) + ":0x" +
1741                                Twine::utohexstr(Die->getSize()) + " " +
1742                                dwarf::TagString(Abbrev->getTag()));
1743  Asm->EmitULEB128(AbbrevNumber);
1744
1745  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1746  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1747
1748  // Emit the DIE attribute values.
1749  for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1750    unsigned Attr = AbbrevData[i].getAttribute();
1751    unsigned Form = AbbrevData[i].getForm();
1752    assert(Form && "Too many attributes for DIE (check abbreviation)");
1753
1754    if (Asm->isVerbose())
1755      Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1756
1757    switch (Attr) {
1758    case dwarf::DW_AT_abstract_origin: {
1759      DIEEntry *E = cast<DIEEntry>(Values[i]);
1760      DIE *Origin = E->getEntry();
1761      unsigned Addr = Origin->getOffset();
1762      Asm->EmitInt32(Addr);
1763      break;
1764    }
1765    case dwarf::DW_AT_ranges: {
1766      // DW_AT_range Value encodes offset in debug_range section.
1767      DIEInteger *V = cast<DIEInteger>(Values[i]);
1768
1769      if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
1770        Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1771                                 V->getValue(),
1772                                 4);
1773      } else {
1774        Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1775                                       V->getValue(),
1776                                       DwarfDebugRangeSectionSym,
1777                                       4);
1778      }
1779      break;
1780    }
1781    case dwarf::DW_AT_location: {
1782      if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
1783        if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
1784          Asm->EmitLabelReference(L->getValue(), 4);
1785        else
1786          Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1787      } else {
1788        Values[i]->EmitValue(Asm, Form);
1789      }
1790      break;
1791    }
1792    case dwarf::DW_AT_accessibility: {
1793      if (Asm->isVerbose()) {
1794        DIEInteger *V = cast<DIEInteger>(Values[i]);
1795        Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1796      }
1797      Values[i]->EmitValue(Asm, Form);
1798      break;
1799    }
1800    default:
1801      // Emit an attribute using the defined form.
1802      Values[i]->EmitValue(Asm, Form);
1803      break;
1804    }
1805  }
1806
1807  // Emit the DIE children if any.
1808  if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1809    const std::vector<DIE *> &Children = Die->getChildren();
1810
1811    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1812      emitDIE(Children[j]);
1813
1814    if (Asm->isVerbose())
1815      Asm->OutStreamer.AddComment("End Of Children Mark");
1816    Asm->EmitInt8(0);
1817  }
1818}
1819
1820void DwarfDebug::emitCompileUnits(const MCSection *Section) {
1821  Asm->OutStreamer.SwitchSection(Section);
1822  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1823         E = CUMap.end(); I != E; ++I) {
1824    CompileUnit *TheCU = I->second;
1825    DIE *Die = TheCU->getCUDie();
1826
1827    // Emit the compile units header.
1828    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
1829                                                  TheCU->getUniqueID()));
1830
1831    // Emit size of content not including length itself
1832    unsigned ContentSize = Die->getSize() +
1833      sizeof(int16_t) + // DWARF version number
1834      sizeof(int32_t) + // Offset Into Abbrev. Section
1835      sizeof(int8_t);   // Pointer Size (in bytes)
1836
1837    Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1838    Asm->EmitInt32(ContentSize);
1839    Asm->OutStreamer.AddComment("DWARF version number");
1840    Asm->EmitInt16(dwarf::DWARF_VERSION);
1841    Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1842    Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
1843                           DwarfAbbrevSectionSym);
1844    Asm->OutStreamer.AddComment("Address Size (in bytes)");
1845    Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1846
1847    emitDIE(Die);
1848    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end",
1849                                                  TheCU->getUniqueID()));
1850  }
1851}
1852
1853// Emit the debug info section.
1854void DwarfDebug::emitDebugInfo() {
1855  if (!useDwarfFission())
1856    emitCompileUnits(Asm->getObjFileLowering().getDwarfInfoSection());
1857  else
1858    emitFissionSkeletonCU(Asm->getObjFileLowering().getDwarfInfoSection());
1859}
1860
1861// Emit the abbreviation section.
1862void DwarfDebug::emitAbbreviations() {
1863  // Check to see if it is worth the effort.
1864  if (!Abbreviations.empty()) {
1865    // Start the debug abbrev section.
1866    Asm->OutStreamer.SwitchSection(
1867                            Asm->getObjFileLowering().getDwarfAbbrevSection());
1868
1869    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
1870
1871    // For each abbrevation.
1872    for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
1873      // Get abbreviation data
1874      const DIEAbbrev *Abbrev = Abbreviations[i];
1875
1876      // Emit the abbrevations code (base 1 index.)
1877      Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1878
1879      // Emit the abbreviations data.
1880      Abbrev->Emit(Asm);
1881    }
1882
1883    // Mark end of abbreviations.
1884    Asm->EmitULEB128(0, "EOM(3)");
1885
1886    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
1887  }
1888}
1889
1890// Emit the last address of the section and the end of the line matrix.
1891void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1892  // Define last address of section.
1893  Asm->OutStreamer.AddComment("Extended Op");
1894  Asm->EmitInt8(0);
1895
1896  Asm->OutStreamer.AddComment("Op size");
1897  Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
1898  Asm->OutStreamer.AddComment("DW_LNE_set_address");
1899  Asm->EmitInt8(dwarf::DW_LNE_set_address);
1900
1901  Asm->OutStreamer.AddComment("Section end label");
1902
1903  Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1904                                   Asm->getDataLayout().getPointerSize(),
1905                                   0/*AddrSpace*/);
1906
1907  // Mark end of matrix.
1908  Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1909  Asm->EmitInt8(0);
1910  Asm->EmitInt8(1);
1911  Asm->EmitInt8(1);
1912}
1913
1914// Emit visible names into a hashed accelerator table section.
1915void DwarfDebug::emitAccelNames() {
1916  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1917                                           dwarf::DW_FORM_data4));
1918  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1919         E = CUMap.end(); I != E; ++I) {
1920    CompileUnit *TheCU = I->second;
1921    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
1922    for (StringMap<std::vector<DIE*> >::const_iterator
1923           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1924      const char *Name = GI->getKeyData();
1925      const std::vector<DIE *> &Entities = GI->second;
1926      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1927             DE = Entities.end(); DI != DE; ++DI)
1928        AT.AddName(Name, (*DI));
1929    }
1930  }
1931
1932  AT.FinalizeTable(Asm, "Names");
1933  Asm->OutStreamer.SwitchSection(
1934    Asm->getObjFileLowering().getDwarfAccelNamesSection());
1935  MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
1936  Asm->OutStreamer.EmitLabel(SectionBegin);
1937
1938  // Emit the full data.
1939  AT.Emit(Asm, SectionBegin, this);
1940}
1941
1942// Emit objective C classes and categories into a hashed accelerator table section.
1943void DwarfDebug::emitAccelObjC() {
1944  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1945                                           dwarf::DW_FORM_data4));
1946  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1947         E = CUMap.end(); I != E; ++I) {
1948    CompileUnit *TheCU = I->second;
1949    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
1950    for (StringMap<std::vector<DIE*> >::const_iterator
1951           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1952      const char *Name = GI->getKeyData();
1953      const std::vector<DIE *> &Entities = GI->second;
1954      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1955             DE = Entities.end(); DI != DE; ++DI)
1956        AT.AddName(Name, (*DI));
1957    }
1958  }
1959
1960  AT.FinalizeTable(Asm, "ObjC");
1961  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1962                                 .getDwarfAccelObjCSection());
1963  MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
1964  Asm->OutStreamer.EmitLabel(SectionBegin);
1965
1966  // Emit the full data.
1967  AT.Emit(Asm, SectionBegin, this);
1968}
1969
1970// Emit namespace dies into a hashed accelerator table.
1971void DwarfDebug::emitAccelNamespaces() {
1972  DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1973                                           dwarf::DW_FORM_data4));
1974  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1975         E = CUMap.end(); I != E; ++I) {
1976    CompileUnit *TheCU = I->second;
1977    const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
1978    for (StringMap<std::vector<DIE*> >::const_iterator
1979           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1980      const char *Name = GI->getKeyData();
1981      const std::vector<DIE *> &Entities = GI->second;
1982      for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1983             DE = Entities.end(); DI != DE; ++DI)
1984        AT.AddName(Name, (*DI));
1985    }
1986  }
1987
1988  AT.FinalizeTable(Asm, "namespac");
1989  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1990                                 .getDwarfAccelNamespaceSection());
1991  MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
1992  Asm->OutStreamer.EmitLabel(SectionBegin);
1993
1994  // Emit the full data.
1995  AT.Emit(Asm, SectionBegin, this);
1996}
1997
1998// Emit type dies into a hashed accelerator table.
1999void DwarfDebug::emitAccelTypes() {
2000  std::vector<DwarfAccelTable::Atom> Atoms;
2001  Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2002                                        dwarf::DW_FORM_data4));
2003  Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
2004                                        dwarf::DW_FORM_data2));
2005  Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
2006                                        dwarf::DW_FORM_data1));
2007  DwarfAccelTable AT(Atoms);
2008  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2009         E = CUMap.end(); I != E; ++I) {
2010    CompileUnit *TheCU = I->second;
2011    const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
2012      = TheCU->getAccelTypes();
2013    for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
2014           GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2015      const char *Name = GI->getKeyData();
2016      const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2017      for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
2018             = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
2019        AT.AddName(Name, (*DI).first, (*DI).second);
2020    }
2021  }
2022
2023  AT.FinalizeTable(Asm, "types");
2024  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2025                                 .getDwarfAccelTypesSection());
2026  MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2027  Asm->OutStreamer.EmitLabel(SectionBegin);
2028
2029  // Emit the full data.
2030  AT.Emit(Asm, SectionBegin, this);
2031}
2032
2033void DwarfDebug::emitDebugPubTypes() {
2034  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2035         E = CUMap.end(); I != E; ++I) {
2036    CompileUnit *TheCU = I->second;
2037    // Start the dwarf pubtypes section.
2038    Asm->OutStreamer.SwitchSection(
2039      Asm->getObjFileLowering().getDwarfPubTypesSection());
2040    Asm->OutStreamer.AddComment("Length of Public Types Info");
2041    Asm->EmitLabelDifference(
2042      Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2043      Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2044
2045    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2046                                                  TheCU->getUniqueID()));
2047
2048    if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2049    Asm->EmitInt16(dwarf::DWARF_VERSION);
2050
2051    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2052    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin",
2053                                              TheCU->getUniqueID()),
2054                           DwarfInfoSectionSym);
2055
2056    Asm->OutStreamer.AddComment("Compilation Unit Length");
2057    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end",
2058                                                TheCU->getUniqueID()),
2059                             Asm->GetTempSymbol("info_begin",
2060                                                TheCU->getUniqueID()),
2061                             4);
2062
2063    const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2064    for (StringMap<DIE*>::const_iterator
2065           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2066      const char *Name = GI->getKeyData();
2067      DIE *Entity = GI->second;
2068
2069      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2070      Asm->EmitInt32(Entity->getOffset());
2071
2072      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2073      // Emit the name with a terminating null byte.
2074      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
2075    }
2076
2077    Asm->OutStreamer.AddComment("End Mark");
2078    Asm->EmitInt32(0);
2079    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2080                                                  TheCU->getUniqueID()));
2081  }
2082}
2083
2084// Emit visible names into a debug str section.
2085void DwarfDebug::emitDebugStr() {
2086  // Check to see if it is worth the effort.
2087  if (StringPool.empty()) return;
2088
2089  // Start the dwarf str section.
2090  Asm->OutStreamer.SwitchSection(
2091                                Asm->getObjFileLowering().getDwarfStrSection());
2092
2093  // Get all of the string pool entries and put them in an array by their ID so
2094  // we can sort them.
2095  SmallVector<std::pair<unsigned,
2096      StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2097
2098  for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2099       I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
2100    Entries.push_back(std::make_pair(I->second.second, &*I));
2101
2102  array_pod_sort(Entries.begin(), Entries.end());
2103
2104  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2105    // Emit a label for reference from debug information entries.
2106    Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2107
2108    // Emit the string itself with a terminating null byte.
2109    Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2110                                         Entries[i].second->getKeyLength()+1),
2111                               0/*addrspace*/);
2112  }
2113}
2114
2115// Emit visible names into a debug loc section.
2116void DwarfDebug::emitDebugLoc() {
2117  if (DotDebugLocEntries.empty())
2118    return;
2119
2120  for (SmallVector<DotDebugLocEntry, 4>::iterator
2121         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2122       I != E; ++I) {
2123    DotDebugLocEntry &Entry = *I;
2124    if (I + 1 != DotDebugLocEntries.end())
2125      Entry.Merge(I+1);
2126  }
2127
2128  // Start the dwarf loc section.
2129  Asm->OutStreamer.SwitchSection(
2130    Asm->getObjFileLowering().getDwarfLocSection());
2131  unsigned char Size = Asm->getDataLayout().getPointerSize();
2132  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2133  unsigned index = 1;
2134  for (SmallVector<DotDebugLocEntry, 4>::iterator
2135         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2136       I != E; ++I, ++index) {
2137    DotDebugLocEntry &Entry = *I;
2138    if (Entry.isMerged()) continue;
2139    if (Entry.isEmpty()) {
2140      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2141      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2142      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2143    } else {
2144      Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
2145      Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
2146      DIVariable DV(Entry.Variable);
2147      Asm->OutStreamer.AddComment("Loc expr size");
2148      MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2149      MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2150      Asm->EmitLabelDifference(end, begin, 2);
2151      Asm->OutStreamer.EmitLabel(begin);
2152      if (Entry.isInt()) {
2153        DIBasicType BTy(DV.getType());
2154        if (BTy.Verify() &&
2155            (BTy.getEncoding()  == dwarf::DW_ATE_signed
2156             || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2157          Asm->OutStreamer.AddComment("DW_OP_consts");
2158          Asm->EmitInt8(dwarf::DW_OP_consts);
2159          Asm->EmitSLEB128(Entry.getInt());
2160        } else {
2161          Asm->OutStreamer.AddComment("DW_OP_constu");
2162          Asm->EmitInt8(dwarf::DW_OP_constu);
2163          Asm->EmitULEB128(Entry.getInt());
2164        }
2165      } else if (Entry.isLocation()) {
2166        if (!DV.hasComplexAddress())
2167          // Regular entry.
2168          Asm->EmitDwarfRegOp(Entry.Loc);
2169        else {
2170          // Complex address entry.
2171          unsigned N = DV.getNumAddrElements();
2172          unsigned i = 0;
2173          if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2174            if (Entry.Loc.getOffset()) {
2175              i = 2;
2176              Asm->EmitDwarfRegOp(Entry.Loc);
2177              Asm->OutStreamer.AddComment("DW_OP_deref");
2178              Asm->EmitInt8(dwarf::DW_OP_deref);
2179              Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2180              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2181              Asm->EmitSLEB128(DV.getAddrElement(1));
2182            } else {
2183              // If first address element is OpPlus then emit
2184              // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2185              MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2186              Asm->EmitDwarfRegOp(Loc);
2187              i = 2;
2188            }
2189          } else {
2190            Asm->EmitDwarfRegOp(Entry.Loc);
2191          }
2192
2193          // Emit remaining complex address elements.
2194          for (; i < N; ++i) {
2195            uint64_t Element = DV.getAddrElement(i);
2196            if (Element == DIBuilder::OpPlus) {
2197              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2198              Asm->EmitULEB128(DV.getAddrElement(++i));
2199            } else if (Element == DIBuilder::OpDeref) {
2200              if (!Entry.Loc.isReg())
2201                Asm->EmitInt8(dwarf::DW_OP_deref);
2202            } else
2203              llvm_unreachable("unknown Opcode found in complex address");
2204          }
2205        }
2206      }
2207      // else ... ignore constant fp. There is not any good way to
2208      // to represent them here in dwarf.
2209      Asm->OutStreamer.EmitLabel(end);
2210    }
2211  }
2212}
2213
2214// Emit visible names into a debug aranges section.
2215void DwarfDebug::emitDebugARanges() {
2216  // Start the dwarf aranges section.
2217  Asm->OutStreamer.SwitchSection(
2218                          Asm->getObjFileLowering().getDwarfARangesSection());
2219}
2220
2221// Emit visible names into a debug ranges section.
2222void DwarfDebug::emitDebugRanges() {
2223  // Start the dwarf ranges section.
2224  Asm->OutStreamer.SwitchSection(
2225    Asm->getObjFileLowering().getDwarfRangesSection());
2226  unsigned char Size = Asm->getDataLayout().getPointerSize();
2227  for (SmallVector<const MCSymbol *, 8>::iterator
2228         I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2229       I != E; ++I) {
2230    if (*I)
2231      Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2232    else
2233      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2234  }
2235}
2236
2237// Emit visible names into a debug macinfo section.
2238void DwarfDebug::emitDebugMacInfo() {
2239  if (const MCSection *LineInfo =
2240      Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2241    // Start the dwarf macinfo section.
2242    Asm->OutStreamer.SwitchSection(LineInfo);
2243  }
2244}
2245
2246// Emit inline info using following format.
2247// Section Header:
2248// 1. length of section
2249// 2. Dwarf version number
2250// 3. address size.
2251//
2252// Entries (one "entry" for each function that was inlined):
2253//
2254// 1. offset into __debug_str section for MIPS linkage name, if exists;
2255//   otherwise offset into __debug_str for regular function name.
2256// 2. offset into __debug_str section for regular function name.
2257// 3. an unsigned LEB128 number indicating the number of distinct inlining
2258// instances for the function.
2259//
2260// The rest of the entry consists of a {die_offset, low_pc} pair for each
2261// inlined instance; the die_offset points to the inlined_subroutine die in the
2262// __debug_info section, and the low_pc is the starting address for the
2263// inlining instance.
2264void DwarfDebug::emitDebugInlineInfo() {
2265  if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2266    return;
2267
2268  if (!FirstCU)
2269    return;
2270
2271  Asm->OutStreamer.SwitchSection(
2272                        Asm->getObjFileLowering().getDwarfDebugInlineSection());
2273
2274  Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2275  Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2276                           Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2277
2278  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2279
2280  Asm->OutStreamer.AddComment("Dwarf Version");
2281  Asm->EmitInt16(dwarf::DWARF_VERSION);
2282  Asm->OutStreamer.AddComment("Address Size (in bytes)");
2283  Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2284
2285  for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2286         E = InlinedSPNodes.end(); I != E; ++I) {
2287
2288    const MDNode *Node = *I;
2289    DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2290      = InlineInfo.find(Node);
2291    SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2292    DISubprogram SP(Node);
2293    StringRef LName = SP.getLinkageName();
2294    StringRef Name = SP.getName();
2295
2296    Asm->OutStreamer.AddComment("MIPS linkage name");
2297    if (LName.empty())
2298      Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2299    else
2300      Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2301                             DwarfStrSectionSym);
2302
2303    Asm->OutStreamer.AddComment("Function name");
2304    Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2305    Asm->EmitULEB128(Labels.size(), "Inline count");
2306
2307    for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2308           LE = Labels.end(); LI != LE; ++LI) {
2309      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2310      Asm->EmitInt32(LI->second->getOffset());
2311
2312      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2313      Asm->OutStreamer.EmitSymbolValue(LI->first,
2314                                       Asm->getDataLayout().getPointerSize(),0);
2315    }
2316  }
2317
2318  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2319}
2320
2321// DWARF5 Experimental Fission emitters.
2322
2323// This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2324// DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2325// DW_AT_ranges_base, DW_AT_addr_base. If DW_AT_ranges is present,
2326// DW_AT_low_pc and DW_AT_high_pc are not used, and vice versa.
2327CompileUnit *DwarfDebug::constructFissionCU(const MDNode *N) {
2328  DICompileUnit DIUnit(N);
2329  StringRef FN = DIUnit.getFilename();
2330  CompilationDir = DIUnit.getDirectory();
2331
2332  DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2333  CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
2334                                       DIUnit.getLanguage(), Die, Asm, this);
2335  // FIXME: This should be the .dwo file.
2336  NewCU->addString(Die, dwarf::DW_AT_GNU_dwo_name, FN);
2337
2338  // FIXME: We also need DW_AT_addr_base and DW_AT_dwo_id.
2339
2340  // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2341  // into an entity.
2342  NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2343  // DW_AT_stmt_list is a offset of line number information for this
2344  // compile unit in debug_line section.
2345  if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2346    NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
2347                    Asm->GetTempSymbol("section_line"));
2348  else
2349    NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
2350
2351  if (!CompilationDir.empty())
2352    NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2353
2354  return NewCU;
2355}
2356
2357void DwarfDebug::emitFissionSkeletonCU(const MCSection *Section) {
2358  Asm->OutStreamer.SwitchSection(Section);
2359  DIE *Die = FissionCU->getCUDie();
2360
2361  // Emit the compile units header.
2362  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("skel_info_begin",
2363                                                FissionCU->getUniqueID()));
2364
2365  // Emit size of content not including length itself
2366  unsigned ContentSize = Die->getSize() +
2367    sizeof(int16_t) + // DWARF version number
2368    sizeof(int32_t) + // Offset Into Abbrev. Section
2369    sizeof(int8_t);   // Pointer Size (in bytes)
2370
2371  Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
2372  Asm->EmitInt32(ContentSize);
2373  Asm->OutStreamer.AddComment("DWARF version number");
2374  Asm->EmitInt16(dwarf::DWARF_VERSION);
2375  Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2376  Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
2377                         DwarfAbbrevSectionSym);
2378  Asm->OutStreamer.AddComment("Address Size (in bytes)");
2379  Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2380
2381  emitDIE(Die);
2382  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("skel_info_end",
2383                                                FissionCU->getUniqueID()));
2384
2385
2386}
2387
2388// Emit the .debug_info.dwo section for fission. This contains the compile
2389// units that would normally be in debug_info.
2390void DwarfDebug::emitDebugInfoDWO() {
2391  assert(useDwarfFission() && "Got fission?");
2392  emitCompileUnits(Asm->getObjFileLowering().getDwarfInfoDWOSection());
2393}
2394