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