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