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