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