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