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