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