Fix debug_inlined section entries for routines whose names are changed through __asm...
[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 #define DEBUG_TYPE "dwarfdebug"
14 #include "DwarfDebug.h"
15 #include "llvm/Module.h"
16 #include "llvm/CodeGen/MachineFunction.h"
17 #include "llvm/CodeGen/MachineModuleInfo.h"
18 #include "llvm/MC/MCSection.h"
19 #include "llvm/MC/MCStreamer.h"
20 #include "llvm/MC/MCAsmInfo.h"
21 #include "llvm/Target/TargetData.h"
22 #include "llvm/Target/TargetFrameInfo.h"
23 #include "llvm/Target/TargetLoweringObjectFile.h"
24 #include "llvm/Target/TargetRegisterInfo.h"
25 #include "llvm/ADT/StringExtras.h"
26 #include "llvm/Support/Debug.h"
27 #include "llvm/Support/ErrorHandling.h"
28 #include "llvm/Support/Mangler.h"
29 #include "llvm/Support/Timer.h"
30 #include "llvm/System/Path.h"
31 using namespace llvm;
32
33 //===----------------------------------------------------------------------===//
34
35 /// Configuration values for initial hash set sizes (log2).
36 ///
37 static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
38
39 namespace llvm {
40
41 //===----------------------------------------------------------------------===//
42 /// CompileUnit - This dwarf writer support class manages information associate
43 /// with a source file.
44 class CompileUnit {
45   /// ID - File identifier for source.
46   ///
47   unsigned ID;
48
49   /// Die - Compile unit debug information entry.
50   ///
51   DIE *CUDie;
52
53   /// IndexTyDie - An anonymous type for index type.
54   DIE *IndexTyDie;
55
56   /// GVToDieMap - Tracks the mapping of unit level debug informaton
57   /// variables to debug information entries.
58   /// FIXME : Rename GVToDieMap -> NodeToDieMap
59   ValueMap<MDNode *, DIE *> GVToDieMap;
60
61   /// GVToDIEEntryMap - Tracks the mapping of unit level debug informaton
62   /// descriptors to debug information entries using a DIEEntry proxy.
63   /// FIXME : Rename
64   ValueMap<MDNode *, DIEEntry *> GVToDIEEntryMap;
65
66   /// Globals - A map of globally visible named entities for this unit.
67   ///
68   StringMap<DIE*> Globals;
69
70   /// GlobalTypes - A map of globally visible types for this unit.
71   ///
72   StringMap<DIE*> GlobalTypes;
73
74 public:
75   CompileUnit(unsigned I, DIE *D)
76     : ID(I), CUDie(D), IndexTyDie(0) {}
77   ~CompileUnit() { delete CUDie; delete IndexTyDie; }
78
79   // Accessors.
80   unsigned getID()                  const { return ID; }
81   DIE* getCUDie()                   const { return CUDie; }
82   const StringMap<DIE*> &getGlobals()     const { return Globals; }
83   const StringMap<DIE*> &getGlobalTypes() const { return GlobalTypes; }
84
85   /// hasContent - Return true if this compile unit has something to write out.
86   ///
87   bool hasContent() const { return !CUDie->getChildren().empty(); }
88
89   /// addGlobal - Add a new global entity to the compile unit.
90   ///
91   void addGlobal(const std::string &Name, DIE *Die) { Globals[Name] = Die; }
92
93   /// addGlobalType - Add a new global type to the compile unit.
94   ///
95   void addGlobalType(const std::string &Name, DIE *Die) { 
96     GlobalTypes[Name] = Die; 
97   }
98
99   /// getDIE - Returns the debug information entry map slot for the
100   /// specified debug variable.
101   DIE *getDIE(MDNode *N) { return GVToDieMap.lookup(N); }
102
103   /// insertDIE - Insert DIE into the map.
104   void insertDIE(MDNode *N, DIE *D) {
105     GVToDieMap.insert(std::make_pair(N, D));
106   }
107
108   /// getDIEEntry - Returns the debug information entry for the speciefied
109   /// debug variable.
110   DIEEntry *getDIEEntry(MDNode *N) { 
111     ValueMap<MDNode *, DIEEntry *>::iterator I = GVToDIEEntryMap.find(N);
112     if (I == GVToDIEEntryMap.end())
113       return NULL;
114     return I->second;
115   }
116
117   /// insertDIEEntry - Insert debug information entry into the map.
118   void insertDIEEntry(MDNode *N, DIEEntry *E) {
119     GVToDIEEntryMap.insert(std::make_pair(N, E));
120   }
121
122   /// addDie - Adds or interns the DIE to the compile unit.
123   ///
124   void addDie(DIE *Buffer) {
125     this->CUDie->addChild(Buffer);
126   }
127
128   // getIndexTyDie - Get an anonymous type for index type.
129   DIE *getIndexTyDie() {
130     return IndexTyDie;
131   }
132
133   // setIndexTyDie - Set D as anonymous type for index which can be reused
134   // later.
135   void setIndexTyDie(DIE *D) {
136     IndexTyDie = D;
137   }
138
139 };
140
141 //===----------------------------------------------------------------------===//
142 /// DbgVariable - This class is used to track local variable information.
143 ///
144 class DbgVariable {
145   DIVariable Var;                    // Variable Descriptor.
146   unsigned FrameIndex;               // Variable frame index.
147   DbgVariable *AbstractVar;          // Abstract variable for this variable.
148   DIE *TheDIE;
149 public:
150   DbgVariable(DIVariable V, unsigned I)
151     : Var(V), FrameIndex(I), AbstractVar(0), TheDIE(0)  {}
152
153   // Accessors.
154   DIVariable getVariable()           const { return Var; }
155   unsigned getFrameIndex()           const { return FrameIndex; }
156   void setAbstractVariable(DbgVariable *V) { AbstractVar = V; }
157   DbgVariable *getAbstractVariable() const { return AbstractVar; }
158   void setDIE(DIE *D)                      { TheDIE = D; }
159   DIE *getDIE()                      const { return TheDIE; }
160 };
161
162 //===----------------------------------------------------------------------===//
163 /// DbgScope - This class is used to track scope information.
164 ///
165 class DbgScope {
166   DbgScope *Parent;                   // Parent to this scope.
167   DIDescriptor Desc;                  // Debug info descriptor for scope.
168   WeakVH InlinedAtLocation;           // Location at which scope is inlined.
169   bool AbstractScope;                 // Abstract Scope
170   unsigned StartLabelID;              // Label ID of the beginning of scope.
171   unsigned EndLabelID;                // Label ID of the end of scope.
172   const MachineInstr *LastInsn;       // Last instruction of this scope.
173   const MachineInstr *FirstInsn;      // First instruction of this scope.
174   SmallVector<DbgScope *, 4> Scopes;  // Scopes defined in scope.
175   SmallVector<DbgVariable *, 8> Variables;// Variables declared in scope.
176
177   // Private state for dump()
178   mutable unsigned IndentLevel;
179 public:
180   DbgScope(DbgScope *P, DIDescriptor D, MDNode *I = 0)
181     : Parent(P), Desc(D), InlinedAtLocation(I), AbstractScope(false),
182       StartLabelID(0), EndLabelID(0),
183       LastInsn(0), FirstInsn(0), IndentLevel(0) {}
184   virtual ~DbgScope();
185
186   // Accessors.
187   DbgScope *getParent()          const { return Parent; }
188   void setParent(DbgScope *P)          { Parent = P; }
189   DIDescriptor getDesc()         const { return Desc; }
190   MDNode *getInlinedAt()         const {
191     return dyn_cast_or_null<MDNode>(InlinedAtLocation);
192   }
193   MDNode *getScopeNode()         const { return Desc.getNode(); }
194   unsigned getStartLabelID()     const { return StartLabelID; }
195   unsigned getEndLabelID()       const { return EndLabelID; }
196   SmallVector<DbgScope *, 4> &getScopes() { return Scopes; }
197   SmallVector<DbgVariable *, 8> &getVariables() { return Variables; }
198   void setStartLabelID(unsigned S) { StartLabelID = S; }
199   void setEndLabelID(unsigned E)   { EndLabelID = E; }
200   void setLastInsn(const MachineInstr *MI) { LastInsn = MI; }
201   const MachineInstr *getLastInsn()      { return LastInsn; }
202   void setFirstInsn(const MachineInstr *MI) { FirstInsn = MI; }
203   void setAbstractScope() { AbstractScope = true; }
204   bool isAbstractScope() const { return AbstractScope; }
205   const MachineInstr *getFirstInsn()      { return FirstInsn; }
206
207   /// addScope - Add a scope to the scope.
208   ///
209   void addScope(DbgScope *S) { Scopes.push_back(S); }
210
211   /// addVariable - Add a variable to the scope.
212   ///
213   void addVariable(DbgVariable *V) { Variables.push_back(V); }
214
215   void fixInstructionMarkers(DenseMap<const MachineInstr *, 
216                              unsigned> &MIIndexMap) {
217     assert (getFirstInsn() && "First instruction is missing!");
218     
219     // Use the end of last child scope as end of this scope.
220     SmallVector<DbgScope *, 4> &Scopes = getScopes();
221     const MachineInstr *LastInsn = NULL;
222     unsigned LIndex = 0;
223     if (Scopes.empty()) {
224       assert (getLastInsn() && "Inner most scope does not have last insn!");
225       return;
226     }
227     for (SmallVector<DbgScope *, 4>::iterator SI = Scopes.begin(),
228            SE = Scopes.end(); SI != SE; ++SI) {
229       DbgScope *DS = *SI;
230       DS->fixInstructionMarkers(MIIndexMap);
231       const MachineInstr *DSLastInsn = DS->getLastInsn();
232       unsigned DSI = MIIndexMap[DSLastInsn];
233       if (DSI > LIndex) {
234         LastInsn = DSLastInsn;
235         LIndex = DSI;
236       }
237     }
238     setLastInsn(LastInsn);
239   }
240
241 #ifndef NDEBUG
242   void dump() const;
243 #endif
244 };
245
246 #ifndef NDEBUG
247 void DbgScope::dump() const {
248   raw_ostream &err = dbgs();
249   err.indent(IndentLevel);
250   MDNode *N = Desc.getNode();
251   N->dump();
252   err << " [" << StartLabelID << ", " << EndLabelID << "]\n";
253   if (AbstractScope)
254     err << "Abstract Scope\n";
255
256   IndentLevel += 2;
257   if (!Scopes.empty())
258     err << "Children ...\n";
259   for (unsigned i = 0, e = Scopes.size(); i != e; ++i)
260     if (Scopes[i] != this)
261       Scopes[i]->dump();
262
263   IndentLevel -= 2;
264 }
265 #endif
266
267 DbgScope::~DbgScope() {
268   for (unsigned i = 0, N = Scopes.size(); i < N; ++i)
269     delete Scopes[i];
270   for (unsigned j = 0, M = Variables.size(); j < M; ++j)
271     delete Variables[j];
272 }
273
274 } // end llvm namespace
275
276 DwarfDebug::DwarfDebug(raw_ostream &OS, AsmPrinter *A, const MCAsmInfo *T)
277   : Dwarf(OS, A, T, "dbg"), ModuleCU(0),
278     AbbreviationsSet(InitAbbreviationsSetSize), Abbreviations(),
279     DIEValues(), StringPool(),
280     SectionSourceLines(), didInitial(false), shouldEmit(false),
281     CurrentFnDbgScope(0), DebugTimer(0) {
282   if (TimePassesIsEnabled)
283     DebugTimer = new Timer("Dwarf Debug Writer");
284 }
285 DwarfDebug::~DwarfDebug() {
286   for (unsigned j = 0, M = DIEValues.size(); j < M; ++j)
287     delete DIEValues[j];
288
289   delete DebugTimer;
290 }
291
292 /// assignAbbrevNumber - Define a unique number for the abbreviation.
293 ///
294 void DwarfDebug::assignAbbrevNumber(DIEAbbrev &Abbrev) {
295   // Profile the node so that we can make it unique.
296   FoldingSetNodeID ID;
297   Abbrev.Profile(ID);
298
299   // Check the set for priors.
300   DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
301
302   // If it's newly added.
303   if (InSet == &Abbrev) {
304     // Add to abbreviation list.
305     Abbreviations.push_back(&Abbrev);
306
307     // Assign the vector position + 1 as its number.
308     Abbrev.setNumber(Abbreviations.size());
309   } else {
310     // Assign existing abbreviation number.
311     Abbrev.setNumber(InSet->getNumber());
312   }
313 }
314
315 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
316 /// information entry.
317 DIEEntry *DwarfDebug::createDIEEntry(DIE *Entry) {
318   DIEEntry *Value = new DIEEntry(Entry);
319   DIEValues.push_back(Value);
320   return Value;
321 }
322
323 /// addUInt - Add an unsigned integer attribute data and value.
324 ///
325 void DwarfDebug::addUInt(DIE *Die, unsigned Attribute,
326                          unsigned Form, uint64_t Integer) {
327   if (!Form) Form = DIEInteger::BestForm(false, Integer);
328   DIEValue *Value = new DIEInteger(Integer);
329   DIEValues.push_back(Value);
330   Die->addValue(Attribute, Form, Value);
331 }
332
333 /// addSInt - Add an signed integer attribute data and value.
334 ///
335 void DwarfDebug::addSInt(DIE *Die, unsigned Attribute,
336                          unsigned Form, int64_t Integer) {
337   if (!Form) Form = DIEInteger::BestForm(true, Integer);
338   DIEValue *Value = new DIEInteger(Integer);
339   DIEValues.push_back(Value);
340   Die->addValue(Attribute, Form, Value);
341 }
342
343 /// addString - Add a string attribute data and value. DIEString only
344 /// keeps string reference. 
345 void DwarfDebug::addString(DIE *Die, unsigned Attribute, unsigned Form,
346                            const StringRef String) {
347   DIEValue *Value = new DIEString(String);
348   DIEValues.push_back(Value);
349   Die->addValue(Attribute, Form, Value);
350 }
351
352 /// addLabel - Add a Dwarf label attribute data and value.
353 ///
354 void DwarfDebug::addLabel(DIE *Die, unsigned Attribute, unsigned Form,
355                           const DWLabel &Label) {
356   DIEValue *Value = new DIEDwarfLabel(Label);
357   DIEValues.push_back(Value);
358   Die->addValue(Attribute, Form, Value);
359 }
360
361 /// addObjectLabel - Add an non-Dwarf label attribute data and value.
362 ///
363 void DwarfDebug::addObjectLabel(DIE *Die, unsigned Attribute, unsigned Form,
364                                 const std::string &Label) {
365   DIEValue *Value = new DIEObjectLabel(Label);
366   DIEValues.push_back(Value);
367   Die->addValue(Attribute, Form, Value);
368 }
369
370 /// addSectionOffset - Add a section offset label attribute data and value.
371 ///
372 void DwarfDebug::addSectionOffset(DIE *Die, unsigned Attribute, unsigned Form,
373                                   const DWLabel &Label, const DWLabel &Section,
374                                   bool isEH, bool useSet) {
375   DIEValue *Value = new DIESectionOffset(Label, Section, isEH, useSet);
376   DIEValues.push_back(Value);
377   Die->addValue(Attribute, Form, Value);
378 }
379
380 /// addDelta - Add a label delta attribute data and value.
381 ///
382 void DwarfDebug::addDelta(DIE *Die, unsigned Attribute, unsigned Form,
383                           const DWLabel &Hi, const DWLabel &Lo) {
384   DIEValue *Value = new DIEDelta(Hi, Lo);
385   DIEValues.push_back(Value);
386   Die->addValue(Attribute, Form, Value);
387 }
388
389 /// addBlock - Add block data.
390 ///
391 void DwarfDebug::addBlock(DIE *Die, unsigned Attribute, unsigned Form,
392                           DIEBlock *Block) {
393   Block->ComputeSize(TD);
394   DIEValues.push_back(Block);
395   Die->addValue(Attribute, Block->BestForm(), Block);
396 }
397
398 /// addSourceLine - Add location information to specified debug information
399 /// entry.
400 void DwarfDebug::addSourceLine(DIE *Die, const DIVariable *V) {
401   // If there is no compile unit specified, don't add a line #.
402   if (V->getCompileUnit().isNull())
403     return;
404
405   unsigned Line = V->getLineNumber();
406   unsigned FileID = findCompileUnit(V->getCompileUnit())->getID();
407   assert(FileID && "Invalid file id");
408   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
409   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
410 }
411
412 /// addSourceLine - Add location information to specified debug information
413 /// entry.
414 void DwarfDebug::addSourceLine(DIE *Die, const DIGlobal *G) {
415   // If there is no compile unit specified, don't add a line #.
416   if (G->getCompileUnit().isNull())
417     return;
418
419   unsigned Line = G->getLineNumber();
420   unsigned FileID = findCompileUnit(G->getCompileUnit())->getID();
421   assert(FileID && "Invalid file id");
422   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
423   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
424 }
425
426 /// addSourceLine - Add location information to specified debug information
427 /// entry.
428 void DwarfDebug::addSourceLine(DIE *Die, const DISubprogram *SP) {
429   // If there is no compile unit specified, don't add a line #.
430   if (SP->getCompileUnit().isNull())
431     return;
432   // If the line number is 0, don't add it.
433   if (SP->getLineNumber() == 0)
434     return;
435
436
437   unsigned Line = SP->getLineNumber();
438   unsigned FileID = findCompileUnit(SP->getCompileUnit())->getID();
439   assert(FileID && "Invalid file id");
440   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
441   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
442 }
443
444 /// addSourceLine - Add location information to specified debug information
445 /// entry.
446 void DwarfDebug::addSourceLine(DIE *Die, const DIType *Ty) {
447   // If there is no compile unit specified, don't add a line #.
448   DICompileUnit CU = Ty->getCompileUnit();
449   if (CU.isNull())
450     return;
451
452   unsigned Line = Ty->getLineNumber();
453   unsigned FileID = findCompileUnit(CU)->getID();
454   assert(FileID && "Invalid file id");
455   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
456   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
457 }
458
459 /// addSourceLine - Add location information to specified debug information
460 /// entry.
461 void DwarfDebug::addSourceLine(DIE *Die, const DINameSpace *NS) {
462   // If there is no compile unit specified, don't add a line #.
463   if (NS->getCompileUnit().isNull())
464     return;
465
466   unsigned Line = NS->getLineNumber();
467   StringRef FN = NS->getFilename();
468   StringRef Dir = NS->getDirectory();
469
470   unsigned FileID = GetOrCreateSourceID(Dir, FN);
471   assert(FileID && "Invalid file id");
472   addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
473   addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
474 }
475
476 /* Byref variables, in Blocks, are declared by the programmer as
477    "SomeType VarName;", but the compiler creates a
478    __Block_byref_x_VarName struct, and gives the variable VarName
479    either the struct, or a pointer to the struct, as its type.  This
480    is necessary for various behind-the-scenes things the compiler
481    needs to do with by-reference variables in blocks.
482
483    However, as far as the original *programmer* is concerned, the
484    variable should still have type 'SomeType', as originally declared.
485
486    The following function dives into the __Block_byref_x_VarName
487    struct to find the original type of the variable.  This will be
488    passed back to the code generating the type for the Debug
489    Information Entry for the variable 'VarName'.  'VarName' will then
490    have the original type 'SomeType' in its debug information.
491
492    The original type 'SomeType' will be the type of the field named
493    'VarName' inside the __Block_byref_x_VarName struct.
494
495    NOTE: In order for this to not completely fail on the debugger
496    side, the Debug Information Entry for the variable VarName needs to
497    have a DW_AT_location that tells the debugger how to unwind through
498    the pointers and __Block_byref_x_VarName struct to find the actual
499    value of the variable.  The function addBlockByrefType does this.  */
500
501 /// Find the type the programmer originally declared the variable to be
502 /// and return that type.
503 ///
504 DIType DwarfDebug::getBlockByrefType(DIType Ty, std::string Name) {
505
506   DIType subType = Ty;
507   unsigned tag = Ty.getTag();
508
509   if (tag == dwarf::DW_TAG_pointer_type) {
510     DIDerivedType DTy = DIDerivedType(Ty.getNode());
511     subType = DTy.getTypeDerivedFrom();
512   }
513
514   DICompositeType blockStruct = DICompositeType(subType.getNode());
515
516   DIArray Elements = blockStruct.getTypeArray();
517
518   if (Elements.isNull())
519     return Ty;
520
521   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
522     DIDescriptor Element = Elements.getElement(i);
523     DIDerivedType DT = DIDerivedType(Element.getNode());
524     if (Name == DT.getName())
525       return (DT.getTypeDerivedFrom());
526   }
527
528   return Ty;
529 }
530
531 /// addComplexAddress - Start with the address based on the location provided,
532 /// and generate the DWARF information necessary to find the actual variable
533 /// given the extra address information encoded in the DIVariable, starting from
534 /// the starting location.  Add the DWARF information to the die.
535 ///
536 void DwarfDebug::addComplexAddress(DbgVariable *&DV, DIE *Die,
537                                    unsigned Attribute,
538                                    const MachineLocation &Location) {
539   const DIVariable &VD = DV->getVariable();
540   DIType Ty = VD.getType();
541
542   // Decode the original location, and use that as the start of the byref
543   // variable's location.
544   unsigned Reg = RI->getDwarfRegNum(Location.getReg(), false);
545   DIEBlock *Block = new DIEBlock();
546
547   if (Location.isReg()) {
548     if (Reg < 32) {
549       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + Reg);
550     } else {
551       Reg = Reg - dwarf::DW_OP_reg0;
552       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
553       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
554     }
555   } else {
556     if (Reg < 32)
557       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
558     else {
559       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
560       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
561     }
562
563     addUInt(Block, 0, dwarf::DW_FORM_sdata, Location.getOffset());
564   }
565
566   for (unsigned i = 0, N = VD.getNumAddrElements(); i < N; ++i) {
567     uint64_t Element = VD.getAddrElement(i);
568
569     if (Element == DIFactory::OpPlus) {
570       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
571       addUInt(Block, 0, dwarf::DW_FORM_udata, VD.getAddrElement(++i));
572     } else if (Element == DIFactory::OpDeref) {
573       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
574     } else llvm_unreachable("unknown DIFactory Opcode");
575   }
576
577   // Now attach the location information to the DIE.
578   addBlock(Die, Attribute, 0, Block);
579 }
580
581 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
582    VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
583    gives the variable VarName either the struct, or a pointer to the struct, as
584    its type.  This is necessary for various behind-the-scenes things the
585    compiler needs to do with by-reference variables in Blocks.
586
587    However, as far as the original *programmer* is concerned, the variable
588    should still have type 'SomeType', as originally declared.
589
590    The function getBlockByrefType dives into the __Block_byref_x_VarName
591    struct to find the original type of the variable, which is then assigned to
592    the variable's Debug Information Entry as its real type.  So far, so good.
593    However now the debugger will expect the variable VarName to have the type
594    SomeType.  So we need the location attribute for the variable to be an
595    expression that explains to the debugger how to navigate through the
596    pointers and struct to find the actual variable of type SomeType.
597
598    The following function does just that.  We start by getting
599    the "normal" location for the variable. This will be the location
600    of either the struct __Block_byref_x_VarName or the pointer to the
601    struct __Block_byref_x_VarName.
602
603    The struct will look something like:
604
605    struct __Block_byref_x_VarName {
606      ... <various fields>
607      struct __Block_byref_x_VarName *forwarding;
608      ... <various other fields>
609      SomeType VarName;
610      ... <maybe more fields>
611    };
612
613    If we are given the struct directly (as our starting point) we
614    need to tell the debugger to:
615
616    1).  Add the offset of the forwarding field.
617
618    2).  Follow that pointer to get the the real __Block_byref_x_VarName
619    struct to use (the real one may have been copied onto the heap).
620
621    3).  Add the offset for the field VarName, to find the actual variable.
622
623    If we started with a pointer to the struct, then we need to
624    dereference that pointer first, before the other steps.
625    Translating this into DWARF ops, we will need to append the following
626    to the current location description for the variable:
627
628    DW_OP_deref                    -- optional, if we start with a pointer
629    DW_OP_plus_uconst <forward_fld_offset>
630    DW_OP_deref
631    DW_OP_plus_uconst <varName_fld_offset>
632
633    That is what this function does.  */
634
635 /// addBlockByrefAddress - Start with the address based on the location
636 /// provided, and generate the DWARF information necessary to find the
637 /// actual Block variable (navigating the Block struct) based on the
638 /// starting location.  Add the DWARF information to the die.  For
639 /// more information, read large comment just above here.
640 ///
641 void DwarfDebug::addBlockByrefAddress(DbgVariable *&DV, DIE *Die,
642                                       unsigned Attribute,
643                                       const MachineLocation &Location) {
644   const DIVariable &VD = DV->getVariable();
645   DIType Ty = VD.getType();
646   DIType TmpTy = Ty;
647   unsigned Tag = Ty.getTag();
648   bool isPointer = false;
649
650   StringRef varName = VD.getName();
651
652   if (Tag == dwarf::DW_TAG_pointer_type) {
653     DIDerivedType DTy = DIDerivedType(Ty.getNode());
654     TmpTy = DTy.getTypeDerivedFrom();
655     isPointer = true;
656   }
657
658   DICompositeType blockStruct = DICompositeType(TmpTy.getNode());
659
660   // Find the __forwarding field and the variable field in the __Block_byref
661   // struct.
662   DIArray Fields = blockStruct.getTypeArray();
663   DIDescriptor varField = DIDescriptor();
664   DIDescriptor forwardingField = DIDescriptor();
665
666
667   for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
668     DIDescriptor Element = Fields.getElement(i);
669     DIDerivedType DT = DIDerivedType(Element.getNode());
670     StringRef fieldName = DT.getName();
671     if (fieldName == "__forwarding")
672       forwardingField = Element;
673     else if (fieldName == varName)
674       varField = Element;
675   }
676
677   assert(!varField.isNull() && "Can't find byref variable in Block struct");
678   assert(!forwardingField.isNull()
679          && "Can't find forwarding field in Block struct");
680
681   // Get the offsets for the forwarding field and the variable field.
682   unsigned int forwardingFieldOffset =
683     DIDerivedType(forwardingField.getNode()).getOffsetInBits() >> 3;
684   unsigned int varFieldOffset =
685     DIDerivedType(varField.getNode()).getOffsetInBits() >> 3;
686
687   // Decode the original location, and use that as the start of the byref
688   // variable's location.
689   unsigned Reg = RI->getDwarfRegNum(Location.getReg(), false);
690   DIEBlock *Block = new DIEBlock();
691
692   if (Location.isReg()) {
693     if (Reg < 32)
694       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + Reg);
695     else {
696       Reg = Reg - dwarf::DW_OP_reg0;
697       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
698       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
699     }
700   } else {
701     if (Reg < 32)
702       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
703     else {
704       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
705       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
706     }
707
708     addUInt(Block, 0, dwarf::DW_FORM_sdata, Location.getOffset());
709   }
710
711   // If we started with a pointer to the __Block_byref... struct, then
712   // the first thing we need to do is dereference the pointer (DW_OP_deref).
713   if (isPointer)
714     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
715
716   // Next add the offset for the '__forwarding' field:
717   // DW_OP_plus_uconst ForwardingFieldOffset.  Note there's no point in
718   // adding the offset if it's 0.
719   if (forwardingFieldOffset > 0) {
720     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
721     addUInt(Block, 0, dwarf::DW_FORM_udata, forwardingFieldOffset);
722   }
723
724   // Now dereference the __forwarding field to get to the real __Block_byref
725   // struct:  DW_OP_deref.
726   addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
727
728   // Now that we've got the real __Block_byref... struct, add the offset
729   // for the variable's field to get to the location of the actual variable:
730   // DW_OP_plus_uconst varFieldOffset.  Again, don't add if it's 0.
731   if (varFieldOffset > 0) {
732     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
733     addUInt(Block, 0, dwarf::DW_FORM_udata, varFieldOffset);
734   }
735
736   // Now attach the location information to the DIE.
737   addBlock(Die, Attribute, 0, Block);
738 }
739
740 /// addAddress - Add an address attribute to a die based on the location
741 /// provided.
742 void DwarfDebug::addAddress(DIE *Die, unsigned Attribute,
743                             const MachineLocation &Location) {
744   unsigned Reg = RI->getDwarfRegNum(Location.getReg(), false);
745   DIEBlock *Block = new DIEBlock();
746
747   if (Location.isReg()) {
748     if (Reg < 32) {
749       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + Reg);
750     } else {
751       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
752       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
753     }
754   } else {
755     if (Reg < 32) {
756       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + Reg);
757     } else {
758       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
759       addUInt(Block, 0, dwarf::DW_FORM_udata, Reg);
760     }
761
762     addUInt(Block, 0, dwarf::DW_FORM_sdata, Location.getOffset());
763   }
764
765   addBlock(Die, Attribute, 0, Block);
766 }
767
768 /// addToContextOwner - Add Die into the list of its context owner's children.
769 void DwarfDebug::addToContextOwner(DIE *Die, DIDescriptor Context) {
770   if (Context.isNull())
771     ModuleCU->addDie(Die);
772   else if (Context.isType()) {
773     DIE *ContextDIE = getOrCreateTypeDIE(DIType(Context.getNode()));
774     ContextDIE->addChild(Die);
775   } else if (Context.isNameSpace()) {
776     DIE *ContextDIE = getOrCreateNameSpace(DINameSpace(Context.getNode()));
777     ContextDIE->addChild(Die);
778   } else if (DIE *ContextDIE = ModuleCU->getDIE(Context.getNode()))
779     ContextDIE->addChild(Die);
780   else 
781     ModuleCU->addDie(Die);
782 }
783
784 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
785 /// given DIType.
786 DIE *DwarfDebug::getOrCreateTypeDIE(DIType Ty) {
787   DIE *TyDIE = ModuleCU->getDIE(Ty.getNode());
788   if (TyDIE)
789     return TyDIE;
790
791   // Create new type.
792   TyDIE = new DIE(dwarf::DW_TAG_base_type);
793   ModuleCU->insertDIE(Ty.getNode(), TyDIE);
794   if (Ty.isBasicType())
795     constructTypeDIE(*TyDIE, DIBasicType(Ty.getNode()));
796   else if (Ty.isCompositeType())
797     constructTypeDIE(*TyDIE, DICompositeType(Ty.getNode()));
798   else {
799     assert(Ty.isDerivedType() && "Unknown kind of DIType");
800     constructTypeDIE(*TyDIE, DIDerivedType(Ty.getNode()));
801   }
802
803   addToContextOwner(TyDIE, Ty.getContext());
804   return TyDIE;
805 }
806
807 /// addType - Add a new type attribute to the specified entity.
808 void DwarfDebug::addType(DIE *Entity, DIType Ty) {
809   if (Ty.isNull())
810     return;
811
812   // Check for pre-existence.
813   DIEEntry *Entry = ModuleCU->getDIEEntry(Ty.getNode());
814   // If it exists then use the existing value.
815   if (Entry) {
816     Entity->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, Entry);
817     return;
818   }
819
820   // Set up proxy.
821   Entry = createDIEEntry();
822   ModuleCU->insertDIEEntry(Ty.getNode(), Entry);
823
824   // Construct type.
825   DIE *Buffer = getOrCreateTypeDIE(Ty);
826
827   Entry->setEntry(Buffer);
828   Entity->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, Entry);
829 }
830
831 /// constructTypeDIE - Construct basic type die from DIBasicType.
832 void DwarfDebug::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
833   // Get core information.
834   StringRef Name = BTy.getName();
835   Buffer.setTag(dwarf::DW_TAG_base_type);
836   addUInt(&Buffer, dwarf::DW_AT_encoding,  dwarf::DW_FORM_data1,
837           BTy.getEncoding());
838
839   // Add name if not anonymous or intermediate type.
840   if (!Name.empty())
841     addString(&Buffer, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
842   uint64_t Size = BTy.getSizeInBits() >> 3;
843   addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
844 }
845
846 /// constructTypeDIE - Construct derived type die from DIDerivedType.
847 void DwarfDebug::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
848   // Get core information.
849   StringRef Name = DTy.getName();
850   uint64_t Size = DTy.getSizeInBits() >> 3;
851   unsigned Tag = DTy.getTag();
852
853   // FIXME - Workaround for templates.
854   if (Tag == dwarf::DW_TAG_inheritance) Tag = dwarf::DW_TAG_reference_type;
855
856   Buffer.setTag(Tag);
857
858   // Map to main type, void will not have a type.
859   DIType FromTy = DTy.getTypeDerivedFrom();
860   addType(&Buffer, FromTy);
861
862   // Add name if not anonymous or intermediate type.
863   if (!Name.empty())
864     addString(&Buffer, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
865
866   // Add size if non-zero (derived types might be zero-sized.)
867   if (Size)
868     addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
869
870   // Add source line info if available and TyDesc is not a forward declaration.
871   if (!DTy.isForwardDecl())
872     addSourceLine(&Buffer, &DTy);
873 }
874
875 /// constructTypeDIE - Construct type DIE from DICompositeType.
876 void DwarfDebug::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
877   // Get core information.
878   StringRef Name = CTy.getName();
879
880   uint64_t Size = CTy.getSizeInBits() >> 3;
881   unsigned Tag = CTy.getTag();
882   Buffer.setTag(Tag);
883
884   switch (Tag) {
885   case dwarf::DW_TAG_vector_type:
886   case dwarf::DW_TAG_array_type:
887     constructArrayTypeDIE(Buffer, &CTy);
888     break;
889   case dwarf::DW_TAG_enumeration_type: {
890     DIArray Elements = CTy.getTypeArray();
891
892     // Add enumerators to enumeration type.
893     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
894       DIE *ElemDie = NULL;
895       DIEnumerator Enum(Elements.getElement(i).getNode());
896       if (!Enum.isNull()) {
897         ElemDie = constructEnumTypeDIE(&Enum);
898         Buffer.addChild(ElemDie);
899       }
900     }
901   }
902     break;
903   case dwarf::DW_TAG_subroutine_type: {
904     // Add return type.
905     DIArray Elements = CTy.getTypeArray();
906     DIDescriptor RTy = Elements.getElement(0);
907     addType(&Buffer, DIType(RTy.getNode()));
908
909     // Add prototype flag.
910     addUInt(&Buffer, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1);
911
912     // Add arguments.
913     for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) {
914       DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
915       DIDescriptor Ty = Elements.getElement(i);
916       addType(Arg, DIType(Ty.getNode()));
917       Buffer.addChild(Arg);
918     }
919   }
920     break;
921   case dwarf::DW_TAG_structure_type:
922   case dwarf::DW_TAG_union_type:
923   case dwarf::DW_TAG_class_type: {
924     // Add elements to structure type.
925     DIArray Elements = CTy.getTypeArray();
926
927     // A forward struct declared type may not have elements available.
928     if (Elements.isNull())
929       break;
930
931     // Add elements to structure type.
932     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
933       DIDescriptor Element = Elements.getElement(i);
934       if (Element.isNull())
935         continue;
936       DIE *ElemDie = NULL;
937       if (Element.getTag() == dwarf::DW_TAG_subprogram)
938         ElemDie = createSubprogramDIE(DISubprogram(Element.getNode()));
939       else
940         ElemDie = createMemberDIE(DIDerivedType(Element.getNode()));
941       Buffer.addChild(ElemDie);
942     }
943
944     if (CTy.isAppleBlockExtension())
945       addUInt(&Buffer, dwarf::DW_AT_APPLE_block, dwarf::DW_FORM_flag, 1);
946
947     unsigned RLang = CTy.getRunTimeLang();
948     if (RLang)
949       addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class,
950               dwarf::DW_FORM_data1, RLang);
951     break;
952   }
953   default:
954     break;
955   }
956
957   // Add name if not anonymous or intermediate type.
958   if (!Name.empty())
959     addString(&Buffer, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
960
961   if (Tag == dwarf::DW_TAG_enumeration_type ||
962       Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type) {
963     // Add size if non-zero (derived types might be zero-sized.)
964     if (Size)
965       addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
966     else {
967       // Add zero size if it is not a forward declaration.
968       if (CTy.isForwardDecl())
969         addUInt(&Buffer, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
970       else
971         addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, 0);
972     }
973
974     // Add source line info if available.
975     if (!CTy.isForwardDecl())
976       addSourceLine(&Buffer, &CTy);
977   }
978 }
979
980 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
981 void DwarfDebug::constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy){
982   int64_t L = SR.getLo();
983   int64_t H = SR.getHi();
984   DIE *DW_Subrange = new DIE(dwarf::DW_TAG_subrange_type);
985
986   addDIEEntry(DW_Subrange, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IndexTy);
987   if (L)
988     addSInt(DW_Subrange, dwarf::DW_AT_lower_bound, 0, L);
989   addSInt(DW_Subrange, dwarf::DW_AT_upper_bound, 0, H);
990
991   Buffer.addChild(DW_Subrange);
992 }
993
994 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
995 void DwarfDebug::constructArrayTypeDIE(DIE &Buffer,
996                                        DICompositeType *CTy) {
997   Buffer.setTag(dwarf::DW_TAG_array_type);
998   if (CTy->getTag() == dwarf::DW_TAG_vector_type)
999     addUInt(&Buffer, dwarf::DW_AT_GNU_vector, dwarf::DW_FORM_flag, 1);
1000
1001   // Emit derived type.
1002   addType(&Buffer, CTy->getTypeDerivedFrom());
1003   DIArray Elements = CTy->getTypeArray();
1004
1005   // Get an anonymous type for index type.
1006   DIE *IdxTy = ModuleCU->getIndexTyDie();
1007   if (!IdxTy) {
1008     // Construct an anonymous type for index type.
1009     IdxTy = new DIE(dwarf::DW_TAG_base_type);
1010     addUInt(IdxTy, dwarf::DW_AT_byte_size, 0, sizeof(int32_t));
1011     addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1012             dwarf::DW_ATE_signed);
1013     ModuleCU->addDie(IdxTy);
1014     ModuleCU->setIndexTyDie(IdxTy);
1015   }
1016
1017   // Add subranges to array type.
1018   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1019     DIDescriptor Element = Elements.getElement(i);
1020     if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1021       constructSubrangeDIE(Buffer, DISubrange(Element.getNode()), IdxTy);
1022   }
1023 }
1024
1025 /// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator.
1026 DIE *DwarfDebug::constructEnumTypeDIE(DIEnumerator *ETy) {
1027   DIE *Enumerator = new DIE(dwarf::DW_TAG_enumerator);
1028   StringRef Name = ETy->getName();
1029   addString(Enumerator, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
1030   int64_t Value = ETy->getEnumValue();
1031   addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value);
1032   return Enumerator;
1033 }
1034
1035 /// createGlobalVariableDIE - Create new DIE using GV.
1036 DIE *DwarfDebug::createGlobalVariableDIE(const DIGlobalVariable &GV) {
1037   // If the global variable was optmized out then no need to create debug info
1038   // entry.
1039   if (!GV.getGlobal()) return NULL;
1040   if (GV.getDisplayName().empty()) return NULL;
1041
1042   DIE *GVDie = new DIE(dwarf::DW_TAG_variable);
1043   addString(GVDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
1044             GV.getDisplayName());
1045
1046   StringRef LinkageName = GV.getLinkageName();
1047   if (!LinkageName.empty()) {
1048     // Skip special LLVM prefix that is used to inform the asm printer to not
1049     // emit usual symbol prefix before the symbol name. This happens for
1050     // Objective-C symbol names and symbol whose name is replaced using GCC's
1051     // __asm__ attribute.
1052     if (LinkageName[0] == 1)
1053       LinkageName = LinkageName.substr(1);
1054     addString(GVDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string,
1055               LinkageName);
1056   }
1057   addType(GVDie, GV.getType());
1058   if (!GV.isLocalToUnit())
1059     addUInt(GVDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
1060   addSourceLine(GVDie, &GV);
1061
1062   return GVDie;
1063 }
1064
1065 /// createMemberDIE - Create new member DIE.
1066 DIE *DwarfDebug::createMemberDIE(const DIDerivedType &DT) {
1067   DIE *MemberDie = new DIE(DT.getTag());
1068   StringRef Name = DT.getName();
1069   if (!Name.empty())
1070     addString(MemberDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
1071   
1072   addType(MemberDie, DT.getTypeDerivedFrom());
1073
1074   addSourceLine(MemberDie, &DT);
1075
1076   DIEBlock *MemLocationDie = new DIEBlock();
1077   addUInt(MemLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1078
1079   uint64_t Size = DT.getSizeInBits();
1080   uint64_t FieldSize = DT.getOriginalTypeSize();
1081
1082   if (Size != FieldSize) {
1083     // Handle bitfield.
1084     addUInt(MemberDie, dwarf::DW_AT_byte_size, 0, DT.getOriginalTypeSize()>>3);
1085     addUInt(MemberDie, dwarf::DW_AT_bit_size, 0, DT.getSizeInBits());
1086
1087     uint64_t Offset = DT.getOffsetInBits();
1088     uint64_t FieldOffset = Offset;
1089     uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1090     uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1091     FieldOffset = (HiMark - FieldSize);
1092     Offset -= FieldOffset;
1093
1094     // Maybe we need to work from the other end.
1095     if (TD->isLittleEndian()) Offset = FieldSize - (Offset + Size);
1096     addUInt(MemberDie, dwarf::DW_AT_bit_offset, 0, Offset);
1097
1098     // Here WD_AT_data_member_location points to the anonymous
1099     // field that includes this bit field.
1100     addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, FieldOffset >> 3);
1101
1102   } else
1103     // This is not a bitfield.
1104     addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits() >> 3);
1105
1106   addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0, MemLocationDie);
1107
1108   if (DT.isProtected())
1109     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_flag,
1110             dwarf::DW_ACCESS_protected);
1111   else if (DT.isPrivate())
1112     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_flag,
1113             dwarf::DW_ACCESS_private);
1114   else if (DT.getTag() == dwarf::DW_TAG_inheritance)
1115     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_flag,
1116             dwarf::DW_ACCESS_public);
1117   if (DT.isVirtual())
1118     addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_flag,
1119             dwarf::DW_VIRTUALITY_virtual);
1120   return MemberDie;
1121 }
1122
1123 /// createSubprogramDIE - Create new DIE using SP.
1124 DIE *DwarfDebug::createSubprogramDIE(const DISubprogram &SP, bool MakeDecl) {
1125   DIE *SPDie = ModuleCU->getDIE(SP.getNode());
1126   if (SPDie)
1127     return SPDie;
1128
1129   SPDie = new DIE(dwarf::DW_TAG_subprogram);
1130   addString(SPDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, SP.getName());
1131
1132   StringRef LinkageName = SP.getLinkageName();
1133   if (!LinkageName.empty()) {
1134     // Skip special LLVM prefix that is used to inform the asm printer to not
1135     // emit usual symbol prefix before the symbol name. This happens for
1136     // Objective-C symbol names and symbol whose name is replaced using GCC's
1137     // __asm__ attribute.
1138     if (LinkageName[0] == 1)
1139       LinkageName = LinkageName.substr(1);
1140     addString(SPDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string,
1141               LinkageName);
1142   }
1143   addSourceLine(SPDie, &SP);
1144
1145   // Add prototyped tag, if C or ObjC.
1146   unsigned Lang = SP.getCompileUnit().getLanguage();
1147   if (Lang == dwarf::DW_LANG_C99 || Lang == dwarf::DW_LANG_C89 ||
1148       Lang == dwarf::DW_LANG_ObjC)
1149     addUInt(SPDie, dwarf::DW_AT_prototyped, dwarf::DW_FORM_flag, 1);
1150
1151   // Add Return Type.
1152   DICompositeType SPTy = SP.getType();
1153   DIArray Args = SPTy.getTypeArray();
1154   unsigned SPTag = SPTy.getTag();
1155
1156   if (Args.isNull() || SPTag != dwarf::DW_TAG_subroutine_type)
1157     addType(SPDie, SPTy);
1158   else
1159     addType(SPDie, DIType(Args.getElement(0).getNode()));
1160
1161   unsigned VK = SP.getVirtuality();
1162   if (VK) {
1163     addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_flag, VK);
1164     DIEBlock *Block = new DIEBlock();
1165     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1166     addUInt(Block, 0, dwarf::DW_FORM_data1, SP.getVirtualIndex());
1167     addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
1168     ContainingTypeMap.insert(std::make_pair(SPDie, WeakVH(SP.getContainingType().getNode())));
1169   }
1170
1171   if (MakeDecl || !SP.isDefinition()) {
1172     addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1173
1174     // Add arguments. Do not add arguments for subprogram definition. They will
1175     // be handled while processing variables.
1176     DICompositeType SPTy = SP.getType();
1177     DIArray Args = SPTy.getTypeArray();
1178     unsigned SPTag = SPTy.getTag();
1179
1180     if (SPTag == dwarf::DW_TAG_subroutine_type)
1181       for (unsigned i = 1, N =  Args.getNumElements(); i < N; ++i) {
1182         DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
1183         addType(Arg, DIType(Args.getElement(i).getNode()));
1184         addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1); // ??
1185         SPDie->addChild(Arg);
1186       }
1187   }
1188
1189   // DW_TAG_inlined_subroutine may refer to this DIE.
1190   ModuleCU->insertDIE(SP.getNode(), SPDie);
1191   return SPDie;
1192 }
1193
1194 /// findCompileUnit - Get the compile unit for the given descriptor.
1195 ///
1196 CompileUnit *DwarfDebug::findCompileUnit(DICompileUnit Unit) {
1197   DenseMap<Value *, CompileUnit *>::const_iterator I =
1198     CompileUnitMap.find(Unit.getNode());
1199   if (I == CompileUnitMap.end())
1200     return constructCompileUnit(Unit.getNode());
1201   return I->second;
1202 }
1203
1204 /// getUpdatedDbgScope - Find or create DbgScope assicated with the instruction.
1205 /// Initialize scope and update scope hierarchy.
1206 DbgScope *DwarfDebug::getUpdatedDbgScope(MDNode *N, const MachineInstr *MI,
1207   MDNode *InlinedAt) {
1208   assert (N && "Invalid Scope encoding!");
1209   assert (MI && "Missing machine instruction!");
1210   bool GetConcreteScope = (MI && InlinedAt);
1211
1212   DbgScope *NScope = NULL;
1213
1214   if (InlinedAt)
1215     NScope = DbgScopeMap.lookup(InlinedAt);
1216   else
1217     NScope = DbgScopeMap.lookup(N);
1218   assert (NScope && "Unable to find working scope!");
1219
1220   if (NScope->getFirstInsn())
1221     return NScope;
1222
1223   DbgScope *Parent = NULL;
1224   if (GetConcreteScope) {
1225     DILocation IL(InlinedAt);
1226     Parent = getUpdatedDbgScope(IL.getScope().getNode(), MI,
1227                          IL.getOrigLocation().getNode());
1228     assert (Parent && "Unable to find Parent scope!");
1229     NScope->setParent(Parent);
1230     Parent->addScope(NScope);
1231   } else if (DIDescriptor(N).isLexicalBlock()) {
1232     DILexicalBlock DB(N);
1233     if (!DB.getContext().isNull()) {
1234       Parent = getUpdatedDbgScope(DB.getContext().getNode(), MI, InlinedAt);
1235       NScope->setParent(Parent);
1236       Parent->addScope(NScope);
1237     }
1238   }
1239
1240   NScope->setFirstInsn(MI);
1241
1242   if (!Parent && !InlinedAt) {
1243     StringRef SPName = DISubprogram(N).getLinkageName();
1244     if (SPName == MF->getFunction()->getName())
1245       CurrentFnDbgScope = NScope;
1246   }
1247
1248   if (GetConcreteScope) {
1249     ConcreteScopes[InlinedAt] = NScope;
1250     getOrCreateAbstractScope(N);
1251   }
1252
1253   return NScope;
1254 }
1255
1256 DbgScope *DwarfDebug::getOrCreateAbstractScope(MDNode *N) {
1257   assert (N && "Invalid Scope encoding!");
1258
1259   DbgScope *AScope = AbstractScopes.lookup(N);
1260   if (AScope)
1261     return AScope;
1262
1263   DbgScope *Parent = NULL;
1264
1265   DIDescriptor Scope(N);
1266   if (Scope.isLexicalBlock()) {
1267     DILexicalBlock DB(N);
1268     DIDescriptor ParentDesc = DB.getContext();
1269     if (!ParentDesc.isNull())
1270       Parent = getOrCreateAbstractScope(ParentDesc.getNode());
1271   }
1272
1273   AScope = new DbgScope(Parent, DIDescriptor(N), NULL);
1274
1275   if (Parent)
1276     Parent->addScope(AScope);
1277   AScope->setAbstractScope();
1278   AbstractScopes[N] = AScope;
1279   if (DIDescriptor(N).isSubprogram())
1280     AbstractScopesList.push_back(AScope);
1281   return AScope;
1282 }
1283
1284 /// updateSubprogramScopeDIE - Find DIE for the given subprogram and
1285 /// attach appropriate DW_AT_low_pc and DW_AT_high_pc attributes.
1286 /// If there are global variables in this scope then create and insert
1287 /// DIEs for these variables.
1288 DIE *DwarfDebug::updateSubprogramScopeDIE(MDNode *SPNode) {
1289
1290  DIE *SPDie = ModuleCU->getDIE(SPNode);
1291  assert (SPDie && "Unable to find subprogram DIE!");
1292  DISubprogram SP(SPNode);
1293  if (SP.isDefinition() && !SP.getContext().isCompileUnit()) {
1294    addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
1295   // Add arguments. 
1296    DICompositeType SPTy = SP.getType();
1297    DIArray Args = SPTy.getTypeArray();
1298    unsigned SPTag = SPTy.getTag();
1299    if (SPTag == dwarf::DW_TAG_subroutine_type)
1300      for (unsigned i = 1, N =  Args.getNumElements(); i < N; ++i) {
1301        DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
1302        addType(Arg, DIType(Args.getElement(i).getNode()));
1303        addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1); // ??
1304        SPDie->addChild(Arg);
1305      }
1306    DIE *SPDeclDie = SPDie;
1307    SPDie = new DIE(dwarf::DW_TAG_subprogram);
1308    addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4, 
1309                SPDeclDie);
1310    ModuleCU->addDie(SPDie);
1311  }
1312    
1313  addLabel(SPDie, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
1314           DWLabel("func_begin", SubprogramCount));
1315  addLabel(SPDie, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
1316           DWLabel("func_end", SubprogramCount));
1317  MachineLocation Location(RI->getFrameRegister(*MF));
1318  addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
1319
1320  if (!DISubprogram(SPNode).isLocalToUnit())
1321    addUInt(SPDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
1322
1323  return SPDie;
1324 }
1325
1326 /// constructLexicalScope - Construct new DW_TAG_lexical_block
1327 /// for this scope and attach DW_AT_low_pc/DW_AT_high_pc labels.
1328 DIE *DwarfDebug::constructLexicalScopeDIE(DbgScope *Scope) {
1329   unsigned StartID = MMI->MappedLabel(Scope->getStartLabelID());
1330   unsigned EndID = MMI->MappedLabel(Scope->getEndLabelID());
1331
1332   // Ignore empty scopes.
1333   if (StartID == EndID && StartID != 0)
1334     return NULL;
1335
1336   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
1337   if (Scope->isAbstractScope())
1338     return ScopeDIE;
1339
1340   addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
1341            StartID ?
1342              DWLabel("label", StartID)
1343            : DWLabel("func_begin", SubprogramCount));
1344   addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
1345            EndID ?
1346              DWLabel("label", EndID)
1347            : DWLabel("func_end", SubprogramCount));
1348
1349
1350
1351   return ScopeDIE;
1352 }
1353
1354 /// constructInlinedScopeDIE - This scope represents inlined body of
1355 /// a function. Construct DIE to represent this concrete inlined copy
1356 /// of the function.
1357 DIE *DwarfDebug::constructInlinedScopeDIE(DbgScope *Scope) {
1358   unsigned StartID = MMI->MappedLabel(Scope->getStartLabelID());
1359   unsigned EndID = MMI->MappedLabel(Scope->getEndLabelID());
1360   assert (StartID && "Invalid starting label for an inlined scope!");
1361   assert (EndID && "Invalid end label for an inlined scope!");
1362   // Ignore empty scopes.
1363   if (StartID == EndID && StartID != 0)
1364     return NULL;
1365
1366   DIScope DS(Scope->getScopeNode());
1367   if (DS.isNull())
1368     return NULL;
1369   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
1370
1371   DISubprogram InlinedSP = getDISubprogram(DS.getNode());
1372   DIE *OriginDIE = ModuleCU->getDIE(InlinedSP.getNode());
1373   assert (OriginDIE && "Unable to find Origin DIE!");
1374   addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
1375               dwarf::DW_FORM_ref4, OriginDIE);
1376
1377   addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
1378            DWLabel("label", StartID));
1379   addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
1380            DWLabel("label", EndID));
1381
1382   InlinedSubprogramDIEs.insert(OriginDIE);
1383
1384   // Track the start label for this inlined function.
1385   ValueMap<MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
1386     I = InlineInfo.find(InlinedSP.getNode());
1387
1388   if (I == InlineInfo.end()) {
1389     InlineInfo[InlinedSP.getNode()].push_back(std::make_pair(StartID,
1390                                                              ScopeDIE));
1391     InlinedSPNodes.push_back(InlinedSP.getNode());
1392   } else
1393     I->second.push_back(std::make_pair(StartID, ScopeDIE));
1394
1395   StringPool.insert(InlinedSP.getName());
1396   StringRef LinkageName = InlinedSP.getLinkageName();
1397   if (!LinkageName.empty()) {
1398     // Skip special LLVM prefix that is used to inform the asm printer to not
1399     // emit usual symbol prefix before the symbol name. This happens for
1400     // Objective-C symbol names and symbol whose name is replaced using GCC's
1401     // __asm__ attribute.
1402     if (LinkageName[0] == 1)
1403       LinkageName = LinkageName.substr(1);
1404   }
1405   StringPool.insert(LinkageName);
1406   DILocation DL(Scope->getInlinedAt());
1407   addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0, ModuleCU->getID());
1408   addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
1409
1410   return ScopeDIE;
1411 }
1412
1413
1414 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
1415 DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
1416   // Get the descriptor.
1417   const DIVariable &VD = DV->getVariable();
1418   StringRef Name = VD.getName();
1419   if (Name.empty())
1420     return NULL;
1421
1422   // Translate tag to proper Dwarf tag.  The result variable is dropped for
1423   // now.
1424   unsigned Tag;
1425   switch (VD.getTag()) {
1426   case dwarf::DW_TAG_return_variable:
1427     return NULL;
1428   case dwarf::DW_TAG_arg_variable:
1429     Tag = dwarf::DW_TAG_formal_parameter;
1430     break;
1431   case dwarf::DW_TAG_auto_variable:    // fall thru
1432   default:
1433     Tag = dwarf::DW_TAG_variable;
1434     break;
1435   }
1436
1437   // Define variable debug information entry.
1438   DIE *VariableDie = new DIE(Tag);
1439
1440
1441   DIE *AbsDIE = NULL;
1442   if (DbgVariable *AV = DV->getAbstractVariable())
1443     AbsDIE = AV->getDIE();
1444
1445   if (AbsDIE) {
1446     DIScope DS(Scope->getScopeNode());
1447     DISubprogram InlinedSP = getDISubprogram(DS.getNode());
1448     DIE *OriginSPDIE = ModuleCU->getDIE(InlinedSP.getNode());
1449     (void) OriginSPDIE;
1450     assert (OriginSPDIE && "Unable to find Origin DIE for the SP!");
1451     DIE *AbsDIE = DV->getAbstractVariable()->getDIE();
1452     assert (AbsDIE && "Unable to find Origin DIE for the Variable!");
1453     addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
1454                 dwarf::DW_FORM_ref4, AbsDIE);
1455   }
1456   else {
1457     addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
1458     addSourceLine(VariableDie, &VD);
1459
1460     // Add variable type.
1461     // FIXME: isBlockByrefVariable should be reformulated in terms of complex
1462     // addresses instead.
1463     if (VD.isBlockByrefVariable())
1464       addType(VariableDie, getBlockByrefType(VD.getType(), Name));
1465     else
1466       addType(VariableDie, VD.getType());
1467   }
1468
1469   // Add variable address.
1470   if (!Scope->isAbstractScope()) {
1471     MachineLocation Location;
1472     unsigned FrameReg;
1473     int Offset = RI->getFrameIndexReference(*MF, DV->getFrameIndex(), FrameReg);
1474     Location.set(FrameReg, Offset);
1475
1476     if (VD.hasComplexAddress())
1477       addComplexAddress(DV, VariableDie, dwarf::DW_AT_location, Location);
1478     else if (VD.isBlockByrefVariable())
1479       addBlockByrefAddress(DV, VariableDie, dwarf::DW_AT_location, Location);
1480     else
1481       addAddress(VariableDie, dwarf::DW_AT_location, Location);
1482   }
1483   DV->setDIE(VariableDie);
1484   return VariableDie;
1485
1486 }
1487
1488 void DwarfDebug::addPubTypes(DISubprogram SP) {
1489   DICompositeType SPTy = SP.getType();
1490   unsigned SPTag = SPTy.getTag();
1491   if (SPTag != dwarf::DW_TAG_subroutine_type) 
1492     return;
1493
1494   DIArray Args = SPTy.getTypeArray();
1495   if (Args.isNull()) 
1496     return;
1497
1498   for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
1499     DIType ATy(Args.getElement(i).getNode());
1500     if (ATy.isNull())
1501       continue;
1502     DICompositeType CATy = getDICompositeType(ATy);
1503     if (!CATy.isNull() && !CATy.getName().empty()) {
1504       if (DIEEntry *Entry = ModuleCU->getDIEEntry(CATy.getNode()))
1505         ModuleCU->addGlobalType(CATy.getName(), Entry->getEntry());
1506     }
1507   }
1508 }
1509
1510 /// constructScopeDIE - Construct a DIE for this scope.
1511 DIE *DwarfDebug::constructScopeDIE(DbgScope *Scope) {
1512  if (!Scope)
1513   return NULL;
1514  DIScope DS(Scope->getScopeNode());
1515  if (DS.isNull())
1516    return NULL;
1517
1518  DIE *ScopeDIE = NULL;
1519  if (Scope->getInlinedAt())
1520    ScopeDIE = constructInlinedScopeDIE(Scope);
1521  else if (DS.isSubprogram()) {
1522    if (Scope->isAbstractScope())
1523      ScopeDIE = ModuleCU->getDIE(DS.getNode());
1524    else
1525      ScopeDIE = updateSubprogramScopeDIE(DS.getNode());
1526  }
1527  else {
1528    ScopeDIE = constructLexicalScopeDIE(Scope);
1529    if (!ScopeDIE) return NULL;
1530  }
1531
1532   // Add variables to scope.
1533   SmallVector<DbgVariable *, 8> &Variables = Scope->getVariables();
1534   for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
1535     DIE *VariableDIE = constructVariableDIE(Variables[i], Scope);
1536     if (VariableDIE)
1537       ScopeDIE->addChild(VariableDIE);
1538   }
1539
1540   // Add nested scopes.
1541   SmallVector<DbgScope *, 4> &Scopes = Scope->getScopes();
1542   for (unsigned j = 0, M = Scopes.size(); j < M; ++j) {
1543     // Define the Scope debug information entry.
1544     DIE *NestedDIE = constructScopeDIE(Scopes[j]);
1545     if (NestedDIE)
1546       ScopeDIE->addChild(NestedDIE);
1547   }
1548
1549   if (DS.isSubprogram()) 
1550     addPubTypes(DISubprogram(DS.getNode()));
1551  
1552  return ScopeDIE;
1553 }
1554
1555 /// GetOrCreateSourceID - Look up the source id with the given directory and
1556 /// source file names. If none currently exists, create a new id and insert it
1557 /// in the SourceIds map. This can update DirectoryNames and SourceFileNames
1558 /// maps as well.
1559 unsigned DwarfDebug::GetOrCreateSourceID(StringRef DirName, StringRef FileName) {
1560   unsigned DId;
1561   StringMap<unsigned>::iterator DI = DirectoryIdMap.find(DirName);
1562   if (DI != DirectoryIdMap.end()) {
1563     DId = DI->getValue();
1564   } else {
1565     DId = DirectoryNames.size() + 1;
1566     DirectoryIdMap[DirName] = DId;
1567     DirectoryNames.push_back(DirName);
1568   }
1569
1570   unsigned FId;
1571   StringMap<unsigned>::iterator FI = SourceFileIdMap.find(FileName);
1572   if (FI != SourceFileIdMap.end()) {
1573     FId = FI->getValue();
1574   } else {
1575     FId = SourceFileNames.size() + 1;
1576     SourceFileIdMap[FileName] = FId;
1577     SourceFileNames.push_back(FileName);
1578   }
1579
1580   DenseMap<std::pair<unsigned, unsigned>, unsigned>::iterator SI =
1581     SourceIdMap.find(std::make_pair(DId, FId));
1582   if (SI != SourceIdMap.end())
1583     return SI->second;
1584
1585   unsigned SrcId = SourceIds.size() + 1;  // DW_AT_decl_file cannot be 0.
1586   SourceIdMap[std::make_pair(DId, FId)] = SrcId;
1587   SourceIds.push_back(std::make_pair(DId, FId));
1588
1589   return SrcId;
1590 }
1591
1592 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1593 DIE *DwarfDebug::getOrCreateNameSpace(DINameSpace NS) {
1594   DIE *NDie = ModuleCU->getDIE(NS.getNode());
1595   if (NDie)
1596     return NDie;
1597   NDie = new DIE(dwarf::DW_TAG_namespace);
1598   ModuleCU->insertDIE(NS.getNode(), NDie);
1599   if (!NS.getName().empty())
1600     addString(NDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, NS.getName());
1601   addSourceLine(NDie, &NS);
1602   addToContextOwner(NDie, NS.getContext());
1603   return NDie;
1604 }
1605
1606 CompileUnit *DwarfDebug::constructCompileUnit(MDNode *N) {
1607   DICompileUnit DIUnit(N);
1608   StringRef FN = DIUnit.getFilename();
1609   StringRef Dir = DIUnit.getDirectory();
1610   unsigned ID = GetOrCreateSourceID(Dir, FN);
1611
1612   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
1613   addSectionOffset(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
1614                    DWLabel("section_line", 0), DWLabel("section_line", 0),
1615                    false);
1616   addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
1617             DIUnit.getProducer());
1618   addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data1,
1619           DIUnit.getLanguage());
1620   addString(Die, dwarf::DW_AT_name, dwarf::DW_FORM_string, FN);
1621
1622   if (!Dir.empty())
1623     addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
1624   if (DIUnit.isOptimized())
1625     addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
1626
1627   StringRef Flags = DIUnit.getFlags();
1628   if (!Flags.empty())
1629     addString(Die, dwarf::DW_AT_APPLE_flags, dwarf::DW_FORM_string, Flags);
1630
1631   unsigned RVer = DIUnit.getRunTimeVersion();
1632   if (RVer)
1633     addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
1634             dwarf::DW_FORM_data1, RVer);
1635
1636   CompileUnit *Unit = new CompileUnit(ID, Die);
1637   if (!ModuleCU && DIUnit.isMain()) {
1638     // Use first compile unit marked as isMain as the compile unit
1639     // for this module.
1640     ModuleCU = Unit;
1641   }
1642
1643   CompileUnitMap[DIUnit.getNode()] = Unit;
1644   CompileUnits.push_back(Unit);
1645   return Unit;
1646 }
1647
1648 void DwarfDebug::constructGlobalVariableDIE(MDNode *N) {
1649   DIGlobalVariable DI_GV(N);
1650
1651   // If debug information is malformed then ignore it.
1652   if (DI_GV.Verify() == false)
1653     return;
1654
1655   // Check for pre-existence.
1656   if (ModuleCU->getDIE(DI_GV.getNode()))
1657     return;
1658
1659   DIE *VariableDie = createGlobalVariableDIE(DI_GV);
1660   if (!VariableDie)
1661     return;
1662
1663   // Add to map.
1664   ModuleCU->insertDIE(N, VariableDie);
1665
1666   // Add to context owner.
1667   if (DI_GV.isDefinition() 
1668       && !DI_GV.getContext().isCompileUnit()) {
1669     // Create specification DIE.
1670     DIE *VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1671     addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1672                 dwarf::DW_FORM_ref4, VariableDie);
1673     DIEBlock *Block = new DIEBlock();
1674     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1675     addObjectLabel(Block, 0, dwarf::DW_FORM_udata,
1676                    Asm->Mang->getMangledName(DI_GV.getGlobal()));
1677     addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1678     ModuleCU->addDie(VariableSpecDIE);
1679   } else {
1680     DIEBlock *Block = new DIEBlock();
1681     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1682     addObjectLabel(Block, 0, dwarf::DW_FORM_udata,
1683                    Asm->Mang->getMangledName(DI_GV.getGlobal()));
1684     addBlock(VariableDie, dwarf::DW_AT_location, 0, Block);
1685   }
1686   addToContextOwner(VariableDie, DI_GV.getContext());
1687   
1688   // Expose as global. FIXME - need to check external flag.
1689   ModuleCU->addGlobal(DI_GV.getName(), VariableDie);
1690
1691   DIType GTy = DI_GV.getType();
1692   if (GTy.isCompositeType() && !GTy.getName().empty()) {
1693     DIEEntry *Entry = ModuleCU->getDIEEntry(GTy.getNode());
1694     assert (Entry && "Missing global type!");
1695     ModuleCU->addGlobalType(GTy.getName(), Entry->getEntry());
1696   }
1697   return;
1698 }
1699
1700 void DwarfDebug::constructSubprogramDIE(MDNode *N) {
1701   DISubprogram SP(N);
1702
1703   // Check for pre-existence.
1704   if (ModuleCU->getDIE(N))
1705     return;
1706
1707   if (!SP.isDefinition())
1708     // This is a method declaration which will be handled while constructing
1709     // class type.
1710     return;
1711
1712   DIE *SubprogramDie = createSubprogramDIE(SP);
1713
1714   // Add to map.
1715   ModuleCU->insertDIE(N, SubprogramDie);
1716
1717   // Add to context owner.
1718   addToContextOwner(SubprogramDie, SP.getContext());
1719
1720   // Expose as global.
1721   ModuleCU->addGlobal(SP.getName(), SubprogramDie);
1722
1723   return;
1724 }
1725
1726 /// beginModule - Emit all Dwarf sections that should come prior to the
1727 /// content. Create global DIEs and emit initial debug info sections.
1728 /// This is inovked by the target AsmPrinter.
1729 void DwarfDebug::beginModule(Module *M, MachineModuleInfo *mmi) {
1730   this->M = M;
1731
1732   if (TimePassesIsEnabled)
1733     DebugTimer->startTimer();
1734
1735   if (!MAI->doesSupportDebugInformation())
1736     return;
1737
1738   DebugInfoFinder DbgFinder;
1739   DbgFinder.processModule(*M);
1740
1741   // Create all the compile unit DIEs.
1742   for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
1743          E = DbgFinder.compile_unit_end(); I != E; ++I)
1744     constructCompileUnit(*I);
1745
1746   if (CompileUnits.empty()) {
1747     if (TimePassesIsEnabled)
1748       DebugTimer->stopTimer();
1749
1750     return;
1751   }
1752
1753   // If main compile unit for this module is not seen than randomly
1754   // select first compile unit.
1755   if (!ModuleCU)
1756     ModuleCU = CompileUnits[0];
1757
1758   // Create DIEs for each subprogram.
1759   for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
1760          E = DbgFinder.subprogram_end(); I != E; ++I)
1761     constructSubprogramDIE(*I);
1762
1763   // Create DIEs for each global variable.
1764   for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
1765          E = DbgFinder.global_variable_end(); I != E; ++I)
1766     constructGlobalVariableDIE(*I);
1767
1768   MMI = mmi;
1769   shouldEmit = true;
1770   MMI->setDebugInfoAvailability(true);
1771
1772   // Prime section data.
1773   SectionMap.insert(Asm->getObjFileLowering().getTextSection());
1774
1775   // Print out .file directives to specify files for .loc directives. These are
1776   // printed out early so that they precede any .loc directives.
1777   if (MAI->hasDotLocAndDotFile()) {
1778     for (unsigned i = 1, e = getNumSourceIds()+1; i != e; ++i) {
1779       // Remember source id starts at 1.
1780       std::pair<unsigned, unsigned> Id = getSourceDirectoryAndFileIds(i);
1781       sys::Path FullPath(getSourceDirectoryName(Id.first));
1782       bool AppendOk =
1783         FullPath.appendComponent(getSourceFileName(Id.second));
1784       assert(AppendOk && "Could not append filename to directory!");
1785       AppendOk = false;
1786       Asm->EmitFile(i, FullPath.str());
1787       Asm->EOL();
1788     }
1789   }
1790
1791   // Emit initial sections
1792   emitInitial();
1793
1794   if (TimePassesIsEnabled)
1795     DebugTimer->stopTimer();
1796 }
1797
1798 /// endModule - Emit all Dwarf sections that should come after the content.
1799 ///
1800 void DwarfDebug::endModule() {
1801   if (!ModuleCU)
1802     return;
1803
1804   if (TimePassesIsEnabled)
1805     DebugTimer->startTimer();
1806
1807   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
1808   for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
1809          AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
1810     DIE *ISP = *AI;
1811     addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
1812   }
1813
1814   // Insert top level DIEs.
1815   for (SmallVector<DIE *, 4>::iterator TI = TopLevelDIEsVector.begin(),
1816          TE = TopLevelDIEsVector.end(); TI != TE; ++TI)
1817     ModuleCU->getCUDie()->addChild(*TI);
1818
1819   for (DenseMap<DIE *, WeakVH>::iterator CI = ContainingTypeMap.begin(),
1820          CE = ContainingTypeMap.end(); CI != CE; ++CI) {
1821     DIE *SPDie = CI->first;
1822     MDNode *N = dyn_cast_or_null<MDNode>(CI->second);
1823     if (!N) continue;
1824     DIE *NDie = ModuleCU->getDIE(N);
1825     if (!NDie) continue;
1826     addDIEEntry(SPDie, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, NDie);
1827     addDIEEntry(NDie, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, NDie);
1828   }
1829
1830   // Standard sections final addresses.
1831   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
1832   EmitLabel("text_end", 0);
1833   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
1834   EmitLabel("data_end", 0);
1835
1836   // End text sections.
1837   for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
1838     Asm->OutStreamer.SwitchSection(SectionMap[i]);
1839     EmitLabel("section_end", i);
1840   }
1841
1842   // Emit common frame information.
1843   emitCommonDebugFrame();
1844
1845   // Emit function debug frame information
1846   for (std::vector<FunctionDebugFrameInfo>::iterator I = DebugFrames.begin(),
1847          E = DebugFrames.end(); I != E; ++I)
1848     emitFunctionDebugFrame(*I);
1849
1850   // Compute DIE offsets and sizes.
1851   computeSizeAndOffsets();
1852
1853   // Emit all the DIEs into a debug info section
1854   emitDebugInfo();
1855
1856   // Corresponding abbreviations into a abbrev section.
1857   emitAbbreviations();
1858
1859   // Emit source line correspondence into a debug line section.
1860   emitDebugLines();
1861
1862   // Emit info into a debug pubnames section.
1863   emitDebugPubNames();
1864
1865   // Emit info into a debug pubtypes section.
1866   emitDebugPubTypes();
1867
1868   // Emit info into a debug str section.
1869   emitDebugStr();
1870
1871   // Emit info into a debug loc section.
1872   emitDebugLoc();
1873
1874   // Emit info into a debug aranges section.
1875   EmitDebugARanges();
1876
1877   // Emit info into a debug ranges section.
1878   emitDebugRanges();
1879
1880   // Emit info into a debug macinfo section.
1881   emitDebugMacInfo();
1882
1883   // Emit inline info.
1884   emitDebugInlineInfo();
1885
1886   if (TimePassesIsEnabled)
1887     DebugTimer->stopTimer();
1888 }
1889
1890 /// findAbstractVariable - Find abstract variable, if any, associated with Var.
1891 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &Var,
1892                                               unsigned FrameIdx,
1893                                               DILocation &ScopeLoc) {
1894
1895   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var.getNode());
1896   if (AbsDbgVariable)
1897     return AbsDbgVariable;
1898
1899   DbgScope *Scope = AbstractScopes.lookup(ScopeLoc.getScope().getNode());
1900   if (!Scope)
1901     return NULL;
1902
1903   AbsDbgVariable = new DbgVariable(Var, FrameIdx);
1904   Scope->addVariable(AbsDbgVariable);
1905   AbstractVariables[Var.getNode()] = AbsDbgVariable;
1906   return AbsDbgVariable;
1907 }
1908
1909 /// collectVariableInfo - Populate DbgScope entries with variables' info.
1910 void DwarfDebug::collectVariableInfo() {
1911   if (!MMI) return;
1912
1913   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1914   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1915          VE = VMap.end(); VI != VE; ++VI) {
1916     MetadataBase *MB = VI->first;
1917     MDNode *Var = dyn_cast_or_null<MDNode>(MB);
1918     if (!Var) continue;
1919     DIVariable DV (Var);
1920     std::pair< unsigned, MDNode *> VP = VI->second;
1921     DILocation ScopeLoc(VP.second);
1922
1923     DbgScope *Scope =
1924       ConcreteScopes.lookup(ScopeLoc.getOrigLocation().getNode());
1925     if (!Scope)
1926       Scope = DbgScopeMap.lookup(ScopeLoc.getScope().getNode());
1927     // If variable scope is not found then skip this variable.
1928     if (!Scope)
1929       continue;
1930
1931     DbgVariable *RegVar = new DbgVariable(DV, VP.first);
1932     Scope->addVariable(RegVar);
1933     if (DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.first,
1934                                                            ScopeLoc))
1935       RegVar->setAbstractVariable(AbsDbgVariable);
1936   }
1937 }
1938
1939 /// beginScope - Process beginning of a scope starting at Label.
1940 void DwarfDebug::beginScope(const MachineInstr *MI, unsigned Label) {
1941   InsnToDbgScopeMapTy::iterator I = DbgScopeBeginMap.find(MI);
1942   if (I == DbgScopeBeginMap.end())
1943     return;
1944   ScopeVector &SD = I->second;
1945   for (ScopeVector::iterator SDI = SD.begin(), SDE = SD.end();
1946        SDI != SDE; ++SDI)
1947     (*SDI)->setStartLabelID(Label);
1948 }
1949
1950 /// endScope - Process end of a scope.
1951 void DwarfDebug::endScope(const MachineInstr *MI) {
1952   InsnToDbgScopeMapTy::iterator I = DbgScopeEndMap.find(MI);
1953   if (I == DbgScopeEndMap.end())
1954     return;
1955
1956   unsigned Label = MMI->NextLabelID();
1957   Asm->printLabel(Label);
1958   O << '\n';
1959
1960   SmallVector<DbgScope *, 2> &SD = I->second;
1961   for (SmallVector<DbgScope *, 2>::iterator SDI = SD.begin(), SDE = SD.end();
1962        SDI != SDE; ++SDI)
1963     (*SDI)->setEndLabelID(Label);
1964   return;
1965 }
1966
1967 /// createDbgScope - Create DbgScope for the scope.
1968 void DwarfDebug::createDbgScope(MDNode *Scope, MDNode *InlinedAt) {
1969
1970   if (!InlinedAt) {
1971     DbgScope *WScope = DbgScopeMap.lookup(Scope);
1972     if (WScope)
1973       return;
1974     WScope = new DbgScope(NULL, DIDescriptor(Scope), NULL);
1975     DbgScopeMap.insert(std::make_pair(Scope, WScope));
1976     if (DIDescriptor(Scope).isLexicalBlock())
1977       createDbgScope(DILexicalBlock(Scope).getContext().getNode(), NULL);
1978     return;
1979   }
1980
1981   DbgScope *WScope = DbgScopeMap.lookup(InlinedAt);
1982   if (WScope)
1983     return;
1984
1985   WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt);
1986   DbgScopeMap.insert(std::make_pair(InlinedAt, WScope));
1987   DILocation DL(InlinedAt);
1988   createDbgScope(DL.getScope().getNode(), DL.getOrigLocation().getNode());
1989 }
1990
1991 /// extractScopeInformation - Scan machine instructions in this function
1992 /// and collect DbgScopes. Return true, if atleast one scope was found.
1993 bool DwarfDebug::extractScopeInformation(MachineFunction *MF) {
1994   // If scope information was extracted using .dbg intrinsics then there is not
1995   // any need to extract these information by scanning each instruction.
1996   if (!DbgScopeMap.empty())
1997     return false;
1998
1999   DenseMap<const MachineInstr *, unsigned> MIIndexMap;
2000   unsigned MIIndex = 0;
2001   // Scan each instruction and create scopes. First build working set of scopes.
2002   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
2003        I != E; ++I) {
2004     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2005          II != IE; ++II) {
2006       const MachineInstr *MInsn = II;
2007       MIIndexMap[MInsn] = MIIndex++;
2008       DebugLoc DL = MInsn->getDebugLoc();
2009       if (DL.isUnknown()) continue;
2010       DebugLocTuple DLT = MF->getDebugLocTuple(DL);
2011       if (!DLT.Scope) continue;
2012       // There is no need to create another DIE for compile unit. For all
2013       // other scopes, create one DbgScope now. This will be translated
2014       // into a scope DIE at the end.
2015       if (DIDescriptor(DLT.Scope).isCompileUnit()) continue;
2016       createDbgScope(DLT.Scope, DLT.InlinedAtLoc);
2017     }
2018   }
2019
2020
2021   // Build scope hierarchy using working set of scopes.
2022   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
2023        I != E; ++I) {
2024     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
2025          II != IE; ++II) {
2026       const MachineInstr *MInsn = II;
2027       DebugLoc DL = MInsn->getDebugLoc();
2028       if (DL.isUnknown())  continue;
2029       DebugLocTuple DLT = MF->getDebugLocTuple(DL);
2030       if (!DLT.Scope)  continue;
2031       // There is no need to create another DIE for compile unit. For all
2032       // other scopes, create one DbgScope now. This will be translated
2033       // into a scope DIE at the end.
2034       if (DIDescriptor(DLT.Scope).isCompileUnit()) continue;
2035       DbgScope *Scope = getUpdatedDbgScope(DLT.Scope, MInsn, DLT.InlinedAtLoc);
2036       Scope->setLastInsn(MInsn);
2037     }
2038   }
2039
2040   if (!CurrentFnDbgScope)
2041     return false;
2042
2043   CurrentFnDbgScope->fixInstructionMarkers(MIIndexMap);
2044
2045   // Each scope has first instruction and last instruction to mark beginning
2046   // and end of a scope respectively. Create an inverse map that list scopes
2047   // starts (and ends) with an instruction. One instruction may start (or end)
2048   // multiple scopes.
2049   for (ValueMap<MDNode *, DbgScope *>::iterator DI = DbgScopeMap.begin(),
2050          DE = DbgScopeMap.end(); DI != DE; ++DI) {
2051     DbgScope *S = DI->second;
2052     if (S->isAbstractScope())
2053       continue;
2054     const MachineInstr *MI = S->getFirstInsn();
2055     assert (MI && "DbgScope does not have first instruction!");
2056
2057     InsnToDbgScopeMapTy::iterator IDI = DbgScopeBeginMap.find(MI);
2058     if (IDI != DbgScopeBeginMap.end())
2059       IDI->second.push_back(S);
2060     else
2061       DbgScopeBeginMap[MI].push_back(S);
2062
2063     MI = S->getLastInsn();
2064     assert (MI && "DbgScope does not have last instruction!");
2065     IDI = DbgScopeEndMap.find(MI);
2066     if (IDI != DbgScopeEndMap.end())
2067       IDI->second.push_back(S);
2068     else
2069       DbgScopeEndMap[MI].push_back(S);
2070   }
2071
2072   return !DbgScopeMap.empty();
2073 }
2074
2075 /// beginFunction - Gather pre-function debug information.  Assumes being
2076 /// emitted immediately after the function entry point.
2077 void DwarfDebug::beginFunction(MachineFunction *MF) {
2078   this->MF = MF;
2079
2080   if (!ShouldEmitDwarfDebug()) return;
2081
2082   if (TimePassesIsEnabled)
2083     DebugTimer->startTimer();
2084
2085   if (!extractScopeInformation(MF))
2086     return;
2087
2088   collectVariableInfo();
2089
2090   // Begin accumulating function debug information.
2091   MMI->BeginFunction(MF);
2092
2093   // Assumes in correct section after the entry point.
2094   EmitLabel("func_begin", ++SubprogramCount);
2095
2096   // Emit label for the implicitly defined dbg.stoppoint at the start of the
2097   // function.
2098   DebugLoc FDL = MF->getDefaultDebugLoc();
2099   if (!FDL.isUnknown()) {
2100     DebugLocTuple DLT = MF->getDebugLocTuple(FDL);
2101     unsigned LabelID = 0;
2102     DISubprogram SP = getDISubprogram(DLT.Scope);
2103     if (!SP.isNull())
2104       LabelID = recordSourceLine(SP.getLineNumber(), 0, DLT.Scope);
2105     else
2106       LabelID = recordSourceLine(DLT.Line, DLT.Col, DLT.Scope);
2107     Asm->printLabel(LabelID);
2108     O << '\n';
2109   }
2110   if (TimePassesIsEnabled)
2111     DebugTimer->stopTimer();
2112 }
2113
2114 /// endFunction - Gather and emit post-function debug information.
2115 ///
2116 void DwarfDebug::endFunction(MachineFunction *MF) {
2117   if (!ShouldEmitDwarfDebug()) return;
2118
2119   if (TimePassesIsEnabled)
2120     DebugTimer->startTimer();
2121
2122   if (DbgScopeMap.empty())
2123     return;
2124
2125   if (CurrentFnDbgScope) {
2126     // Define end label for subprogram.
2127     EmitLabel("func_end", SubprogramCount);
2128     
2129     // Get function line info.
2130     if (!Lines.empty()) {
2131       // Get section line info.
2132       unsigned ID = SectionMap.insert(Asm->getCurrentSection());
2133       if (SectionSourceLines.size() < ID) SectionSourceLines.resize(ID);
2134       std::vector<SrcLineInfo> &SectionLineInfos = SectionSourceLines[ID-1];
2135       // Append the function info to section info.
2136       SectionLineInfos.insert(SectionLineInfos.end(),
2137                               Lines.begin(), Lines.end());
2138     }
2139     
2140     // Construct abstract scopes.
2141     for (SmallVector<DbgScope *, 4>::iterator AI = AbstractScopesList.begin(),
2142            AE = AbstractScopesList.end(); AI != AE; ++AI)
2143       constructScopeDIE(*AI);
2144     
2145     constructScopeDIE(CurrentFnDbgScope);
2146     
2147     DebugFrames.push_back(FunctionDebugFrameInfo(SubprogramCount,
2148                                                  MMI->getFrameMoves()));
2149   }
2150
2151   // Clear debug info
2152   CurrentFnDbgScope = NULL;
2153   DbgScopeMap.clear();
2154   DbgScopeBeginMap.clear();
2155   DbgScopeEndMap.clear();
2156   ConcreteScopes.clear();
2157   AbstractScopesList.clear();
2158
2159   Lines.clear();
2160   
2161   if (TimePassesIsEnabled)
2162     DebugTimer->stopTimer();
2163 }
2164
2165 /// recordSourceLine - Records location information and associates it with a
2166 /// label. Returns a unique label ID used to generate a label and provide
2167 /// correspondence to the source line list.
2168 unsigned DwarfDebug::recordSourceLine(unsigned Line, unsigned Col,
2169                                       MDNode *S) {
2170   if (!MMI)
2171     return 0;
2172
2173   if (TimePassesIsEnabled)
2174     DebugTimer->startTimer();
2175
2176   StringRef Dir;
2177   StringRef Fn;
2178
2179   DIDescriptor Scope(S);
2180   if (Scope.isCompileUnit()) {
2181     DICompileUnit CU(S);
2182     Dir = CU.getDirectory();
2183     Fn = CU.getFilename();
2184   } else if (Scope.isSubprogram()) {
2185     DISubprogram SP(S);
2186     Dir = SP.getDirectory();
2187     Fn = SP.getFilename();
2188   } else if (Scope.isLexicalBlock()) {
2189     DILexicalBlock DB(S);
2190     Dir = DB.getDirectory();
2191     Fn = DB.getFilename();
2192   } else
2193     assert (0 && "Unexpected scope info");
2194
2195   unsigned Src = GetOrCreateSourceID(Dir, Fn);
2196   unsigned ID = MMI->NextLabelID();
2197   Lines.push_back(SrcLineInfo(Line, Col, Src, ID));
2198
2199   if (TimePassesIsEnabled)
2200     DebugTimer->stopTimer();
2201
2202   return ID;
2203 }
2204
2205 /// getOrCreateSourceID - Public version of GetOrCreateSourceID. This can be
2206 /// timed. Look up the source id with the given directory and source file
2207 /// names. If none currently exists, create a new id and insert it in the
2208 /// SourceIds map. This can update DirectoryNames and SourceFileNames maps as
2209 /// well.
2210 unsigned DwarfDebug::getOrCreateSourceID(const std::string &DirName,
2211                                          const std::string &FileName) {
2212   if (TimePassesIsEnabled)
2213     DebugTimer->startTimer();
2214
2215   unsigned SrcId = GetOrCreateSourceID(DirName.c_str(), FileName.c_str());
2216
2217   if (TimePassesIsEnabled)
2218     DebugTimer->stopTimer();
2219
2220   return SrcId;
2221 }
2222
2223 //===----------------------------------------------------------------------===//
2224 // Emit Methods
2225 //===----------------------------------------------------------------------===//
2226
2227 /// computeSizeAndOffset - Compute the size and offset of a DIE.
2228 ///
2229 unsigned
2230 DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
2231   // Get the children.
2232   const std::vector<DIE *> &Children = Die->getChildren();
2233
2234   // If not last sibling and has children then add sibling offset attribute.
2235   if (!Last && !Children.empty()) Die->addSiblingOffset();
2236
2237   // Record the abbreviation.
2238   assignAbbrevNumber(Die->getAbbrev());
2239
2240   // Get the abbreviation for this DIE.
2241   unsigned AbbrevNumber = Die->getAbbrevNumber();
2242   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2243
2244   // Set DIE offset
2245   Die->setOffset(Offset);
2246
2247   // Start the size with the size of abbreviation code.
2248   Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
2249
2250   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
2251   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2252
2253   // Size the DIE attribute values.
2254   for (unsigned i = 0, N = Values.size(); i < N; ++i)
2255     // Size attribute value.
2256     Offset += Values[i]->SizeOf(TD, AbbrevData[i].getForm());
2257
2258   // Size the DIE children if any.
2259   if (!Children.empty()) {
2260     assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
2261            "Children flag not set");
2262
2263     for (unsigned j = 0, M = Children.size(); j < M; ++j)
2264       Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
2265
2266     // End of children marker.
2267     Offset += sizeof(int8_t);
2268   }
2269
2270   Die->setSize(Offset - Die->getOffset());
2271   return Offset;
2272 }
2273
2274 /// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
2275 ///
2276 void DwarfDebug::computeSizeAndOffsets() {
2277   // Compute size of compile unit header.
2278   static unsigned Offset =
2279     sizeof(int32_t) + // Length of Compilation Unit Info
2280     sizeof(int16_t) + // DWARF version number
2281     sizeof(int32_t) + // Offset Into Abbrev. Section
2282     sizeof(int8_t);   // Pointer Size (in bytes)
2283
2284   computeSizeAndOffset(ModuleCU->getCUDie(), Offset, true);
2285   CompileUnitOffsets[ModuleCU] = 0;
2286 }
2287
2288 /// emitInitial - Emit initial Dwarf declarations.  This is necessary for cc
2289 /// tools to recognize the object file contains Dwarf information.
2290 void DwarfDebug::emitInitial() {
2291   // Check to see if we already emitted intial headers.
2292   if (didInitial) return;
2293   didInitial = true;
2294
2295   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
2296
2297   // Dwarf sections base addresses.
2298   if (MAI->doesDwarfRequireFrameSection()) {
2299     Asm->OutStreamer.SwitchSection(TLOF.getDwarfFrameSection());
2300     EmitLabel("section_debug_frame", 0);
2301   }
2302
2303   Asm->OutStreamer.SwitchSection(TLOF.getDwarfInfoSection());
2304   EmitLabel("section_info", 0);
2305   Asm->OutStreamer.SwitchSection(TLOF.getDwarfAbbrevSection());
2306   EmitLabel("section_abbrev", 0);
2307   Asm->OutStreamer.SwitchSection(TLOF.getDwarfARangesSection());
2308   EmitLabel("section_aranges", 0);
2309
2310   if (const MCSection *LineInfoDirective = TLOF.getDwarfMacroInfoSection()) {
2311     Asm->OutStreamer.SwitchSection(LineInfoDirective);
2312     EmitLabel("section_macinfo", 0);
2313   }
2314
2315   Asm->OutStreamer.SwitchSection(TLOF.getDwarfLineSection());
2316   EmitLabel("section_line", 0);
2317   Asm->OutStreamer.SwitchSection(TLOF.getDwarfLocSection());
2318   EmitLabel("section_loc", 0);
2319   Asm->OutStreamer.SwitchSection(TLOF.getDwarfPubNamesSection());
2320   EmitLabel("section_pubnames", 0);
2321   Asm->OutStreamer.SwitchSection(TLOF.getDwarfPubTypesSection());
2322   EmitLabel("section_pubtypes", 0);
2323   Asm->OutStreamer.SwitchSection(TLOF.getDwarfStrSection());
2324   EmitLabel("section_str", 0);
2325   Asm->OutStreamer.SwitchSection(TLOF.getDwarfRangesSection());
2326   EmitLabel("section_ranges", 0);
2327
2328   Asm->OutStreamer.SwitchSection(TLOF.getTextSection());
2329   EmitLabel("text_begin", 0);
2330   Asm->OutStreamer.SwitchSection(TLOF.getDataSection());
2331   EmitLabel("data_begin", 0);
2332 }
2333
2334 /// emitDIE - Recusively Emits a debug information entry.
2335 ///
2336 void DwarfDebug::emitDIE(DIE *Die) {
2337   // Get the abbreviation for this DIE.
2338   unsigned AbbrevNumber = Die->getAbbrevNumber();
2339   const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
2340
2341   Asm->EOL();
2342
2343   // Emit the code (index) for the abbreviation.
2344   Asm->EmitULEB128Bytes(AbbrevNumber);
2345
2346   if (Asm->isVerbose())
2347     Asm->EOL(std::string("Abbrev [" +
2348                          utostr(AbbrevNumber) +
2349                          "] 0x" + utohexstr(Die->getOffset()) +
2350                          ":0x" + utohexstr(Die->getSize()) + " " +
2351                          dwarf::TagString(Abbrev->getTag())));
2352   else
2353     Asm->EOL();
2354
2355   SmallVector<DIEValue*, 32> &Values = Die->getValues();
2356   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
2357
2358   // Emit the DIE attribute values.
2359   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
2360     unsigned Attr = AbbrevData[i].getAttribute();
2361     unsigned Form = AbbrevData[i].getForm();
2362     assert(Form && "Too many attributes for DIE (check abbreviation)");
2363
2364     switch (Attr) {
2365     case dwarf::DW_AT_sibling:
2366       Asm->EmitInt32(Die->getSiblingOffset());
2367       break;
2368     case dwarf::DW_AT_abstract_origin: {
2369       DIEEntry *E = cast<DIEEntry>(Values[i]);
2370       DIE *Origin = E->getEntry();
2371       unsigned Addr = Origin->getOffset();
2372       Asm->EmitInt32(Addr);
2373       break;
2374     }
2375     default:
2376       // Emit an attribute using the defined form.
2377       Values[i]->EmitValue(this, Form);
2378       break;
2379     }
2380
2381     Asm->EOL(dwarf::AttributeString(Attr));
2382   }
2383
2384   // Emit the DIE children if any.
2385   if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
2386     const std::vector<DIE *> &Children = Die->getChildren();
2387
2388     for (unsigned j = 0, M = Children.size(); j < M; ++j)
2389       emitDIE(Children[j]);
2390
2391     Asm->EmitInt8(0); Asm->EOL("End Of Children Mark");
2392   }
2393 }
2394
2395 /// emitDebugInfo - Emit the debug info section.
2396 ///
2397 void DwarfDebug::emitDebugInfo() {
2398   // Start debug info section.
2399   Asm->OutStreamer.SwitchSection(
2400                             Asm->getObjFileLowering().getDwarfInfoSection());
2401   DIE *Die = ModuleCU->getCUDie();
2402
2403   // Emit the compile units header.
2404   EmitLabel("info_begin", ModuleCU->getID());
2405
2406   // Emit size of content not including length itself
2407   unsigned ContentSize = Die->getSize() +
2408     sizeof(int16_t) + // DWARF version number
2409     sizeof(int32_t) + // Offset Into Abbrev. Section
2410     sizeof(int8_t) +  // Pointer Size (in bytes)
2411     sizeof(int32_t);  // FIXME - extra pad for gdb bug.
2412
2413   Asm->EmitInt32(ContentSize);  Asm->EOL("Length of Compilation Unit Info");
2414   Asm->EmitInt16(dwarf::DWARF_VERSION); Asm->EOL("DWARF version number");
2415   EmitSectionOffset("abbrev_begin", "section_abbrev", 0, 0, true, false);
2416   Asm->EOL("Offset Into Abbrev. Section");
2417   Asm->EmitInt8(TD->getPointerSize()); Asm->EOL("Address Size (in bytes)");
2418
2419   emitDIE(Die);
2420   // FIXME - extra padding for gdb bug.
2421   Asm->EmitInt8(0); Asm->EOL("Extra Pad For GDB");
2422   Asm->EmitInt8(0); Asm->EOL("Extra Pad For GDB");
2423   Asm->EmitInt8(0); Asm->EOL("Extra Pad For GDB");
2424   Asm->EmitInt8(0); Asm->EOL("Extra Pad For GDB");
2425   EmitLabel("info_end", ModuleCU->getID());
2426
2427   Asm->EOL();
2428 }
2429
2430 /// emitAbbreviations - Emit the abbreviation section.
2431 ///
2432 void DwarfDebug::emitAbbreviations() const {
2433   // Check to see if it is worth the effort.
2434   if (!Abbreviations.empty()) {
2435     // Start the debug abbrev section.
2436     Asm->OutStreamer.SwitchSection(
2437                             Asm->getObjFileLowering().getDwarfAbbrevSection());
2438
2439     EmitLabel("abbrev_begin", 0);
2440
2441     // For each abbrevation.
2442     for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
2443       // Get abbreviation data
2444       const DIEAbbrev *Abbrev = Abbreviations[i];
2445
2446       // Emit the abbrevations code (base 1 index.)
2447       Asm->EmitULEB128Bytes(Abbrev->getNumber());
2448       Asm->EOL("Abbreviation Code");
2449
2450       // Emit the abbreviations data.
2451       Abbrev->Emit(Asm);
2452
2453       Asm->EOL();
2454     }
2455
2456     // Mark end of abbreviations.
2457     Asm->EmitULEB128Bytes(0); Asm->EOL("EOM(3)");
2458
2459     EmitLabel("abbrev_end", 0);
2460     Asm->EOL();
2461   }
2462 }
2463
2464 /// emitEndOfLineMatrix - Emit the last address of the section and the end of
2465 /// the line matrix.
2466 ///
2467 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2468   // Define last address of section.
2469   Asm->EmitInt8(0); Asm->EOL("Extended Op");
2470   Asm->EmitInt8(TD->getPointerSize() + 1); Asm->EOL("Op size");
2471   Asm->EmitInt8(dwarf::DW_LNE_set_address); Asm->EOL("DW_LNE_set_address");
2472   EmitReference("section_end", SectionEnd); Asm->EOL("Section end label");
2473
2474   // Mark end of matrix.
2475   Asm->EmitInt8(0); Asm->EOL("DW_LNE_end_sequence");
2476   Asm->EmitULEB128Bytes(1); Asm->EOL();
2477   Asm->EmitInt8(1); Asm->EOL();
2478 }
2479
2480 /// emitDebugLines - Emit source line information.
2481 ///
2482 void DwarfDebug::emitDebugLines() {
2483   // If the target is using .loc/.file, the assembler will be emitting the
2484   // .debug_line table automatically.
2485   if (MAI->hasDotLocAndDotFile())
2486     return;
2487
2488   // Minimum line delta, thus ranging from -10..(255-10).
2489   const int MinLineDelta = -(dwarf::DW_LNS_fixed_advance_pc + 1);
2490   // Maximum line delta, thus ranging from -10..(255-10).
2491   const int MaxLineDelta = 255 + MinLineDelta;
2492
2493   // Start the dwarf line section.
2494   Asm->OutStreamer.SwitchSection(
2495                             Asm->getObjFileLowering().getDwarfLineSection());
2496
2497   // Construct the section header.
2498   EmitDifference("line_end", 0, "line_begin", 0, true);
2499   Asm->EOL("Length of Source Line Info");
2500   EmitLabel("line_begin", 0);
2501
2502   Asm->EmitInt16(dwarf::DWARF_VERSION); Asm->EOL("DWARF version number");
2503
2504   EmitDifference("line_prolog_end", 0, "line_prolog_begin", 0, true);
2505   Asm->EOL("Prolog Length");
2506   EmitLabel("line_prolog_begin", 0);
2507
2508   Asm->EmitInt8(1); Asm->EOL("Minimum Instruction Length");
2509
2510   Asm->EmitInt8(1); Asm->EOL("Default is_stmt_start flag");
2511
2512   Asm->EmitInt8(MinLineDelta); Asm->EOL("Line Base Value (Special Opcodes)");
2513
2514   Asm->EmitInt8(MaxLineDelta); Asm->EOL("Line Range Value (Special Opcodes)");
2515
2516   Asm->EmitInt8(-MinLineDelta); Asm->EOL("Special Opcode Base");
2517
2518   // Line number standard opcode encodings argument count
2519   Asm->EmitInt8(0); Asm->EOL("DW_LNS_copy arg count");
2520   Asm->EmitInt8(1); Asm->EOL("DW_LNS_advance_pc arg count");
2521   Asm->EmitInt8(1); Asm->EOL("DW_LNS_advance_line arg count");
2522   Asm->EmitInt8(1); Asm->EOL("DW_LNS_set_file arg count");
2523   Asm->EmitInt8(1); Asm->EOL("DW_LNS_set_column arg count");
2524   Asm->EmitInt8(0); Asm->EOL("DW_LNS_negate_stmt arg count");
2525   Asm->EmitInt8(0); Asm->EOL("DW_LNS_set_basic_block arg count");
2526   Asm->EmitInt8(0); Asm->EOL("DW_LNS_const_add_pc arg count");
2527   Asm->EmitInt8(1); Asm->EOL("DW_LNS_fixed_advance_pc arg count");
2528
2529   // Emit directories.
2530   for (unsigned DI = 1, DE = getNumSourceDirectories()+1; DI != DE; ++DI) {
2531     Asm->EmitString(getSourceDirectoryName(DI));
2532     Asm->EOL("Directory");
2533   }
2534
2535   Asm->EmitInt8(0); Asm->EOL("End of directories");
2536
2537   // Emit files.
2538   for (unsigned SI = 1, SE = getNumSourceIds()+1; SI != SE; ++SI) {
2539     // Remember source id starts at 1.
2540     std::pair<unsigned, unsigned> Id = getSourceDirectoryAndFileIds(SI);
2541     Asm->EmitString(getSourceFileName(Id.second));
2542     Asm->EOL("Source");
2543     Asm->EmitULEB128Bytes(Id.first);
2544     Asm->EOL("Directory #");
2545     Asm->EmitULEB128Bytes(0);
2546     Asm->EOL("Mod date");
2547     Asm->EmitULEB128Bytes(0);
2548     Asm->EOL("File size");
2549   }
2550
2551   Asm->EmitInt8(0); Asm->EOL("End of files");
2552
2553   EmitLabel("line_prolog_end", 0);
2554
2555   // A sequence for each text section.
2556   unsigned SecSrcLinesSize = SectionSourceLines.size();
2557
2558   for (unsigned j = 0; j < SecSrcLinesSize; ++j) {
2559     // Isolate current sections line info.
2560     const std::vector<SrcLineInfo> &LineInfos = SectionSourceLines[j];
2561
2562     /*if (Asm->isVerbose()) {
2563       const MCSection *S = SectionMap[j + 1];
2564       O << '\t' << MAI->getCommentString() << " Section"
2565         << S->getName() << '\n';
2566     }*/
2567     Asm->EOL();
2568
2569     // Dwarf assumes we start with first line of first source file.
2570     unsigned Source = 1;
2571     unsigned Line = 1;
2572
2573     // Construct rows of the address, source, line, column matrix.
2574     for (unsigned i = 0, N = LineInfos.size(); i < N; ++i) {
2575       const SrcLineInfo &LineInfo = LineInfos[i];
2576       unsigned LabelID = MMI->MappedLabel(LineInfo.getLabelID());
2577       if (!LabelID) continue;
2578
2579       if (LineInfo.getLine() == 0) continue;
2580
2581       if (!Asm->isVerbose())
2582         Asm->EOL();
2583       else {
2584         std::pair<unsigned, unsigned> SourceID =
2585           getSourceDirectoryAndFileIds(LineInfo.getSourceID());
2586         O << '\t' << MAI->getCommentString() << ' '
2587           << getSourceDirectoryName(SourceID.first) << '/'
2588           << getSourceFileName(SourceID.second)
2589           << ':' << utostr_32(LineInfo.getLine()) << '\n';
2590       }
2591
2592       // Define the line address.
2593       Asm->EmitInt8(0); Asm->EOL("Extended Op");
2594       Asm->EmitInt8(TD->getPointerSize() + 1); Asm->EOL("Op size");
2595       Asm->EmitInt8(dwarf::DW_LNE_set_address); Asm->EOL("DW_LNE_set_address");
2596       EmitReference("label",  LabelID); Asm->EOL("Location label");
2597
2598       // If change of source, then switch to the new source.
2599       if (Source != LineInfo.getSourceID()) {
2600         Source = LineInfo.getSourceID();
2601         Asm->EmitInt8(dwarf::DW_LNS_set_file); Asm->EOL("DW_LNS_set_file");
2602         Asm->EmitULEB128Bytes(Source); Asm->EOL("New Source");
2603       }
2604
2605       // If change of line.
2606       if (Line != LineInfo.getLine()) {
2607         // Determine offset.
2608         int Offset = LineInfo.getLine() - Line;
2609         int Delta = Offset - MinLineDelta;
2610
2611         // Update line.
2612         Line = LineInfo.getLine();
2613
2614         // If delta is small enough and in range...
2615         if (Delta >= 0 && Delta < (MaxLineDelta - 1)) {
2616           // ... then use fast opcode.
2617           Asm->EmitInt8(Delta - MinLineDelta); Asm->EOL("Line Delta");
2618         } else {
2619           // ... otherwise use long hand.
2620           Asm->EmitInt8(dwarf::DW_LNS_advance_line);
2621           Asm->EOL("DW_LNS_advance_line");
2622           Asm->EmitSLEB128Bytes(Offset); Asm->EOL("Line Offset");
2623           Asm->EmitInt8(dwarf::DW_LNS_copy); Asm->EOL("DW_LNS_copy");
2624         }
2625       } else {
2626         // Copy the previous row (different address or source)
2627         Asm->EmitInt8(dwarf::DW_LNS_copy); Asm->EOL("DW_LNS_copy");
2628       }
2629     }
2630
2631     emitEndOfLineMatrix(j + 1);
2632   }
2633
2634   if (SecSrcLinesSize == 0)
2635     // Because we're emitting a debug_line section, we still need a line
2636     // table. The linker and friends expect it to exist. If there's nothing to
2637     // put into it, emit an empty table.
2638     emitEndOfLineMatrix(1);
2639
2640   EmitLabel("line_end", 0);
2641   Asm->EOL();
2642 }
2643
2644 /// emitCommonDebugFrame - Emit common frame info into a debug frame section.
2645 ///
2646 void DwarfDebug::emitCommonDebugFrame() {
2647   if (!MAI->doesDwarfRequireFrameSection())
2648     return;
2649
2650   int stackGrowth =
2651     Asm->TM.getFrameInfo()->getStackGrowthDirection() ==
2652       TargetFrameInfo::StackGrowsUp ?
2653     TD->getPointerSize() : -TD->getPointerSize();
2654
2655   // Start the dwarf frame section.
2656   Asm->OutStreamer.SwitchSection(
2657                               Asm->getObjFileLowering().getDwarfFrameSection());
2658
2659   EmitLabel("debug_frame_common", 0);
2660   EmitDifference("debug_frame_common_end", 0,
2661                  "debug_frame_common_begin", 0, true);
2662   Asm->EOL("Length of Common Information Entry");
2663
2664   EmitLabel("debug_frame_common_begin", 0);
2665   Asm->EmitInt32((int)dwarf::DW_CIE_ID);
2666   Asm->EOL("CIE Identifier Tag");
2667   Asm->EmitInt8(dwarf::DW_CIE_VERSION);
2668   Asm->EOL("CIE Version");
2669   Asm->EmitString("");
2670   Asm->EOL("CIE Augmentation");
2671   Asm->EmitULEB128Bytes(1);
2672   Asm->EOL("CIE Code Alignment Factor");
2673   Asm->EmitSLEB128Bytes(stackGrowth);
2674   Asm->EOL("CIE Data Alignment Factor");
2675   Asm->EmitInt8(RI->getDwarfRegNum(RI->getRARegister(), false));
2676   Asm->EOL("CIE RA Column");
2677
2678   std::vector<MachineMove> Moves;
2679   RI->getInitialFrameState(Moves);
2680
2681   EmitFrameMoves(NULL, 0, Moves, false);
2682
2683   Asm->EmitAlignment(2, 0, 0, false);
2684   EmitLabel("debug_frame_common_end", 0);
2685
2686   Asm->EOL();
2687 }
2688
2689 /// emitFunctionDebugFrame - Emit per function frame info into a debug frame
2690 /// section.
2691 void
2692 DwarfDebug::emitFunctionDebugFrame(const FunctionDebugFrameInfo&DebugFrameInfo){
2693   if (!MAI->doesDwarfRequireFrameSection())
2694     return;
2695
2696   // Start the dwarf frame section.
2697   Asm->OutStreamer.SwitchSection(
2698                               Asm->getObjFileLowering().getDwarfFrameSection());
2699
2700   EmitDifference("debug_frame_end", DebugFrameInfo.Number,
2701                  "debug_frame_begin", DebugFrameInfo.Number, true);
2702   Asm->EOL("Length of Frame Information Entry");
2703
2704   EmitLabel("debug_frame_begin", DebugFrameInfo.Number);
2705
2706   EmitSectionOffset("debug_frame_common", "section_debug_frame",
2707                     0, 0, true, false);
2708   Asm->EOL("FDE CIE offset");
2709
2710   EmitReference("func_begin", DebugFrameInfo.Number);
2711   Asm->EOL("FDE initial location");
2712   EmitDifference("func_end", DebugFrameInfo.Number,
2713                  "func_begin", DebugFrameInfo.Number);
2714   Asm->EOL("FDE address range");
2715
2716   EmitFrameMoves("func_begin", DebugFrameInfo.Number, DebugFrameInfo.Moves,
2717                  false);
2718
2719   Asm->EmitAlignment(2, 0, 0, false);
2720   EmitLabel("debug_frame_end", DebugFrameInfo.Number);
2721
2722   Asm->EOL();
2723 }
2724
2725 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
2726 ///
2727 void DwarfDebug::emitDebugPubNames() {
2728   // Start the dwarf pubnames section.
2729   Asm->OutStreamer.SwitchSection(
2730                           Asm->getObjFileLowering().getDwarfPubNamesSection());
2731
2732   EmitDifference("pubnames_end", ModuleCU->getID(),
2733                  "pubnames_begin", ModuleCU->getID(), true);
2734   Asm->EOL("Length of Public Names Info");
2735
2736   EmitLabel("pubnames_begin", ModuleCU->getID());
2737
2738   Asm->EmitInt16(dwarf::DWARF_VERSION); Asm->EOL("DWARF Version");
2739
2740   EmitSectionOffset("info_begin", "section_info",
2741                     ModuleCU->getID(), 0, true, false);
2742   Asm->EOL("Offset of Compilation Unit Info");
2743
2744   EmitDifference("info_end", ModuleCU->getID(), "info_begin", ModuleCU->getID(),
2745                  true);
2746   Asm->EOL("Compilation Unit Length");
2747
2748   const StringMap<DIE*> &Globals = ModuleCU->getGlobals();
2749   for (StringMap<DIE*>::const_iterator
2750          GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2751     const char *Name = GI->getKeyData();
2752     DIE * Entity = GI->second;
2753
2754     Asm->EmitInt32(Entity->getOffset()); Asm->EOL("DIE offset");
2755     Asm->EmitString(Name, strlen(Name)); Asm->EOL("External Name");
2756   }
2757
2758   Asm->EmitInt32(0); Asm->EOL("End Mark");
2759   EmitLabel("pubnames_end", ModuleCU->getID());
2760
2761   Asm->EOL();
2762 }
2763
2764 void DwarfDebug::emitDebugPubTypes() {
2765   // Start the dwarf pubnames section.
2766   Asm->OutStreamer.SwitchSection(
2767                           Asm->getObjFileLowering().getDwarfPubTypesSection());
2768   EmitDifference("pubtypes_end", ModuleCU->getID(),
2769                  "pubtypes_begin", ModuleCU->getID(), true);
2770   Asm->EOL("Length of Public Types Info");
2771
2772   EmitLabel("pubtypes_begin", ModuleCU->getID());
2773
2774   Asm->EmitInt16(dwarf::DWARF_VERSION); Asm->EOL("DWARF Version");
2775
2776   EmitSectionOffset("info_begin", "section_info",
2777                     ModuleCU->getID(), 0, true, false);
2778   Asm->EOL("Offset of Compilation ModuleCU Info");
2779
2780   EmitDifference("info_end", ModuleCU->getID(), "info_begin", ModuleCU->getID(),
2781                  true);
2782   Asm->EOL("Compilation ModuleCU Length");
2783
2784   const StringMap<DIE*> &Globals = ModuleCU->getGlobalTypes();
2785   for (StringMap<DIE*>::const_iterator
2786          GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2787     const char *Name = GI->getKeyData();
2788     DIE * Entity = GI->second;
2789
2790     Asm->EmitInt32(Entity->getOffset()); Asm->EOL("DIE offset");
2791     Asm->EmitString(Name, strlen(Name)); Asm->EOL("External Name");
2792   }
2793
2794   Asm->EmitInt32(0); Asm->EOL("End Mark");
2795   EmitLabel("pubtypes_end", ModuleCU->getID());
2796
2797   Asm->EOL();
2798 }
2799
2800 /// emitDebugStr - Emit visible names into a debug str section.
2801 ///
2802 void DwarfDebug::emitDebugStr() {
2803   // Check to see if it is worth the effort.
2804   if (!StringPool.empty()) {
2805     // Start the dwarf str section.
2806     Asm->OutStreamer.SwitchSection(
2807                                 Asm->getObjFileLowering().getDwarfStrSection());
2808
2809     // For each of strings in the string pool.
2810     for (unsigned StringID = 1, N = StringPool.size();
2811          StringID <= N; ++StringID) {
2812       // Emit a label for reference from debug information entries.
2813       EmitLabel("string", StringID);
2814
2815       // Emit the string itself.
2816       const std::string &String = StringPool[StringID];
2817       Asm->EmitString(String); Asm->EOL();
2818     }
2819
2820     Asm->EOL();
2821   }
2822 }
2823
2824 /// emitDebugLoc - Emit visible names into a debug loc section.
2825 ///
2826 void DwarfDebug::emitDebugLoc() {
2827   // Start the dwarf loc section.
2828   Asm->OutStreamer.SwitchSection(
2829                               Asm->getObjFileLowering().getDwarfLocSection());
2830   Asm->EOL();
2831 }
2832
2833 /// EmitDebugARanges - Emit visible names into a debug aranges section.
2834 ///
2835 void DwarfDebug::EmitDebugARanges() {
2836   // Start the dwarf aranges section.
2837   Asm->OutStreamer.SwitchSection(
2838                           Asm->getObjFileLowering().getDwarfARangesSection());
2839
2840   // FIXME - Mock up
2841 #if 0
2842   CompileUnit *Unit = GetBaseCompileUnit();
2843
2844   // Don't include size of length
2845   Asm->EmitInt32(0x1c); Asm->EOL("Length of Address Ranges Info");
2846
2847   Asm->EmitInt16(dwarf::DWARF_VERSION); Asm->EOL("Dwarf Version");
2848
2849   EmitReference("info_begin", Unit->getID());
2850   Asm->EOL("Offset of Compilation Unit Info");
2851
2852   Asm->EmitInt8(TD->getPointerSize()); Asm->EOL("Size of Address");
2853
2854   Asm->EmitInt8(0); Asm->EOL("Size of Segment Descriptor");
2855
2856   Asm->EmitInt16(0);  Asm->EOL("Pad (1)");
2857   Asm->EmitInt16(0);  Asm->EOL("Pad (2)");
2858
2859   // Range 1
2860   EmitReference("text_begin", 0); Asm->EOL("Address");
2861   EmitDifference("text_end", 0, "text_begin", 0, true); Asm->EOL("Length");
2862
2863   Asm->EmitInt32(0); Asm->EOL("EOM (1)");
2864   Asm->EmitInt32(0); Asm->EOL("EOM (2)");
2865 #endif
2866
2867   Asm->EOL();
2868 }
2869
2870 /// emitDebugRanges - Emit visible names into a debug ranges section.
2871 ///
2872 void DwarfDebug::emitDebugRanges() {
2873   // Start the dwarf ranges section.
2874   Asm->OutStreamer.SwitchSection(
2875                             Asm->getObjFileLowering().getDwarfRangesSection());
2876   Asm->EOL();
2877 }
2878
2879 /// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2880 ///
2881 void DwarfDebug::emitDebugMacInfo() {
2882   if (const MCSection *LineInfo =
2883       Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2884     // Start the dwarf macinfo section.
2885     Asm->OutStreamer.SwitchSection(LineInfo);
2886     Asm->EOL();
2887   }
2888 }
2889
2890 /// emitDebugInlineInfo - Emit inline info using following format.
2891 /// Section Header:
2892 /// 1. length of section
2893 /// 2. Dwarf version number
2894 /// 3. address size.
2895 ///
2896 /// Entries (one "entry" for each function that was inlined):
2897 ///
2898 /// 1. offset into __debug_str section for MIPS linkage name, if exists;
2899 ///   otherwise offset into __debug_str for regular function name.
2900 /// 2. offset into __debug_str section for regular function name.
2901 /// 3. an unsigned LEB128 number indicating the number of distinct inlining
2902 /// instances for the function.
2903 ///
2904 /// The rest of the entry consists of a {die_offset, low_pc} pair for each
2905 /// inlined instance; the die_offset points to the inlined_subroutine die in the
2906 /// __debug_info section, and the low_pc is the starting address for the
2907 /// inlining instance.
2908 void DwarfDebug::emitDebugInlineInfo() {
2909   if (!MAI->doesDwarfUsesInlineInfoSection())
2910     return;
2911
2912   if (!ModuleCU)
2913     return;
2914
2915   Asm->OutStreamer.SwitchSection(
2916                         Asm->getObjFileLowering().getDwarfDebugInlineSection());
2917   Asm->EOL();
2918   EmitDifference("debug_inlined_end", 1,
2919                  "debug_inlined_begin", 1, true);
2920   Asm->EOL("Length of Debug Inlined Information Entry");
2921
2922   EmitLabel("debug_inlined_begin", 1);
2923
2924   Asm->EmitInt16(dwarf::DWARF_VERSION); Asm->EOL("Dwarf Version");
2925   Asm->EmitInt8(TD->getPointerSize()); Asm->EOL("Address Size (in bytes)");
2926
2927   for (SmallVector<MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2928          E = InlinedSPNodes.end(); I != E; ++I) {
2929
2930     MDNode *Node = *I;
2931     ValueMap<MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2932       = InlineInfo.find(Node);
2933     SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2934     DISubprogram SP(Node);
2935     StringRef LName = SP.getLinkageName();
2936     StringRef Name = SP.getName();
2937
2938     if (LName.empty())
2939       Asm->EmitString(Name);
2940     else {
2941       // Skip special LLVM prefix that is used to inform the asm printer to not
2942       // emit usual symbol prefix before the symbol name. This happens for
2943       // Objective-C symbol names and symbol whose name is replaced using GCC's
2944       // __asm__ attribute.
2945       if (LName[0] == 1)
2946         LName = LName.substr(1);
2947       EmitSectionOffset("string", "section_str",
2948                         StringPool.idFor(LName), false, true);
2949
2950     }
2951     Asm->EOL("MIPS linkage name");
2952     EmitSectionOffset("string", "section_str",
2953                       StringPool.idFor(Name), false, true);
2954     Asm->EOL("Function name");
2955     Asm->EmitULEB128Bytes(Labels.size()); Asm->EOL("Inline count");
2956
2957     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2958            LE = Labels.end(); LI != LE; ++LI) {
2959       DIE *SP = LI->second;
2960       Asm->EmitInt32(SP->getOffset()); Asm->EOL("DIE offset");
2961
2962       if (TD->getPointerSize() == sizeof(int32_t))
2963         O << MAI->getData32bitsDirective();
2964       else
2965         O << MAI->getData64bitsDirective();
2966
2967       PrintLabelName("label", LI->first); Asm->EOL("low_pc");
2968     }
2969   }
2970
2971   EmitLabel("debug_inlined_end", 1);
2972   Asm->EOL();
2973 }