Untabify and 80-col.
[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 (const uint16_t *AI = TRI->getOverlaps(MOI->getReg());
1313                unsigned Reg = *AI; ++AI) {
1314             const MDNode *Var = LiveUserVar[Reg];
1315             if (!Var)
1316               continue;
1317             // Reg is now clobbered.
1318             LiveUserVar[Reg] = 0;
1319
1320             // Was MD last defined by a DBG_VALUE referring to Reg?
1321             DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1322             if (HistI == DbgValues.end())
1323               continue;
1324             SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1325             if (History.empty())
1326               continue;
1327             const MachineInstr *Prev = History.back();
1328             // Sanity-check: Register assignments are terminated at the end of
1329             // their block.
1330             if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1331               continue;
1332             // Is the variable still in Reg?
1333             if (!isDbgValueInDefinedReg(Prev) ||
1334                 Prev->getOperand(0).getReg() != Reg)
1335               continue;
1336             // Var is clobbered. Make sure the next instruction gets a label.
1337             History.push_back(MI);
1338           }
1339         }
1340       }
1341     }
1342   }
1343
1344   for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1345        I != E; ++I) {
1346     SmallVectorImpl<const MachineInstr*> &History = I->second;
1347     if (History.empty())
1348       continue;
1349
1350     // Make sure the final register assignments are terminated.
1351     const MachineInstr *Prev = History.back();
1352     if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1353       const MachineBasicBlock *PrevMBB = Prev->getParent();
1354       MachineBasicBlock::const_iterator LastMI = 
1355         PrevMBB->getLastNonDebugInstr();
1356       if (LastMI == PrevMBB->end())
1357         // Drop DBG_VALUE for empty range.
1358         History.pop_back();
1359       else {
1360         // Terminate after LastMI.
1361         History.push_back(LastMI);
1362       }
1363     }
1364     // Request labels for the full history.
1365     for (unsigned i = 0, e = History.size(); i != e; ++i) {
1366       const MachineInstr *MI = History[i];
1367       if (MI->isDebugValue())
1368         requestLabelBeforeInsn(MI);
1369       else
1370         requestLabelAfterInsn(MI);
1371     }
1372   }
1373
1374   PrevInstLoc = DebugLoc();
1375   PrevLabel = FunctionBeginSym;
1376
1377   // Record beginning of function.
1378   if (!PrologEndLoc.isUnknown()) {
1379     DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1380                                        MF->getFunction()->getContext());
1381     recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1382                      FnStartDL.getScope(MF->getFunction()->getContext()),
1383                      0);
1384   }
1385 }
1386
1387 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1388 //  SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1389   ScopeVariables[LS].push_back(Var);
1390 //  Vars.push_back(Var);
1391 }
1392
1393 /// endFunction - Gather and emit post-function debug information.
1394 ///
1395 void DwarfDebug::endFunction(const MachineFunction *MF) {
1396   if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1397
1398   // Define end label for subprogram.
1399   FunctionEndSym = Asm->GetTempSymbol("func_end",
1400                                       Asm->getFunctionNumber());
1401   // Assumes in correct section after the entry point.
1402   Asm->OutStreamer.EmitLabel(FunctionEndSym);
1403   
1404   SmallPtrSet<const MDNode *, 16> ProcessedVars;
1405   collectVariableInfo(MF, ProcessedVars);
1406   
1407   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1408   CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1409   assert(TheCU && "Unable to find compile unit!");
1410
1411   // Construct abstract scopes.
1412   ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1413   for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1414     LexicalScope *AScope = AList[i];
1415     DISubprogram SP(AScope->getScopeNode());
1416     if (SP.Verify()) {
1417       // Collect info for variables that were optimized out.
1418       DIArray Variables = SP.getVariables();
1419       for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1420         DIVariable DV(Variables.getElement(i));
1421         if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1422           continue;
1423         if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1424           addScopeVariable(Scope, new DbgVariable(DV, NULL));
1425       }
1426     }
1427     if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1428       constructScopeDIE(TheCU, AScope);
1429   }
1430   
1431   DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1432   
1433   if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1434     TheCU->addUInt(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr,
1435                    dwarf::DW_FORM_flag, 1);
1436
1437   DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1438                                                MMI->getFrameMoves()));
1439
1440   // Clear debug info
1441   for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1442          I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1443     DeleteContainerPointers(I->second);
1444   ScopeVariables.clear();
1445   DeleteContainerPointers(CurrentFnArguments);
1446   UserVariables.clear();
1447   DbgValues.clear();
1448   AbstractVariables.clear();
1449   LabelsBeforeInsn.clear();
1450   LabelsAfterInsn.clear();
1451   PrevLabel = NULL;
1452 }
1453
1454 /// recordSourceLine - Register a source line with debug info. Returns the
1455 /// unique label that was emitted and which provides correspondence to
1456 /// the source line list.
1457 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1458                                   unsigned Flags) {
1459   StringRef Fn;
1460   StringRef Dir;
1461   unsigned Src = 1;
1462   if (S) {
1463     DIDescriptor Scope(S);
1464
1465     if (Scope.isCompileUnit()) {
1466       DICompileUnit CU(S);
1467       Fn = CU.getFilename();
1468       Dir = CU.getDirectory();
1469     } else if (Scope.isFile()) {
1470       DIFile F(S);
1471       Fn = F.getFilename();
1472       Dir = F.getDirectory();
1473     } else if (Scope.isSubprogram()) {
1474       DISubprogram SP(S);
1475       Fn = SP.getFilename();
1476       Dir = SP.getDirectory();
1477     } else if (Scope.isLexicalBlockFile()) {
1478       DILexicalBlockFile DBF(S);
1479       Fn = DBF.getFilename();
1480       Dir = DBF.getDirectory();
1481     } else if (Scope.isLexicalBlock()) {
1482       DILexicalBlock DB(S);
1483       Fn = DB.getFilename();
1484       Dir = DB.getDirectory();
1485     } else
1486       llvm_unreachable("Unexpected scope info");
1487
1488     Src = GetOrCreateSourceID(Fn, Dir);
1489   }
1490   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1491 }
1492
1493 //===----------------------------------------------------------------------===//
1494 // Emit Methods
1495 //===----------------------------------------------------------------------===//
1496
1497 /// computeSizeAndOffset - Compute the size and offset of a DIE.
1498 ///
1499 unsigned
1500 DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
1501   // Get the children.
1502   const std::vector<DIE *> &Children = Die->getChildren();
1503
1504   // Record the abbreviation.
1505   assignAbbrevNumber(Die->getAbbrev());
1506
1507   // Get the abbreviation for this DIE.
1508   unsigned AbbrevNumber = Die->getAbbrevNumber();
1509   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1510
1511   // Set DIE offset
1512   Die->setOffset(Offset);
1513
1514   // Start the size with the size of abbreviation code.
1515   Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1516
1517   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1518   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1519
1520   // Size the DIE attribute values.
1521   for (unsigned i = 0, N = Values.size(); i < N; ++i)
1522     // Size attribute value.
1523     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1524
1525   // Size the DIE children if any.
1526   if (!Children.empty()) {
1527     assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1528            "Children flag not set");
1529
1530     for (unsigned j = 0, M = Children.size(); j < M; ++j)
1531       Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
1532
1533     // End of children marker.
1534     Offset += sizeof(int8_t);
1535   }
1536
1537   Die->setSize(Offset - Die->getOffset());
1538   return Offset;
1539 }
1540
1541 /// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
1542 ///
1543 void DwarfDebug::computeSizeAndOffsets() {
1544   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1545          E = CUMap.end(); I != E; ++I) {
1546     // Compute size of compile unit header.
1547     unsigned Offset = 
1548       sizeof(int32_t) + // Length of Compilation Unit Info
1549       sizeof(int16_t) + // DWARF version number
1550       sizeof(int32_t) + // Offset Into Abbrev. Section
1551       sizeof(int8_t);   // Pointer Size (in bytes)
1552     computeSizeAndOffset(I->second->getCUDie(), Offset, true);
1553   }
1554 }
1555
1556 /// EmitSectionLabels - Emit initial Dwarf sections with a label at
1557 /// the start of each one.
1558 void DwarfDebug::EmitSectionLabels() {
1559   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1560
1561   // Dwarf sections base addresses.
1562   DwarfInfoSectionSym =
1563     EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1564   DwarfAbbrevSectionSym =
1565     EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1566   EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
1567
1568   if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1569     EmitSectionSym(Asm, MacroInfo);
1570
1571   EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1572   EmitSectionSym(Asm, TLOF.getDwarfLocSection());
1573   EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1574   DwarfStrSectionSym =
1575     EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
1576   DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1577                                              "debug_range");
1578
1579   DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
1580                                            "section_debug_loc");
1581
1582   TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1583   EmitSectionSym(Asm, TLOF.getDataSection());
1584 }
1585
1586 /// emitDIE - Recursively emits a debug information entry.
1587 ///
1588 void DwarfDebug::emitDIE(DIE *Die) {
1589   // Get the abbreviation for this DIE.
1590   unsigned AbbrevNumber = Die->getAbbrevNumber();
1591   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1592
1593   // Emit the code (index) for the abbreviation.
1594   if (Asm->isVerbose())
1595     Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1596                                 Twine::utohexstr(Die->getOffset()) + ":0x" +
1597                                 Twine::utohexstr(Die->getSize()) + " " +
1598                                 dwarf::TagString(Abbrev->getTag()));
1599   Asm->EmitULEB128(AbbrevNumber);
1600
1601   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1602   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1603
1604   // Emit the DIE attribute values.
1605   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1606     unsigned Attr = AbbrevData[i].getAttribute();
1607     unsigned Form = AbbrevData[i].getForm();
1608     assert(Form && "Too many attributes for DIE (check abbreviation)");
1609
1610     if (Asm->isVerbose())
1611       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1612
1613     switch (Attr) {
1614     case dwarf::DW_AT_abstract_origin: {
1615       DIEEntry *E = cast<DIEEntry>(Values[i]);
1616       DIE *Origin = E->getEntry();
1617       unsigned Addr = Origin->getOffset();
1618       Asm->EmitInt32(Addr);
1619       break;
1620     }
1621     case dwarf::DW_AT_ranges: {
1622       // DW_AT_range Value encodes offset in debug_range section.
1623       DIEInteger *V = cast<DIEInteger>(Values[i]);
1624
1625       if (Asm->MAI->doesDwarfUseLabelOffsetForRanges()) {
1626         Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1627                                  V->getValue(),
1628                                  4);
1629       } else {
1630         Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1631                                        V->getValue(),
1632                                        DwarfDebugRangeSectionSym,
1633                                        4);
1634       }
1635       break;
1636     }
1637     case dwarf::DW_AT_location: {
1638       if (DIELabel *L = dyn_cast<DIELabel>(Values[i]))
1639         Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1640       else
1641         Values[i]->EmitValue(Asm, Form);
1642       break;
1643     }
1644     case dwarf::DW_AT_accessibility: {
1645       if (Asm->isVerbose()) {
1646         DIEInteger *V = cast<DIEInteger>(Values[i]);
1647         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1648       }
1649       Values[i]->EmitValue(Asm, Form);
1650       break;
1651     }
1652     default:
1653       // Emit an attribute using the defined form.
1654       Values[i]->EmitValue(Asm, Form);
1655       break;
1656     }
1657   }
1658
1659   // Emit the DIE children if any.
1660   if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1661     const std::vector<DIE *> &Children = Die->getChildren();
1662
1663     for (unsigned j = 0, M = Children.size(); j < M; ++j)
1664       emitDIE(Children[j]);
1665
1666     if (Asm->isVerbose())
1667       Asm->OutStreamer.AddComment("End Of Children Mark");
1668     Asm->EmitInt8(0);
1669   }
1670 }
1671
1672 /// emitDebugInfo - Emit the debug info section.
1673 ///
1674 void DwarfDebug::emitDebugInfo() {
1675   // Start debug info section.
1676   Asm->OutStreamer.SwitchSection(
1677                             Asm->getObjFileLowering().getDwarfInfoSection());
1678   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1679          E = CUMap.end(); I != E; ++I) {
1680     CompileUnit *TheCU = I->second;
1681     DIE *Die = TheCU->getCUDie();
1682
1683     // Emit the compile units header.
1684     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
1685                                                   TheCU->getID()));
1686
1687     // Emit size of content not including length itself
1688     unsigned ContentSize = Die->getSize() +
1689       sizeof(int16_t) + // DWARF version number
1690       sizeof(int32_t) + // Offset Into Abbrev. Section
1691       sizeof(int8_t);   // Pointer Size (in bytes)
1692
1693     Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1694     Asm->EmitInt32(ContentSize);
1695     Asm->OutStreamer.AddComment("DWARF version number");
1696     Asm->EmitInt16(dwarf::DWARF_VERSION);
1697     Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1698     Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
1699                            DwarfAbbrevSectionSym);
1700     Asm->OutStreamer.AddComment("Address Size (in bytes)");
1701     Asm->EmitInt8(Asm->getTargetData().getPointerSize());
1702
1703     emitDIE(Die);
1704     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
1705   }
1706 }
1707
1708 /// emitAbbreviations - Emit the abbreviation section.
1709 ///
1710 void DwarfDebug::emitAbbreviations() const {
1711   // Check to see if it is worth the effort.
1712   if (!Abbreviations.empty()) {
1713     // Start the debug abbrev section.
1714     Asm->OutStreamer.SwitchSection(
1715                             Asm->getObjFileLowering().getDwarfAbbrevSection());
1716
1717     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
1718
1719     // For each abbrevation.
1720     for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
1721       // Get abbreviation data
1722       const DIEAbbrev *Abbrev = Abbreviations[i];
1723
1724       // Emit the abbrevations code (base 1 index.)
1725       Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1726
1727       // Emit the abbreviations data.
1728       Abbrev->Emit(Asm);
1729     }
1730
1731     // Mark end of abbreviations.
1732     Asm->EmitULEB128(0, "EOM(3)");
1733
1734     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
1735   }
1736 }
1737
1738 /// emitEndOfLineMatrix - Emit the last address of the section and the end of
1739 /// the line matrix.
1740 ///
1741 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1742   // Define last address of section.
1743   Asm->OutStreamer.AddComment("Extended Op");
1744   Asm->EmitInt8(0);
1745
1746   Asm->OutStreamer.AddComment("Op size");
1747   Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
1748   Asm->OutStreamer.AddComment("DW_LNE_set_address");
1749   Asm->EmitInt8(dwarf::DW_LNE_set_address);
1750
1751   Asm->OutStreamer.AddComment("Section end label");
1752
1753   Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1754                                    Asm->getTargetData().getPointerSize(),
1755                                    0/*AddrSpace*/);
1756
1757   // Mark end of matrix.
1758   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1759   Asm->EmitInt8(0);
1760   Asm->EmitInt8(1);
1761   Asm->EmitInt8(1);
1762 }
1763
1764 /// emitAccelNames - Emit visible names into a hashed accelerator table
1765 /// section.
1766 void DwarfDebug::emitAccelNames() {
1767   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1768                                            dwarf::DW_FORM_data4));
1769   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1770          E = CUMap.end(); I != E; ++I) {
1771     CompileUnit *TheCU = I->second;
1772     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
1773     for (StringMap<std::vector<DIE*> >::const_iterator
1774            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1775       const char *Name = GI->getKeyData();
1776       const std::vector<DIE *> &Entities = GI->second;
1777       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1778              DE = Entities.end(); DI != DE; ++DI)
1779         AT.AddName(Name, (*DI));
1780     }
1781   }
1782
1783   AT.FinalizeTable(Asm, "Names");
1784   Asm->OutStreamer.SwitchSection(
1785     Asm->getObjFileLowering().getDwarfAccelNamesSection());
1786   MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
1787   Asm->OutStreamer.EmitLabel(SectionBegin);
1788
1789   // Emit the full data.
1790   AT.Emit(Asm, SectionBegin, this);
1791 }
1792
1793 /// emitAccelObjC - Emit objective C classes and categories into a hashed
1794 /// accelerator table section.
1795 void DwarfDebug::emitAccelObjC() {
1796   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1797                                            dwarf::DW_FORM_data4));
1798   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1799          E = CUMap.end(); I != E; ++I) {
1800     CompileUnit *TheCU = I->second;
1801     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
1802     for (StringMap<std::vector<DIE*> >::const_iterator
1803            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1804       const char *Name = GI->getKeyData();
1805       const std::vector<DIE *> &Entities = GI->second;
1806       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1807              DE = Entities.end(); DI != DE; ++DI)
1808         AT.AddName(Name, (*DI));
1809     }
1810   }
1811
1812   AT.FinalizeTable(Asm, "ObjC");
1813   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1814                                  .getDwarfAccelObjCSection());
1815   MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
1816   Asm->OutStreamer.EmitLabel(SectionBegin);
1817
1818   // Emit the full data.
1819   AT.Emit(Asm, SectionBegin, this);
1820 }
1821
1822 /// emitAccelNamespace - Emit namespace dies into a hashed accelerator
1823 /// table.
1824 void DwarfDebug::emitAccelNamespaces() {
1825   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1826                                            dwarf::DW_FORM_data4));
1827   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1828          E = CUMap.end(); I != E; ++I) {
1829     CompileUnit *TheCU = I->second;
1830     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
1831     for (StringMap<std::vector<DIE*> >::const_iterator
1832            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1833       const char *Name = GI->getKeyData();
1834       const std::vector<DIE *> &Entities = GI->second;
1835       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
1836              DE = Entities.end(); DI != DE; ++DI)
1837         AT.AddName(Name, (*DI));
1838     }
1839   }
1840
1841   AT.FinalizeTable(Asm, "namespac");
1842   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1843                                  .getDwarfAccelNamespaceSection());
1844   MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
1845   Asm->OutStreamer.EmitLabel(SectionBegin);
1846
1847   // Emit the full data.
1848   AT.Emit(Asm, SectionBegin, this);
1849 }
1850
1851 /// emitAccelTypes() - Emit type dies into a hashed accelerator table.
1852 void DwarfDebug::emitAccelTypes() {
1853   std::vector<DwarfAccelTable::Atom> Atoms;
1854   Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1855                                         dwarf::DW_FORM_data4));
1856   Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
1857                                         dwarf::DW_FORM_data2));
1858   Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
1859                                         dwarf::DW_FORM_data1));
1860   DwarfAccelTable AT(Atoms);
1861   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1862          E = CUMap.end(); I != E; ++I) {
1863     CompileUnit *TheCU = I->second;
1864     const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
1865       = TheCU->getAccelTypes();
1866     for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
1867            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
1868       const char *Name = GI->getKeyData();
1869       const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
1870       for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
1871              = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
1872         AT.AddName(Name, (*DI).first, (*DI).second);
1873     }
1874   }
1875
1876   AT.FinalizeTable(Asm, "types");
1877   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
1878                                  .getDwarfAccelTypesSection());
1879   MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
1880   Asm->OutStreamer.EmitLabel(SectionBegin);
1881
1882   // Emit the full data.
1883   AT.Emit(Asm, SectionBegin, this);
1884 }
1885
1886 void DwarfDebug::emitDebugPubTypes() {
1887   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1888          E = CUMap.end(); I != E; ++I) {
1889     CompileUnit *TheCU = I->second;
1890     // Start the dwarf pubtypes section.
1891     Asm->OutStreamer.SwitchSection(
1892       Asm->getObjFileLowering().getDwarfPubTypesSection());
1893     Asm->OutStreamer.AddComment("Length of Public Types Info");
1894     Asm->EmitLabelDifference(
1895       Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
1896       Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
1897
1898     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
1899                                                   TheCU->getID()));
1900
1901     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
1902     Asm->EmitInt16(dwarf::DWARF_VERSION);
1903
1904     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1905     Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1906                            DwarfInfoSectionSym);
1907
1908     Asm->OutStreamer.AddComment("Compilation Unit Length");
1909     Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1910                              Asm->GetTempSymbol("info_begin", TheCU->getID()),
1911                              4);
1912
1913     const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
1914     for (StringMap<DIE*>::const_iterator
1915            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1916       const char *Name = GI->getKeyData();
1917       DIE *Entity = GI->second;
1918
1919       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
1920       Asm->EmitInt32(Entity->getOffset());
1921
1922       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
1923       // Emit the name with a terminating null byte.
1924       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
1925     }
1926
1927     Asm->OutStreamer.AddComment("End Mark");
1928     Asm->EmitInt32(0);
1929     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
1930                                                   TheCU->getID()));
1931   }
1932 }
1933
1934 /// emitDebugStr - Emit visible names into a debug str section.
1935 ///
1936 void DwarfDebug::emitDebugStr() {
1937   // Check to see if it is worth the effort.
1938   if (StringPool.empty()) return;
1939
1940   // Start the dwarf str section.
1941   Asm->OutStreamer.SwitchSection(
1942                                 Asm->getObjFileLowering().getDwarfStrSection());
1943
1944   // Get all of the string pool entries and put them in an array by their ID so
1945   // we can sort them.
1946   SmallVector<std::pair<unsigned,
1947       StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
1948
1949   for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
1950        I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
1951     Entries.push_back(std::make_pair(I->second.second, &*I));
1952
1953   array_pod_sort(Entries.begin(), Entries.end());
1954
1955   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
1956     // Emit a label for reference from debug information entries.
1957     Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
1958
1959     // Emit the string itself with a terminating null byte.
1960     Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
1961                                          Entries[i].second->getKeyLength()+1),
1962                                0/*addrspace*/);
1963   }
1964 }
1965
1966 /// emitDebugLoc - Emit visible names into a debug loc section.
1967 ///
1968 void DwarfDebug::emitDebugLoc() {
1969   if (DotDebugLocEntries.empty())
1970     return;
1971
1972   for (SmallVector<DotDebugLocEntry, 4>::iterator
1973          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1974        I != E; ++I) {
1975     DotDebugLocEntry &Entry = *I;
1976     if (I + 1 != DotDebugLocEntries.end())
1977       Entry.Merge(I+1);
1978   }
1979
1980   // Start the dwarf loc section.
1981   Asm->OutStreamer.SwitchSection(
1982     Asm->getObjFileLowering().getDwarfLocSection());
1983   unsigned char Size = Asm->getTargetData().getPointerSize();
1984   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
1985   unsigned index = 1;
1986   for (SmallVector<DotDebugLocEntry, 4>::iterator
1987          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1988        I != E; ++I, ++index) {
1989     DotDebugLocEntry &Entry = *I;
1990     if (Entry.isMerged()) continue;
1991     if (Entry.isEmpty()) {
1992       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1993       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1994       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
1995     } else {
1996       Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
1997       Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
1998       DIVariable DV(Entry.Variable);
1999       Asm->OutStreamer.AddComment("Loc expr size");
2000       MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2001       MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2002       Asm->EmitLabelDifference(end, begin, 2);
2003       Asm->OutStreamer.EmitLabel(begin);
2004       if (Entry.isInt()) {
2005         DIBasicType BTy(DV.getType());
2006         if (BTy.Verify() &&
2007             (BTy.getEncoding()  == dwarf::DW_ATE_signed 
2008              || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2009           Asm->OutStreamer.AddComment("DW_OP_consts");
2010           Asm->EmitInt8(dwarf::DW_OP_consts);
2011           Asm->EmitSLEB128(Entry.getInt());
2012         } else {
2013           Asm->OutStreamer.AddComment("DW_OP_constu");
2014           Asm->EmitInt8(dwarf::DW_OP_constu);
2015           Asm->EmitULEB128(Entry.getInt());
2016         }
2017       } else if (Entry.isLocation()) {
2018         if (!DV.hasComplexAddress()) 
2019           // Regular entry.
2020           Asm->EmitDwarfRegOp(Entry.Loc);
2021         else {
2022           // Complex address entry.
2023           unsigned N = DV.getNumAddrElements();
2024           unsigned i = 0;
2025           if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2026             if (Entry.Loc.getOffset()) {
2027               i = 2;
2028               Asm->EmitDwarfRegOp(Entry.Loc);
2029               Asm->OutStreamer.AddComment("DW_OP_deref");
2030               Asm->EmitInt8(dwarf::DW_OP_deref);
2031               Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2032               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2033               Asm->EmitSLEB128(DV.getAddrElement(1));
2034             } else {
2035               // If first address element is OpPlus then emit
2036               // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2037               MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2038               Asm->EmitDwarfRegOp(Loc);
2039               i = 2;
2040             }
2041           } else {
2042             Asm->EmitDwarfRegOp(Entry.Loc);
2043           }
2044           
2045           // Emit remaining complex address elements.
2046           for (; i < N; ++i) {
2047             uint64_t Element = DV.getAddrElement(i);
2048             if (Element == DIBuilder::OpPlus) {
2049               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2050               Asm->EmitULEB128(DV.getAddrElement(++i));
2051             } else if (Element == DIBuilder::OpDeref) {
2052               if (!Entry.Loc.isReg())
2053                 Asm->EmitInt8(dwarf::DW_OP_deref);
2054             } else
2055               llvm_unreachable("unknown Opcode found in complex address");
2056           }
2057         }
2058       }
2059       // else ... ignore constant fp. There is not any good way to
2060       // to represent them here in dwarf.
2061       Asm->OutStreamer.EmitLabel(end);
2062     }
2063   }
2064 }
2065
2066 /// EmitDebugARanges - Emit visible names into a debug aranges section.
2067 ///
2068 void DwarfDebug::EmitDebugARanges() {
2069   // Start the dwarf aranges section.
2070   Asm->OutStreamer.SwitchSection(
2071                           Asm->getObjFileLowering().getDwarfARangesSection());
2072 }
2073
2074 /// emitDebugRanges - Emit visible names into a debug ranges section.
2075 ///
2076 void DwarfDebug::emitDebugRanges() {
2077   // Start the dwarf ranges section.
2078   Asm->OutStreamer.SwitchSection(
2079     Asm->getObjFileLowering().getDwarfRangesSection());
2080   unsigned char Size = Asm->getTargetData().getPointerSize();
2081   for (SmallVector<const MCSymbol *, 8>::iterator
2082          I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2083        I != E; ++I) {
2084     if (*I)
2085       Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2086     else
2087       Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2088   }
2089 }
2090
2091 /// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2092 ///
2093 void DwarfDebug::emitDebugMacInfo() {
2094   if (const MCSection *LineInfo =
2095       Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2096     // Start the dwarf macinfo section.
2097     Asm->OutStreamer.SwitchSection(LineInfo);
2098   }
2099 }
2100
2101 /// emitDebugInlineInfo - Emit inline info using following format.
2102 /// Section Header:
2103 /// 1. length of section
2104 /// 2. Dwarf version number
2105 /// 3. address size.
2106 ///
2107 /// Entries (one "entry" for each function that was inlined):
2108 ///
2109 /// 1. offset into __debug_str section for MIPS linkage name, if exists;
2110 ///   otherwise offset into __debug_str for regular function name.
2111 /// 2. offset into __debug_str section for regular function name.
2112 /// 3. an unsigned LEB128 number indicating the number of distinct inlining
2113 /// instances for the function.
2114 ///
2115 /// The rest of the entry consists of a {die_offset, low_pc} pair for each
2116 /// inlined instance; the die_offset points to the inlined_subroutine die in the
2117 /// __debug_info section, and the low_pc is the starting address for the
2118 /// inlining instance.
2119 void DwarfDebug::emitDebugInlineInfo() {
2120   if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2121     return;
2122
2123   if (!FirstCU)
2124     return;
2125
2126   Asm->OutStreamer.SwitchSection(
2127                         Asm->getObjFileLowering().getDwarfDebugInlineSection());
2128
2129   Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2130   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2131                            Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2132
2133   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2134
2135   Asm->OutStreamer.AddComment("Dwarf Version");
2136   Asm->EmitInt16(dwarf::DWARF_VERSION);
2137   Asm->OutStreamer.AddComment("Address Size (in bytes)");
2138   Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2139
2140   for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2141          E = InlinedSPNodes.end(); I != E; ++I) {
2142
2143     const MDNode *Node = *I;
2144     DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2145       = InlineInfo.find(Node);
2146     SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2147     DISubprogram SP(Node);
2148     StringRef LName = SP.getLinkageName();
2149     StringRef Name = SP.getName();
2150
2151     Asm->OutStreamer.AddComment("MIPS linkage name");
2152     if (LName.empty())
2153       Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2154     else
2155       Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2156                              DwarfStrSectionSym);
2157
2158     Asm->OutStreamer.AddComment("Function name");
2159     Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2160     Asm->EmitULEB128(Labels.size(), "Inline count");
2161
2162     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2163            LE = Labels.end(); LI != LE; ++LI) {
2164       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2165       Asm->EmitInt32(LI->second->getOffset());
2166
2167       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2168       Asm->OutStreamer.EmitSymbolValue(LI->first,
2169                                        Asm->getTargetData().getPointerSize(),0);
2170     }
2171   }
2172
2173   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2174 }