DebugInfo: Simplify a few more explicit constructions, underconstrained types, and...
[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, DICompileUnit Node,
37                          AsmPrinter *A, DwarfDebug *DW, DwarfUnits *DWU)
38     : UniqueID(UID), Node(Node), CUDie(D), Asm(A), DD(DW), DU(DWU),
39       IndexTyDie(0), DebugInfoOffset(0) {
40   DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
41   insertDIE(Node, 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 (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(DIDescriptor D) {
103   // When the MDNode can be part of the type system, the DIE can be
104   // shared across CUs.
105   return D.isType() ||
106          (D.isSubprogram() && !DISubprogram(D).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(DIDescriptor D) const {
114   if (isShareableAcrossCUs(D))
115     return DD->getDIE(D);
116   return MDNodeToDieMap.lookup(D);
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(DIDescriptor Desc, DIE *D) {
123   if (isShareableAcrossCUs(Desc)) {
124     DD->insertDIE(Desc, D);
125     return;
126   }
127   MDNodeToDieMap.insert(std::make_pair(Desc, 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, DIDescriptor N) {
300   DIE *Die = new DIE(Tag);
301   Parent.addChild(Die);
302   if (N)
303     insertDIE(N, 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(Ty);
596     TmpTy = resolve(DTy.getTypeDerivedFrom());
597     isPointer = true;
598   }
599
600   DICompositeType blockStruct(TmpTy);
601
602   // Find the __forwarding field and the variable field in the __Block_byref
603   // struct.
604   DIArray Fields = blockStruct.getTypeArray();
605   DIDerivedType varField;
606   DIDerivedType forwardingField;
607
608   for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
609     DIDerivedType DT(Fields.getElement(i));
610     StringRef fieldName = DT.getName();
611     if (fieldName == "__forwarding")
612       forwardingField = DT;
613     else if (fieldName == varName)
614       varField = DT;
615   }
616
617   // Get the offsets for the forwarding field and the variable field.
618   unsigned forwardingFieldOffset = forwardingField.getOffsetInBits() >> 3;
619   unsigned varFieldOffset = varField.getOffsetInBits() >> 2;
620
621   // Decode the original location, and use that as the start of the byref
622   // variable's location.
623   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
624
625   if (Location.isReg())
626     addRegisterOp(Block, Location.getReg());
627   else
628     addRegisterOffset(Block, Location.getReg(), Location.getOffset());
629
630   // If we started with a pointer to the __Block_byref... struct, then
631   // the first thing we need to do is dereference the pointer (DW_OP_deref).
632   if (isPointer)
633     addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
634
635   // Next add the offset for the '__forwarding' field:
636   // DW_OP_plus_uconst ForwardingFieldOffset.  Note there's no point in
637   // adding the offset if it's 0.
638   if (forwardingFieldOffset > 0) {
639     addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
640     addUInt(Block, dwarf::DW_FORM_udata, forwardingFieldOffset);
641   }
642
643   // Now dereference the __forwarding field to get to the real __Block_byref
644   // struct:  DW_OP_deref.
645   addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
646
647   // Now that we've got the real __Block_byref... struct, add the offset
648   // for the variable's field to get to the location of the actual variable:
649   // DW_OP_plus_uconst varFieldOffset.  Again, don't add if it's 0.
650   if (varFieldOffset > 0) {
651     addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
652     addUInt(Block, dwarf::DW_FORM_udata, varFieldOffset);
653   }
654
655   // Now attach the location information to the DIE.
656   addBlock(Die, Attribute, Block);
657 }
658
659 /// isTypeSigned - Return true if the type is signed.
660 static bool isTypeSigned(DwarfDebug *DD, DIType Ty, int *SizeInBits) {
661   if (Ty.isDerivedType())
662     return isTypeSigned(DD, DD->resolve(DIDerivedType(Ty).getTypeDerivedFrom()),
663                         SizeInBits);
664   if (Ty.isBasicType())
665     if (DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed ||
666         DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed_char) {
667       *SizeInBits = Ty.getSizeInBits();
668       return true;
669     }
670   return false;
671 }
672
673 /// Return true if type encoding is unsigned.
674 static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) {
675   DIDerivedType DTy(Ty);
676   if (DTy.isDerivedType())
677     return isUnsignedDIType(DD, DD->resolve(DTy.getTypeDerivedFrom()));
678
679   DIBasicType BTy(Ty);
680   if (BTy.isBasicType()) {
681     unsigned Encoding = BTy.getEncoding();
682     if (Encoding == dwarf::DW_ATE_unsigned ||
683         Encoding == dwarf::DW_ATE_unsigned_char ||
684         Encoding == dwarf::DW_ATE_boolean)
685       return true;
686   }
687   return false;
688 }
689
690 /// If this type is derived from a base type then return base type size.
691 static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
692   unsigned Tag = Ty.getTag();
693
694   if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef &&
695       Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type &&
696       Tag != dwarf::DW_TAG_restrict_type)
697     return Ty.getSizeInBits();
698
699   DIType BaseType = DD->resolve(Ty.getTypeDerivedFrom());
700
701   // If this type is not derived from any type then take conservative approach.
702   if (!BaseType.isValid())
703     return Ty.getSizeInBits();
704
705   // If this is a derived type, go ahead and get the base type, unless it's a
706   // reference then it's just the size of the field. Pointer types have no need
707   // of this since they're a different type of qualification on the type.
708   if (BaseType.getTag() == dwarf::DW_TAG_reference_type ||
709       BaseType.getTag() == dwarf::DW_TAG_rvalue_reference_type)
710     return Ty.getSizeInBits();
711
712   if (BaseType.isDerivedType())
713     return getBaseTypeSize(DD, DIDerivedType(BaseType));
714
715   return BaseType.getSizeInBits();
716 }
717
718 /// addConstantValue - Add constant value entry in variable DIE.
719 void CompileUnit::addConstantValue(DIE *Die, const MachineOperand &MO,
720                                    DIType Ty) {
721   // FIXME: This is a bit conservative/simple - it emits negative values at
722   // their maximum bit width which is a bit unfortunate (& doesn't prefer
723   // udata/sdata over dataN as suggested by the DWARF spec)
724   assert(MO.isImm() && "Invalid machine operand!");
725   int SizeInBits = -1;
726   bool SignedConstant = isTypeSigned(DD, Ty, &SizeInBits);
727   dwarf::Form Form;
728
729   // If we're a signed constant definitely use sdata.
730   if (SignedConstant) {
731     addSInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, MO.getImm());
732     return;
733   }
734
735   // Else use data for now unless it's larger than we can deal with.
736   switch (SizeInBits) {
737   case 8:
738     Form = dwarf::DW_FORM_data1;
739     break;
740   case 16:
741     Form = dwarf::DW_FORM_data2;
742     break;
743   case 32:
744     Form = dwarf::DW_FORM_data4;
745     break;
746   case 64:
747     Form = dwarf::DW_FORM_data8;
748     break;
749   default:
750     Form = dwarf::DW_FORM_udata;
751     addUInt(Die, dwarf::DW_AT_const_value, Form, MO.getImm());
752     return;
753   }
754   addUInt(Die, dwarf::DW_AT_const_value, Form, MO.getImm());
755 }
756
757 /// addConstantFPValue - Add constant value entry in variable DIE.
758 void CompileUnit::addConstantFPValue(DIE *Die, const MachineOperand &MO) {
759   assert(MO.isFPImm() && "Invalid machine operand!");
760   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
761   APFloat FPImm = MO.getFPImm()->getValueAPF();
762
763   // Get the raw data form of the floating point.
764   const APInt FltVal = FPImm.bitcastToAPInt();
765   const char *FltPtr = (const char *)FltVal.getRawData();
766
767   int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
768   bool LittleEndian = Asm->getDataLayout().isLittleEndian();
769   int Incr = (LittleEndian ? 1 : -1);
770   int Start = (LittleEndian ? 0 : NumBytes - 1);
771   int Stop = (LittleEndian ? NumBytes : -1);
772
773   // Output the constant to DWARF one byte at a time.
774   for (; Start != Stop; Start += Incr)
775     addUInt(Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]);
776
777   addBlock(Die, dwarf::DW_AT_const_value, Block);
778 }
779
780 /// addConstantFPValue - Add constant value entry in variable DIE.
781 void CompileUnit::addConstantFPValue(DIE *Die, const ConstantFP *CFP) {
782   // Pass this down to addConstantValue as an unsigned bag of bits.
783   addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true);
784 }
785
786 /// addConstantValue - Add constant value entry in variable DIE.
787 void CompileUnit::addConstantValue(DIE *Die, const ConstantInt *CI,
788                                    bool Unsigned) {
789   addConstantValue(Die, CI->getValue(), Unsigned);
790 }
791
792 // addConstantValue - Add constant value entry in variable DIE.
793 void CompileUnit::addConstantValue(DIE *Die, const APInt &Val, bool Unsigned) {
794   unsigned CIBitWidth = Val.getBitWidth();
795   if (CIBitWidth <= 64) {
796     // If we're a signed constant definitely use sdata.
797     if (!Unsigned) {
798       addSInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
799               Val.getSExtValue());
800       return;
801     }
802
803     // Else use data for now unless it's larger than we can deal with.
804     dwarf::Form Form;
805     switch (CIBitWidth) {
806     case 8:
807       Form = dwarf::DW_FORM_data1;
808       break;
809     case 16:
810       Form = dwarf::DW_FORM_data2;
811       break;
812     case 32:
813       Form = dwarf::DW_FORM_data4;
814       break;
815     case 64:
816       Form = dwarf::DW_FORM_data8;
817       break;
818     default:
819       addUInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_udata,
820               Val.getZExtValue());
821       return;
822     }
823     addUInt(Die, dwarf::DW_AT_const_value, Form, Val.getZExtValue());
824     return;
825   }
826
827   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
828
829   // Get the raw data form of the large APInt.
830   const uint64_t *Ptr64 = Val.getRawData();
831
832   int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
833   bool LittleEndian = Asm->getDataLayout().isLittleEndian();
834
835   // Output the constant to DWARF one byte at a time.
836   for (int i = 0; i < NumBytes; i++) {
837     uint8_t c;
838     if (LittleEndian)
839       c = Ptr64[i / 8] >> (8 * (i & 7));
840     else
841       c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
842     addUInt(Block, dwarf::DW_FORM_data1, c);
843   }
844
845   addBlock(Die, dwarf::DW_AT_const_value, Block);
846 }
847
848 /// addTemplateParams - Add template parameters into buffer.
849 void CompileUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
850   // Add template parameters.
851   for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
852     DIDescriptor Element = TParams.getElement(i);
853     if (Element.isTemplateTypeParameter())
854       constructTemplateTypeParameterDIE(Buffer,
855                                         DITemplateTypeParameter(Element));
856     else if (Element.isTemplateValueParameter())
857       constructTemplateValueParameterDIE(Buffer,
858                                          DITemplateValueParameter(Element));
859   }
860 }
861
862 /// getOrCreateContextDIE - Get context owner's DIE.
863 DIE *CompileUnit::getOrCreateContextDIE(DIScope Context) {
864   if (!Context || Context.isFile())
865     return getCUDie();
866   if (Context.isType())
867     return getOrCreateTypeDIE(DIType(Context));
868   if (Context.isNameSpace())
869     return getOrCreateNameSpace(DINameSpace(Context));
870   if (Context.isSubprogram())
871     return getOrCreateSubprogramDIE(DISubprogram(Context));
872   return getDIE(Context);
873 }
874
875 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
876 /// given DIType.
877 DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
878   if (!TyNode)
879     return NULL;
880
881   DIType Ty(TyNode);
882   assert(Ty.isType());
883
884   // Construct the context before querying for the existence of the DIE in case
885   // such construction creates the DIE.
886   DIE *ContextDIE = getOrCreateContextDIE(resolve(Ty.getContext()));
887   assert(ContextDIE);
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     DIType RTy(Elements.getElement(0));
1147     if (RTy)
1148       addType(&Buffer, 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 = 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(SP);
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 (ContainingType)
1249       addDIEEntry(&Buffer, dwarf::DW_AT_containing_type,
1250                   getOrCreateTypeDIE(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
1360   DIE *NDie = getDIE(NS);
1361   if (NDie)
1362     return NDie;
1363   NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS);
1364
1365   if (!NS.getName().empty()) {
1366     addString(NDie, dwarf::DW_AT_name, NS.getName());
1367     addAccelNamespace(NS.getName(), NDie);
1368     addGlobalName(NS.getName(), NDie, NS.getContext());
1369   } else
1370     addAccelNamespace("(anonymous namespace)", NDie);
1371   addSourceLine(NDie, NS);
1372   return NDie;
1373 }
1374
1375 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1376 DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
1377   // Construct the context before querying for the existence of the DIE in case
1378   // such construction creates the DIE (as is the case for member function
1379   // declarations).
1380   DIE *ContextDIE = getOrCreateContextDIE(resolve(SP.getContext()));
1381
1382   DIE *SPDie = getDIE(SP);
1383   if (SPDie)
1384     return SPDie;
1385
1386   DISubprogram SPDecl = SP.getFunctionDeclaration();
1387   if (SPDecl.isSubprogram())
1388     // Add subprogram definitions to the CU die directly.
1389     ContextDIE = CUDie.get();
1390
1391   // DW_TAG_inlined_subroutine may refer to this DIE.
1392   SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP);
1393
1394   DIE *DeclDie = NULL;
1395   if (SPDecl.isSubprogram())
1396     DeclDie = getOrCreateSubprogramDIE(SPDecl);
1397
1398   // Add function template parameters.
1399   addTemplateParams(*SPDie, SP.getTemplateParams());
1400
1401   // If this DIE is going to refer declaration info using AT_specification
1402   // then there is no need to add other attributes.
1403   if (DeclDie) {
1404     // Refer function declaration directly.
1405     addDIEEntry(SPDie, dwarf::DW_AT_specification, DeclDie);
1406
1407     return SPDie;
1408   }
1409
1410   // Add the linkage name if we have one.
1411   StringRef LinkageName = SP.getLinkageName();
1412   if (!LinkageName.empty())
1413     addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1414               GlobalValue::getRealLinkageName(LinkageName));
1415
1416   // Constructors and operators for anonymous aggregates do not have names.
1417   if (!SP.getName().empty())
1418     addString(SPDie, dwarf::DW_AT_name, SP.getName());
1419
1420   addSourceLine(SPDie, SP);
1421
1422   // Add the prototype if we have a prototype and we have a C like
1423   // language.
1424   uint16_t Language = getLanguage();
1425   if (SP.isPrototyped() &&
1426       (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1427        Language == dwarf::DW_LANG_ObjC))
1428     addFlag(SPDie, dwarf::DW_AT_prototyped);
1429
1430   DICompositeType SPTy = SP.getType();
1431   assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1432          "the type of a subprogram should be a subroutine");
1433
1434   DIArray Args = SPTy.getTypeArray();
1435   // Add a return type. If this is a type like a C/C++ void type we don't add a
1436   // return type.
1437   if (Args.getElement(0))
1438     addType(SPDie, DIType(Args.getElement(0)));
1439
1440   unsigned VK = SP.getVirtuality();
1441   if (VK) {
1442     addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1443     DIEBlock *Block = getDIEBlock();
1444     addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1445     addUInt(Block, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1446     addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
1447     ContainingTypeMap.insert(
1448         std::make_pair(SPDie, resolve(SP.getContainingType())));
1449   }
1450
1451   if (!SP.isDefinition()) {
1452     addFlag(SPDie, dwarf::DW_AT_declaration);
1453
1454     // Add arguments. Do not add arguments for subprogram definition. They will
1455     // be handled while processing variables.
1456     for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
1457       DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, *SPDie);
1458       DIType ATy(Args.getElement(i));
1459       addType(Arg, ATy);
1460       if (ATy.isArtificial())
1461         addFlag(Arg, dwarf::DW_AT_artificial);
1462     }
1463   }
1464
1465   if (SP.isArtificial())
1466     addFlag(SPDie, dwarf::DW_AT_artificial);
1467
1468   if (!SP.isLocalToUnit())
1469     addFlag(SPDie, dwarf::DW_AT_external);
1470
1471   if (SP.isOptimized())
1472     addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1473
1474   if (unsigned isa = Asm->getISAEncoding()) {
1475     addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1476   }
1477
1478   return SPDie;
1479 }
1480
1481 // Return const expression if value is a GEP to access merged global
1482 // constant. e.g.
1483 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
1484 static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
1485   const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
1486   if (!CE || CE->getNumOperands() != 3 ||
1487       CE->getOpcode() != Instruction::GetElementPtr)
1488     return NULL;
1489
1490   // First operand points to a global struct.
1491   Value *Ptr = CE->getOperand(0);
1492   if (!isa<GlobalValue>(Ptr) ||
1493       !isa<StructType>(cast<PointerType>(Ptr->getType())->getElementType()))
1494     return NULL;
1495
1496   // Second operand is zero.
1497   const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
1498   if (!CI || !CI->isZero())
1499     return NULL;
1500
1501   // Third operand is offset.
1502   if (!isa<ConstantInt>(CE->getOperand(2)))
1503     return NULL;
1504
1505   return CE;
1506 }
1507
1508 /// createGlobalVariableDIE - create global variable DIE.
1509 void CompileUnit::createGlobalVariableDIE(DIGlobalVariable GV) {
1510
1511   // Check for pre-existence.
1512   if (getDIE(GV))
1513     return;
1514
1515   if (!GV.isGlobalVariable())
1516     return;
1517
1518   DIScope GVContext = GV.getContext();
1519   DIType GTy = GV.getType();
1520
1521   // If this is a static data member definition, some attributes belong
1522   // to the declaration DIE.
1523   DIE *VariableDIE = NULL;
1524   bool IsStaticMember = false;
1525   DIDerivedType SDMDecl = GV.getStaticDataMemberDeclaration();
1526   if (SDMDecl.Verify()) {
1527     assert(SDMDecl.isStaticMember() && "Expected static member decl");
1528     // We need the declaration DIE that is in the static member's class.
1529     VariableDIE = getOrCreateStaticMemberDIE(SDMDecl);
1530     IsStaticMember = true;
1531   }
1532
1533   // If this is not a static data member definition, create the variable
1534   // DIE and add the initial set of attributes to it.
1535   if (!VariableDIE) {
1536     // Construct the context before querying for the existence of the DIE in
1537     // case such construction creates the DIE.
1538     DIE *ContextDIE = getOrCreateContextDIE(GVContext);
1539
1540     // Add to map.
1541     VariableDIE = createAndAddDIE(GV.getTag(), *ContextDIE, GV);
1542
1543     // Add name and type.
1544     addString(VariableDIE, dwarf::DW_AT_name, GV.getDisplayName());
1545     addType(VariableDIE, GTy);
1546
1547     // Add scoping info.
1548     if (!GV.isLocalToUnit())
1549       addFlag(VariableDIE, dwarf::DW_AT_external);
1550
1551     // Add line number info.
1552     addSourceLine(VariableDIE, GV);
1553   }
1554
1555   // Add location.
1556   bool addToAccelTable = false;
1557   DIE *VariableSpecDIE = NULL;
1558   bool isGlobalVariable = GV.getGlobal() != NULL;
1559   if (isGlobalVariable) {
1560     addToAccelTable = true;
1561     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1562     const MCSymbol *Sym = Asm->getSymbol(GV.getGlobal());
1563     if (GV.getGlobal()->isThreadLocal()) {
1564       // FIXME: Make this work with -gsplit-dwarf.
1565       unsigned PointerSize = Asm->getDataLayout().getPointerSize();
1566       assert((PointerSize == 4 || PointerSize == 8) &&
1567              "Add support for other sizes if necessary");
1568       const MCExpr *Expr =
1569           Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym);
1570       // Based on GCC's support for TLS:
1571       if (!DD->useSplitDwarf()) {
1572         // 1) Start with a constNu of the appropriate pointer size
1573         addUInt(Block, dwarf::DW_FORM_data1,
1574                 PointerSize == 4 ? dwarf::DW_OP_const4u : dwarf::DW_OP_const8u);
1575         // 2) containing the (relocated) offset of the TLS variable
1576         //    within the module's TLS block.
1577         addExpr(Block, dwarf::DW_FORM_udata, Expr);
1578       } else {
1579         addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
1580         addUInt(Block, dwarf::DW_FORM_udata, DU->getAddrPoolIndex(Expr));
1581       }
1582       // 3) followed by a custom OP to make the debugger do a TLS lookup.
1583       addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_push_tls_address);
1584     } else
1585       addOpAddress(Block, Sym);
1586     // Do not create specification DIE if context is either compile unit
1587     // or a subprogram.
1588     if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
1589         !GVContext.isFile() && !DD->isSubprogramContext(GVContext)) {
1590       // Create specification DIE.
1591       VariableSpecDIE = createAndAddDIE(dwarf::DW_TAG_variable, *CUDie);
1592       addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification, VariableDIE);
1593       addBlock(VariableSpecDIE, dwarf::DW_AT_location, Block);
1594       // A static member's declaration is already flagged as such.
1595       if (!SDMDecl.Verify())
1596         addFlag(VariableDIE, dwarf::DW_AT_declaration);
1597     } else {
1598       addBlock(VariableDIE, dwarf::DW_AT_location, Block);
1599     }
1600     // Add the linkage name.
1601     StringRef LinkageName = GV.getLinkageName();
1602     if (!LinkageName.empty())
1603       // From DWARF4: DIEs to which DW_AT_linkage_name may apply include:
1604       // TAG_common_block, TAG_constant, TAG_entry_point, TAG_subprogram and
1605       // TAG_variable.
1606       addString(IsStaticMember && VariableSpecDIE ? VariableSpecDIE
1607                                                   : VariableDIE,
1608                 dwarf::DW_AT_MIPS_linkage_name,
1609                 GlobalValue::getRealLinkageName(LinkageName));
1610   } else if (const ConstantInt *CI =
1611                  dyn_cast_or_null<ConstantInt>(GV.getConstant())) {
1612     // AT_const_value was added when the static member was created. To avoid
1613     // emitting AT_const_value multiple times, we only add AT_const_value when
1614     // it is not a static member.
1615     if (!IsStaticMember)
1616       addConstantValue(VariableDIE, CI, isUnsignedDIType(DD, GTy));
1617   } else if (const ConstantExpr *CE = getMergedGlobalExpr(GV->getOperand(11))) {
1618     addToAccelTable = true;
1619     // GV is a merged global.
1620     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1621     Value *Ptr = CE->getOperand(0);
1622     addOpAddress(Block, Asm->getSymbol(cast<GlobalValue>(Ptr)));
1623     addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1624     SmallVector<Value *, 3> Idx(CE->op_begin() + 1, CE->op_end());
1625     addUInt(Block, dwarf::DW_FORM_udata,
1626             Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx));
1627     addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1628     addBlock(VariableDIE, dwarf::DW_AT_location, Block);
1629   }
1630
1631   if (addToAccelTable) {
1632     DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
1633     addAccelName(GV.getName(), AddrDIE);
1634
1635     // If the linkage name is different than the name, go ahead and output
1636     // that as well into the name table.
1637     if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
1638       addAccelName(GV.getLinkageName(), AddrDIE);
1639   }
1640
1641   if (!GV.isLocalToUnit())
1642     addGlobalName(GV.getName(), VariableSpecDIE ? VariableSpecDIE : VariableDIE,
1643                   GV.getContext());
1644 }
1645
1646 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1647 void CompileUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR,
1648                                        DIE *IndexTy) {
1649   DIE *DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer);
1650   addDIEEntry(DW_Subrange, dwarf::DW_AT_type, IndexTy);
1651
1652   // The LowerBound value defines the lower bounds which is typically zero for
1653   // C/C++. The Count value is the number of elements.  Values are 64 bit. If
1654   // Count == -1 then the array is unbounded and we do not emit
1655   // DW_AT_lower_bound and DW_AT_upper_bound attributes. If LowerBound == 0 and
1656   // Count == 0, then the array has zero elements in which case we do not emit
1657   // an upper bound.
1658   int64_t LowerBound = SR.getLo();
1659   int64_t DefaultLowerBound = getDefaultLowerBound();
1660   int64_t Count = SR.getCount();
1661
1662   if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1663     addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
1664
1665   if (Count != -1 && Count != 0)
1666     // FIXME: An unbounded array should reference the expression that defines
1667     // the array.
1668     addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, None,
1669             LowerBound + Count - 1);
1670 }
1671
1672 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1673 void CompileUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
1674   if (CTy.isVector())
1675     addFlag(&Buffer, dwarf::DW_AT_GNU_vector);
1676
1677   // Emit the element type.
1678   addType(&Buffer, resolve(CTy.getTypeDerivedFrom()));
1679
1680   // Get an anonymous type for index type.
1681   // FIXME: This type should be passed down from the front end
1682   // as different languages may have different sizes for indexes.
1683   DIE *IdxTy = getIndexTyDie();
1684   if (!IdxTy) {
1685     // Construct an anonymous type for index type.
1686     IdxTy = createAndAddDIE(dwarf::DW_TAG_base_type, *CUDie.get());
1687     addString(IdxTy, dwarf::DW_AT_name, "int");
1688     addUInt(IdxTy, dwarf::DW_AT_byte_size, None, sizeof(int32_t));
1689     addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1690             dwarf::DW_ATE_signed);
1691     setIndexTyDie(IdxTy);
1692   }
1693
1694   // Add subranges to array type.
1695   DIArray Elements = CTy.getTypeArray();
1696   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1697     DIDescriptor Element = Elements.getElement(i);
1698     if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1699       constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1700   }
1701 }
1702
1703 /// constructEnumTypeDIE - Construct an enum type DIE from DICompositeType.
1704 void CompileUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) {
1705   DIArray Elements = CTy.getTypeArray();
1706
1707   // Add enumerators to enumeration type.
1708   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1709     DIEnumerator Enum(Elements.getElement(i));
1710     if (Enum.isEnumerator()) {
1711       DIE *Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
1712       StringRef Name = Enum.getName();
1713       addString(Enumerator, dwarf::DW_AT_name, Name);
1714       int64_t Value = Enum.getEnumValue();
1715       addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value);
1716     }
1717   }
1718   DIType DTy = resolve(CTy.getTypeDerivedFrom());
1719   if (DTy) {
1720     addType(&Buffer, DTy);
1721     addFlag(&Buffer, dwarf::DW_AT_enum_class);
1722   }
1723 }
1724
1725 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1726 /// vtables.
1727 void CompileUnit::constructContainingTypeDIEs() {
1728   for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1729                                                  CE = ContainingTypeMap.end();
1730        CI != CE; ++CI) {
1731     DIE *SPDie = CI->first;
1732     DIDescriptor D(CI->second);
1733     if (!D)
1734       continue;
1735     DIE *NDie = getDIE(D);
1736     if (!NDie)
1737       continue;
1738     addDIEEntry(SPDie, dwarf::DW_AT_containing_type, NDie);
1739   }
1740 }
1741
1742 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
1743 DIE *CompileUnit::constructVariableDIE(DbgVariable &DV, bool isScopeAbstract) {
1744   StringRef Name = DV.getName();
1745
1746   // Define variable debug information entry.
1747   DIE *VariableDie = new DIE(DV.getTag());
1748   DbgVariable *AbsVar = DV.getAbstractVariable();
1749   DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : NULL;
1750   if (AbsDIE)
1751     addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin, AbsDIE);
1752   else {
1753     if (!Name.empty())
1754       addString(VariableDie, dwarf::DW_AT_name, Name);
1755     addSourceLine(VariableDie, DV.getVariable());
1756     addType(VariableDie, DV.getType());
1757   }
1758
1759   if (DV.isArtificial())
1760     addFlag(VariableDie, dwarf::DW_AT_artificial);
1761
1762   if (isScopeAbstract) {
1763     DV.setDIE(VariableDie);
1764     return VariableDie;
1765   }
1766
1767   // Add variable address.
1768
1769   unsigned Offset = DV.getDotDebugLocOffset();
1770   if (Offset != ~0U) {
1771     addLabel(VariableDie, dwarf::DW_AT_location,
1772              DD->getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset
1773                                         : dwarf::DW_FORM_data4,
1774              Asm->GetTempSymbol("debug_loc", Offset));
1775     DV.setDIE(VariableDie);
1776     return VariableDie;
1777   }
1778
1779   // Check if variable is described by a DBG_VALUE instruction.
1780   if (const MachineInstr *DVInsn = DV.getMInsn()) {
1781     assert(DVInsn->getNumOperands() == 3);
1782     if (DVInsn->getOperand(0).isReg()) {
1783       const MachineOperand RegOp = DVInsn->getOperand(0);
1784       // If the second operand is an immediate, this is an indirect value.
1785       if (DVInsn->getOperand(1).isImm()) {
1786         MachineLocation Location(RegOp.getReg(),
1787                                  DVInsn->getOperand(1).getImm());
1788         addVariableAddress(DV, VariableDie, Location);
1789       } else if (RegOp.getReg())
1790         addVariableAddress(DV, VariableDie, MachineLocation(RegOp.getReg()));
1791     } else if (DVInsn->getOperand(0).isImm())
1792       addConstantValue(VariableDie, DVInsn->getOperand(0), DV.getType());
1793     else if (DVInsn->getOperand(0).isFPImm())
1794       addConstantFPValue(VariableDie, DVInsn->getOperand(0));
1795     else if (DVInsn->getOperand(0).isCImm())
1796       addConstantValue(VariableDie, DVInsn->getOperand(0).getCImm(),
1797                        isUnsignedDIType(DD, DV.getType()));
1798
1799     DV.setDIE(VariableDie);
1800     return VariableDie;
1801   } else {
1802     // .. else use frame index.
1803     int FI = DV.getFrameIndex();
1804     if (FI != ~0) {
1805       unsigned FrameReg = 0;
1806       const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1807       int Offset = TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
1808       MachineLocation Location(FrameReg, Offset);
1809       addVariableAddress(DV, VariableDie, Location);
1810     }
1811   }
1812
1813   DV.setDIE(VariableDie);
1814   return VariableDie;
1815 }
1816
1817 /// constructMemberDIE - Construct member DIE from DIDerivedType.
1818 void CompileUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT) {
1819   DIE *MemberDie = createAndAddDIE(DT.getTag(), Buffer);
1820   StringRef Name = DT.getName();
1821   if (!Name.empty())
1822     addString(MemberDie, dwarf::DW_AT_name, Name);
1823
1824   addType(MemberDie, resolve(DT.getTypeDerivedFrom()));
1825
1826   addSourceLine(MemberDie, DT);
1827
1828   DIEBlock *MemLocationDie = new (DIEValueAllocator) DIEBlock();
1829   addUInt(MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1830
1831   if (DT.getTag() == dwarf::DW_TAG_inheritance && DT.isVirtual()) {
1832
1833     // For C++, virtual base classes are not at fixed offset. Use following
1834     // expression to extract appropriate offset from vtable.
1835     // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1836
1837     DIEBlock *VBaseLocationDie = new (DIEValueAllocator) DIEBlock();
1838     addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1839     addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1840     addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1841     addUInt(VBaseLocationDie, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1842     addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1843     addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1844     addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1845
1846     addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie);
1847   } else {
1848     uint64_t Size = DT.getSizeInBits();
1849     uint64_t FieldSize = getBaseTypeSize(DD, DT);
1850     uint64_t OffsetInBytes;
1851
1852     if (Size != FieldSize) {
1853       // Handle bitfield.
1854       addUInt(MemberDie, dwarf::DW_AT_byte_size, None,
1855               getBaseTypeSize(DD, DT) >> 3);
1856       addUInt(MemberDie, dwarf::DW_AT_bit_size, None, DT.getSizeInBits());
1857
1858       uint64_t Offset = DT.getOffsetInBits();
1859       uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1860       uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1861       uint64_t FieldOffset = (HiMark - FieldSize);
1862       Offset -= FieldOffset;
1863
1864       // Maybe we need to work from the other end.
1865       if (Asm->getDataLayout().isLittleEndian())
1866         Offset = FieldSize - (Offset + Size);
1867       addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset);
1868
1869       // Here WD_AT_data_member_location points to the anonymous
1870       // field that includes this bit field.
1871       OffsetInBytes = FieldOffset >> 3;
1872     } else
1873       // This is not a bitfield.
1874       OffsetInBytes = DT.getOffsetInBits() >> 3;
1875     addUInt(MemberDie, dwarf::DW_AT_data_member_location, None, OffsetInBytes);
1876   }
1877
1878   if (DT.isProtected())
1879     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1880             dwarf::DW_ACCESS_protected);
1881   else if (DT.isPrivate())
1882     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1883             dwarf::DW_ACCESS_private);
1884   // Otherwise C++ member and base classes are considered public.
1885   else
1886     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1887             dwarf::DW_ACCESS_public);
1888   if (DT.isVirtual())
1889     addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1890             dwarf::DW_VIRTUALITY_virtual);
1891
1892   // Objective-C properties.
1893   if (MDNode *PNode = DT.getObjCProperty())
1894     if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1895       MemberDie->addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1896                           PropertyDie);
1897
1898   if (DT.isArtificial())
1899     addFlag(MemberDie, dwarf::DW_AT_artificial);
1900 }
1901
1902 /// getOrCreateStaticMemberDIE - Create new DIE for C++ static member.
1903 DIE *CompileUnit::getOrCreateStaticMemberDIE(DIDerivedType DT) {
1904   if (!DT.Verify())
1905     return NULL;
1906
1907   // Construct the context before querying for the existence of the DIE in case
1908   // such construction creates the DIE.
1909   DIE *ContextDIE = getOrCreateContextDIE(resolve(DT.getContext()));
1910   assert(dwarf::isType(ContextDIE->getTag()) &&
1911          "Static member should belong to a type.");
1912
1913   DIE *StaticMemberDIE = getDIE(DT);
1914   if (StaticMemberDIE)
1915     return StaticMemberDIE;
1916
1917   StaticMemberDIE = createAndAddDIE(DT.getTag(), *ContextDIE, DT);
1918
1919   DIType Ty = resolve(DT.getTypeDerivedFrom());
1920
1921   addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1922   addType(StaticMemberDIE, Ty);
1923   addSourceLine(StaticMemberDIE, DT);
1924   addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1925   addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1926
1927   // FIXME: We could omit private if the parent is a class_type, and
1928   // public if the parent is something else.
1929   if (DT.isProtected())
1930     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1931             dwarf::DW_ACCESS_protected);
1932   else if (DT.isPrivate())
1933     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1934             dwarf::DW_ACCESS_private);
1935   else
1936     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1937             dwarf::DW_ACCESS_public);
1938
1939   if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
1940     addConstantValue(StaticMemberDIE, CI, isUnsignedDIType(DD, Ty));
1941   if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
1942     addConstantFPValue(StaticMemberDIE, CFP);
1943
1944   return StaticMemberDIE;
1945 }
1946
1947 void CompileUnit::emitHeader(const MCSection *ASection,
1948                              const MCSymbol *ASectionSym) {
1949   Asm->OutStreamer.AddComment("DWARF version number");
1950   Asm->EmitInt16(DD->getDwarfVersion());
1951   Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1952   Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
1953                          ASectionSym);
1954   Asm->OutStreamer.AddComment("Address Size (in bytes)");
1955   Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1956 }