1 //===-- llvm/CodeGen/DwarfCompileUnit.cpp - Dwarf Compile Unit ------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains support for constructing a dwarf compile unit.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #define DEBUG_TYPE "dwarfdebug"
15 
16 #include "DwarfCompileUnit.h"
17 #include "DwarfAccelTable.h"
18 #include "DwarfDebug.h"
19 #include "llvm/ADT/APFloat.h"
20 #include "llvm/DIBuilder.h"
21 #include "llvm/IR/Constants.h"
22 #include "llvm/IR/DataLayout.h"
23 #include "llvm/IR/GlobalVariable.h"
24 #include "llvm/IR/Instructions.h"
25 #include "llvm/Support/Debug.h"
26 #include "llvm/Support/ErrorHandling.h"
27 #include "llvm/Target/Mangler.h"
28 #include "llvm/Target/TargetFrameLowering.h"
29 #include "llvm/Target/TargetMachine.h"
30 #include "llvm/Target/TargetLoweringObjectFile.h"
31 #include "llvm/Target/TargetRegisterInfo.h"
32 
33 using namespace llvm;
34 
35 /// CompileUnit - Compile unit constructor.
36 CompileUnit::CompileUnit(unsigned UID, unsigned L, DIE *D, const MDNode *N,
37                          AsmPrinter *A, DwarfDebug *DW, DwarfUnits *DWU)
38   : UniqueID(UID), Language(L), CUDie(D), Asm(A), DD(DW), DU(DWU),
39     IndexTyDie(0), DebugInfoOffset(0) {
40   DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
41   insertDIE(N, D);
42 }
43 
44 /// ~CompileUnit - Destructor for compile unit.
45 CompileUnit::~CompileUnit() {
46   for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
47     DIEBlocks[j]->~DIEBlock();
48 }
49 
50 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
51 /// information entry.
52 DIEEntry *CompileUnit::createDIEEntry(DIE *Entry) {
53   DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry);
54   return Value;
55 }
56 
57 /// getDefaultLowerBound - Return the default lower bound for an array. If the
58 /// DWARF version doesn't handle the language, return -1.
59 int64_t CompileUnit::getDefaultLowerBound() const {
60   switch (Language) {
61   default:
62     break;
63 
64   case dwarf::DW_LANG_C89:
65   case dwarf::DW_LANG_C99:
66   case dwarf::DW_LANG_C:
67   case dwarf::DW_LANG_C_plus_plus:
68   case dwarf::DW_LANG_ObjC:
69   case dwarf::DW_LANG_ObjC_plus_plus:
70     return 0;
71 
72   case dwarf::DW_LANG_Fortran77:
73   case dwarf::DW_LANG_Fortran90:
74   case dwarf::DW_LANG_Fortran95:
75     return 1;
76 
77   // The languages below have valid values only if the DWARF version >= 4.
78   case dwarf::DW_LANG_Java:
79   case dwarf::DW_LANG_Python:
80   case dwarf::DW_LANG_UPC:
81   case dwarf::DW_LANG_D:
82     if (dwarf::DWARF_VERSION >= 4)
83       return 0;
84     break;
85 
86   case dwarf::DW_LANG_Ada83:
87   case dwarf::DW_LANG_Ada95:
88   case dwarf::DW_LANG_Cobol74:
89   case dwarf::DW_LANG_Cobol85:
90   case dwarf::DW_LANG_Modula2:
91   case dwarf::DW_LANG_Pascal83:
92   case dwarf::DW_LANG_PLI:
93     if (dwarf::DWARF_VERSION >= 4)
94       return 1;
95     break;
96   }
97 
98   return -1;
99 }
100 
101 /// addFlag - Add a flag that is true.
102 void CompileUnit::addFlag(DIE *Die, uint16_t Attribute) {
103   if (!DD->useDarwinGDBCompat())
104     Die->addValue(Attribute, dwarf::DW_FORM_flag_present,
105                   DIEIntegerOne);
106   else
107     addUInt(Die, Attribute, dwarf::DW_FORM_flag, 1);
108 }
109 
110 /// addUInt - Add an unsigned integer attribute data and value.
111 ///
112 void CompileUnit::addUInt(DIE *Die, uint16_t Attribute,
113                           uint16_t Form, uint64_t Integer) {
114   if (!Form) Form = DIEInteger::BestForm(false, Integer);
115   DIEValue *Value = Integer == 1 ?
116     DIEIntegerOne : new (DIEValueAllocator) DIEInteger(Integer);
117   Die->addValue(Attribute, Form, Value);
118 }
119 
120 /// addSInt - Add an signed integer attribute data and value.
121 ///
122 void CompileUnit::addSInt(DIE *Die, uint16_t Attribute,
123                           uint16_t Form, int64_t Integer) {
124   if (!Form) Form = DIEInteger::BestForm(true, Integer);
125   DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
126   Die->addValue(Attribute, Form, Value);
127 }
128 
129 /// addString - Add a string attribute data and value. We always emit a
130 /// reference to the string pool instead of immediate strings so that DIEs have
131 /// more predictable sizes. In the case of split dwarf we emit an index
132 /// into another table which gets us the static offset into the string
133 /// table.
134 void CompileUnit::addString(DIE *Die, uint16_t Attribute, StringRef String) {
135   DIEValue *Value;
136   uint16_t Form;
137   if (!DD->useSplitDwarf()) {
138     MCSymbol *Symb = DU->getStringPoolEntry(String);
139     if (Asm->needsRelocationsForDwarfStringPool())
140       Value = new (DIEValueAllocator) DIELabel(Symb);
141     else {
142       MCSymbol *StringPool = DU->getStringPoolSym();
143       Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
144     }
145     Form = dwarf::DW_FORM_strp;
146   } else {
147     unsigned idx = DU->getStringPoolIndex(String);
148     Value = new (DIEValueAllocator) DIEInteger(idx);
149     Form = dwarf::DW_FORM_GNU_str_index;
150   }
151   DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
152   Die->addValue(Attribute, Form, Str);
153 }
154 
155 /// addLocalString - Add a string attribute data and value. This is guaranteed
156 /// to be in the local string pool instead of indirected.
157 void CompileUnit::addLocalString(DIE *Die, uint16_t Attribute,
158                                  StringRef String) {
159   MCSymbol *Symb = DU->getStringPoolEntry(String);
160   DIEValue *Value;
161   if (Asm->needsRelocationsForDwarfStringPool())
162     Value = new (DIEValueAllocator) DIELabel(Symb);
163   else {
164     MCSymbol *StringPool = DU->getStringPoolSym();
165     Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
166   }
167   Die->addValue(Attribute, dwarf::DW_FORM_strp, Value);
168 }
169 
170 /// addExpr - Add a Dwarf expression attribute data and value.
171 ///
172 void CompileUnit::addExpr(DIE *Die, uint16_t Attribute, uint16_t Form,
173                           const MCExpr *Expr) {
174   DIEValue *Value = new (DIEValueAllocator) DIEExpr(Expr);
175   Die->addValue(Attribute, Form, Value);
176 }
177 
178 /// addLabel - Add a Dwarf label attribute data and value.
179 ///
180 void CompileUnit::addLabel(DIE *Die, uint16_t Attribute, uint16_t Form,
181                            const MCSymbol *Label) {
182   DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
183   Die->addValue(Attribute, Form, Value);
184 }
185 
186 /// addLabelAddress - Add a dwarf label attribute data and value using
187 /// DW_FORM_addr or DW_FORM_GNU_addr_index.
188 ///
189 void CompileUnit::addLabelAddress(DIE *Die, uint16_t Attribute,
190                                   MCSymbol *Label) {
191   if (!DD->useSplitDwarf()) {
192     if (Label != NULL) {
193       DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
194       Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
195     } else {
196       DIEValue *Value = new (DIEValueAllocator) DIEInteger(0);
197       Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
198     }
199   } else {
200     unsigned idx = DU->getAddrPoolIndex(Label);
201     DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
202     Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
203   }
204 }
205 
206 /// addOpAddress - Add a dwarf op address data and value using the
207 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
208 ///
209 void CompileUnit::addOpAddress(DIE *Die, const MCSymbol *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, uint16_t Form,
230                               DIE *Entry) {
231   Die->addValue(Attribute, Form, 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 = 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(DIType Ty, int *SizeInBits) {
591   if (Ty.isDerivedType())
592     return isTypeSigned(DIDerivedType(Ty).getTypeDerivedFrom(), SizeInBits);
593   if (Ty.isBasicType())
594     if (DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed
595         || DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed_char) {
596       *SizeInBits = Ty.getSizeInBits();
597       return true;
598     }
599   return false;
600 }
601 
602 /// addConstantValue - Add constant value entry in variable DIE.
603 void CompileUnit::addConstantValue(DIE *Die, const MachineOperand &MO,
604                                    DIType Ty) {
605   // FIXME: This is a bit conservative/simple - it emits negative values at
606   // their maximum bit width which is a bit unfortunate (& doesn't prefer
607   // udata/sdata over dataN as suggested by the DWARF spec)
608   assert(MO.isImm() && "Invalid machine operand!");
609   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
610   int SizeInBits = -1;
611   bool SignedConstant = isTypeSigned(Ty, &SizeInBits);
612   uint16_t Form = SignedConstant ? dwarf::DW_FORM_sdata : dwarf::DW_FORM_udata;
613   switch (SizeInBits) {
614     case 8:  Form = dwarf::DW_FORM_data1; break;
615     case 16: Form = dwarf::DW_FORM_data2; break;
616     case 32: Form = dwarf::DW_FORM_data4; break;
617     case 64: Form = dwarf::DW_FORM_data8; break;
618     default: break;
619   }
620   SignedConstant ? addSInt(Block, 0, Form, MO.getImm())
621     : addUInt(Block, 0, Form, MO.getImm());
622 
623   addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
624 }
625 
626 /// addConstantFPValue - Add constant value entry in variable DIE.
627 void CompileUnit::addConstantFPValue(DIE *Die, const MachineOperand &MO) {
628   assert (MO.isFPImm() && "Invalid machine operand!");
629   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
630   APFloat FPImm = MO.getFPImm()->getValueAPF();
631 
632   // Get the raw data form of the floating point.
633   const APInt FltVal = FPImm.bitcastToAPInt();
634   const char *FltPtr = (const char*)FltVal.getRawData();
635 
636   int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
637   bool LittleEndian = Asm->getDataLayout().isLittleEndian();
638   int Incr = (LittleEndian ? 1 : -1);
639   int Start = (LittleEndian ? 0 : NumBytes - 1);
640   int Stop = (LittleEndian ? NumBytes : -1);
641 
642   // Output the constant to DWARF one byte at a time.
643   for (; Start != Stop; Start += Incr)
644     addUInt(Block, 0, dwarf::DW_FORM_data1,
645             (unsigned char)0xFF & FltPtr[Start]);
646 
647   addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
648 }
649 
650 /// addConstantFPValue - Add constant value entry in variable DIE.
651 void CompileUnit::addConstantFPValue(DIE *Die, const ConstantFP *CFP) {
652   addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), false);
653 }
654 
655 /// addConstantValue - Add constant value entry in variable DIE.
656 void CompileUnit::addConstantValue(DIE *Die, const ConstantInt *CI,
657                                    bool Unsigned) {
658   addConstantValue(Die, CI->getValue(), Unsigned);
659 }
660 
661 // addConstantValue - Add constant value entry in variable DIE.
662 void CompileUnit::addConstantValue(DIE *Die, const APInt &Val, bool Unsigned) {
663   unsigned CIBitWidth = Val.getBitWidth();
664   if (CIBitWidth <= 64) {
665     unsigned form = 0;
666     switch (CIBitWidth) {
667     case 8: form = dwarf::DW_FORM_data1; break;
668     case 16: form = dwarf::DW_FORM_data2; break;
669     case 32: form = dwarf::DW_FORM_data4; break;
670     case 64: form = dwarf::DW_FORM_data8; break;
671     default:
672       form = Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata;
673     }
674     if (Unsigned)
675       addUInt(Die, dwarf::DW_AT_const_value, form, Val.getZExtValue());
676     else
677       addSInt(Die, dwarf::DW_AT_const_value, form, Val.getSExtValue());
678     return;
679   }
680 
681   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
682 
683   // Get the raw data form of the large APInt.
684   const uint64_t *Ptr64 = Val.getRawData();
685 
686   int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
687   bool LittleEndian = Asm->getDataLayout().isLittleEndian();
688 
689   // Output the constant to DWARF one byte at a time.
690   for (int i = 0; i < NumBytes; i++) {
691     uint8_t c;
692     if (LittleEndian)
693       c = Ptr64[i / 8] >> (8 * (i & 7));
694     else
695       c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
696     addUInt(Block, 0, dwarf::DW_FORM_data1, c);
697   }
698 
699   addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
700 }
701 
702 /// addTemplateParams - Add template parameters into buffer.
703 void CompileUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
704   // Add template parameters.
705   for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
706     DIDescriptor Element = TParams.getElement(i);
707     if (Element.isTemplateTypeParameter())
708       Buffer.addChild(getOrCreateTemplateTypeParameterDIE(
709                         DITemplateTypeParameter(Element)));
710     else if (Element.isTemplateValueParameter())
711       Buffer.addChild(getOrCreateTemplateValueParameterDIE(
712                         DITemplateValueParameter(Element)));
713   }
714 }
715 
716 /// getOrCreateContextDIE - Get context owner's DIE.
717 DIE *CompileUnit::getOrCreateContextDIE(DIDescriptor Context) {
718   if (Context.isType())
719     return getOrCreateTypeDIE(DIType(Context));
720   else if (Context.isNameSpace())
721     return getOrCreateNameSpace(DINameSpace(Context));
722   else if (Context.isSubprogram())
723     return getOrCreateSubprogramDIE(DISubprogram(Context));
724   else
725     return getDIE(Context);
726 }
727 
728 /// addToContextOwner - Add Die into the list of its context owner's children.
729 void CompileUnit::addToContextOwner(DIE *Die, DIDescriptor Context) {
730   if (DIE *ContextDIE = getOrCreateContextDIE(Context))
731     ContextDIE->addChild(Die);
732   else
733     addDie(Die);
734 }
735 
736 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
737 /// given DIType.
738 DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
739   DIType Ty(TyNode);
740   if (!Ty.isType())
741     return NULL;
742   DIE *TyDIE = getDIE(Ty);
743   if (TyDIE)
744     return TyDIE;
745 
746   // Create new type.
747   TyDIE = new DIE(dwarf::DW_TAG_base_type);
748   insertDIE(Ty, TyDIE);
749   if (Ty.isBasicType())
750     constructTypeDIE(*TyDIE, DIBasicType(Ty));
751   else if (Ty.isCompositeType())
752     constructTypeDIE(*TyDIE, DICompositeType(Ty));
753   else {
754     assert(Ty.isDerivedType() && "Unknown kind of DIType");
755     constructTypeDIE(*TyDIE, DIDerivedType(Ty));
756   }
757   // If this is a named finished type then include it in the list of types
758   // for the accelerator tables.
759   if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
760     bool IsImplementation = 0;
761     if (Ty.isCompositeType()) {
762       DICompositeType CT(Ty);
763       // A runtime language of 0 actually means C/C++ and that any
764       // non-negative value is some version of Objective-C/C++.
765       IsImplementation = (CT.getRunTimeLang() == 0) ||
766         CT.isObjcClassComplete();
767     }
768     unsigned Flags = IsImplementation ?
769                      DwarfAccelTable::eTypeFlagClassIsImplementation : 0;
770     addAccelType(Ty.getName(), std::make_pair(TyDIE, Flags));
771   }
772 
773   addToContextOwner(TyDIE, Ty.getContext());
774   return TyDIE;
775 }
776 
777 /// addType - Add a new type attribute to the specified entity.
778 void CompileUnit::addType(DIE *Entity, DIType Ty, uint16_t Attribute) {
779   assert(Ty && "Trying to add a type that doesn't exist?");
780 
781   // Check for pre-existence.
782   DIEEntry *Entry = getDIEEntry(Ty);
783   // If it exists then use the existing value.
784   if (Entry) {
785     Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
786     return;
787   }
788 
789   // Construct type.
790   DIE *Buffer = getOrCreateTypeDIE(Ty);
791 
792   // Set up proxy.
793   Entry = createDIEEntry(Buffer);
794   insertDIEEntry(Ty, Entry);
795   Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
796 
797   // If this is a complete composite type then include it in the
798   // list of global types.
799   addGlobalType(Ty);
800 }
801 
802 /// addGlobalType - Add a new global type to the compile unit.
803 ///
804 void CompileUnit::addGlobalType(DIType Ty) {
805   DIDescriptor Context = Ty.getContext();
806   if (Ty.isCompositeType() && !Ty.getName().empty() && !Ty.isForwardDecl()
807       && (!Context || Context.isCompileUnit() || Context.isFile()
808           || Context.isNameSpace()))
809     if (DIEEntry *Entry = getDIEEntry(Ty))
810       GlobalTypes[Ty.getName()] = Entry->getEntry();
811 }
812 
813 /// addPubTypes - Add type for pubtypes section.
814 void CompileUnit::addPubTypes(DISubprogram SP) {
815   DICompositeType SPTy = SP.getType();
816   uint16_t SPTag = SPTy.getTag();
817   if (SPTag != dwarf::DW_TAG_subroutine_type)
818     return;
819 
820   DIArray Args = SPTy.getTypeArray();
821   for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
822     DIType ATy(Args.getElement(i));
823     if (!ATy.isType())
824       continue;
825     addGlobalType(ATy);
826   }
827 }
828 
829 /// constructTypeDIE - Construct basic type die from DIBasicType.
830 void CompileUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
831   // Get core information.
832   StringRef Name = BTy.getName();
833   // Add name if not anonymous or intermediate type.
834   if (!Name.empty())
835     addString(&Buffer, dwarf::DW_AT_name, Name);
836 
837   if (BTy.getTag() == dwarf::DW_TAG_unspecified_type) {
838     Buffer.setTag(dwarf::DW_TAG_unspecified_type);
839     // An unspecified type only has a name attribute.
840     return;
841   }
842 
843   Buffer.setTag(dwarf::DW_TAG_base_type);
844   addUInt(&Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
845           BTy.getEncoding());
846 
847   uint64_t Size = BTy.getSizeInBits() >> 3;
848   addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
849 }
850 
851 /// constructTypeDIE - Construct derived type die from DIDerivedType.
852 void CompileUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
853   // Get core information.
854   StringRef Name = DTy.getName();
855   uint64_t Size = DTy.getSizeInBits() >> 3;
856   uint16_t Tag = DTy.getTag();
857 
858   // FIXME - Workaround for templates.
859   if (Tag == dwarf::DW_TAG_inheritance) Tag = dwarf::DW_TAG_reference_type;
860 
861   Buffer.setTag(Tag);
862 
863   // Map to main type, void will not have a type.
864   DIType FromTy = DTy.getTypeDerivedFrom();
865   if (FromTy)
866     addType(&Buffer, FromTy);
867 
868   // Add name if not anonymous or intermediate type.
869   if (!Name.empty())
870     addString(&Buffer, dwarf::DW_AT_name, Name);
871 
872   // Add size if non-zero (derived types might be zero-sized.)
873   if (Size && Tag != dwarf::DW_TAG_pointer_type)
874     addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
875 
876   if (Tag == dwarf::DW_TAG_ptr_to_member_type)
877       addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
878                   getOrCreateTypeDIE(DTy.getClassType()));
879   // Add source line info if available and TyDesc is not a forward declaration.
880   if (!DTy.isForwardDecl())
881     addSourceLine(&Buffer, DTy);
882 }
883 
884 /// Return true if the type is appropriately scoped to be contained inside
885 /// its own type unit.
886 static bool isTypeUnitScoped(DIType Ty) {
887   DIScope Parent = Ty.getContext();
888   while (Parent) {
889     // Don't generate a hash for anything scoped inside a function.
890     if (Parent.isSubprogram())
891       return false;
892     Parent = Parent.getContext();
893   }
894   return true;
895 }
896 
897 /// Return true if the type should be split out into a type unit.
898 static bool shouldCreateTypeUnit(DICompositeType CTy) {
899   uint16_t Tag = CTy.getTag();
900 
901   switch (Tag) {
902   case dwarf::DW_TAG_structure_type:
903   case dwarf::DW_TAG_union_type:
904   case dwarf::DW_TAG_enumeration_type:
905   case dwarf::DW_TAG_class_type:
906     // If this is a class, structure, union, or enumeration type
907     // that is not a declaration, is a type definition, and not scoped
908     // inside a function then separate this out as a type unit.
909     if (CTy.isForwardDecl() || !isTypeUnitScoped(CTy))
910       return 0;
911     return 1;
912   default:
913     return 0;
914   }
915 }
916 
917 /// constructTypeDIE - Construct type DIE from DICompositeType.
918 void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
919   // Get core information.
920   StringRef Name = CTy.getName();
921 
922   uint64_t Size = CTy.getSizeInBits() >> 3;
923   uint16_t Tag = CTy.getTag();
924   Buffer.setTag(Tag);
925 
926   switch (Tag) {
927   case dwarf::DW_TAG_array_type:
928     constructArrayTypeDIE(Buffer, &CTy);
929     break;
930   case dwarf::DW_TAG_enumeration_type: {
931     DIArray Elements = CTy.getTypeArray();
932 
933     // Add enumerators to enumeration type.
934     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
935       DIE *ElemDie = NULL;
936       DIDescriptor Enum(Elements.getElement(i));
937       if (Enum.isEnumerator()) {
938         ElemDie = constructEnumTypeDIE(DIEnumerator(Enum));
939         Buffer.addChild(ElemDie);
940       }
941     }
942     DIType DTy = CTy.getTypeDerivedFrom();
943     if (DTy) {
944       addType(&Buffer, DTy);
945       addUInt(&Buffer, dwarf::DW_AT_enum_class, dwarf::DW_FORM_flag, 1);
946     }
947   }
948     break;
949   case dwarf::DW_TAG_subroutine_type: {
950     // Add return type. A void return won't have a type.
951     DIArray Elements = CTy.getTypeArray();
952     DIDescriptor RTy = Elements.getElement(0);
953     if (RTy)
954       addType(&Buffer, DIType(RTy));
955 
956     bool isPrototyped = true;
957     // Add arguments.
958     for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) {
959       DIDescriptor Ty = Elements.getElement(i);
960       if (Ty.isUnspecifiedParameter()) {
961         DIE *Arg = new DIE(dwarf::DW_TAG_unspecified_parameters);
962         Buffer.addChild(Arg);
963         isPrototyped = false;
964       } else {
965         DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
966         addType(Arg, DIType(Ty));
967         if (DIType(Ty).isArtificial())
968           addFlag(Arg, dwarf::DW_AT_artificial);
969         Buffer.addChild(Arg);
970       }
971     }
972     // Add prototype flag if we're dealing with a C language and the
973     // function has been prototyped.
974     if (isPrototyped &&
975         (Language == dwarf::DW_LANG_C89 ||
976          Language == dwarf::DW_LANG_C99 ||
977          Language == dwarf::DW_LANG_ObjC))
978       addFlag(&Buffer, dwarf::DW_AT_prototyped);
979   }
980     break;
981   case dwarf::DW_TAG_structure_type:
982   case dwarf::DW_TAG_union_type:
983   case dwarf::DW_TAG_class_type: {
984     // Add elements to structure type.
985     DIArray Elements = CTy.getTypeArray();
986     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
987       DIDescriptor Element = Elements.getElement(i);
988       DIE *ElemDie = NULL;
989       if (Element.isSubprogram()) {
990         DISubprogram SP(Element);
991         ElemDie = getOrCreateSubprogramDIE(DISubprogram(Element));
992         if (SP.isProtected())
993           addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
994                   dwarf::DW_ACCESS_protected);
995         else if (SP.isPrivate())
996           addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
997                   dwarf::DW_ACCESS_private);
998         else
999           addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1000             dwarf::DW_ACCESS_public);
1001         if (SP.isExplicit())
1002           addFlag(ElemDie, dwarf::DW_AT_explicit);
1003       } else if (Element.isDerivedType()) {
1004         DIDerivedType DDTy(Element);
1005         if (DDTy.getTag() == dwarf::DW_TAG_friend) {
1006           ElemDie = new DIE(dwarf::DW_TAG_friend);
1007           addType(ElemDie, DDTy.getTypeDerivedFrom(), dwarf::DW_AT_friend);
1008         } else if (DDTy.isStaticMember())
1009           ElemDie = createStaticMemberDIE(DDTy);
1010         else
1011           ElemDie = createMemberDIE(DDTy);
1012       } else if (Element.isObjCProperty()) {
1013         DIObjCProperty Property(Element);
1014         ElemDie = new DIE(Property.getTag());
1015         StringRef PropertyName = Property.getObjCPropertyName();
1016         addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
1017         addType(ElemDie, Property.getType());
1018         addSourceLine(ElemDie, Property);
1019         StringRef GetterName = Property.getObjCPropertyGetterName();
1020         if (!GetterName.empty())
1021           addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
1022         StringRef SetterName = Property.getObjCPropertySetterName();
1023         if (!SetterName.empty())
1024           addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
1025         unsigned PropertyAttributes = 0;
1026         if (Property.isReadOnlyObjCProperty())
1027           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
1028         if (Property.isReadWriteObjCProperty())
1029           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
1030         if (Property.isAssignObjCProperty())
1031           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
1032         if (Property.isRetainObjCProperty())
1033           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
1034         if (Property.isCopyObjCProperty())
1035           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
1036         if (Property.isNonAtomicObjCProperty())
1037           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1038         if (PropertyAttributes)
1039           addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, 0,
1040                  PropertyAttributes);
1041 
1042         DIEEntry *Entry = getDIEEntry(Element);
1043         if (!Entry) {
1044           Entry = createDIEEntry(ElemDie);
1045           insertDIEEntry(Element, Entry);
1046         }
1047       } else
1048         continue;
1049       Buffer.addChild(ElemDie);
1050     }
1051 
1052     if (CTy.isAppleBlockExtension())
1053       addFlag(&Buffer, dwarf::DW_AT_APPLE_block);
1054 
1055     DICompositeType ContainingType = CTy.getContainingType();
1056     if (DIDescriptor(ContainingType).isCompositeType())
1057       addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
1058                   getOrCreateTypeDIE(DIType(ContainingType)));
1059     else
1060       addToContextOwner(&Buffer, CTy.getContext());
1061 
1062     if (CTy.isObjcClassComplete())
1063       addFlag(&Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1064 
1065     // Add template parameters to a class, structure or union types.
1066     // FIXME: The support isn't in the metadata for this yet.
1067     if (Tag == dwarf::DW_TAG_class_type ||
1068         Tag == dwarf::DW_TAG_structure_type ||
1069         Tag == dwarf::DW_TAG_union_type)
1070       addTemplateParams(Buffer, CTy.getTemplateParams());
1071 
1072     break;
1073   }
1074   default:
1075     break;
1076   }
1077 
1078   // Add name if not anonymous or intermediate type.
1079   if (!Name.empty())
1080     addString(&Buffer, dwarf::DW_AT_name, Name);
1081 
1082   if (Tag == dwarf::DW_TAG_enumeration_type ||
1083       Tag == dwarf::DW_TAG_class_type ||
1084       Tag == dwarf::DW_TAG_structure_type ||
1085       Tag == dwarf::DW_TAG_union_type) {
1086     // Add size if non-zero (derived types might be zero-sized.)
1087     // TODO: Do we care about size for enum forward declarations?
1088     if (Size)
1089       addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
1090     else if (!CTy.isForwardDecl())
1091       // Add zero size if it is not a forward declaration.
1092       addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, 0);
1093 
1094     // If we're a forward decl, say so.
1095     if (CTy.isForwardDecl())
1096       addFlag(&Buffer, dwarf::DW_AT_declaration);
1097 
1098     // Add source line info if available.
1099     if (!CTy.isForwardDecl())
1100       addSourceLine(&Buffer, CTy);
1101 
1102     // No harm in adding the runtime language to the declaration.
1103     unsigned RLang = CTy.getRunTimeLang();
1104     if (RLang)
1105       addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class,
1106               dwarf::DW_FORM_data1, RLang);
1107   }
1108   // If this is a type applicable to a type unit it then add it to the
1109   // list of types we'll compute a hash for later.
1110   if (shouldCreateTypeUnit(CTy))
1111     DD->addTypeUnitType(&Buffer);
1112 }
1113 
1114 /// getOrCreateTemplateTypeParameterDIE - Find existing DIE or create new DIE
1115 /// for the given DITemplateTypeParameter.
1116 DIE *
1117 CompileUnit::getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP) {
1118   DIE *ParamDIE = getDIE(TP);
1119   if (ParamDIE)
1120     return ParamDIE;
1121 
1122   ParamDIE = new DIE(dwarf::DW_TAG_template_type_parameter);
1123   // Add the type if it exists, it could be void and therefore no type.
1124   if (TP.getType())
1125     addType(ParamDIE, TP.getType());
1126   if (!TP.getName().empty())
1127     addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1128   return ParamDIE;
1129 }
1130 
1131 /// getOrCreateTemplateValueParameterDIE - Find existing DIE or create new DIE
1132 /// for the given DITemplateValueParameter.
1133 DIE *
1134 CompileUnit::getOrCreateTemplateValueParameterDIE(DITemplateValueParameter VP) {
1135   DIE *ParamDIE = getDIE(VP);
1136   if (ParamDIE)
1137     return ParamDIE;
1138 
1139   ParamDIE = new DIE(VP.getTag());
1140 
1141   // Add the type if there is one, template template and template parameter
1142   // packs will not have a type.
1143   if (VP.getType())
1144     addType(ParamDIE, VP.getType());
1145   if (!VP.getName().empty())
1146     addString(ParamDIE, dwarf::DW_AT_name, VP.getName());
1147   if (Value *Val = VP.getValue()) {
1148     if (ConstantInt *CI = dyn_cast<ConstantInt>(Val))
1149       addConstantValue(ParamDIE, CI, VP.getType().isUnsignedDIType());
1150     else if (GlobalValue *GV = dyn_cast<GlobalValue>(Val)) {
1151       // For declaration non-type template parameters (such as global values and
1152       // functions)
1153       DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1154       addOpAddress(Block, Asm->Mang->getSymbol(GV));
1155       // Emit DW_OP_stack_value to use the address as the immediate value of the
1156       // parameter, rather than a pointer to it.
1157       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1158       addBlock(ParamDIE, dwarf::DW_AT_location, 0, Block);
1159     } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1160       assert(isa<MDString>(Val));
1161       addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1162                 cast<MDString>(Val)->getString());
1163     } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1164       assert(isa<MDNode>(Val));
1165       DIArray A(cast<MDNode>(Val));
1166       addTemplateParams(*ParamDIE, A);
1167     }
1168   }
1169 
1170   return ParamDIE;
1171 }
1172 
1173 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1174 DIE *CompileUnit::getOrCreateNameSpace(DINameSpace NS) {
1175   DIE *NDie = getDIE(NS);
1176   if (NDie)
1177     return NDie;
1178   NDie = new DIE(dwarf::DW_TAG_namespace);
1179   insertDIE(NS, NDie);
1180   if (!NS.getName().empty()) {
1181     addString(NDie, dwarf::DW_AT_name, NS.getName());
1182     addAccelNamespace(NS.getName(), NDie);
1183   } else
1184     addAccelNamespace("(anonymous namespace)", NDie);
1185   addSourceLine(NDie, NS);
1186   addToContextOwner(NDie, NS.getContext());
1187   return NDie;
1188 }
1189 
1190 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1191 DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
1192   DIE *SPDie = getDIE(SP);
1193   if (SPDie)
1194     return SPDie;
1195 
1196   SPDie = new DIE(dwarf::DW_TAG_subprogram);
1197 
1198   // DW_TAG_inlined_subroutine may refer to this DIE.
1199   insertDIE(SP, SPDie);
1200 
1201   DISubprogram SPDecl = SP.getFunctionDeclaration();
1202   DIE *DeclDie = NULL;
1203   if (SPDecl.isSubprogram()) {
1204     DeclDie = getOrCreateSubprogramDIE(SPDecl);
1205   }
1206 
1207   // Add to context owner.
1208   addToContextOwner(SPDie, SP.getContext());
1209 
1210   // Add function template parameters.
1211   addTemplateParams(*SPDie, SP.getTemplateParams());
1212 
1213   // Unfortunately this code needs to stay here instead of below the
1214   // AT_specification code in order to work around a bug in older
1215   // gdbs that requires the linkage name to resolve multiple template
1216   // functions.
1217   // TODO: Remove this set of code when we get rid of the old gdb
1218   // compatibility.
1219   StringRef LinkageName = SP.getLinkageName();
1220   if (!LinkageName.empty() && DD->useDarwinGDBCompat())
1221     addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1222               GlobalValue::getRealLinkageName(LinkageName));
1223 
1224   // If this DIE is going to refer declaration info using AT_specification
1225   // then there is no need to add other attributes.
1226   if (DeclDie) {
1227     // Refer function declaration directly.
1228     addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
1229                 DeclDie);
1230 
1231     return SPDie;
1232   }
1233 
1234   // Add the linkage name if we have one.
1235   if (!LinkageName.empty() && !DD->useDarwinGDBCompat())
1236     addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1237               GlobalValue::getRealLinkageName(LinkageName));
1238 
1239   // Constructors and operators for anonymous aggregates do not have names.
1240   if (!SP.getName().empty())
1241     addString(SPDie, dwarf::DW_AT_name, SP.getName());
1242 
1243   addSourceLine(SPDie, SP);
1244 
1245   // Add the prototype if we have a prototype and we have a C like
1246   // language.
1247   if (SP.isPrototyped() &&
1248       (Language == dwarf::DW_LANG_C89 ||
1249        Language == dwarf::DW_LANG_C99 ||
1250        Language == dwarf::DW_LANG_ObjC))
1251     addFlag(SPDie, dwarf::DW_AT_prototyped);
1252 
1253   // Add Return Type. A void return type will not have a type.
1254   DICompositeType SPTy = SP.getType();
1255   assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1256          "the type of a subprogram should be a subroutine");
1257 
1258   DIArray Args = SPTy.getTypeArray();
1259   if (Args.getElement(0))
1260     addType(SPDie, DIType(Args.getElement(0)));
1261 
1262   unsigned VK = SP.getVirtuality();
1263   if (VK) {
1264     addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1265     DIEBlock *Block = getDIEBlock();
1266     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1267     addUInt(Block, 0, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1268     addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
1269     ContainingTypeMap.insert(std::make_pair(SPDie,
1270                                             SP.getContainingType()));
1271   }
1272 
1273   if (!SP.isDefinition()) {
1274     addFlag(SPDie, dwarf::DW_AT_declaration);
1275 
1276     // Add arguments. Do not add arguments for subprogram definition. They will
1277     // be handled while processing variables.
1278     for (unsigned i = 1, N =  Args.getNumElements(); i < N; ++i) {
1279       DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
1280       DIType ATy = DIType(Args.getElement(i));
1281       addType(Arg, ATy);
1282       if (ATy.isArtificial())
1283         addFlag(Arg, dwarf::DW_AT_artificial);
1284       SPDie->addChild(Arg);
1285     }
1286   }
1287 
1288   if (SP.isArtificial())
1289     addFlag(SPDie, dwarf::DW_AT_artificial);
1290 
1291   if (!SP.isLocalToUnit())
1292     addFlag(SPDie, dwarf::DW_AT_external);
1293 
1294   if (SP.isOptimized())
1295     addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1296 
1297   if (unsigned isa = Asm->getISAEncoding()) {
1298     addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1299   }
1300 
1301   return SPDie;
1302 }
1303 
1304 // Return const expression if value is a GEP to access merged global
1305 // constant. e.g.
1306 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
1307 static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
1308   const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
1309   if (!CE || CE->getNumOperands() != 3 ||
1310       CE->getOpcode() != Instruction::GetElementPtr)
1311     return NULL;
1312 
1313   // First operand points to a global struct.
1314   Value *Ptr = CE->getOperand(0);
1315   if (!isa<GlobalValue>(Ptr) ||
1316       !isa<StructType>(cast<PointerType>(Ptr->getType())->getElementType()))
1317     return NULL;
1318 
1319   // Second operand is zero.
1320   const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
1321   if (!CI || !CI->isZero())
1322     return NULL;
1323 
1324   // Third operand is offset.
1325   if (!isa<ConstantInt>(CE->getOperand(2)))
1326     return NULL;
1327 
1328   return CE;
1329 }
1330 
1331 /// createGlobalVariableDIE - create global variable DIE.
1332 void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
1333   // Check for pre-existence.
1334   if (getDIE(N))
1335     return;
1336 
1337   DIGlobalVariable GV(N);
1338   if (!GV.isGlobalVariable())
1339     return;
1340 
1341   DIDescriptor GVContext = GV.getContext();
1342   DIType GTy = GV.getType();
1343 
1344   // If this is a static data member definition, some attributes belong
1345   // to the declaration DIE.
1346   DIE *VariableDIE = NULL;
1347   bool IsStaticMember = false;
1348   DIDerivedType SDMDecl = GV.getStaticDataMemberDeclaration();
1349   if (SDMDecl.Verify()) {
1350     assert(SDMDecl.isStaticMember() && "Expected static member decl");
1351     // We need the declaration DIE that is in the static member's class.
1352     // But that class might not exist in the DWARF yet.
1353     // Creating the class will create the static member decl DIE.
1354     getOrCreateContextDIE(SDMDecl.getContext());
1355     VariableDIE = getDIE(SDMDecl);
1356     assert(VariableDIE && "Static member decl has no context?");
1357     IsStaticMember = true;
1358   }
1359 
1360   // If this is not a static data member definition, create the variable
1361   // DIE and add the initial set of attributes to it.
1362   if (!VariableDIE) {
1363     VariableDIE = new DIE(GV.getTag());
1364     // Add to map.
1365     insertDIE(N, VariableDIE);
1366 
1367     // Add name and type.
1368     addString(VariableDIE, dwarf::DW_AT_name, GV.getDisplayName());
1369     addType(VariableDIE, GTy);
1370 
1371     // Add scoping info.
1372     if (!GV.isLocalToUnit()) {
1373       addFlag(VariableDIE, dwarf::DW_AT_external);
1374       addGlobalName(GV.getName(), VariableDIE);
1375     }
1376 
1377     // Add line number info.
1378     addSourceLine(VariableDIE, GV);
1379     // Add to context owner.
1380     addToContextOwner(VariableDIE, GVContext);
1381   }
1382 
1383   // Add location.
1384   bool addToAccelTable = false;
1385   DIE *VariableSpecDIE = NULL;
1386   bool isGlobalVariable = GV.getGlobal() != NULL;
1387   if (isGlobalVariable) {
1388     addToAccelTable = true;
1389     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1390     const MCSymbol *Sym = Asm->Mang->getSymbol(GV.getGlobal());
1391     if (GV.getGlobal()->isThreadLocal()) {
1392       // FIXME: Make this work with -gsplit-dwarf.
1393       unsigned PointerSize = Asm->getDataLayout().getPointerSize();
1394       assert((PointerSize == 4 || PointerSize == 8) &&
1395              "Add support for other sizes if necessary");
1396       const MCExpr *Expr =
1397           Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym);
1398       // Based on GCC's support for TLS:
1399       if (!DD->useSplitDwarf()) {
1400         // 1) Start with a constNu of the appropriate pointer size
1401         addUInt(Block, 0, dwarf::DW_FORM_data1,
1402                 PointerSize == 4 ? dwarf::DW_OP_const4u : dwarf::DW_OP_const8u);
1403         // 2) containing the (relocated) address of the TLS variable
1404         addExpr(Block, 0, dwarf::DW_FORM_udata, Expr);
1405       } else {
1406         addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
1407         addUInt(Block, 0, dwarf::DW_FORM_udata, DU->getAddrPoolIndex(Expr));
1408       }
1409       // 3) followed by a custom OP to tell the debugger about TLS (presumably)
1410       addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_lo_user);
1411     } else
1412       addOpAddress(Block, Sym);
1413     // Do not create specification DIE if context is either compile unit
1414     // or a subprogram.
1415     if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
1416         !GVContext.isFile() && !isSubprogramContext(GVContext)) {
1417       // Create specification DIE.
1418       VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1419       addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1420                   dwarf::DW_FORM_ref4, VariableDIE);
1421       addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1422       // A static member's declaration is already flagged as such.
1423       if (!SDMDecl.Verify())
1424         addFlag(VariableDIE, dwarf::DW_AT_declaration);
1425       addDie(VariableSpecDIE);
1426     } else {
1427       addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1428     }
1429     // Add linkage name.
1430     StringRef LinkageName = GV.getLinkageName();
1431     if (!LinkageName.empty()) {
1432       // From DWARF4: DIEs to which DW_AT_linkage_name may apply include:
1433       // TAG_common_block, TAG_constant, TAG_entry_point, TAG_subprogram and
1434       // TAG_variable.
1435       addString(IsStaticMember && VariableSpecDIE ?
1436                 VariableSpecDIE : VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
1437                 GlobalValue::getRealLinkageName(LinkageName));
1438       // In compatibility mode with older gdbs we put the linkage name on both
1439       // the TAG_variable DIE and on the TAG_member DIE.
1440       if (IsStaticMember && VariableSpecDIE && DD->useDarwinGDBCompat())
1441         addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
1442                   GlobalValue::getRealLinkageName(LinkageName));
1443     }
1444   } else if (const ConstantInt *CI =
1445              dyn_cast_or_null<ConstantInt>(GV.getConstant())) {
1446     // AT_const_value was added when the static member was created. To avoid
1447     // emitting AT_const_value multiple times, we only add AT_const_value when
1448     // it is not a static member.
1449     if (!IsStaticMember)
1450       addConstantValue(VariableDIE, CI, GTy.isUnsignedDIType());
1451   } else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
1452     addToAccelTable = true;
1453     // GV is a merged global.
1454     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1455     Value *Ptr = CE->getOperand(0);
1456     addOpAddress(Block, Asm->Mang->getSymbol(cast<GlobalValue>(Ptr)));
1457     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1458     SmallVector<Value*, 3> Idx(CE->op_begin()+1, CE->op_end());
1459     addUInt(Block, 0, dwarf::DW_FORM_udata,
1460                    Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx));
1461     addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1462     addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1463   }
1464 
1465   if (addToAccelTable) {
1466     DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
1467     addAccelName(GV.getName(), AddrDIE);
1468 
1469     // If the linkage name is different than the name, go ahead and output
1470     // that as well into the name table.
1471     if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
1472       addAccelName(GV.getLinkageName(), AddrDIE);
1473   }
1474 }
1475 
1476 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1477 void CompileUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR,
1478                                        DIE *IndexTy) {
1479   DIE *DW_Subrange = new DIE(dwarf::DW_TAG_subrange_type);
1480   addDIEEntry(DW_Subrange, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IndexTy);
1481 
1482   // The LowerBound value defines the lower bounds which is typically zero for
1483   // C/C++. The Count value is the number of elements.  Values are 64 bit. If
1484   // Count == -1 then the array is unbounded and we do not emit
1485   // DW_AT_lower_bound and DW_AT_upper_bound attributes. If LowerBound == 0 and
1486   // Count == 0, then the array has zero elements in which case we do not emit
1487   // an upper bound.
1488   int64_t LowerBound = SR.getLo();
1489   int64_t DefaultLowerBound = getDefaultLowerBound();
1490   int64_t Count = SR.getCount();
1491 
1492   if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1493     addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, 0, LowerBound);
1494 
1495   if (Count != -1 && Count != 0)
1496     // FIXME: An unbounded array should reference the expression that defines
1497     // the array.
1498     addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, 0, LowerBound + Count - 1);
1499 
1500   Buffer.addChild(DW_Subrange);
1501 }
1502 
1503 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1504 void CompileUnit::constructArrayTypeDIE(DIE &Buffer,
1505                                         DICompositeType *CTy) {
1506   Buffer.setTag(dwarf::DW_TAG_array_type);
1507   if (CTy->isVector())
1508     addFlag(&Buffer, dwarf::DW_AT_GNU_vector);
1509 
1510   // Emit the element type.
1511   addType(&Buffer, CTy->getTypeDerivedFrom());
1512 
1513   // Get an anonymous type for index type.
1514   // FIXME: This type should be passed down from the front end
1515   // as different languages may have different sizes for indexes.
1516   DIE *IdxTy = getIndexTyDie();
1517   if (!IdxTy) {
1518     // Construct an anonymous type for index type.
1519     IdxTy = new DIE(dwarf::DW_TAG_base_type);
1520     addString(IdxTy, dwarf::DW_AT_name, "int");
1521     addUInt(IdxTy, dwarf::DW_AT_byte_size, 0, sizeof(int32_t));
1522     addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1523             dwarf::DW_ATE_signed);
1524     addDie(IdxTy);
1525     setIndexTyDie(IdxTy);
1526   }
1527 
1528   // Add subranges to array type.
1529   DIArray Elements = CTy->getTypeArray();
1530   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1531     DIDescriptor Element = Elements.getElement(i);
1532     if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1533       constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1534   }
1535 }
1536 
1537 /// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator.
1538 DIE *CompileUnit::constructEnumTypeDIE(DIEnumerator ETy) {
1539   DIE *Enumerator = new DIE(dwarf::DW_TAG_enumerator);
1540   StringRef Name = ETy.getName();
1541   addString(Enumerator, dwarf::DW_AT_name, Name);
1542   int64_t Value = ETy.getEnumValue();
1543   addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value);
1544   return Enumerator;
1545 }
1546 
1547 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1548 /// vtables.
1549 void CompileUnit::constructContainingTypeDIEs() {
1550   for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1551          CE = ContainingTypeMap.end(); CI != CE; ++CI) {
1552     DIE *SPDie = CI->first;
1553     const MDNode *N = CI->second;
1554     if (!N) continue;
1555     DIE *NDie = getDIE(N);
1556     if (!NDie) continue;
1557     addDIEEntry(SPDie, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, NDie);
1558   }
1559 }
1560 
1561 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
1562 DIE *CompileUnit::constructVariableDIE(DbgVariable *DV,
1563                                        bool isScopeAbstract) {
1564   StringRef Name = DV->getName();
1565 
1566   // Translate tag to proper Dwarf tag.
1567   uint16_t Tag = DV->getTag();
1568 
1569   // Define variable debug information entry.
1570   DIE *VariableDie = new DIE(Tag);
1571   DbgVariable *AbsVar = DV->getAbstractVariable();
1572   DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : NULL;
1573   if (AbsDIE)
1574     addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
1575                             dwarf::DW_FORM_ref4, AbsDIE);
1576   else {
1577     if (!Name.empty())
1578       addString(VariableDie, dwarf::DW_AT_name, Name);
1579     addSourceLine(VariableDie, DV->getVariable());
1580     addType(VariableDie, DV->getType());
1581   }
1582 
1583   if (DV->isArtificial())
1584     addFlag(VariableDie, dwarf::DW_AT_artificial);
1585 
1586   if (isScopeAbstract) {
1587     DV->setDIE(VariableDie);
1588     return VariableDie;
1589   }
1590 
1591   // Add variable address.
1592 
1593   unsigned Offset = DV->getDotDebugLocOffset();
1594   if (Offset != ~0U) {
1595     addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
1596              Asm->GetTempSymbol("debug_loc", Offset));
1597     DV->setDIE(VariableDie);
1598     return VariableDie;
1599   }
1600 
1601   // Check if variable is described by a DBG_VALUE instruction.
1602   if (const MachineInstr *DVInsn = DV->getMInsn()) {
1603     assert(DVInsn->getNumOperands() == 3);
1604     if (DVInsn->getOperand(0).isReg()) {
1605       const MachineOperand RegOp = DVInsn->getOperand(0);
1606       // If the second operand is an immediate, this is an indirect value.
1607       if (DVInsn->getOperand(1).isImm()) {
1608         MachineLocation Location(RegOp.getReg(), DVInsn->getOperand(1).getImm());
1609         addVariableAddress(*DV, VariableDie, Location);
1610       } else if (RegOp.getReg())
1611         addVariableAddress(*DV, VariableDie, MachineLocation(RegOp.getReg()));
1612     } else if (DVInsn->getOperand(0).isImm())
1613       addConstantValue(VariableDie, DVInsn->getOperand(0), DV->getType());
1614     else if (DVInsn->getOperand(0).isFPImm())
1615       addConstantFPValue(VariableDie, DVInsn->getOperand(0));
1616     else if (DVInsn->getOperand(0).isCImm())
1617       addConstantValue(VariableDie, DVInsn->getOperand(0).getCImm(),
1618                        DV->getType().isUnsignedDIType());
1619 
1620     DV->setDIE(VariableDie);
1621     return VariableDie;
1622   } else {
1623     // .. else use frame index.
1624     int FI = DV->getFrameIndex();
1625     if (FI != ~0) {
1626       unsigned FrameReg = 0;
1627       const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1628       int Offset =
1629         TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
1630       MachineLocation Location(FrameReg, Offset);
1631       addVariableAddress(*DV, VariableDie, Location);
1632     }
1633   }
1634 
1635   DV->setDIE(VariableDie);
1636   return VariableDie;
1637 }
1638 
1639 /// createMemberDIE - Create new member DIE.
1640 DIE *CompileUnit::createMemberDIE(DIDerivedType DT) {
1641   DIE *MemberDie = new DIE(DT.getTag());
1642   StringRef Name = DT.getName();
1643   if (!Name.empty())
1644     addString(MemberDie, dwarf::DW_AT_name, Name);
1645 
1646   addType(MemberDie, DT.getTypeDerivedFrom());
1647 
1648   addSourceLine(MemberDie, DT);
1649 
1650   DIEBlock *MemLocationDie = new (DIEValueAllocator) DIEBlock();
1651   addUInt(MemLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1652 
1653   uint64_t Size = DT.getSizeInBits();
1654   uint64_t FieldSize = DT.getOriginalTypeSize();
1655 
1656   if (Size != FieldSize) {
1657     // Handle bitfield.
1658     addUInt(MemberDie, dwarf::DW_AT_byte_size, 0, DT.getOriginalTypeSize()>>3);
1659     addUInt(MemberDie, dwarf::DW_AT_bit_size, 0, DT.getSizeInBits());
1660 
1661     uint64_t Offset = DT.getOffsetInBits();
1662     uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1663     uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1664     uint64_t FieldOffset = (HiMark - FieldSize);
1665     Offset -= FieldOffset;
1666 
1667     // Maybe we need to work from the other end.
1668     if (Asm->getDataLayout().isLittleEndian())
1669       Offset = FieldSize - (Offset + Size);
1670     addUInt(MemberDie, dwarf::DW_AT_bit_offset, 0, Offset);
1671 
1672     // Here WD_AT_data_member_location points to the anonymous
1673     // field that includes this bit field.
1674     addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, FieldOffset >> 3);
1675 
1676   } else
1677     // This is not a bitfield.
1678     addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits() >> 3);
1679 
1680   if (DT.getTag() == dwarf::DW_TAG_inheritance
1681       && DT.isVirtual()) {
1682 
1683     // For C++, virtual base classes are not at fixed offset. Use following
1684     // expression to extract appropriate offset from vtable.
1685     // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1686 
1687     DIEBlock *VBaseLocationDie = new (DIEValueAllocator) DIEBlock();
1688     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1689     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1690     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1691     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1692     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1693     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1694     addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1695 
1696     addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0,
1697              VBaseLocationDie);
1698   } else
1699     addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0, MemLocationDie);
1700 
1701   if (DT.isProtected())
1702     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1703             dwarf::DW_ACCESS_protected);
1704   else if (DT.isPrivate())
1705     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1706             dwarf::DW_ACCESS_private);
1707   // Otherwise C++ member and base classes are considered public.
1708   else
1709     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1710             dwarf::DW_ACCESS_public);
1711   if (DT.isVirtual())
1712     addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1713             dwarf::DW_VIRTUALITY_virtual);
1714 
1715   // Objective-C properties.
1716   if (MDNode *PNode = DT.getObjCProperty())
1717     if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1718       MemberDie->addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1719                           PropertyDie);
1720 
1721   if (DT.isArtificial())
1722     addFlag(MemberDie, dwarf::DW_AT_artificial);
1723 
1724   return MemberDie;
1725 }
1726 
1727 /// createStaticMemberDIE - Create new DIE for C++ static member.
1728 DIE *CompileUnit::createStaticMemberDIE(const DIDerivedType DT) {
1729   if (!DT.Verify())
1730     return NULL;
1731 
1732   DIE *StaticMemberDIE = new DIE(DT.getTag());
1733   DIType Ty = DT.getTypeDerivedFrom();
1734 
1735   addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1736   addType(StaticMemberDIE, Ty);
1737   addSourceLine(StaticMemberDIE, DT);
1738   addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1739   addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1740 
1741   // FIXME: We could omit private if the parent is a class_type, and
1742   // public if the parent is something else.
1743   if (DT.isProtected())
1744     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1745             dwarf::DW_ACCESS_protected);
1746   else if (DT.isPrivate())
1747     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1748             dwarf::DW_ACCESS_private);
1749   else
1750     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1751             dwarf::DW_ACCESS_public);
1752 
1753   if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
1754     addConstantValue(StaticMemberDIE, CI, Ty.isUnsignedDIType());
1755   if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
1756     addConstantFPValue(StaticMemberDIE, CFP);
1757 
1758   insertDIE(DT, StaticMemberDIE);
1759   return StaticMemberDIE;
1760 }
1761