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