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