Check in getOrCreateSubprogramDIE if a declaration exists and if so output
[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   DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
602
603   // Add to map.
604   TheCU->insertDIE(N, SubprogramDie);
605
606   // Add to context owner.
607   TheCU->addToContextOwner(SubprogramDie, SP.getContext());
608
609   return;
610 }
611
612 /// collectInfoFromNamedMDNodes - Collect debug info from named mdnodes such
613 /// as llvm.dbg.enum and llvm.dbg.ty
614 void DwarfDebug::collectInfoFromNamedMDNodes(Module *M) {
615   if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.sp"))
616     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
617       const MDNode *N = NMD->getOperand(i);
618       if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
619         constructSubprogramDIE(CU, N);
620     }
621   
622   if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv"))
623     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
624       const MDNode *N = NMD->getOperand(i);
625       if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
626         CU->createGlobalVariableDIE(N);
627     }
628   
629   if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
630     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
631       DIType Ty(NMD->getOperand(i));
632       if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
633         CU->getOrCreateTypeDIE(Ty);
634     }
635   
636   if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
637     for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
638       DIType Ty(NMD->getOperand(i));
639       if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
640         CU->getOrCreateTypeDIE(Ty);
641     }
642 }
643
644 /// collectLegacyDebugInfo - Collect debug info using DebugInfoFinder.
645 /// FIXME - Remove this when dragon-egg and llvm-gcc switch to DIBuilder.
646 bool DwarfDebug::collectLegacyDebugInfo(Module *M) {
647   DebugInfoFinder DbgFinder;
648   DbgFinder.processModule(*M);
649   
650   bool HasDebugInfo = false;
651   // Scan all the compile-units to see if there are any marked as the main
652   // unit. If not, we do not generate debug info.
653   for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
654          E = DbgFinder.compile_unit_end(); I != E; ++I) {
655     if (DICompileUnit(*I).isMain()) {
656       HasDebugInfo = true;
657       break;
658     }
659   }
660   if (!HasDebugInfo) return false;
661   
662   // Create all the compile unit DIEs.
663   for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
664          E = DbgFinder.compile_unit_end(); I != E; ++I)
665     constructCompileUnit(*I);
666   
667   // Create DIEs for each global variable.
668   for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
669          E = DbgFinder.global_variable_end(); I != E; ++I) {
670     const MDNode *N = *I;
671     if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
672       CU->createGlobalVariableDIE(N);
673   }
674     
675   // Create DIEs for each subprogram.
676   for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
677          E = DbgFinder.subprogram_end(); I != E; ++I) {
678     const MDNode *N = *I;
679     if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
680       constructSubprogramDIE(CU, N);
681   }
682
683   return HasDebugInfo;
684 }
685
686 /// beginModule - Emit all Dwarf sections that should come prior to the
687 /// content. Create global DIEs and emit initial debug info sections.
688 /// This is invoked by the target AsmPrinter.
689 void DwarfDebug::beginModule(Module *M) {
690   if (DisableDebugInfoPrinting)
691     return;
692
693   // If module has named metadata anchors then use them, otherwise scan the
694   // module using debug info finder to collect debug info.
695   NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
696   if (CU_Nodes) {
697     for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
698       DICompileUnit CUNode(CU_Nodes->getOperand(i));
699       CompileUnit *CU = constructCompileUnit(CUNode);
700       DIArray GVs = CUNode.getGlobalVariables();
701       for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
702         CU->createGlobalVariableDIE(GVs.getElement(i));
703       DIArray SPs = CUNode.getSubprograms();
704       for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
705         constructSubprogramDIE(CU, SPs.getElement(i));
706       DIArray EnumTypes = CUNode.getEnumTypes();
707       for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
708         CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
709       DIArray RetainedTypes = CUNode.getRetainedTypes();
710       for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
711         CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
712     }
713   } else if (!collectLegacyDebugInfo(M))
714     return;
715
716   collectInfoFromNamedMDNodes(M);
717   
718   // Tell MMI that we have debug info.
719   MMI->setDebugInfoAvailability(true);
720   
721   // Emit initial sections.
722   EmitSectionLabels();
723
724   // Prime section data.
725   SectionMap.insert(Asm->getObjFileLowering().getTextSection());
726 }
727
728 /// endModule - Emit all Dwarf sections that should come after the content.
729 ///
730 void DwarfDebug::endModule() {
731   if (!FirstCU) return;
732   const Module *M = MMI->getModule();
733   DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
734
735   // Collect info for variables that were optimized out.
736   if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
737     for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
738       DICompileUnit TheCU(CU_Nodes->getOperand(i));
739       DIArray Subprograms = TheCU.getSubprograms();
740       for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
741         DISubprogram SP(Subprograms.getElement(i));
742         if (ProcessedSPNodes.count(SP) != 0) continue;
743         if (!SP.Verify()) continue;
744         if (!SP.isDefinition()) continue;
745         DIArray Variables = SP.getVariables();
746         if (Variables.getNumElements() == 0) continue;
747
748         LexicalScope *Scope = 
749           new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
750         DeadFnScopeMap[SP] = Scope;
751         
752         // Construct subprogram DIE and add variables DIEs.
753         CompileUnit *SPCU = CUMap.lookup(TheCU);
754         assert(SPCU && "Unable to find Compile Unit!");
755         constructSubprogramDIE(SPCU, SP);
756         DIE *ScopeDIE = SPCU->getDIE(SP);
757         for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
758           DIVariable DV(Variables.getElement(vi));
759           if (!DV.Verify()) continue;
760           DbgVariable *NewVar = new DbgVariable(DV, NULL);
761           if (DIE *VariableDIE = 
762               SPCU->constructVariableDIE(NewVar, Scope->isAbstractScope()))
763             ScopeDIE->addChild(VariableDIE);
764         }
765       }
766     }
767   }
768
769   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
770   for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
771          AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
772     DIE *ISP = *AI;
773     FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
774   }
775
776   // Emit DW_AT_containing_type attribute to connect types with their
777   // vtable holding type.
778   for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
779          CUE = CUMap.end(); CUI != CUE; ++CUI) {
780     CompileUnit *TheCU = CUI->second;
781     TheCU->constructContainingTypeDIEs();
782   }
783
784   // Standard sections final addresses.
785   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
786   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
787   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
788   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
789
790   // End text sections.
791   for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
792     Asm->OutStreamer.SwitchSection(SectionMap[i]);
793     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
794   }
795
796   // Compute DIE offsets and sizes.
797   computeSizeAndOffsets();
798
799   // Emit all the DIEs into a debug info section
800   emitDebugInfo();
801
802   // Corresponding abbreviations into a abbrev section.
803   emitAbbreviations();
804
805   // Emit info into a dwarf accelerator table sections.
806   if (DwarfAccelTables) {
807     emitAccelNames();
808     emitAccelObjC();
809     emitAccelNamespaces();
810     emitAccelTypes();
811   }
812   
813   // Emit info into a debug pubtypes section.
814   emitDebugPubTypes();
815
816   // Emit info into a debug loc section.
817   emitDebugLoc();
818
819   // Emit info into a debug aranges section.
820   EmitDebugARanges();
821
822   // Emit info into a debug ranges section.
823   emitDebugRanges();
824
825   // Emit info into a debug macinfo section.
826   emitDebugMacInfo();
827
828   // Emit inline info.
829   emitDebugInlineInfo();
830
831   // Emit info into a debug str section.
832   emitDebugStr();
833
834   // clean up.
835   DeleteContainerSeconds(DeadFnScopeMap);
836   SPMap.clear();
837   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
838          E = CUMap.end(); I != E; ++I)
839     delete I->second;
840   FirstCU = NULL;  // Reset for the next Module, if any.
841 }
842
843 /// findAbstractVariable - Find abstract variable, if any, associated with Var.
844 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
845                                               DebugLoc ScopeLoc) {
846   LLVMContext &Ctx = DV->getContext();
847   // More then one inlined variable corresponds to one abstract variable.
848   DIVariable Var = cleanseInlinedVariable(DV, Ctx);
849   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
850   if (AbsDbgVariable)
851     return AbsDbgVariable;
852
853   LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
854   if (!Scope)
855     return NULL;
856
857   AbsDbgVariable = new DbgVariable(Var, NULL);
858   addScopeVariable(Scope, AbsDbgVariable);
859   AbstractVariables[Var] = AbsDbgVariable;
860   return AbsDbgVariable;
861 }
862
863 /// addCurrentFnArgument - If Var is a current function argument then add
864 /// it to CurrentFnArguments list.
865 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
866                                       DbgVariable *Var, LexicalScope *Scope) {
867   if (!LScopes.isCurrentFunctionScope(Scope))
868     return false;
869   DIVariable DV = Var->getVariable();
870   if (DV.getTag() != dwarf::DW_TAG_arg_variable)
871     return false;
872   unsigned ArgNo = DV.getArgNumber();
873   if (ArgNo == 0) 
874     return false;
875
876   size_t Size = CurrentFnArguments.size();
877   if (Size == 0)
878     CurrentFnArguments.resize(MF->getFunction()->arg_size());
879   // llvm::Function argument size is not good indicator of how many
880   // arguments does the function have at source level.
881   if (ArgNo > Size)
882     CurrentFnArguments.resize(ArgNo * 2);
883   CurrentFnArguments[ArgNo - 1] = Var;
884   return true;
885 }
886
887 /// collectVariableInfoFromMMITable - Collect variable information from
888 /// side table maintained by MMI.
889 void
890 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
891                                    SmallPtrSet<const MDNode *, 16> &Processed) {
892   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
893   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
894          VE = VMap.end(); VI != VE; ++VI) {
895     const MDNode *Var = VI->first;
896     if (!Var) continue;
897     Processed.insert(Var);
898     DIVariable DV(Var);
899     const std::pair<unsigned, DebugLoc> &VP = VI->second;
900
901     LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
902
903     // If variable scope is not found then skip this variable.
904     if (Scope == 0)
905       continue;
906
907     DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
908     DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
909     RegVar->setFrameIndex(VP.first);
910     if (!addCurrentFnArgument(MF, RegVar, Scope))
911       addScopeVariable(Scope, RegVar);
912     if (AbsDbgVariable)
913       AbsDbgVariable->setFrameIndex(VP.first);
914   }
915 }
916
917 /// isDbgValueInDefinedReg - Return true if debug value, encoded by
918 /// DBG_VALUE instruction, is in a defined reg.
919 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
920   assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
921   return MI->getNumOperands() == 3 &&
922          MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
923          MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
924 }
925
926 /// getDebugLocEntry - Get .debug_loc entry for the instruction range starting
927 /// at MI.
928 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm, 
929                                          const MCSymbol *FLabel, 
930                                          const MCSymbol *SLabel,
931                                          const MachineInstr *MI) {
932   const MDNode *Var =  MI->getOperand(MI->getNumOperands() - 1).getMetadata();
933
934   if (MI->getNumOperands() != 3) {
935     MachineLocation MLoc = Asm->getDebugValueLocation(MI);
936     return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
937   }
938   if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
939     MachineLocation MLoc;
940     MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
941     return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
942   }
943   if (MI->getOperand(0).isImm())
944     return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
945   if (MI->getOperand(0).isFPImm())
946     return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
947   if (MI->getOperand(0).isCImm())
948     return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
949
950   assert(0 && "Unexpected 3 operand DBG_VALUE instruction!");
951   return DotDebugLocEntry();
952 }
953
954 /// collectVariableInfo - Find variables for each lexical scope.
955 void
956 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
957                                 SmallPtrSet<const MDNode *, 16> &Processed) {
958
959   /// collection info from MMI table.
960   collectVariableInfoFromMMITable(MF, Processed);
961
962   for (SmallVectorImpl<const MDNode*>::const_iterator
963          UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
964          ++UVI) {
965     const MDNode *Var = *UVI;
966     if (Processed.count(Var))
967       continue;
968
969     // History contains relevant DBG_VALUE instructions for Var and instructions
970     // clobbering it.
971     SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
972     if (History.empty())
973       continue;
974     const MachineInstr *MInsn = History.front();
975
976     DIVariable DV(Var);
977     LexicalScope *Scope = NULL;
978     if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
979         DISubprogram(DV.getContext()).describes(MF->getFunction()))
980       Scope = LScopes.getCurrentFunctionScope();
981     else {
982       if (DV.getVersion() <= LLVMDebugVersion9)
983         Scope = LScopes.findLexicalScope(MInsn->getDebugLoc());
984       else {
985         if (MDNode *IA = DV.getInlinedAt())
986           Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
987         else
988           Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
989       }
990     }
991     // If variable scope is not found then skip this variable.
992     if (!Scope)
993       continue;
994
995     Processed.insert(DV);
996     assert(MInsn->isDebugValue() && "History must begin with debug value");
997     DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
998     DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
999     if (!addCurrentFnArgument(MF, RegVar, Scope))
1000       addScopeVariable(Scope, RegVar);
1001     if (AbsVar)
1002       AbsVar->setMInsn(MInsn);
1003
1004     // Simple ranges that are fully coalesced.
1005     if (History.size() <= 1 || (History.size() == 2 &&
1006                                 MInsn->isIdenticalTo(History.back()))) {
1007       RegVar->setMInsn(MInsn);
1008       continue;
1009     }
1010
1011     // handle multiple DBG_VALUE instructions describing one variable.
1012     RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1013
1014     for (SmallVectorImpl<const MachineInstr*>::const_iterator
1015            HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1016       const MachineInstr *Begin = *HI;
1017       assert(Begin->isDebugValue() && "Invalid History entry");
1018
1019       // Check if DBG_VALUE is truncating a range.
1020       if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1021           && !Begin->getOperand(0).getReg())
1022         continue;
1023
1024       // Compute the range for a register location.
1025       const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1026       const MCSymbol *SLabel = 0;
1027
1028       if (HI + 1 == HE)
1029         // If Begin is the last instruction in History then its value is valid
1030         // until the end of the function.
1031         SLabel = FunctionEndSym;
1032       else {
1033         const MachineInstr *End = HI[1];
1034         DEBUG(dbgs() << "DotDebugLoc Pair:\n" 
1035               << "\t" << *Begin << "\t" << *End << "\n");
1036         if (End->isDebugValue())
1037           SLabel = getLabelBeforeInsn(End);
1038         else {
1039           // End is a normal instruction clobbering the range.
1040           SLabel = getLabelAfterInsn(End);
1041           assert(SLabel && "Forgot label after clobber instruction");
1042           ++HI;
1043         }
1044       }
1045
1046       // The value is valid until the next DBG_VALUE or clobber.
1047       DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel, Begin));
1048     }
1049     DotDebugLocEntries.push_back(DotDebugLocEntry());
1050   }
1051
1052   // Collect info for variables that were optimized out.
1053   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1054   DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1055   for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1056     DIVariable DV(Variables.getElement(i));
1057     if (!DV || !DV.Verify() || !Processed.insert(DV))
1058       continue;
1059     if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1060       addScopeVariable(Scope, new DbgVariable(DV, NULL));
1061   }
1062 }
1063
1064 /// getLabelBeforeInsn - Return Label preceding the instruction.
1065 const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1066   MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1067   assert(Label && "Didn't insert label before instruction");
1068   return Label;
1069 }
1070
1071 /// getLabelAfterInsn - Return Label immediately following the instruction.
1072 const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1073   return LabelsAfterInsn.lookup(MI);
1074 }
1075
1076 /// beginInstruction - Process beginning of an instruction.
1077 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1078   // Check if source location changes, but ignore DBG_VALUE locations.
1079   if (!MI->isDebugValue()) {
1080     DebugLoc DL = MI->getDebugLoc();
1081     if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1082       unsigned Flags = DWARF2_FLAG_IS_STMT;
1083       PrevInstLoc = DL;
1084       if (DL == PrologEndLoc) {
1085         Flags |= DWARF2_FLAG_PROLOGUE_END;
1086         PrologEndLoc = DebugLoc();
1087       }
1088       if (!DL.isUnknown()) {
1089         const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1090         recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1091       } else
1092         recordSourceLine(0, 0, 0, 0);
1093     }
1094   }
1095
1096   // Insert labels where requested.
1097   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1098     LabelsBeforeInsn.find(MI);
1099
1100   // No label needed.
1101   if (I == LabelsBeforeInsn.end())
1102     return;
1103
1104   // Label already assigned.
1105   if (I->second)
1106     return;
1107
1108   if (!PrevLabel) {
1109     PrevLabel = MMI->getContext().CreateTempSymbol();
1110     Asm->OutStreamer.EmitLabel(PrevLabel);
1111   }
1112   I->second = PrevLabel;
1113 }
1114
1115 /// endInstruction - Process end of an instruction.
1116 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1117   // Don't create a new label after DBG_VALUE instructions.
1118   // They don't generate code.
1119   if (!MI->isDebugValue())
1120     PrevLabel = 0;
1121
1122   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1123     LabelsAfterInsn.find(MI);
1124
1125   // No label needed.
1126   if (I == LabelsAfterInsn.end())
1127     return;
1128
1129   // Label already assigned.
1130   if (I->second)
1131     return;
1132
1133   // We need a label after this instruction.
1134   if (!PrevLabel) {
1135     PrevLabel = MMI->getContext().CreateTempSymbol();
1136     Asm->OutStreamer.EmitLabel(PrevLabel);
1137   }
1138   I->second = PrevLabel;
1139 }
1140
1141 /// identifyScopeMarkers() -
1142 /// Each LexicalScope has first instruction and last instruction to mark
1143 /// beginning and end of a scope respectively. Create an inverse map that list
1144 /// scopes starts (and ends) with an instruction. One instruction may start (or
1145 /// end) multiple scopes. Ignore scopes that are not reachable.
1146 void DwarfDebug::identifyScopeMarkers() {
1147   SmallVector<LexicalScope *, 4> WorkList;
1148   WorkList.push_back(LScopes.getCurrentFunctionScope());
1149   while (!WorkList.empty()) {
1150     LexicalScope *S = WorkList.pop_back_val();
1151
1152     const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1153     if (!Children.empty())
1154       for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1155              SE = Children.end(); SI != SE; ++SI)
1156         WorkList.push_back(*SI);
1157
1158     if (S->isAbstractScope())
1159       continue;
1160
1161     const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1162     if (Ranges.empty())
1163       continue;
1164     for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1165            RE = Ranges.end(); RI != RE; ++RI) {
1166       assert(RI->first && "InsnRange does not have first instruction!");
1167       assert(RI->second && "InsnRange does not have second instruction!");
1168       requestLabelBeforeInsn(RI->first);
1169       requestLabelAfterInsn(RI->second);
1170     }
1171   }
1172 }
1173
1174 /// getScopeNode - Get MDNode for DebugLoc's scope.
1175 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1176   if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1177     return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1178   return DL.getScope(Ctx);
1179 }
1180
1181 /// getFnDebugLoc - Walk up the scope chain of given debug loc and find
1182 /// line number  info for the function.
1183 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1184   const MDNode *Scope = getScopeNode(DL, Ctx);
1185   DISubprogram SP = getDISubprogram(Scope);
1186   if (SP.Verify()) 
1187     return DebugLoc::get(SP.getLineNumber(), 0, SP);
1188   return DebugLoc();
1189 }
1190
1191 /// beginFunction - Gather pre-function debug information.  Assumes being
1192 /// emitted immediately after the function entry point.
1193 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1194   if (!MMI->hasDebugInfo()) return;
1195   LScopes.initialize(*MF);
1196   if (LScopes.empty()) return;
1197   identifyScopeMarkers();
1198
1199   FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1200                                         Asm->getFunctionNumber());
1201   // Assumes in correct section after the entry point.
1202   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1203
1204   assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1205
1206   const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1207   /// LiveUserVar - Map physreg numbers to the MDNode they contain.
1208   std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1209
1210   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1211        I != E; ++I) {
1212     bool AtBlockEntry = true;
1213     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1214          II != IE; ++II) {
1215       const MachineInstr *MI = II;
1216
1217       if (MI->isDebugValue()) {
1218         assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1219
1220         // Keep track of user variables.
1221         const MDNode *Var =
1222           MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1223
1224         // Variable is in a register, we need to check for clobbers.
1225         if (isDbgValueInDefinedReg(MI))
1226           LiveUserVar[MI->getOperand(0).getReg()] = Var;
1227
1228         // Check the history of this variable.
1229         SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1230         if (History.empty()) {
1231           UserVariables.push_back(Var);
1232           // The first mention of a function argument gets the FunctionBeginSym
1233           // label, so arguments are visible when breaking at function entry.
1234           DIVariable DV(Var);
1235           if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1236               DISubprogram(getDISubprogram(DV.getContext()))
1237                 .describes(MF->getFunction()))
1238             LabelsBeforeInsn[MI] = FunctionBeginSym;
1239         } else {
1240           // We have seen this variable before. Try to coalesce DBG_VALUEs.
1241           const MachineInstr *Prev = History.back();
1242           if (Prev->isDebugValue()) {
1243             // Coalesce identical entries at the end of History.
1244             if (History.size() >= 2 &&
1245                 Prev->isIdenticalTo(History[History.size() - 2])) {
1246               DEBUG(dbgs() << "Coalesce identical DBG_VALUE entries:\n"
1247                     << "\t" << *Prev 
1248                     << "\t" << *History[History.size() - 2] << "\n");
1249               History.pop_back();
1250             }
1251
1252             // Terminate old register assignments that don't reach MI;
1253             MachineFunction::const_iterator PrevMBB = Prev->getParent();
1254             if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1255                 isDbgValueInDefinedReg(Prev)) {
1256               // Previous register assignment needs to terminate at the end of
1257               // its basic block.
1258               MachineBasicBlock::const_iterator LastMI =
1259                 PrevMBB->getLastNonDebugInstr();
1260               if (LastMI == PrevMBB->end()) {
1261                 // Drop DBG_VALUE for empty range.
1262                 DEBUG(dbgs() << "Drop DBG_VALUE for empty range:\n"
1263                       << "\t" << *Prev << "\n");
1264                 History.pop_back();
1265               }
1266               else {
1267                 // Terminate after LastMI.
1268                 History.push_back(LastMI);
1269               }
1270             }
1271           }
1272         }
1273         History.push_back(MI);
1274       } else {
1275         // Not a DBG_VALUE instruction.
1276         if (!MI->isLabel())
1277           AtBlockEntry = false;
1278
1279         // First known non DBG_VALUE location marks beginning of function
1280         // body.
1281         if (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown())
1282           PrologEndLoc = MI->getDebugLoc();
1283
1284         // Check if the instruction clobbers any registers with debug vars.
1285         for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1286                MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1287           if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1288             continue;
1289           for (const unsigned *AI = TRI->getOverlaps(MOI->getReg());
1290                unsigned Reg = *AI; ++AI) {
1291             const MDNode *Var = LiveUserVar[Reg];
1292             if (!Var)
1293               continue;
1294             // Reg is now clobbered.
1295             LiveUserVar[Reg] = 0;
1296
1297             // Was MD last defined by a DBG_VALUE referring to Reg?
1298             DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1299             if (HistI == DbgValues.end())
1300               continue;
1301             SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1302             if (History.empty())
1303               continue;
1304             const MachineInstr *Prev = History.back();
1305             // Sanity-check: Register assignments are terminated at the end of
1306             // their block.
1307             if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1308               continue;
1309             // Is the variable still in Reg?
1310             if (!isDbgValueInDefinedReg(Prev) ||
1311                 Prev->getOperand(0).getReg() != Reg)
1312               continue;
1313             // Var is clobbered. Make sure the next instruction gets a label.
1314             History.push_back(MI);
1315           }
1316         }
1317       }
1318     }
1319   }
1320
1321   for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1322        I != E; ++I) {
1323     SmallVectorImpl<const MachineInstr*> &History = I->second;
1324     if (History.empty())
1325       continue;
1326
1327     // Make sure the final register assignments are terminated.
1328     const MachineInstr *Prev = History.back();
1329     if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1330       const MachineBasicBlock *PrevMBB = Prev->getParent();
1331       MachineBasicBlock::const_iterator LastMI = 
1332         PrevMBB->getLastNonDebugInstr();
1333       if (LastMI == PrevMBB->end())
1334         // Drop DBG_VALUE for empty range.
1335         History.pop_back();
1336       else {
1337         // Terminate after LastMI.
1338         History.push_back(LastMI);
1339       }
1340     }
1341     // Request labels for the full history.
1342     for (unsigned i = 0, e = History.size(); i != e; ++i) {
1343       const MachineInstr *MI = History[i];
1344       if (MI->isDebugValue())
1345         requestLabelBeforeInsn(MI);
1346       else
1347         requestLabelAfterInsn(MI);
1348     }
1349   }
1350
1351   PrevInstLoc = DebugLoc();
1352   PrevLabel = FunctionBeginSym;
1353
1354   // Record beginning of function.
1355   if (!PrologEndLoc.isUnknown()) {
1356     DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1357                                        MF->getFunction()->getContext());
1358     recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1359                      FnStartDL.getScope(MF->getFunction()->getContext()),
1360                      DWARF2_FLAG_IS_STMT);
1361   }
1362 }
1363
1364 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1365 //  SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1366   ScopeVariables[LS].push_back(Var);
1367 //  Vars.push_back(Var);
1368 }
1369
1370 /// endFunction - Gather and emit post-function debug information.
1371 ///
1372 void DwarfDebug::endFunction(const MachineFunction *MF) {
1373   if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1374
1375   // Define end label for subprogram.
1376   FunctionEndSym = Asm->GetTempSymbol("func_end",
1377                                       Asm->getFunctionNumber());
1378   // Assumes in correct section after the entry point.
1379   Asm->OutStreamer.EmitLabel(FunctionEndSym);
1380   
1381   SmallPtrSet<const MDNode *, 16> ProcessedVars;
1382   collectVariableInfo(MF, ProcessedVars);
1383   
1384   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1385   CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1386   assert(TheCU && "Unable to find compile unit!");
1387
1388   // Construct abstract scopes.
1389   ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1390   for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1391     LexicalScope *AScope = AList[i];
1392     DISubprogram SP(AScope->getScopeNode());
1393     if (SP.Verify()) {
1394       // Collect info for variables that were optimized out.
1395       DIArray Variables = SP.getVariables();
1396       for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1397         DIVariable DV(Variables.getElement(i));
1398         if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1399           continue;
1400         if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1401           addScopeVariable(Scope, new DbgVariable(DV, NULL));
1402       }
1403     }
1404     if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1405       constructScopeDIE(TheCU, AScope);
1406   }
1407   
1408   DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1409   
1410   if (!DisableFramePointerElim(*MF))
1411     TheCU->addUInt(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr,
1412                    dwarf::DW_FORM_flag, 1);
1413
1414   DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1415                                                MMI->getFrameMoves()));
1416
1417   // Clear debug info
1418   for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1419          I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1420     DeleteContainerPointers(I->second);
1421   ScopeVariables.clear();
1422   DeleteContainerPointers(CurrentFnArguments);
1423   UserVariables.clear();
1424   DbgValues.clear();
1425   AbstractVariables.clear();
1426   LabelsBeforeInsn.clear();
1427   LabelsAfterInsn.clear();
1428   PrevLabel = NULL;
1429 }
1430
1431 /// recordSourceLine - Register a source line with debug info. Returns the
1432 /// unique label that was emitted and which provides correspondence to
1433 /// the source line list.
1434 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1435                                   unsigned Flags) {
1436   StringRef Fn;
1437   StringRef Dir;
1438   unsigned Src = 1;
1439   if (S) {
1440     DIDescriptor Scope(S);
1441
1442     if (Scope.isCompileUnit()) {
1443       DICompileUnit CU(S);
1444       Fn = CU.getFilename();
1445       Dir = CU.getDirectory();
1446     } else if (Scope.isFile()) {
1447       DIFile F(S);
1448       Fn = F.getFilename();
1449       Dir = F.getDirectory();
1450     } else if (Scope.isSubprogram()) {
1451       DISubprogram SP(S);
1452       Fn = SP.getFilename();
1453       Dir = SP.getDirectory();
1454     } else if (Scope.isLexicalBlockFile()) {
1455       DILexicalBlockFile DBF(S);
1456       Fn = DBF.getFilename();
1457       Dir = DBF.getDirectory();
1458     } else if (Scope.isLexicalBlock()) {
1459       DILexicalBlock DB(S);
1460       Fn = DB.getFilename();
1461       Dir = DB.getDirectory();
1462     } else
1463       assert(0 && "Unexpected scope info");
1464
1465     Src = GetOrCreateSourceID(Fn, Dir);
1466   }
1467   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1468 }
1469
1470 //===----------------------------------------------------------------------===//
1471 // Emit Methods
1472 //===----------------------------------------------------------------------===//
1473
1474 /// computeSizeAndOffset - Compute the size and offset of a DIE.
1475 ///
1476 unsigned
1477 DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
1478   // Get the children.
1479   const std::vector<DIE *> &Children = Die->getChildren();
1480
1481   // If not last sibling and has children then add sibling offset attribute.
1482   if (!Last && !Children.empty())
1483     Die->addSiblingOffset(DIEValueAllocator);
1484
1485   // Record the abbreviation.
1486   assignAbbrevNumber(Die->getAbbrev());
1487
1488   // Get the abbreviation for this DIE.
1489   unsigned AbbrevNumber = Die->getAbbrevNumber();
1490   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1491
1492   // Set DIE offset
1493   Die->setOffset(Offset);
1494
1495   // Start the size with the size of abbreviation code.
1496   Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1497
1498   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1499   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1500
1501   // Size the DIE attribute values.
1502   for (unsigned i = 0, N = Values.size(); i < N; ++i)
1503     // Size attribute value.
1504     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1505
1506   // Size the DIE children if any.
1507   if (!Children.empty()) {
1508     assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1509            "Children flag not set");
1510
1511     for (unsigned j = 0, M = Children.size(); j < M; ++j)
1512       Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
1513
1514     // End of children marker.
1515     Offset += sizeof(int8_t);
1516   }
1517
1518   Die->setSize(Offset - Die->getOffset());
1519   return Offset;
1520 }
1521
1522 /// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
1523 ///
1524 void DwarfDebug::computeSizeAndOffsets() {
1525   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1526          E = CUMap.end(); I != E; ++I) {
1527     // Compute size of compile unit header.
1528     unsigned Offset = 
1529       sizeof(int32_t) + // Length of Compilation Unit Info
1530       sizeof(int16_t) + // DWARF version number
1531       sizeof(int32_t) + // Offset Into Abbrev. Section
1532       sizeof(int8_t);   // Pointer Size (in bytes)
1533     computeSizeAndOffset(I->second->getCUDie(), Offset, true);
1534   }
1535 }
1536
1537 /// EmitSectionLabels - Emit initial Dwarf sections with a label at
1538 /// the start of each one.
1539 void DwarfDebug::EmitSectionLabels() {
1540   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1541
1542   // Dwarf sections base addresses.
1543   DwarfInfoSectionSym =
1544     EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1545   DwarfAbbrevSectionSym =
1546     EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1547   EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
1548
1549   if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1550     EmitSectionSym(Asm, MacroInfo);
1551
1552   EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1553   EmitSectionSym(Asm, TLOF.getDwarfLocSection());
1554   EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1555   DwarfStrSectionSym =
1556     EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
1557   DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1558                                              "debug_range");
1559
1560   DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
1561                                            "section_debug_loc");
1562
1563   TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1564   EmitSectionSym(Asm, TLOF.getDataSection());
1565 }
1566
1567 /// emitDIE - Recursively emits a debug information entry.
1568 ///
1569 void DwarfDebug::emitDIE(DIE *Die) {
1570   // Get the abbreviation for this DIE.
1571   unsigned AbbrevNumber = Die->getAbbrevNumber();
1572   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1573
1574   // Emit the code (index) for the abbreviation.
1575   if (Asm->isVerbose())
1576     Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1577                                 Twine::utohexstr(Die->getOffset()) + ":0x" +
1578                                 Twine::utohexstr(Die->getSize()) + " " +
1579                                 dwarf::TagString(Abbrev->getTag()));
1580   Asm->EmitULEB128(AbbrevNumber);
1581
1582   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1583   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1584
1585   // Emit the DIE attribute values.
1586   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1587     unsigned Attr = AbbrevData[i].getAttribute();
1588     unsigned Form = AbbrevData[i].getForm();
1589     assert(Form && "Too many attributes for DIE (check abbreviation)");
1590
1591     if (Asm->isVerbose())
1592       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1593
1594     switch (Attr) {
1595     case dwarf::DW_AT_sibling:
1596       Asm->EmitInt32(Die->getSiblingOffset());
1597       break;
1598     case dwarf::DW_AT_abstract_origin: {
1599       DIEEntry *E = cast<DIEEntry>(Values[i]);
1600       DIE *Origin = E->getEntry();
1601       unsigned Addr = Origin->getOffset();
1602       Asm->EmitInt32(Addr);
1603       break;
1604     }
1605     case dwarf::DW_AT_ranges: {
1606       // DW_AT_range Value encodes offset in debug_range section.
1607       DIEInteger *V = cast<DIEInteger>(Values[i]);
1608
1609       if (Asm->MAI->doesDwarfUsesLabelOffsetForRanges()) {
1610         Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1611                                  V->getValue(),
1612                                  4);
1613       } else {
1614         Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1615                                        V->getValue(),
1616                                        DwarfDebugRangeSectionSym,
1617                                        4);
1618       }
1619       break;
1620     }
1621     case dwarf::DW_AT_location: {
1622       if (DIELabel *L = dyn_cast<DIELabel>(Values[i]))
1623         Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1624       else
1625         Values[i]->EmitValue(Asm, Form);
1626       break;
1627     }
1628     case dwarf::DW_AT_accessibility: {
1629       if (Asm->isVerbose()) {
1630         DIEInteger *V = cast<DIEInteger>(Values[i]);
1631         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1632       }
1633       Values[i]->EmitValue(Asm, Form);
1634       break;
1635     }
1636     default:
1637       // Emit an attribute using the defined form.
1638       Values[i]->EmitValue(Asm, Form);
1639       break;
1640     }
1641   }
1642
1643   // Emit the DIE children if any.
1644   if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1645     const std::vector<DIE *> &Children = Die->getChildren();
1646
1647     for (unsigned j = 0, M = Children.size(); j < M; ++j)
1648       emitDIE(Children[j]);
1649
1650     if (Asm->isVerbose())
1651       Asm->OutStreamer.AddComment("End Of Children Mark");
1652     Asm->EmitInt8(0);
1653   }
1654 }
1655
1656 /// emitDebugInfo - Emit the debug info section.
1657 ///
1658 void DwarfDebug::emitDebugInfo() {
1659   // Start debug info section.
1660   Asm->OutStreamer.SwitchSection(
1661                             Asm->getObjFileLowering().getDwarfInfoSection());
1662   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1663          E = CUMap.end(); I != E; ++I) {
1664     CompileUnit *TheCU = I->second;
1665     DIE *Die = TheCU->getCUDie();
1666
1667     // Emit the compile units header.
1668     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
1669                                                   TheCU->getID()));
1670
1671     // Emit size of content not including length itself
1672     unsigned ContentSize = Die->getSize() +
1673       sizeof(int16_t) + // DWARF version number
1674       sizeof(int32_t) + // Offset Into Abbrev. Section
1675       sizeof(int8_t);   // Pointer Size (in bytes)
1676
1677     Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1678     Asm->EmitInt32(ContentSize);
1679     Asm->OutStreamer.AddComment("DWARF version number");
1680     Asm->EmitInt16(dwarf::DWARF_VERSION);
1681     Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1682     Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
1683                            DwarfAbbrevSectionSym);
1684     Asm->OutStreamer.AddComment("Address Size (in bytes)");
1685     Asm->EmitInt8(Asm->getTargetData().getPointerSize());
1686
1687     emitDIE(Die);
1688     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
1689   }
1690 }
1691
1692 /// emitAbbreviations - Emit the abbreviation section.
1693 ///
1694 void DwarfDebug::emitAbbreviations() const {
1695   // Check to see if it is worth the effort.
1696   if (!Abbreviations.empty()) {
1697     // Start the debug abbrev section.
1698     Asm->OutStreamer.SwitchSection(
1699                             Asm->getObjFileLowering().getDwarfAbbrevSection());
1700
1701     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
1702
1703     // For each abbrevation.
1704     for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
1705       // Get abbreviation data
1706       const DIEAbbrev *Abbrev = Abbreviations[i];
1707
1708       // Emit the abbrevations code (base 1 index.)
1709       Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1710
1711       // Emit the abbreviations data.
1712       Abbrev->Emit(Asm);
1713     }
1714
1715     // Mark end of abbreviations.
1716     Asm->EmitULEB128(0, "EOM(3)");
1717
1718     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
1719   }
1720 }
1721
1722 /// emitEndOfLineMatrix - Emit the last address of the section and the end of
1723 /// the line matrix.
1724 ///
1725 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1726   // Define last address of section.
1727   Asm->OutStreamer.AddComment("Extended Op");
1728   Asm->EmitInt8(0);
1729
1730   Asm->OutStreamer.AddComment("Op size");
1731   Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
1732   Asm->OutStreamer.AddComment("DW_LNE_set_address");
1733   Asm->EmitInt8(dwarf::DW_LNE_set_address);
1734
1735   Asm->OutStreamer.AddComment("Section end label");
1736
1737   Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1738                                    Asm->getTargetData().getPointerSize(),
1739                                    0/*AddrSpace*/);
1740
1741   // Mark end of matrix.
1742   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1743   Asm->EmitInt8(0);
1744   Asm->EmitInt8(1);
1745   Asm->EmitInt8(1);
1746 }
1747
1748 /// emitAccelNames - Emit visible names into a hashed accelerator table
1749 /// section.
1750 void DwarfDebug::emitAccelNames() {
1751   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1752                                            dwarf::DW_FORM_data4));
1753   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1754          E = CUMap.end(); I != E; ++I) {
1755     CompileUnit *TheCU = I->second;
1756     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
1757     for (StringMap<std::vector<DIE*> >::const_iterator
1758            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1759       const char *Name = GI->getKeyData();
1760       std::vector<DIE *> Entities = GI->second;
1761       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1762              DE = Entities.end(); DI != DE; ++DI)
1763         AT.AddName(Name, (*DI));
1764     }
1765   }
1766
1767   AT.FinalizeTable(Asm, "Names");
1768   Asm->OutStreamer.SwitchSection(
1769     Asm->getObjFileLowering().getDwarfAccelNamesSection());
1770   MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
1771   Asm->OutStreamer.EmitLabel(SectionBegin);
1772
1773   // Emit the full data.
1774   AT.Emit(Asm, SectionBegin, this);
1775 }
1776
1777 /// emitAccelObjC - Emit objective C classes and categories into a hashed
1778 /// accelerator table section.
1779 void DwarfDebug::emitAccelObjC() {
1780   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1781                                            dwarf::DW_FORM_data4));
1782   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1783          E = CUMap.end(); I != E; ++I) {
1784     CompileUnit *TheCU = I->second;
1785     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
1786     for (StringMap<std::vector<DIE*> >::const_iterator
1787            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1788       const char *Name = GI->getKeyData();
1789       std::vector<DIE *> Entities = GI->second;
1790       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1791              DE = Entities.end(); DI != DE; ++DI)
1792         AT.AddName(Name, (*DI));
1793     }
1794   }
1795
1796   AT.FinalizeTable(Asm, "ObjC");
1797   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1798                                  .getDwarfAccelObjCSection());
1799   MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
1800   Asm->OutStreamer.EmitLabel(SectionBegin);
1801
1802   // Emit the full data.
1803   AT.Emit(Asm, SectionBegin, this);
1804 }
1805
1806 /// emitAccelNamespace - Emit namespace dies into a hashed accelerator
1807 /// table.
1808 void DwarfDebug::emitAccelNamespaces() {
1809   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1810                                            dwarf::DW_FORM_data4));
1811   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1812          E = CUMap.end(); I != E; ++I) {
1813     CompileUnit *TheCU = I->second;
1814     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
1815     for (StringMap<std::vector<DIE*> >::const_iterator
1816            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1817       const char *Name = GI->getKeyData();
1818       std::vector<DIE *> Entities = GI->second;
1819       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1820              DE = Entities.end(); DI != DE; ++DI)
1821         AT.AddName(Name, (*DI));
1822     }
1823   }
1824
1825   AT.FinalizeTable(Asm, "namespac");
1826   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1827                                  .getDwarfAccelNamespaceSection());
1828   MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
1829   Asm->OutStreamer.EmitLabel(SectionBegin);
1830
1831   // Emit the full data.
1832   AT.Emit(Asm, SectionBegin, this);
1833 }
1834
1835 /// emitAccelTypes() - Emit type dies into a hashed accelerator table.
1836 void DwarfDebug::emitAccelTypes() {
1837   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1838                                            dwarf::DW_FORM_data4));
1839   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1840          E = CUMap.end(); I != E; ++I) {
1841     CompileUnit *TheCU = I->second;
1842     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelTypes();
1843     for (StringMap<std::vector<DIE*> >::const_iterator
1844            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1845       const char *Name = GI->getKeyData();
1846       std::vector<DIE *> Entities = GI->second;
1847       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1848              DE= Entities.end(); DI !=DE; ++DI)
1849         AT.AddName(Name, (*DI));
1850     }
1851   }
1852
1853   AT.FinalizeTable(Asm, "types");
1854   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1855                                  .getDwarfAccelTypesSection());
1856   MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
1857   Asm->OutStreamer.EmitLabel(SectionBegin);
1858
1859   // Emit the full data.
1860   AT.Emit(Asm, SectionBegin, this);
1861 }
1862
1863 void DwarfDebug::emitDebugPubTypes() {
1864   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1865          E = CUMap.end(); I != E; ++I) {
1866     CompileUnit *TheCU = I->second;
1867     // Start the dwarf pubtypes section.
1868     Asm->OutStreamer.SwitchSection(
1869       Asm->getObjFileLowering().getDwarfPubTypesSection());
1870     Asm->OutStreamer.AddComment("Length of Public Types Info");
1871     Asm->EmitLabelDifference(
1872       Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
1873       Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
1874
1875     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
1876                                                   TheCU->getID()));
1877
1878     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
1879     Asm->EmitInt16(dwarf::DWARF_VERSION);
1880
1881     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1882     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1883                            DwarfInfoSectionSym);
1884
1885     Asm->OutStreamer.AddComment("Compilation Unit Length");
1886     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1887                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
1888                              4);
1889
1890     const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
1891     for (StringMap<DIE*>::const_iterator
1892            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1893       const char *Name = GI->getKeyData();
1894       DIE *Entity = GI->second;
1895
1896       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
1897       Asm->EmitInt32(Entity->getOffset());
1898
1899       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
1900       // Emit the name with a terminating null byte.
1901       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
1902     }
1903
1904     Asm->OutStreamer.AddComment("End Mark");
1905     Asm->EmitInt32(0);
1906     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
1907                                                   TheCU->getID()));
1908   }
1909 }
1910
1911 /// emitDebugStr - Emit visible names into a debug str section.
1912 ///
1913 void DwarfDebug::emitDebugStr() {
1914   // Check to see if it is worth the effort.
1915   if (StringPool.empty()) return;
1916
1917   // Start the dwarf str section.
1918   Asm->OutStreamer.SwitchSection(
1919                                 Asm->getObjFileLowering().getDwarfStrSection());
1920
1921   // Get all of the string pool entries and put them in an array by their ID so
1922   // we can sort them.
1923   SmallVector<std::pair<unsigned,
1924       StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
1925
1926   for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
1927        I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
1928     Entries.push_back(std::make_pair(I->second.second, &*I));
1929
1930   array_pod_sort(Entries.begin(), Entries.end());
1931
1932   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
1933     // Emit a label for reference from debug information entries.
1934     Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
1935
1936     // Emit the string itself with a terminating null byte.
1937     Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
1938                                          Entries[i].second->getKeyLength()+1),
1939                                0/*addrspace*/);
1940   }
1941 }
1942
1943 /// emitDebugLoc - Emit visible names into a debug loc section.
1944 ///
1945 void DwarfDebug::emitDebugLoc() {
1946   if (DotDebugLocEntries.empty())
1947     return;
1948
1949   for (SmallVector<DotDebugLocEntry, 4>::iterator
1950          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1951        I != E; ++I) {
1952     DotDebugLocEntry &Entry = *I;
1953     if (I + 1 != DotDebugLocEntries.end())
1954       Entry.Merge(I+1);
1955   }
1956
1957   // Start the dwarf loc section.
1958   Asm->OutStreamer.SwitchSection(
1959     Asm->getObjFileLowering().getDwarfLocSection());
1960   unsigned char Size = Asm->getTargetData().getPointerSize();
1961   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
1962   unsigned index = 1;
1963   for (SmallVector<DotDebugLocEntry, 4>::iterator
1964          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1965        I != E; ++I, ++index) {
1966     DotDebugLocEntry &Entry = *I;
1967     if (Entry.isMerged()) continue;
1968     if (Entry.isEmpty()) {
1969       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1970       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1971       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
1972     } else {
1973       Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
1974       Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
1975       DIVariable DV(Entry.Variable);
1976       Asm->OutStreamer.AddComment("Loc expr size");
1977       MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
1978       MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
1979       Asm->EmitLabelDifference(end, begin, 2);
1980       Asm->OutStreamer.EmitLabel(begin);
1981       if (Entry.isInt()) {
1982         DIBasicType BTy(DV.getType());
1983         if (BTy.Verify() &&
1984             (BTy.getEncoding()  == dwarf::DW_ATE_signed 
1985              || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
1986           Asm->OutStreamer.AddComment("DW_OP_consts");
1987           Asm->EmitInt8(dwarf::DW_OP_consts);
1988           Asm->EmitSLEB128(Entry.getInt());
1989         } else {
1990           Asm->OutStreamer.AddComment("DW_OP_constu");
1991           Asm->EmitInt8(dwarf::DW_OP_constu);
1992           Asm->EmitULEB128(Entry.getInt());
1993         }
1994       } else if (Entry.isLocation()) {
1995         if (!DV.hasComplexAddress()) 
1996           // Regular entry.
1997           Asm->EmitDwarfRegOp(Entry.Loc);
1998         else {
1999           // Complex address entry.
2000           unsigned N = DV.getNumAddrElements();
2001           unsigned i = 0;
2002           if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2003             if (Entry.Loc.getOffset()) {
2004               i = 2;
2005               Asm->EmitDwarfRegOp(Entry.Loc);
2006               Asm->OutStreamer.AddComment("DW_OP_deref");
2007               Asm->EmitInt8(dwarf::DW_OP_deref);
2008               Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2009               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2010               Asm->EmitSLEB128(DV.getAddrElement(1));
2011             } else {
2012               // If first address element is OpPlus then emit
2013               // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2014               MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2015               Asm->EmitDwarfRegOp(Loc);
2016               i = 2;
2017             }
2018           } else {
2019             Asm->EmitDwarfRegOp(Entry.Loc);
2020           }
2021           
2022           // Emit remaining complex address elements.
2023           for (; i < N; ++i) {
2024             uint64_t Element = DV.getAddrElement(i);
2025             if (Element == DIBuilder::OpPlus) {
2026               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2027               Asm->EmitULEB128(DV.getAddrElement(++i));
2028             } else if (Element == DIBuilder::OpDeref)
2029               Asm->EmitInt8(dwarf::DW_OP_deref);
2030             else llvm_unreachable("unknown Opcode found in complex address");
2031           }
2032         }
2033       }
2034       // else ... ignore constant fp. There is not any good way to
2035       // to represent them here in dwarf.
2036       Asm->OutStreamer.EmitLabel(end);
2037     }
2038   }
2039 }
2040
2041 /// EmitDebugARanges - Emit visible names into a debug aranges section.
2042 ///
2043 void DwarfDebug::EmitDebugARanges() {
2044   // Start the dwarf aranges section.
2045   Asm->OutStreamer.SwitchSection(
2046                           Asm->getObjFileLowering().getDwarfARangesSection());
2047 }
2048
2049 /// emitDebugRanges - Emit visible names into a debug ranges section.
2050 ///
2051 void DwarfDebug::emitDebugRanges() {
2052   // Start the dwarf ranges section.
2053   Asm->OutStreamer.SwitchSection(
2054     Asm->getObjFileLowering().getDwarfRangesSection());
2055   unsigned char Size = Asm->getTargetData().getPointerSize();
2056   for (SmallVector<const MCSymbol *, 8>::iterator
2057          I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2058        I != E; ++I) {
2059     if (*I)
2060       Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2061     else
2062       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2063   }
2064 }
2065
2066 /// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2067 ///
2068 void DwarfDebug::emitDebugMacInfo() {
2069   if (const MCSection *LineInfo =
2070       Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2071     // Start the dwarf macinfo section.
2072     Asm->OutStreamer.SwitchSection(LineInfo);
2073   }
2074 }
2075
2076 /// emitDebugInlineInfo - Emit inline info using following format.
2077 /// Section Header:
2078 /// 1. length of section
2079 /// 2. Dwarf version number
2080 /// 3. address size.
2081 ///
2082 /// Entries (one "entry" for each function that was inlined):
2083 ///
2084 /// 1. offset into __debug_str section for MIPS linkage name, if exists;
2085 ///   otherwise offset into __debug_str for regular function name.
2086 /// 2. offset into __debug_str section for regular function name.
2087 /// 3. an unsigned LEB128 number indicating the number of distinct inlining
2088 /// instances for the function.
2089 ///
2090 /// The rest of the entry consists of a {die_offset, low_pc} pair for each
2091 /// inlined instance; the die_offset points to the inlined_subroutine die in the
2092 /// __debug_info section, and the low_pc is the starting address for the
2093 /// inlining instance.
2094 void DwarfDebug::emitDebugInlineInfo() {
2095   if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
2096     return;
2097
2098   if (!FirstCU)
2099     return;
2100
2101   Asm->OutStreamer.SwitchSection(
2102                         Asm->getObjFileLowering().getDwarfDebugInlineSection());
2103
2104   Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2105   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2106                            Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2107
2108   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2109
2110   Asm->OutStreamer.AddComment("Dwarf Version");
2111   Asm->EmitInt16(dwarf::DWARF_VERSION);
2112   Asm->OutStreamer.AddComment("Address Size (in bytes)");
2113   Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2114
2115   for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2116          E = InlinedSPNodes.end(); I != E; ++I) {
2117
2118     const MDNode *Node = *I;
2119     DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2120       = InlineInfo.find(Node);
2121     SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2122     DISubprogram SP(Node);
2123     StringRef LName = SP.getLinkageName();
2124     StringRef Name = SP.getName();
2125
2126     Asm->OutStreamer.AddComment("MIPS linkage name");
2127     if (LName.empty()) {
2128       Asm->OutStreamer.EmitBytes(Name, 0);
2129       Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
2130     } else
2131       Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2132                              DwarfStrSectionSym);
2133
2134     Asm->OutStreamer.AddComment("Function name");
2135     Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2136     Asm->EmitULEB128(Labels.size(), "Inline count");
2137
2138     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2139            LE = Labels.end(); LI != LE; ++LI) {
2140       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2141       Asm->EmitInt32(LI->second->getOffset());
2142
2143       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2144       Asm->OutStreamer.EmitSymbolValue(LI->first,
2145                                        Asm->getTargetData().getPointerSize(),0);
2146     }
2147   }
2148
2149   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2150 }