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