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