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