DwarfCompileUnit.cpp revision 00ece1b846536cb2ba4efefa6e6194c7030e4c63
1//===-- llvm/CodeGen/DwarfCompileUnit.cpp - Dwarf Compile Unit ------------===//
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 constructing a dwarf compile unit.
11//
12//===----------------------------------------------------------------------===//
13
14#define DEBUG_TYPE "dwarfdebug"
15
16#include "DwarfCompileUnit.h"
17#include "DwarfAccelTable.h"
18#include "DwarfDebug.h"
19#include "llvm/ADT/APFloat.h"
20#include "llvm/DIBuilder.h"
21#include "llvm/IR/Constants.h"
22#include "llvm/IR/DataLayout.h"
23#include "llvm/IR/GlobalVariable.h"
24#include "llvm/IR/Instructions.h"
25#include "llvm/Support/Debug.h"
26#include "llvm/Support/ErrorHandling.h"
27#include "llvm/Target/Mangler.h"
28#include "llvm/Target/TargetFrameLowering.h"
29#include "llvm/Target/TargetMachine.h"
30#include "llvm/Target/TargetRegisterInfo.h"
31
32using namespace llvm;
33
34/// CompileUnit - Compile unit constructor.
35CompileUnit::CompileUnit(unsigned UID, unsigned L, DIE *D, AsmPrinter *A,
36                         DwarfDebug *DW, DwarfUnits *DWU)
37  : UniqueID(UID), Language(L), CUDie(D), Asm(A), DD(DW), DU(DWU),
38    IndexTyDie(0) {
39  DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
40}
41
42/// ~CompileUnit - Destructor for compile unit.
43CompileUnit::~CompileUnit() {
44  for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
45    DIEBlocks[j]->~DIEBlock();
46}
47
48/// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
49/// information entry.
50DIEEntry *CompileUnit::createDIEEntry(DIE *Entry) {
51  DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry);
52  return Value;
53}
54
55/// getDefaultLowerBound - Return the default lower bound for an array. If the
56/// DWARF version doesn't handle the language, return -1.
57int64_t CompileUnit::getDefaultLowerBound() const {
58  switch (Language) {
59  default:
60    break;
61
62  case dwarf::DW_LANG_C89:
63  case dwarf::DW_LANG_C99:
64  case dwarf::DW_LANG_C:
65  case dwarf::DW_LANG_C_plus_plus:
66  case dwarf::DW_LANG_ObjC:
67  case dwarf::DW_LANG_ObjC_plus_plus:
68    return 0;
69
70  case dwarf::DW_LANG_Fortran77:
71  case dwarf::DW_LANG_Fortran90:
72  case dwarf::DW_LANG_Fortran95:
73    return 1;
74
75  // The languages below have valid values only if the DWARF version >= 4.
76  case dwarf::DW_LANG_Java:
77  case dwarf::DW_LANG_Python:
78  case dwarf::DW_LANG_UPC:
79  case dwarf::DW_LANG_D:
80    if (dwarf::DWARF_VERSION >= 4)
81      return 0;
82    break;
83
84  case dwarf::DW_LANG_Ada83:
85  case dwarf::DW_LANG_Ada95:
86  case dwarf::DW_LANG_Cobol74:
87  case dwarf::DW_LANG_Cobol85:
88  case dwarf::DW_LANG_Modula2:
89  case dwarf::DW_LANG_Pascal83:
90  case dwarf::DW_LANG_PLI:
91    if (dwarf::DWARF_VERSION >= 4)
92      return 1;
93    break;
94  }
95
96  return -1;
97}
98
99/// addFlag - Add a flag that is true.
100void CompileUnit::addFlag(DIE *Die, unsigned Attribute) {
101  if (!DD->useDarwinGDBCompat())
102    Die->addValue(Attribute, dwarf::DW_FORM_flag_present,
103                  DIEIntegerOne);
104  else
105    addUInt(Die, Attribute, dwarf::DW_FORM_flag, 1);
106}
107
108/// addUInt - Add an unsigned integer attribute data and value.
109///
110void CompileUnit::addUInt(DIE *Die, unsigned Attribute,
111                          unsigned Form, uint64_t Integer) {
112  if (!Form) Form = DIEInteger::BestForm(false, Integer);
113  DIEValue *Value = Integer == 1 ?
114    DIEIntegerOne : new (DIEValueAllocator) DIEInteger(Integer);
115  Die->addValue(Attribute, Form, Value);
116}
117
118/// addSInt - Add an signed integer attribute data and value.
119///
120void CompileUnit::addSInt(DIE *Die, unsigned Attribute,
121                          unsigned Form, int64_t Integer) {
122  if (!Form) Form = DIEInteger::BestForm(true, Integer);
123  DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
124  Die->addValue(Attribute, Form, Value);
125}
126
127/// addString - Add a string attribute data and value. We always emit a
128/// reference to the string pool instead of immediate strings so that DIEs have
129/// more predictable sizes.
130void CompileUnit::addString(DIE *Die, unsigned Attribute, StringRef String) {
131  MCSymbol *Symb = DU->getStringPoolEntry(String);
132  DIEValue *Value;
133  if (Asm->needsRelocationsForDwarfStringPool())
134    Value = new (DIEValueAllocator) DIELabel(Symb);
135  else {
136    MCSymbol *StringPool = DU->getStringPoolSym();
137    Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
138  }
139  Die->addValue(Attribute, dwarf::DW_FORM_strp, Value);
140}
141
142/// addLabel - Add a Dwarf label attribute data and value.
143///
144void CompileUnit::addLabel(DIE *Die, unsigned Attribute, unsigned Form,
145                           const MCSymbol *Label) {
146  DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
147  Die->addValue(Attribute, Form, Value);
148}
149
150/// addDelta - Add a label delta attribute data and value.
151///
152void CompileUnit::addDelta(DIE *Die, unsigned Attribute, unsigned Form,
153                           const MCSymbol *Hi, const MCSymbol *Lo) {
154  DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
155  Die->addValue(Attribute, Form, Value);
156}
157
158/// addDIEEntry - Add a DIE attribute data and value.
159///
160void CompileUnit::addDIEEntry(DIE *Die, unsigned Attribute, unsigned Form,
161                              DIE *Entry) {
162  Die->addValue(Attribute, Form, createDIEEntry(Entry));
163}
164
165/// addBlock - Add block data.
166///
167void CompileUnit::addBlock(DIE *Die, unsigned Attribute, unsigned Form,
168                           DIEBlock *Block) {
169  Block->ComputeSize(Asm);
170  DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
171  Die->addValue(Attribute, Block->BestForm(), Block);
172}
173
174/// addSourceLine - Add location information to specified debug information
175/// entry.
176void CompileUnit::addSourceLine(DIE *Die, DIVariable V) {
177  // Verify variable.
178  if (!V.Verify())
179    return;
180
181  unsigned Line = V.getLineNumber();
182  if (Line == 0)
183    return;
184  unsigned FileID = DD->getOrCreateSourceID(V.getContext().getFilename(),
185                                            V.getContext().getDirectory());
186  assert(FileID && "Invalid file id");
187  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
188  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
189}
190
191/// addSourceLine - Add location information to specified debug information
192/// entry.
193void CompileUnit::addSourceLine(DIE *Die, DIGlobalVariable G) {
194  // Verify global variable.
195  if (!G.Verify())
196    return;
197
198  unsigned Line = G.getLineNumber();
199  if (Line == 0)
200    return;
201  unsigned FileID = DD->getOrCreateSourceID(G.getFilename(), G.getDirectory());
202  assert(FileID && "Invalid file id");
203  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
204  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
205}
206
207/// addSourceLine - Add location information to specified debug information
208/// entry.
209void CompileUnit::addSourceLine(DIE *Die, DISubprogram SP) {
210  // Verify subprogram.
211  if (!SP.Verify())
212    return;
213
214  // If the line number is 0, don't add it.
215  unsigned Line = SP.getLineNumber();
216  if (Line == 0)
217    return;
218
219  unsigned FileID = DD->getOrCreateSourceID(SP.getFilename(),
220                                            SP.getDirectory());
221  assert(FileID && "Invalid file id");
222  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
223  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
224}
225
226/// addSourceLine - Add location information to specified debug information
227/// entry.
228void CompileUnit::addSourceLine(DIE *Die, DIType Ty) {
229  // Verify type.
230  if (!Ty.Verify())
231    return;
232
233  unsigned Line = Ty.getLineNumber();
234  if (Line == 0)
235    return;
236  unsigned FileID = DD->getOrCreateSourceID(Ty.getFilename(),
237                                            Ty.getDirectory());
238  assert(FileID && "Invalid file id");
239  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
240  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
241}
242
243/// addSourceLine - Add location information to specified debug information
244/// entry.
245void CompileUnit::addSourceLine(DIE *Die, DIObjCProperty Ty) {
246  // Verify type.
247  if (!Ty.Verify())
248    return;
249
250  unsigned Line = Ty.getLineNumber();
251  if (Line == 0)
252    return;
253  DIFile File = Ty.getFile();
254  unsigned FileID = DD->getOrCreateSourceID(File.getFilename(),
255                                            File.getDirectory());
256  assert(FileID && "Invalid file id");
257  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
258  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
259}
260
261/// addSourceLine - Add location information to specified debug information
262/// entry.
263void CompileUnit::addSourceLine(DIE *Die, DINameSpace NS) {
264  // Verify namespace.
265  if (!NS.Verify())
266    return;
267
268  unsigned Line = NS.getLineNumber();
269  if (Line == 0)
270    return;
271  StringRef FN = NS.getFilename();
272
273  unsigned FileID = DD->getOrCreateSourceID(FN, NS.getDirectory());
274  assert(FileID && "Invalid file id");
275  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
276  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
277}
278
279/// addVariableAddress - Add DW_AT_location attribute for a
280/// DbgVariable based on provided MachineLocation.
281void CompileUnit::addVariableAddress(DbgVariable *&DV, DIE *Die,
282                                     MachineLocation Location) {
283  if (DV->variableHasComplexAddress())
284    addComplexAddress(DV, Die, dwarf::DW_AT_location, Location);
285  else if (DV->isBlockByrefVariable())
286    addBlockByrefAddress(DV, Die, dwarf::DW_AT_location, Location);
287  else
288    addAddress(Die, dwarf::DW_AT_location, Location);
289}
290
291/// addRegisterOp - Add register operand.
292void CompileUnit::addRegisterOp(DIE *TheDie, unsigned Reg) {
293  const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
294  unsigned DWReg = RI->getDwarfRegNum(Reg, false);
295  if (DWReg < 32)
296    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
297  else {
298    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
299    addUInt(TheDie, 0, dwarf::DW_FORM_udata, DWReg);
300  }
301}
302
303/// addRegisterOffset - Add register offset.
304void CompileUnit::addRegisterOffset(DIE *TheDie, unsigned Reg,
305                                    int64_t Offset) {
306  const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
307  unsigned DWReg = RI->getDwarfRegNum(Reg, false);
308  const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
309  if (Reg == TRI->getFrameRegister(*Asm->MF))
310    // If variable offset is based in frame register then use fbreg.
311    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
312  else if (DWReg < 32)
313    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
314  else {
315    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
316    addUInt(TheDie, 0, dwarf::DW_FORM_udata, DWReg);
317  }
318  addSInt(TheDie, 0, dwarf::DW_FORM_sdata, Offset);
319}
320
321/// addAddress - Add an address attribute to a die based on the location
322/// provided.
323void CompileUnit::addAddress(DIE *Die, unsigned Attribute,
324                             const MachineLocation &Location) {
325  DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
326
327  if (Location.isReg())
328    addRegisterOp(Block, Location.getReg());
329  else
330    addRegisterOffset(Block, Location.getReg(), Location.getOffset());
331
332  // Now attach the location information to the DIE.
333  addBlock(Die, Attribute, 0, Block);
334}
335
336/// addComplexAddress - Start with the address based on the location provided,
337/// and generate the DWARF information necessary to find the actual variable
338/// given the extra address information encoded in the DIVariable, starting from
339/// the starting location.  Add the DWARF information to the die.
340///
341void CompileUnit::addComplexAddress(DbgVariable *&DV, DIE *Die,
342                                    unsigned Attribute,
343                                    const MachineLocation &Location) {
344  DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
345  unsigned N = DV->getNumAddrElements();
346  unsigned i = 0;
347  if (Location.isReg()) {
348    if (N >= 2 && DV->getAddrElement(0) == DIBuilder::OpPlus) {
349      // If first address element is OpPlus then emit
350      // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
351      addRegisterOffset(Block, Location.getReg(), DV->getAddrElement(1));
352      i = 2;
353    } else
354      addRegisterOp(Block, Location.getReg());
355  }
356  else
357    addRegisterOffset(Block, Location.getReg(), Location.getOffset());
358
359  for (;i < N; ++i) {
360    uint64_t Element = DV->getAddrElement(i);
361    if (Element == DIBuilder::OpPlus) {
362      addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
363      addUInt(Block, 0, dwarf::DW_FORM_udata, DV->getAddrElement(++i));
364    } else if (Element == DIBuilder::OpDeref) {
365      if (!Location.isReg())
366        addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
367    } else llvm_unreachable("unknown DIBuilder Opcode");
368  }
369
370  // Now attach the location information to the DIE.
371  addBlock(Die, Attribute, 0, Block);
372}
373
374/* Byref variables, in Blocks, are declared by the programmer as "SomeType
375   VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
376   gives the variable VarName either the struct, or a pointer to the struct, as
377   its type.  This is necessary for various behind-the-scenes things the
378   compiler needs to do with by-reference variables in Blocks.
379
380   However, as far as the original *programmer* is concerned, the variable
381   should still have type 'SomeType', as originally declared.
382
383   The function getBlockByrefType dives into the __Block_byref_x_VarName
384   struct to find the original type of the variable, which is then assigned to
385   the variable's Debug Information Entry as its real type.  So far, so good.
386   However now the debugger will expect the variable VarName to have the type
387   SomeType.  So we need the location attribute for the variable to be an
388   expression that explains to the debugger how to navigate through the
389   pointers and struct to find the actual variable of type SomeType.
390
391   The following function does just that.  We start by getting
392   the "normal" location for the variable. This will be the location
393   of either the struct __Block_byref_x_VarName or the pointer to the
394   struct __Block_byref_x_VarName.
395
396   The struct will look something like:
397
398   struct __Block_byref_x_VarName {
399     ... <various fields>
400     struct __Block_byref_x_VarName *forwarding;
401     ... <various other fields>
402     SomeType VarName;
403     ... <maybe more fields>
404   };
405
406   If we are given the struct directly (as our starting point) we
407   need to tell the debugger to:
408
409   1).  Add the offset of the forwarding field.
410
411   2).  Follow that pointer to get the real __Block_byref_x_VarName
412   struct to use (the real one may have been copied onto the heap).
413
414   3).  Add the offset for the field VarName, to find the actual variable.
415
416   If we started with a pointer to the struct, then we need to
417   dereference that pointer first, before the other steps.
418   Translating this into DWARF ops, we will need to append the following
419   to the current location description for the variable:
420
421   DW_OP_deref                    -- optional, if we start with a pointer
422   DW_OP_plus_uconst <forward_fld_offset>
423   DW_OP_deref
424   DW_OP_plus_uconst <varName_fld_offset>
425
426   That is what this function does.  */
427
428/// addBlockByrefAddress - Start with the address based on the location
429/// provided, and generate the DWARF information necessary to find the
430/// actual Block variable (navigating the Block struct) based on the
431/// starting location.  Add the DWARF information to the die.  For
432/// more information, read large comment just above here.
433///
434void CompileUnit::addBlockByrefAddress(DbgVariable *&DV, DIE *Die,
435                                       unsigned Attribute,
436                                       const MachineLocation &Location) {
437  DIType Ty = DV->getType();
438  DIType TmpTy = Ty;
439  unsigned Tag = Ty.getTag();
440  bool isPointer = false;
441
442  StringRef varName = DV->getName();
443
444  if (Tag == dwarf::DW_TAG_pointer_type) {
445    DIDerivedType DTy = DIDerivedType(Ty);
446    TmpTy = DTy.getTypeDerivedFrom();
447    isPointer = true;
448  }
449
450  DICompositeType blockStruct = DICompositeType(TmpTy);
451
452  // Find the __forwarding field and the variable field in the __Block_byref
453  // struct.
454  DIArray Fields = blockStruct.getTypeArray();
455  DIDescriptor varField = DIDescriptor();
456  DIDescriptor forwardingField = DIDescriptor();
457
458  for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
459    DIDescriptor Element = Fields.getElement(i);
460    DIDerivedType DT = DIDerivedType(Element);
461    StringRef fieldName = DT.getName();
462    if (fieldName == "__forwarding")
463      forwardingField = Element;
464    else if (fieldName == varName)
465      varField = Element;
466  }
467
468  // Get the offsets for the forwarding field and the variable field.
469  unsigned forwardingFieldOffset =
470    DIDerivedType(forwardingField).getOffsetInBits() >> 3;
471  unsigned varFieldOffset =
472    DIDerivedType(varField).getOffsetInBits() >> 3;
473
474  // Decode the original location, and use that as the start of the byref
475  // variable's location.
476  DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
477
478  if (Location.isReg())
479    addRegisterOp(Block, Location.getReg());
480  else
481    addRegisterOffset(Block, Location.getReg(), Location.getOffset());
482
483  // If we started with a pointer to the __Block_byref... struct, then
484  // the first thing we need to do is dereference the pointer (DW_OP_deref).
485  if (isPointer)
486    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
487
488  // Next add the offset for the '__forwarding' field:
489  // DW_OP_plus_uconst ForwardingFieldOffset.  Note there's no point in
490  // adding the offset if it's 0.
491  if (forwardingFieldOffset > 0) {
492    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
493    addUInt(Block, 0, dwarf::DW_FORM_udata, forwardingFieldOffset);
494  }
495
496  // Now dereference the __forwarding field to get to the real __Block_byref
497  // struct:  DW_OP_deref.
498  addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
499
500  // Now that we've got the real __Block_byref... struct, add the offset
501  // for the variable's field to get to the location of the actual variable:
502  // DW_OP_plus_uconst varFieldOffset.  Again, don't add if it's 0.
503  if (varFieldOffset > 0) {
504    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
505    addUInt(Block, 0, dwarf::DW_FORM_udata, varFieldOffset);
506  }
507
508  // Now attach the location information to the DIE.
509  addBlock(Die, Attribute, 0, Block);
510}
511
512/// isTypeSigned - Return true if the type is signed.
513static bool isTypeSigned(DIType Ty, int *SizeInBits) {
514  if (Ty.isDerivedType())
515    return isTypeSigned(DIDerivedType(Ty).getTypeDerivedFrom(), SizeInBits);
516  if (Ty.isBasicType())
517    if (DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed
518        || DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed_char) {
519      *SizeInBits = Ty.getSizeInBits();
520      return true;
521    }
522  return false;
523}
524
525/// addConstantValue - Add constant value entry in variable DIE.
526bool CompileUnit::addConstantValue(DIE *Die, const MachineOperand &MO,
527                                   DIType Ty) {
528  assert(MO.isImm() && "Invalid machine operand!");
529  DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
530  int SizeInBits = -1;
531  bool SignedConstant = isTypeSigned(Ty, &SizeInBits);
532  unsigned Form = SignedConstant ? dwarf::DW_FORM_sdata : dwarf::DW_FORM_udata;
533  switch (SizeInBits) {
534    case 8:  Form = dwarf::DW_FORM_data1; break;
535    case 16: Form = dwarf::DW_FORM_data2; break;
536    case 32: Form = dwarf::DW_FORM_data4; break;
537    case 64: Form = dwarf::DW_FORM_data8; break;
538    default: break;
539  }
540  SignedConstant ? addSInt(Block, 0, Form, MO.getImm())
541    : addUInt(Block, 0, Form, MO.getImm());
542
543  addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
544  return true;
545}
546
547/// addConstantFPValue - Add constant value entry in variable DIE.
548bool CompileUnit::addConstantFPValue(DIE *Die, const MachineOperand &MO) {
549  assert (MO.isFPImm() && "Invalid machine operand!");
550  DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
551  APFloat FPImm = MO.getFPImm()->getValueAPF();
552
553  // Get the raw data form of the floating point.
554  const APInt FltVal = FPImm.bitcastToAPInt();
555  const char *FltPtr = (const char*)FltVal.getRawData();
556
557  int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
558  bool LittleEndian = Asm->getDataLayout().isLittleEndian();
559  int Incr = (LittleEndian ? 1 : -1);
560  int Start = (LittleEndian ? 0 : NumBytes - 1);
561  int Stop = (LittleEndian ? NumBytes : -1);
562
563  // Output the constant to DWARF one byte at a time.
564  for (; Start != Stop; Start += Incr)
565    addUInt(Block, 0, dwarf::DW_FORM_data1,
566            (unsigned char)0xFF & FltPtr[Start]);
567
568  addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
569  return true;
570}
571
572/// addConstantValue - Add constant value entry in variable DIE.
573bool CompileUnit::addConstantValue(DIE *Die, const ConstantInt *CI,
574                                   bool Unsigned) {
575  unsigned CIBitWidth = CI->getBitWidth();
576  if (CIBitWidth <= 64) {
577    unsigned form = 0;
578    switch (CIBitWidth) {
579    case 8: form = dwarf::DW_FORM_data1; break;
580    case 16: form = dwarf::DW_FORM_data2; break;
581    case 32: form = dwarf::DW_FORM_data4; break;
582    case 64: form = dwarf::DW_FORM_data8; break;
583    default:
584      form = Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata;
585    }
586    if (Unsigned)
587      addUInt(Die, dwarf::DW_AT_const_value, form, CI->getZExtValue());
588    else
589      addSInt(Die, dwarf::DW_AT_const_value, form, CI->getSExtValue());
590    return true;
591  }
592
593  DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
594
595  // Get the raw data form of the large APInt.
596  const APInt Val = CI->getValue();
597  const uint64_t *Ptr64 = Val.getRawData();
598
599  int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
600  bool LittleEndian = Asm->getDataLayout().isLittleEndian();
601
602  // Output the constant to DWARF one byte at a time.
603  for (int i = 0; i < NumBytes; i++) {
604    uint8_t c;
605    if (LittleEndian)
606      c = Ptr64[i / 8] >> (8 * (i & 7));
607    else
608      c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
609    addUInt(Block, 0, dwarf::DW_FORM_data1, c);
610  }
611
612  addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
613  return true;
614}
615
616/// addTemplateParams - Add template parameters in buffer.
617void CompileUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
618  // Add template parameters.
619  for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
620    DIDescriptor Element = TParams.getElement(i);
621    if (Element.isTemplateTypeParameter())
622      Buffer.addChild(getOrCreateTemplateTypeParameterDIE(
623                        DITemplateTypeParameter(Element)));
624    else if (Element.isTemplateValueParameter())
625      Buffer.addChild(getOrCreateTemplateValueParameterDIE(
626                        DITemplateValueParameter(Element)));
627  }
628}
629
630/// addToContextOwner - Add Die into the list of its context owner's children.
631void CompileUnit::addToContextOwner(DIE *Die, DIDescriptor Context) {
632  if (Context.isType()) {
633    DIE *ContextDIE = getOrCreateTypeDIE(DIType(Context));
634    ContextDIE->addChild(Die);
635  } else if (Context.isNameSpace()) {
636    DIE *ContextDIE = getOrCreateNameSpace(DINameSpace(Context));
637    ContextDIE->addChild(Die);
638  } else if (Context.isSubprogram()) {
639    DIE *ContextDIE = getOrCreateSubprogramDIE(DISubprogram(Context));
640    ContextDIE->addChild(Die);
641  } else if (DIE *ContextDIE = getDIE(Context))
642    ContextDIE->addChild(Die);
643  else
644    addDie(Die);
645}
646
647/// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
648/// given DIType.
649DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
650  DIType Ty(TyNode);
651  if (!Ty.Verify())
652    return NULL;
653  DIE *TyDIE = getDIE(Ty);
654  if (TyDIE)
655    return TyDIE;
656
657  // Create new type.
658  TyDIE = new DIE(dwarf::DW_TAG_base_type);
659  insertDIE(Ty, TyDIE);
660  if (Ty.isBasicType())
661    constructTypeDIE(*TyDIE, DIBasicType(Ty));
662  else if (Ty.isCompositeType())
663    constructTypeDIE(*TyDIE, DICompositeType(Ty));
664  else {
665    assert(Ty.isDerivedType() && "Unknown kind of DIType");
666    constructTypeDIE(*TyDIE, DIDerivedType(Ty));
667  }
668  // If this is a named finished type then include it in the list of types
669  // for the accelerator tables.
670  if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
671    bool IsImplementation = 0;
672    if (Ty.isCompositeType()) {
673      DICompositeType CT(Ty);
674      // A runtime language of 0 actually means C/C++ and that any
675      // non-negative value is some version of Objective-C/C++.
676      IsImplementation = (CT.getRunTimeLang() == 0) ||
677        CT.isObjcClassComplete();
678    }
679    unsigned Flags = IsImplementation ?
680                     DwarfAccelTable::eTypeFlagClassIsImplementation : 0;
681    addAccelType(Ty.getName(), std::make_pair(TyDIE, Flags));
682  }
683
684  addToContextOwner(TyDIE, Ty.getContext());
685  return TyDIE;
686}
687
688/// addType - Add a new type attribute to the specified entity.
689void CompileUnit::addType(DIE *Entity, DIType Ty, unsigned Attribute) {
690  if (!Ty.Verify())
691    return;
692
693  // Check for pre-existence.
694  DIEEntry *Entry = getDIEEntry(Ty);
695  // If it exists then use the existing value.
696  if (Entry) {
697    Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
698    return;
699  }
700
701  // Construct type.
702  DIE *Buffer = getOrCreateTypeDIE(Ty);
703
704  // Set up proxy.
705  Entry = createDIEEntry(Buffer);
706  insertDIEEntry(Ty, Entry);
707  Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
708
709  // If this is a complete composite type then include it in the
710  // list of global types.
711  addGlobalType(Ty);
712}
713
714/// addGlobalType - Add a new global type to the compile unit.
715///
716void CompileUnit::addGlobalType(DIType Ty) {
717  DIDescriptor Context = Ty.getContext();
718  if (Ty.isCompositeType() && !Ty.getName().empty() && !Ty.isForwardDecl()
719      && (!Context || Context.isCompileUnit() || Context.isFile()
720          || Context.isNameSpace()))
721    if (DIEEntry *Entry = getDIEEntry(Ty))
722      GlobalTypes[Ty.getName()] = Entry->getEntry();
723}
724
725/// addPubTypes - Add type for pubtypes section.
726void CompileUnit::addPubTypes(DISubprogram SP) {
727  DICompositeType SPTy = SP.getType();
728  unsigned SPTag = SPTy.getTag();
729  if (SPTag != dwarf::DW_TAG_subroutine_type)
730    return;
731
732  DIArray Args = SPTy.getTypeArray();
733  for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
734    DIType ATy(Args.getElement(i));
735    if (!ATy.Verify())
736      continue;
737    addGlobalType(ATy);
738  }
739}
740
741/// constructTypeDIE - Construct basic type die from DIBasicType.
742void CompileUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
743  // Get core information.
744  StringRef Name = BTy.getName();
745  // Add name if not anonymous or intermediate type.
746  if (!Name.empty())
747    addString(&Buffer, dwarf::DW_AT_name, Name);
748
749  if (BTy.getTag() == dwarf::DW_TAG_unspecified_type) {
750    Buffer.setTag(dwarf::DW_TAG_unspecified_type);
751    // Unspecified types has only name, nothing else.
752    return;
753  }
754
755  Buffer.setTag(dwarf::DW_TAG_base_type);
756  addUInt(&Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
757          BTy.getEncoding());
758
759  uint64_t Size = BTy.getSizeInBits() >> 3;
760  addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
761}
762
763/// constructTypeDIE - Construct derived type die from DIDerivedType.
764void CompileUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
765  // Get core information.
766  StringRef Name = DTy.getName();
767  uint64_t Size = DTy.getSizeInBits() >> 3;
768  unsigned Tag = DTy.getTag();
769
770  // FIXME - Workaround for templates.
771  if (Tag == dwarf::DW_TAG_inheritance) Tag = dwarf::DW_TAG_reference_type;
772
773  Buffer.setTag(Tag);
774
775  // Map to main type, void will not have a type.
776  DIType FromTy = DTy.getTypeDerivedFrom();
777  addType(&Buffer, FromTy);
778
779  // Add name if not anonymous or intermediate type.
780  if (!Name.empty())
781    addString(&Buffer, dwarf::DW_AT_name, Name);
782
783  // Add size if non-zero (derived types might be zero-sized.)
784  if (Size && Tag != dwarf::DW_TAG_pointer_type)
785    addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
786
787  // Add source line info if available and TyDesc is not a forward declaration.
788  if (!DTy.isForwardDecl())
789    addSourceLine(&Buffer, DTy);
790}
791
792/// constructTypeDIE - Construct type DIE from DICompositeType.
793void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
794  // Get core information.
795  StringRef Name = CTy.getName();
796
797  uint64_t Size = CTy.getSizeInBits() >> 3;
798  unsigned Tag = CTy.getTag();
799  Buffer.setTag(Tag);
800
801  switch (Tag) {
802  case dwarf::DW_TAG_vector_type:
803  case dwarf::DW_TAG_array_type:
804    constructArrayTypeDIE(Buffer, &CTy);
805    break;
806  case dwarf::DW_TAG_enumeration_type: {
807    DIArray Elements = CTy.getTypeArray();
808
809    // Add enumerators to enumeration type.
810    for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
811      DIE *ElemDie = NULL;
812      DIDescriptor Enum(Elements.getElement(i));
813      if (Enum.isEnumerator()) {
814        ElemDie = constructEnumTypeDIE(DIEnumerator(Enum));
815        Buffer.addChild(ElemDie);
816      }
817    }
818    DIType DTy = CTy.getTypeDerivedFrom();
819    if (DTy.Verify()) {
820      addType(&Buffer, DTy);
821      addUInt(&Buffer, dwarf::DW_AT_enum_class, dwarf::DW_FORM_flag, 1);
822    }
823  }
824    break;
825  case dwarf::DW_TAG_subroutine_type: {
826    // Add return type.
827    DIArray Elements = CTy.getTypeArray();
828    DIDescriptor RTy = Elements.getElement(0);
829    addType(&Buffer, DIType(RTy));
830
831    bool isPrototyped = true;
832    // Add arguments.
833    for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) {
834      DIDescriptor Ty = Elements.getElement(i);
835      if (Ty.isUnspecifiedParameter()) {
836        DIE *Arg = new DIE(dwarf::DW_TAG_unspecified_parameters);
837        Buffer.addChild(Arg);
838        isPrototyped = false;
839      } else {
840        DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
841        addType(Arg, DIType(Ty));
842        Buffer.addChild(Arg);
843      }
844    }
845    // Add prototype flag if we're dealing with a C language and the
846    // function has been prototyped.
847    if (isPrototyped &&
848        (Language == dwarf::DW_LANG_C89 ||
849         Language == dwarf::DW_LANG_C99 ||
850         Language == dwarf::DW_LANG_ObjC))
851      addFlag(&Buffer, dwarf::DW_AT_prototyped);
852  }
853    break;
854  case dwarf::DW_TAG_structure_type:
855  case dwarf::DW_TAG_union_type:
856  case dwarf::DW_TAG_class_type: {
857    // Add elements to structure type.
858    DIArray Elements = CTy.getTypeArray();
859
860    // A forward struct declared type may not have elements available.
861    unsigned N = Elements.getNumElements();
862    if (N == 0)
863      break;
864
865    // Add elements to structure type.
866    for (unsigned i = 0; i < N; ++i) {
867      DIDescriptor Element = Elements.getElement(i);
868      DIE *ElemDie = NULL;
869      if (Element.isSubprogram()) {
870        DISubprogram SP(Element);
871        ElemDie = getOrCreateSubprogramDIE(DISubprogram(Element));
872        if (SP.isProtected())
873          addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
874                  dwarf::DW_ACCESS_protected);
875        else if (SP.isPrivate())
876          addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
877                  dwarf::DW_ACCESS_private);
878        else
879          addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
880            dwarf::DW_ACCESS_public);
881        if (SP.isExplicit())
882          addFlag(ElemDie, dwarf::DW_AT_explicit);
883      }
884      else if (Element.isVariable()) {
885        DIVariable DV(Element);
886        ElemDie = new DIE(dwarf::DW_TAG_variable);
887        addString(ElemDie, dwarf::DW_AT_name, DV.getName());
888        addType(ElemDie, DV.getType());
889        addFlag(ElemDie, dwarf::DW_AT_declaration);
890        addFlag(ElemDie, dwarf::DW_AT_external);
891        addSourceLine(ElemDie, DV);
892      } else if (Element.isDerivedType()) {
893        DIDerivedType DDTy(Element);
894        if (DDTy.getTag() == dwarf::DW_TAG_friend) {
895          ElemDie = new DIE(dwarf::DW_TAG_friend);
896          addType(ElemDie, DDTy.getTypeDerivedFrom(), dwarf::DW_AT_friend);
897        } else
898          ElemDie = createMemberDIE(DIDerivedType(Element));
899      } else if (Element.isObjCProperty()) {
900        DIObjCProperty Property(Element);
901        ElemDie = new DIE(Property.getTag());
902        StringRef PropertyName = Property.getObjCPropertyName();
903        addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
904        addType(ElemDie, Property.getType());
905        addSourceLine(ElemDie, Property);
906        StringRef GetterName = Property.getObjCPropertyGetterName();
907        if (!GetterName.empty())
908          addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
909        StringRef SetterName = Property.getObjCPropertySetterName();
910        if (!SetterName.empty())
911          addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
912        unsigned PropertyAttributes = 0;
913        if (Property.isReadOnlyObjCProperty())
914          PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
915        if (Property.isReadWriteObjCProperty())
916          PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
917        if (Property.isAssignObjCProperty())
918          PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
919        if (Property.isRetainObjCProperty())
920          PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
921        if (Property.isCopyObjCProperty())
922          PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
923        if (Property.isNonAtomicObjCProperty())
924          PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
925        if (PropertyAttributes)
926          addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, 0,
927                 PropertyAttributes);
928
929        DIEEntry *Entry = getDIEEntry(Element);
930        if (!Entry) {
931          Entry = createDIEEntry(ElemDie);
932          insertDIEEntry(Element, Entry);
933        }
934      } else
935        continue;
936      Buffer.addChild(ElemDie);
937    }
938
939    if (CTy.isAppleBlockExtension())
940      addFlag(&Buffer, dwarf::DW_AT_APPLE_block);
941
942    DICompositeType ContainingType = CTy.getContainingType();
943    if (DIDescriptor(ContainingType).isCompositeType())
944      addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
945                  getOrCreateTypeDIE(DIType(ContainingType)));
946    else {
947      DIDescriptor Context = CTy.getContext();
948      addToContextOwner(&Buffer, Context);
949    }
950
951    if (CTy.isObjcClassComplete())
952      addFlag(&Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
953
954    // Add template parameters to a class, structure or union types.
955    // FIXME: The support isn't in the metadata for this yet.
956    if (Tag == dwarf::DW_TAG_class_type ||
957        Tag == dwarf::DW_TAG_structure_type ||
958        Tag == dwarf::DW_TAG_union_type)
959      addTemplateParams(Buffer, CTy.getTemplateParams());
960
961    break;
962  }
963  default:
964    break;
965  }
966
967  // Add name if not anonymous or intermediate type.
968  if (!Name.empty())
969    addString(&Buffer, dwarf::DW_AT_name, Name);
970
971  if (Tag == dwarf::DW_TAG_enumeration_type ||
972      Tag == dwarf::DW_TAG_class_type ||
973      Tag == dwarf::DW_TAG_structure_type ||
974      Tag == dwarf::DW_TAG_union_type) {
975    // Add size if non-zero (derived types might be zero-sized.)
976    // TODO: Do we care about size for enum forward declarations?
977    if (Size)
978      addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
979    else if (!CTy.isForwardDecl())
980      // Add zero size if it is not a forward declaration.
981      addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, 0);
982
983    // If we're a forward decl, say so.
984    if (CTy.isForwardDecl())
985      addFlag(&Buffer, dwarf::DW_AT_declaration);
986
987    // Add source line info if available.
988    if (!CTy.isForwardDecl())
989      addSourceLine(&Buffer, CTy);
990
991    // No harm in adding the runtime language to the declaration.
992    unsigned RLang = CTy.getRunTimeLang();
993    if (RLang)
994      addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class,
995              dwarf::DW_FORM_data1, RLang);
996  }
997}
998
999/// getOrCreateTemplateTypeParameterDIE - Find existing DIE or create new DIE
1000/// for the given DITemplateTypeParameter.
1001DIE *
1002CompileUnit::getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP) {
1003  DIE *ParamDIE = getDIE(TP);
1004  if (ParamDIE)
1005    return ParamDIE;
1006
1007  ParamDIE = new DIE(dwarf::DW_TAG_template_type_parameter);
1008  addType(ParamDIE, TP.getType());
1009  addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1010  return ParamDIE;
1011}
1012
1013/// getOrCreateTemplateValueParameterDIE - Find existing DIE or create new DIE
1014/// for the given DITemplateValueParameter.
1015DIE *
1016CompileUnit::getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TPV){
1017  DIE *ParamDIE = getDIE(TPV);
1018  if (ParamDIE)
1019    return ParamDIE;
1020
1021  ParamDIE = new DIE(dwarf::DW_TAG_template_value_parameter);
1022  addType(ParamDIE, TPV.getType());
1023  if (!TPV.getName().empty())
1024    addString(ParamDIE, dwarf::DW_AT_name, TPV.getName());
1025  addUInt(ParamDIE, dwarf::DW_AT_const_value, dwarf::DW_FORM_udata,
1026          TPV.getValue());
1027  return ParamDIE;
1028}
1029
1030/// getOrCreateNameSpace - Create a DIE for DINameSpace.
1031DIE *CompileUnit::getOrCreateNameSpace(DINameSpace NS) {
1032  DIE *NDie = getDIE(NS);
1033  if (NDie)
1034    return NDie;
1035  NDie = new DIE(dwarf::DW_TAG_namespace);
1036  insertDIE(NS, NDie);
1037  if (!NS.getName().empty()) {
1038    addString(NDie, dwarf::DW_AT_name, NS.getName());
1039    addAccelNamespace(NS.getName(), NDie);
1040  } else
1041    addAccelNamespace("(anonymous namespace)", NDie);
1042  addSourceLine(NDie, NS);
1043  addToContextOwner(NDie, NS.getContext());
1044  return NDie;
1045}
1046
1047/// getRealLinkageName - If special LLVM prefix that is used to inform the asm
1048/// printer to not emit usual symbol prefix before the symbol name is used then
1049/// return linkage name after skipping this special LLVM prefix.
1050static StringRef getRealLinkageName(StringRef LinkageName) {
1051  char One = '\1';
1052  if (LinkageName.startswith(StringRef(&One, 1)))
1053    return LinkageName.substr(1);
1054  return LinkageName;
1055}
1056
1057/// getOrCreateSubprogramDIE - Create new DIE using SP.
1058DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
1059  DIE *SPDie = getDIE(SP);
1060  if (SPDie)
1061    return SPDie;
1062
1063  SPDie = new DIE(dwarf::DW_TAG_subprogram);
1064
1065  // DW_TAG_inlined_subroutine may refer to this DIE.
1066  insertDIE(SP, SPDie);
1067
1068  DISubprogram SPDecl = SP.getFunctionDeclaration();
1069  DIE *DeclDie = NULL;
1070  if (SPDecl.isSubprogram()) {
1071    DeclDie = getOrCreateSubprogramDIE(SPDecl);
1072  }
1073
1074  // Add to context owner.
1075  addToContextOwner(SPDie, SP.getContext());
1076
1077  // Add function template parameters.
1078  addTemplateParams(*SPDie, SP.getTemplateParams());
1079
1080  // Unfortunately this code needs to stay here instead of below the
1081  // AT_specification code in order to work around a bug in older
1082  // gdbs that requires the linkage name to resolve multiple template
1083  // functions.
1084  // TODO: Remove this set of code when we get rid of the old gdb
1085  // compatibility.
1086  StringRef LinkageName = SP.getLinkageName();
1087  if (!LinkageName.empty() && DD->useDarwinGDBCompat())
1088    addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1089              getRealLinkageName(LinkageName));
1090
1091  // If this DIE is going to refer declaration info using AT_specification
1092  // then there is no need to add other attributes.
1093  if (DeclDie) {
1094    // Refer function declaration directly.
1095    addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
1096                DeclDie);
1097
1098    return SPDie;
1099  }
1100
1101  // Add the linkage name if we have one.
1102  if (!LinkageName.empty() && !DD->useDarwinGDBCompat())
1103    addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1104              getRealLinkageName(LinkageName));
1105
1106  // Constructors and operators for anonymous aggregates do not have names.
1107  if (!SP.getName().empty())
1108    addString(SPDie, dwarf::DW_AT_name, SP.getName());
1109
1110  addSourceLine(SPDie, SP);
1111
1112  // Add the prototype if we have a prototype and we have a C like
1113  // language.
1114  if (SP.isPrototyped() &&
1115      (Language == dwarf::DW_LANG_C89 ||
1116       Language == dwarf::DW_LANG_C99 ||
1117       Language == dwarf::DW_LANG_ObjC))
1118    addFlag(SPDie, dwarf::DW_AT_prototyped);
1119
1120  // Add Return Type.
1121  DICompositeType SPTy = SP.getType();
1122  DIArray Args = SPTy.getTypeArray();
1123  unsigned SPTag = SPTy.getTag();
1124
1125  if (Args.getNumElements() == 0 || SPTag != dwarf::DW_TAG_subroutine_type)
1126    addType(SPDie, SPTy);
1127  else
1128    addType(SPDie, DIType(Args.getElement(0)));
1129
1130  unsigned VK = SP.getVirtuality();
1131  if (VK) {
1132    addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1133    DIEBlock *Block = getDIEBlock();
1134    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1135    addUInt(Block, 0, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1136    addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
1137    ContainingTypeMap.insert(std::make_pair(SPDie,
1138                                            SP.getContainingType()));
1139  }
1140
1141  if (!SP.isDefinition()) {
1142    addFlag(SPDie, dwarf::DW_AT_declaration);
1143
1144    // Add arguments. Do not add arguments for subprogram definition. They will
1145    // be handled while processing variables.
1146    DICompositeType SPTy = SP.getType();
1147    DIArray Args = SPTy.getTypeArray();
1148    unsigned SPTag = SPTy.getTag();
1149
1150    if (SPTag == dwarf::DW_TAG_subroutine_type)
1151      for (unsigned i = 1, N =  Args.getNumElements(); i < N; ++i) {
1152        DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
1153        DIType ATy = DIType(Args.getElement(i));
1154        addType(Arg, ATy);
1155        if (ATy.isArtificial())
1156          addFlag(Arg, dwarf::DW_AT_artificial);
1157        SPDie->addChild(Arg);
1158      }
1159  }
1160
1161  if (SP.isArtificial())
1162    addFlag(SPDie, dwarf::DW_AT_artificial);
1163
1164  if (!SP.isLocalToUnit())
1165    addFlag(SPDie, dwarf::DW_AT_external);
1166
1167  if (SP.isOptimized())
1168    addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1169
1170  if (unsigned isa = Asm->getISAEncoding()) {
1171    addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1172  }
1173
1174  return SPDie;
1175}
1176
1177// Return const expression if value is a GEP to access merged global
1178// constant. e.g.
1179// i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
1180static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
1181  const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
1182  if (!CE || CE->getNumOperands() != 3 ||
1183      CE->getOpcode() != Instruction::GetElementPtr)
1184    return NULL;
1185
1186  // First operand points to a global struct.
1187  Value *Ptr = CE->getOperand(0);
1188  if (!isa<GlobalValue>(Ptr) ||
1189      !isa<StructType>(cast<PointerType>(Ptr->getType())->getElementType()))
1190    return NULL;
1191
1192  // Second operand is zero.
1193  const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
1194  if (!CI || !CI->isZero())
1195    return NULL;
1196
1197  // Third operand is offset.
1198  if (!isa<ConstantInt>(CE->getOperand(2)))
1199    return NULL;
1200
1201  return CE;
1202}
1203
1204/// createGlobalVariableDIE - create global variable DIE.
1205void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
1206  // Check for pre-existence.
1207  if (getDIE(N))
1208    return;
1209
1210  DIGlobalVariable GV(N);
1211  if (!GV.Verify())
1212    return;
1213
1214  DIE *VariableDIE = new DIE(GV.getTag());
1215  // Add to map.
1216  insertDIE(N, VariableDIE);
1217
1218  // Add name.
1219  addString(VariableDIE, dwarf::DW_AT_name, GV.getDisplayName());
1220  StringRef LinkageName = GV.getLinkageName();
1221  bool isGlobalVariable = GV.getGlobal() != NULL;
1222  if (!LinkageName.empty() && isGlobalVariable)
1223    addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
1224              getRealLinkageName(LinkageName));
1225  // Add type.
1226  DIType GTy = GV.getType();
1227  addType(VariableDIE, GTy);
1228
1229  // Add scoping info.
1230  if (!GV.isLocalToUnit())
1231    addFlag(VariableDIE, dwarf::DW_AT_external);
1232
1233  // Add line number info.
1234  addSourceLine(VariableDIE, GV);
1235  // Add to context owner.
1236  DIDescriptor GVContext = GV.getContext();
1237  addToContextOwner(VariableDIE, GVContext);
1238  // Add location.
1239  bool addToAccelTable = false;
1240  DIE *VariableSpecDIE = NULL;
1241  if (isGlobalVariable) {
1242    addToAccelTable = true;
1243    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1244    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1245    addLabel(Block, 0, dwarf::DW_FORM_udata,
1246             Asm->Mang->getSymbol(GV.getGlobal()));
1247    // Do not create specification DIE if context is either compile unit
1248    // or a subprogram.
1249    if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
1250        !GVContext.isFile() && !isSubprogramContext(GVContext)) {
1251      // Create specification DIE.
1252      VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1253      addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1254                  dwarf::DW_FORM_ref4, VariableDIE);
1255      addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1256      addFlag(VariableDIE, dwarf::DW_AT_declaration);
1257      addDie(VariableSpecDIE);
1258    } else {
1259      addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1260    }
1261  } else if (const ConstantInt *CI =
1262             dyn_cast_or_null<ConstantInt>(GV.getConstant()))
1263    addConstantValue(VariableDIE, CI, GTy.isUnsignedDIType());
1264  else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
1265    addToAccelTable = true;
1266    // GV is a merged global.
1267    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1268    Value *Ptr = CE->getOperand(0);
1269    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
1270    addLabel(Block, 0, dwarf::DW_FORM_udata,
1271                    Asm->Mang->getSymbol(cast<GlobalValue>(Ptr)));
1272    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1273    SmallVector<Value*, 3> Idx(CE->op_begin()+1, CE->op_end());
1274    addUInt(Block, 0, dwarf::DW_FORM_udata,
1275                   Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx));
1276    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1277    addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1278  }
1279
1280  if (addToAccelTable) {
1281    DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
1282    addAccelName(GV.getName(), AddrDIE);
1283
1284    // If the linkage name is different than the name, go ahead and output
1285    // that as well into the name table.
1286    if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
1287      addAccelName(GV.getLinkageName(), AddrDIE);
1288  }
1289
1290  return;
1291}
1292
1293/// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1294void CompileUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR,
1295                                       DIE *IndexTy) {
1296  DIE *DW_Subrange = new DIE(dwarf::DW_TAG_subrange_type);
1297  addDIEEntry(DW_Subrange, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IndexTy);
1298
1299  // The LowerBound value defines the lower bounds which is typically zero for
1300  // C/C++. The Count value is the number of elements.  Values are 64 bit. If
1301  // Count == -1 then the array is unbounded and we do not emit
1302  // DW_AT_lower_bound and DW_AT_upper_bound attributes. If LowerBound == 0 and
1303  // Count == 0, then the array has zero elements in which case we do not emit
1304  // an upper bound.
1305  int64_t LowerBound = SR.getLo();
1306  int64_t DefaultLowerBound = getDefaultLowerBound();
1307  int64_t Count = SR.getCount();
1308
1309  if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1310    addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, 0, LowerBound);
1311
1312  if (Count != -1 && Count != 0)
1313    // FIXME: An unbounded array should reference the expression that defines
1314    // the array.
1315    addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, 0, LowerBound + Count - 1);
1316
1317  Buffer.addChild(DW_Subrange);
1318}
1319
1320/// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1321void CompileUnit::constructArrayTypeDIE(DIE &Buffer,
1322                                        DICompositeType *CTy) {
1323  Buffer.setTag(dwarf::DW_TAG_array_type);
1324  if (CTy->getTag() == dwarf::DW_TAG_vector_type)
1325    addFlag(&Buffer, dwarf::DW_AT_GNU_vector);
1326
1327  // Emit derived type.
1328  addType(&Buffer, CTy->getTypeDerivedFrom());
1329  DIArray Elements = CTy->getTypeArray();
1330
1331  // Get an anonymous type for index type.
1332  // FIXME: This type should be passed down from the front end
1333  // as different languages may have different sizes for indexes.
1334  DIE *IdxTy = getIndexTyDie();
1335  if (!IdxTy) {
1336    // Construct an anonymous type for index type.
1337    IdxTy = new DIE(dwarf::DW_TAG_base_type);
1338    addString(IdxTy, dwarf::DW_AT_name, "int");
1339    addUInt(IdxTy, dwarf::DW_AT_byte_size, 0, sizeof(int32_t));
1340    addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1341            dwarf::DW_ATE_signed);
1342    addDie(IdxTy);
1343    setIndexTyDie(IdxTy);
1344  }
1345
1346  // Add subranges to array type.
1347  for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1348    DIDescriptor Element = Elements.getElement(i);
1349    if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1350      constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1351  }
1352}
1353
1354/// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator.
1355DIE *CompileUnit::constructEnumTypeDIE(DIEnumerator ETy) {
1356  DIE *Enumerator = new DIE(dwarf::DW_TAG_enumerator);
1357  StringRef Name = ETy.getName();
1358  addString(Enumerator, dwarf::DW_AT_name, Name);
1359  int64_t Value = ETy.getEnumValue();
1360  addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value);
1361  return Enumerator;
1362}
1363
1364/// constructContainingTypeDIEs - Construct DIEs for types that contain
1365/// vtables.
1366void CompileUnit::constructContainingTypeDIEs() {
1367  for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1368         CE = ContainingTypeMap.end(); CI != CE; ++CI) {
1369    DIE *SPDie = CI->first;
1370    const MDNode *N = CI->second;
1371    if (!N) continue;
1372    DIE *NDie = getDIE(N);
1373    if (!NDie) continue;
1374    addDIEEntry(SPDie, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, NDie);
1375  }
1376}
1377
1378/// constructVariableDIE - Construct a DIE for the given DbgVariable.
1379DIE *CompileUnit::constructVariableDIE(DbgVariable *DV, bool isScopeAbstract) {
1380  StringRef Name = DV->getName();
1381
1382  // Translate tag to proper Dwarf tag.
1383  unsigned Tag = DV->getTag();
1384
1385  // Define variable debug information entry.
1386  DIE *VariableDie = new DIE(Tag);
1387  DbgVariable *AbsVar = DV->getAbstractVariable();
1388  DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : NULL;
1389  if (AbsDIE)
1390    addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
1391                            dwarf::DW_FORM_ref4, AbsDIE);
1392  else {
1393    addString(VariableDie, dwarf::DW_AT_name, Name);
1394    addSourceLine(VariableDie, DV->getVariable());
1395    addType(VariableDie, DV->getType());
1396  }
1397
1398  if (DV->isArtificial())
1399    addFlag(VariableDie, dwarf::DW_AT_artificial);
1400
1401  if (isScopeAbstract) {
1402    DV->setDIE(VariableDie);
1403    return VariableDie;
1404  }
1405
1406  // Add variable address.
1407
1408  unsigned Offset = DV->getDotDebugLocOffset();
1409  if (Offset != ~0U) {
1410    addLabel(VariableDie, dwarf::DW_AT_location,
1411                         dwarf::DW_FORM_data4,
1412                         Asm->GetTempSymbol("debug_loc", Offset));
1413    DV->setDIE(VariableDie);
1414    return VariableDie;
1415  }
1416
1417  // Check if variable is described by a DBG_VALUE instruction.
1418  if (const MachineInstr *DVInsn = DV->getMInsn()) {
1419    bool updated = false;
1420    if (DVInsn->getNumOperands() == 3) {
1421      if (DVInsn->getOperand(0).isReg()) {
1422        const MachineOperand RegOp = DVInsn->getOperand(0);
1423        const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1424        if (DVInsn->getOperand(1).isImm() &&
1425            TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) {
1426          unsigned FrameReg = 0;
1427          const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1428          int Offset =
1429            TFI->getFrameIndexReference(*Asm->MF,
1430                                        DVInsn->getOperand(1).getImm(),
1431                                        FrameReg);
1432          MachineLocation Location(FrameReg, Offset);
1433          addVariableAddress(DV, VariableDie, Location);
1434
1435        } else if (RegOp.getReg())
1436          addVariableAddress(DV, VariableDie,
1437                                         MachineLocation(RegOp.getReg()));
1438        updated = true;
1439      }
1440      else if (DVInsn->getOperand(0).isImm())
1441        updated =
1442          addConstantValue(VariableDie, DVInsn->getOperand(0),
1443                                       DV->getType());
1444      else if (DVInsn->getOperand(0).isFPImm())
1445        updated =
1446          addConstantFPValue(VariableDie, DVInsn->getOperand(0));
1447      else if (DVInsn->getOperand(0).isCImm())
1448        updated =
1449          addConstantValue(VariableDie,
1450                                       DVInsn->getOperand(0).getCImm(),
1451                                       DV->getType().isUnsignedDIType());
1452    } else {
1453      addVariableAddress(DV, VariableDie,
1454                                     Asm->getDebugValueLocation(DVInsn));
1455      updated = true;
1456    }
1457    if (!updated) {
1458      // If variableDie is not updated then DBG_VALUE instruction does not
1459      // have valid variable info.
1460      delete VariableDie;
1461      return NULL;
1462    }
1463    DV->setDIE(VariableDie);
1464    return VariableDie;
1465  } else {
1466    // .. else use frame index.
1467    int FI = DV->getFrameIndex();
1468    if (FI != ~0) {
1469      unsigned FrameReg = 0;
1470      const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1471      int Offset =
1472        TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
1473      MachineLocation Location(FrameReg, Offset);
1474      addVariableAddress(DV, VariableDie, Location);
1475    }
1476  }
1477
1478  DV->setDIE(VariableDie);
1479  return VariableDie;
1480}
1481
1482/// createMemberDIE - Create new member DIE.
1483DIE *CompileUnit::createMemberDIE(DIDerivedType DT) {
1484  DIE *MemberDie = new DIE(DT.getTag());
1485  StringRef Name = DT.getName();
1486  if (!Name.empty())
1487    addString(MemberDie, dwarf::DW_AT_name, Name);
1488
1489  addType(MemberDie, DT.getTypeDerivedFrom());
1490
1491  addSourceLine(MemberDie, DT);
1492
1493  DIEBlock *MemLocationDie = new (DIEValueAllocator) DIEBlock();
1494  addUInt(MemLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1495
1496  uint64_t Size = DT.getSizeInBits();
1497  uint64_t FieldSize = DT.getOriginalTypeSize();
1498
1499  if (Size != FieldSize) {
1500    // Handle bitfield.
1501    addUInt(MemberDie, dwarf::DW_AT_byte_size, 0, DT.getOriginalTypeSize()>>3);
1502    addUInt(MemberDie, dwarf::DW_AT_bit_size, 0, DT.getSizeInBits());
1503
1504    uint64_t Offset = DT.getOffsetInBits();
1505    uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1506    uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1507    uint64_t FieldOffset = (HiMark - FieldSize);
1508    Offset -= FieldOffset;
1509
1510    // Maybe we need to work from the other end.
1511    if (Asm->getDataLayout().isLittleEndian())
1512      Offset = FieldSize - (Offset + Size);
1513    addUInt(MemberDie, dwarf::DW_AT_bit_offset, 0, Offset);
1514
1515    // Here WD_AT_data_member_location points to the anonymous
1516    // field that includes this bit field.
1517    addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, FieldOffset >> 3);
1518
1519  } else
1520    // This is not a bitfield.
1521    addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits() >> 3);
1522
1523  if (DT.getTag() == dwarf::DW_TAG_inheritance
1524      && DT.isVirtual()) {
1525
1526    // For C++, virtual base classes are not at fixed offset. Use following
1527    // expression to extract appropriate offset from vtable.
1528    // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1529
1530    DIEBlock *VBaseLocationDie = new (DIEValueAllocator) DIEBlock();
1531    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1532    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1533    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1534    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1535    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1536    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1537    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1538
1539    addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0,
1540             VBaseLocationDie);
1541  } else
1542    addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0, MemLocationDie);
1543
1544  if (DT.isProtected())
1545    addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1546            dwarf::DW_ACCESS_protected);
1547  else if (DT.isPrivate())
1548    addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1549            dwarf::DW_ACCESS_private);
1550  // Otherwise C++ member and base classes are considered public.
1551  else
1552    addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1553            dwarf::DW_ACCESS_public);
1554  if (DT.isVirtual())
1555    addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1556            dwarf::DW_VIRTUALITY_virtual);
1557
1558  // Objective-C properties.
1559  if (MDNode *PNode = DT.getObjCProperty())
1560    if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1561      MemberDie->addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1562                          PropertyDie);
1563
1564  if (DT.isArtificial())
1565    addFlag(MemberDie, dwarf::DW_AT_artificial);
1566
1567  // This is only for backward compatibility.
1568  StringRef PropertyName = DT.getObjCPropertyName();
1569  if (!PropertyName.empty()) {
1570    addString(MemberDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
1571    StringRef GetterName = DT.getObjCPropertyGetterName();
1572    if (!GetterName.empty())
1573      addString(MemberDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
1574    StringRef SetterName = DT.getObjCPropertySetterName();
1575    if (!SetterName.empty())
1576      addString(MemberDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
1577    unsigned PropertyAttributes = 0;
1578    if (DT.isReadOnlyObjCProperty())
1579      PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
1580    if (DT.isReadWriteObjCProperty())
1581      PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
1582    if (DT.isAssignObjCProperty())
1583      PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
1584    if (DT.isRetainObjCProperty())
1585      PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
1586    if (DT.isCopyObjCProperty())
1587      PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
1588    if (DT.isNonAtomicObjCProperty())
1589      PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1590    if (PropertyAttributes)
1591      addUInt(MemberDie, dwarf::DW_AT_APPLE_property_attribute, 0,
1592              PropertyAttributes);
1593  }
1594  return MemberDie;
1595}
1596