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