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