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