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