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