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