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