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