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