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