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 #include "DwarfUnit.h"
15 
16 #include "DwarfAccelTable.h"
17 #include "DwarfCompileUnit.h"
18 #include "DwarfDebug.h"
19 #include "llvm/ADT/APFloat.h"
20 #include "llvm/IR/Constants.h"
21 #include "llvm/IR/DIBuilder.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 #include "llvm/Target/TargetSubtargetInfo.h"
36 
37 using namespace llvm;
38 
39 #define DEBUG_TYPE "dwarfdebug"
40 
41 static cl::opt<bool>
42 GenerateDwarfTypeUnits("generate-type-units", cl::Hidden,
43                        cl::desc("Generate DWARF4 type units."),
44                        cl::init(false));
45 
46 /// Unit - Unit constructor.
47 DwarfUnit::DwarfUnit(unsigned UID, dwarf::Tag UnitTag, DICompileUnit Node,
48                      AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU)
49     : UniqueID(UID), CUNode(Node), UnitDie(UnitTag), DebugInfoOffset(0), Asm(A),
50       DD(DW), DU(DWU), IndexTyDie(nullptr), Section(nullptr) {
51   assert(UnitTag == dwarf::DW_TAG_compile_unit ||
52          UnitTag == dwarf::DW_TAG_type_unit);
53   DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
54 }
55 
56 DwarfTypeUnit::DwarfTypeUnit(unsigned UID, DwarfCompileUnit &CU, AsmPrinter *A,
57                              DwarfDebug *DW, DwarfFile *DWU,
58                              MCDwarfDwoLineTable *SplitLineTable)
59     : DwarfUnit(UID, dwarf::DW_TAG_type_unit, CU.getCUNode(), A, DW, DWU),
60       CU(CU), SplitLineTable(SplitLineTable) {
61   if (SplitLineTable)
62     addSectionOffset(UnitDie, dwarf::DW_AT_stmt_list, 0);
63 }
64 
65 /// ~Unit - Destructor for compile unit.
66 DwarfUnit::~DwarfUnit() {
67   for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
68     DIEBlocks[j]->~DIEBlock();
69   for (unsigned j = 0, M = DIELocs.size(); j < M; ++j)
70     DIELocs[j]->~DIELoc();
71 }
72 
73 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
74 /// information entry.
75 DIEEntry *DwarfUnit::createDIEEntry(DIE &Entry) {
76   DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry);
77   return Value;
78 }
79 
80 /// getDefaultLowerBound - Return the default lower bound for an array. If the
81 /// DWARF version doesn't handle the language, return -1.
82 int64_t DwarfUnit::getDefaultLowerBound() const {
83   switch (getLanguage()) {
84   default:
85     break;
86 
87   case dwarf::DW_LANG_C89:
88   case dwarf::DW_LANG_C99:
89   case dwarf::DW_LANG_C:
90   case dwarf::DW_LANG_C_plus_plus:
91   case dwarf::DW_LANG_ObjC:
92   case dwarf::DW_LANG_ObjC_plus_plus:
93     return 0;
94 
95   case dwarf::DW_LANG_Fortran77:
96   case dwarf::DW_LANG_Fortran90:
97   case dwarf::DW_LANG_Fortran95:
98     return 1;
99 
100   // The languages below have valid values only if the DWARF version >= 4.
101   case dwarf::DW_LANG_Java:
102   case dwarf::DW_LANG_Python:
103   case dwarf::DW_LANG_UPC:
104   case dwarf::DW_LANG_D:
105     if (dwarf::DWARF_VERSION >= 4)
106       return 0;
107     break;
108 
109   case dwarf::DW_LANG_Ada83:
110   case dwarf::DW_LANG_Ada95:
111   case dwarf::DW_LANG_Cobol74:
112   case dwarf::DW_LANG_Cobol85:
113   case dwarf::DW_LANG_Modula2:
114   case dwarf::DW_LANG_Pascal83:
115   case dwarf::DW_LANG_PLI:
116     if (dwarf::DWARF_VERSION >= 4)
117       return 1;
118     break;
119   }
120 
121   return -1;
122 }
123 
124 /// Check whether the DIE for this MDNode can be shared across CUs.
125 static bool isShareableAcrossCUs(DIDescriptor D) {
126   // When the MDNode can be part of the type system, the DIE can be shared
127   // across CUs.
128   // Combining type units and cross-CU DIE sharing is lower value (since
129   // cross-CU DIE sharing is used in LTO and removes type redundancy at that
130   // level already) but may be implementable for some value in projects
131   // building multiple independent libraries with LTO and then linking those
132   // together.
133   return (D.isType() ||
134           (D.isSubprogram() && !DISubprogram(D).isDefinition())) &&
135          !GenerateDwarfTypeUnits;
136 }
137 
138 /// getDIE - Returns the debug information entry map slot for the
139 /// specified debug variable. We delegate the request to DwarfDebug
140 /// when the DIE for this MDNode can be shared across CUs. The mappings
141 /// will be kept in DwarfDebug for shareable DIEs.
142 DIE *DwarfUnit::getDIE(DIDescriptor D) const {
143   if (isShareableAcrossCUs(D))
144     return DU->getDIE(D);
145   return MDNodeToDieMap.lookup(D);
146 }
147 
148 /// insertDIE - Insert DIE into the map. We delegate the request to DwarfDebug
149 /// when the DIE for this MDNode can be shared across CUs. The mappings
150 /// will be kept in DwarfDebug for shareable DIEs.
151 void DwarfUnit::insertDIE(DIDescriptor Desc, DIE *D) {
152   if (isShareableAcrossCUs(Desc)) {
153     DU->insertDIE(Desc, D);
154     return;
155   }
156   MDNodeToDieMap.insert(std::make_pair(Desc, D));
157 }
158 
159 /// addFlag - Add a flag that is true.
160 void DwarfUnit::addFlag(DIE &Die, dwarf::Attribute Attribute) {
161   if (DD->getDwarfVersion() >= 4)
162     Die.addValue(Attribute, dwarf::DW_FORM_flag_present, DIEIntegerOne);
163   else
164     Die.addValue(Attribute, dwarf::DW_FORM_flag, DIEIntegerOne);
165 }
166 
167 /// addUInt - Add an unsigned integer attribute data and value.
168 ///
169 void DwarfUnit::addUInt(DIE &Die, dwarf::Attribute Attribute,
170                         Optional<dwarf::Form> Form, uint64_t Integer) {
171   if (!Form)
172     Form = DIEInteger::BestForm(false, Integer);
173   DIEValue *Value = Integer == 1 ? DIEIntegerOne : new (DIEValueAllocator)
174                         DIEInteger(Integer);
175   Die.addValue(Attribute, *Form, Value);
176 }
177 
178 void DwarfUnit::addUInt(DIE &Block, dwarf::Form Form, uint64_t Integer) {
179   addUInt(Block, (dwarf::Attribute)0, Form, Integer);
180 }
181 
182 /// addSInt - Add an signed integer attribute data and value.
183 ///
184 void DwarfUnit::addSInt(DIE &Die, dwarf::Attribute Attribute,
185                         Optional<dwarf::Form> Form, int64_t Integer) {
186   if (!Form)
187     Form = DIEInteger::BestForm(true, Integer);
188   DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
189   Die.addValue(Attribute, *Form, Value);
190 }
191 
192 void DwarfUnit::addSInt(DIELoc &Die, Optional<dwarf::Form> Form,
193                         int64_t Integer) {
194   addSInt(Die, (dwarf::Attribute)0, Form, Integer);
195 }
196 
197 /// addString - Add a string attribute data and value. We always emit a
198 /// reference to the string pool instead of immediate strings so that DIEs have
199 /// more predictable sizes. In the case of split dwarf we emit an index
200 /// into another table which gets us the static offset into the string
201 /// table.
202 void DwarfUnit::addString(DIE &Die, dwarf::Attribute Attribute,
203                           StringRef String) {
204   if (!isDwoUnit())
205     return addLocalString(Die, Attribute, String);
206 
207   addIndexedString(Die, Attribute, String);
208 }
209 
210 void DwarfUnit::addIndexedString(DIE &Die, dwarf::Attribute Attribute,
211                                  StringRef String) {
212   unsigned idx = DU->getStringPool().getIndex(*Asm, String);
213   DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
214   DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
215   Die.addValue(Attribute, dwarf::DW_FORM_GNU_str_index, Str);
216 }
217 
218 /// addLocalString - Add a string attribute data and value. This is guaranteed
219 /// to be in the local string pool instead of indirected.
220 void DwarfUnit::addLocalString(DIE &Die, dwarf::Attribute Attribute,
221                                StringRef String) {
222   MCSymbol *Symb = DU->getStringPool().getSymbol(*Asm, String);
223   DIEValue *Value;
224   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
225     Value = new (DIEValueAllocator) DIELabel(Symb);
226   else
227     Value = new (DIEValueAllocator) DIEDelta(Symb, DD->getDebugStrSym());
228   DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
229   Die.addValue(Attribute, dwarf::DW_FORM_strp, Str);
230 }
231 
232 /// addLabel - Add a Dwarf label attribute data and value.
233 ///
234 void DwarfUnit::addLabel(DIE &Die, dwarf::Attribute Attribute, dwarf::Form Form,
235                          const MCSymbol *Label) {
236   DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
237   Die.addValue(Attribute, Form, Value);
238 }
239 
240 void DwarfUnit::addLabel(DIELoc &Die, dwarf::Form Form, const MCSymbol *Label) {
241   addLabel(Die, (dwarf::Attribute)0, Form, Label);
242 }
243 
244 /// addSectionOffset - Add an offset into a section attribute data and value.
245 ///
246 void DwarfUnit::addSectionOffset(DIE &Die, dwarf::Attribute Attribute,
247                                  uint64_t Integer) {
248   if (DD->getDwarfVersion() >= 4)
249     addUInt(Die, Attribute, dwarf::DW_FORM_sec_offset, Integer);
250   else
251     addUInt(Die, Attribute, dwarf::DW_FORM_data4, Integer);
252 }
253 
254 unsigned DwarfTypeUnit::getOrCreateSourceID(StringRef FileName, StringRef DirName) {
255   return SplitLineTable ? SplitLineTable->getFile(DirName, FileName)
256                         : getCU().getOrCreateSourceID(FileName, DirName);
257 }
258 
259 /// addOpAddress - Add a dwarf op address data and value using the
260 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
261 ///
262 void DwarfUnit::addOpAddress(DIELoc &Die, const MCSymbol *Sym) {
263   if (!DD->useSplitDwarf()) {
264     addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
265     addLabel(Die, dwarf::DW_FORM_udata, Sym);
266   } else {
267     addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
268     addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
269             DD->getAddressPool().getIndex(Sym));
270   }
271 }
272 
273 void DwarfUnit::addLabelDelta(DIE &Die, dwarf::Attribute Attribute,
274                               const MCSymbol *Hi, const MCSymbol *Lo) {
275   DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
276   Die.addValue(Attribute, dwarf::DW_FORM_data4, Value);
277 }
278 
279 /// addDIEEntry - Add a DIE attribute data and value.
280 ///
281 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute, DIE &Entry) {
282   addDIEEntry(Die, Attribute, createDIEEntry(Entry));
283 }
284 
285 void DwarfUnit::addDIETypeSignature(DIE &Die, const DwarfTypeUnit &Type) {
286   // Flag the type unit reference as a declaration so that if it contains
287   // members (implicit special members, static data member definitions, member
288   // declarations for definitions in this CU, etc) consumers don't get confused
289   // and think this is a full definition.
290   addFlag(Die, dwarf::DW_AT_declaration);
291 
292   Die.addValue(dwarf::DW_AT_signature, dwarf::DW_FORM_ref_sig8,
293                new (DIEValueAllocator) DIETypeSignature(Type));
294 }
295 
296 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute,
297                             DIEEntry *Entry) {
298   const DIE *DieCU = Die.getUnitOrNull();
299   const DIE *EntryCU = Entry->getEntry().getUnitOrNull();
300   if (!DieCU)
301     // We assume that Die belongs to this CU, if it is not linked to any CU yet.
302     DieCU = &getUnitDie();
303   if (!EntryCU)
304     EntryCU = &getUnitDie();
305   Die.addValue(Attribute,
306                EntryCU == DieCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
307                Entry);
308 }
309 
310 /// Create a DIE with the given Tag, add the DIE to its parent, and
311 /// call insertDIE if MD is not null.
312 DIE &DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, DIDescriptor N) {
313   assert(Tag != dwarf::DW_TAG_auto_variable &&
314          Tag != dwarf::DW_TAG_arg_variable);
315   Parent.addChild(make_unique<DIE>((dwarf::Tag)Tag));
316   DIE &Die = *Parent.getChildren().back();
317   if (N)
318     insertDIE(N, &Die);
319   return Die;
320 }
321 
322 /// addBlock - Add block data.
323 ///
324 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute, DIELoc *Loc) {
325   Loc->ComputeSize(Asm);
326   DIELocs.push_back(Loc); // Memoize so we can call the destructor later on.
327   Die.addValue(Attribute, Loc->BestForm(DD->getDwarfVersion()), Loc);
328 }
329 
330 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute,
331                          DIEBlock *Block) {
332   Block->ComputeSize(Asm);
333   DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
334   Die.addValue(Attribute, Block->BestForm(), Block);
335 }
336 
337 /// addSourceLine - Add location information to specified debug information
338 /// entry.
339 void DwarfUnit::addSourceLine(DIE &Die, unsigned Line, StringRef File,
340                               StringRef Directory) {
341   if (Line == 0)
342     return;
343 
344   unsigned FileID = getOrCreateSourceID(File, Directory);
345   assert(FileID && "Invalid file id");
346   addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
347   addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
348 }
349 
350 /// addSourceLine - Add location information to specified debug information
351 /// entry.
352 void DwarfUnit::addSourceLine(DIE &Die, DIVariable V) {
353   assert(V.isVariable());
354 
355   addSourceLine(Die, V.getLineNumber(), V.getContext().getFilename(),
356                 V.getContext().getDirectory());
357 }
358 
359 /// addSourceLine - Add location information to specified debug information
360 /// entry.
361 void DwarfUnit::addSourceLine(DIE &Die, DIGlobalVariable G) {
362   assert(G.isGlobalVariable());
363 
364   addSourceLine(Die, G.getLineNumber(), G.getFilename(), G.getDirectory());
365 }
366 
367 /// addSourceLine - Add location information to specified debug information
368 /// entry.
369 void DwarfUnit::addSourceLine(DIE &Die, DISubprogram SP) {
370   assert(SP.isSubprogram());
371 
372   addSourceLine(Die, SP.getLineNumber(), SP.getFilename(), SP.getDirectory());
373 }
374 
375 /// addSourceLine - Add location information to specified debug information
376 /// entry.
377 void DwarfUnit::addSourceLine(DIE &Die, DIType Ty) {
378   assert(Ty.isType());
379 
380   addSourceLine(Die, Ty.getLineNumber(), Ty.getFilename(), Ty.getDirectory());
381 }
382 
383 /// addSourceLine - Add location information to specified debug information
384 /// entry.
385 void DwarfUnit::addSourceLine(DIE &Die, DIObjCProperty Ty) {
386   assert(Ty.isObjCProperty());
387 
388   DIFile File = Ty.getFile();
389   addSourceLine(Die, Ty.getLineNumber(), File.getFilename(),
390                 File.getDirectory());
391 }
392 
393 /// addSourceLine - Add location information to specified debug information
394 /// entry.
395 void DwarfUnit::addSourceLine(DIE &Die, DINameSpace NS) {
396   assert(NS.Verify());
397 
398   addSourceLine(Die, NS.getLineNumber(), NS.getFilename(), NS.getDirectory());
399 }
400 
401 /// addRegisterOp - Add register operand.
402 // FIXME: Ideally, this would share the implementation with
403 // AsmPrinter::EmitDwarfRegOpPiece.
404 bool DwarfUnit::addRegisterOpPiece(DIELoc &TheDie, unsigned Reg,
405                                    unsigned SizeInBits, unsigned OffsetInBits) {
406   const TargetRegisterInfo *RI = Asm->TM.getSubtargetImpl()->getRegisterInfo();
407   int DWReg = RI->getDwarfRegNum(Reg, false);
408   bool isSubRegister = DWReg < 0;
409 
410   unsigned Idx = 0;
411 
412   // Go up the super-register chain until we hit a valid dwarf register number.
413   for (MCSuperRegIterator SR(Reg, RI); SR.isValid() && DWReg < 0; ++SR) {
414     DWReg = RI->getDwarfRegNum(*SR, false);
415     if (DWReg >= 0)
416       Idx = RI->getSubRegIndex(*SR, Reg);
417   }
418 
419   if (DWReg < 0)
420     return false;
421 
422   // Emit register.
423   if (DWReg < 32)
424     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
425   else {
426     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
427     addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
428   }
429 
430   // Emit mask.
431   bool isPiece = SizeInBits > 0;
432   if (isSubRegister || isPiece) {
433     const unsigned SizeOfByte = 8;
434     unsigned RegSizeInBits = RI->getSubRegIdxSize(Idx);
435     unsigned RegOffsetInBits = RI->getSubRegIdxOffset(Idx);
436     unsigned PieceSizeInBits = std::max(SizeInBits, RegSizeInBits);
437     unsigned PieceOffsetInBits = OffsetInBits ? OffsetInBits : RegOffsetInBits;
438     assert(RegSizeInBits >= SizeInBits && "register smaller than value");
439 
440     if (RegOffsetInBits != PieceOffsetInBits) {
441       // Manually shift the value into place, since the DW_OP_piece
442       // describes the part of the variable, not the position of the
443       // subregister.
444       addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
445       addUInt(TheDie, dwarf::DW_FORM_data1, RegOffsetInBits);
446       addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_shr);
447     }
448 
449     if (PieceOffsetInBits > 0 || PieceSizeInBits % SizeOfByte) {
450       assert(PieceSizeInBits > 0 && "piece has zero size");
451       addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bit_piece);
452       addUInt(TheDie, dwarf::DW_FORM_data1, PieceSizeInBits);
453       addUInt(TheDie, dwarf::DW_FORM_data1, PieceOffsetInBits);
454      } else {
455       assert(PieceSizeInBits > 0 && "piece has zero size");
456       addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_piece);
457       addUInt(TheDie, dwarf::DW_FORM_data1, PieceSizeInBits/SizeOfByte);
458     }
459   }
460   return true;
461 }
462 
463 /// addRegisterOffset - Add register offset.
464 bool DwarfUnit::addRegisterOffset(DIELoc &TheDie, unsigned Reg,
465                                   int64_t Offset) {
466   const TargetRegisterInfo *TRI = Asm->TM.getSubtargetImpl()->getRegisterInfo();
467   int DWReg = TRI->getDwarfRegNum(Reg, false);
468   if (DWReg < 0)
469     return false;
470 
471   if (Reg == TRI->getFrameRegister(*Asm->MF))
472     // If variable offset is based in frame register then use fbreg.
473     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
474   else if (DWReg < 32)
475     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
476   else {
477     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
478     addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
479   }
480   addSInt(TheDie, dwarf::DW_FORM_sdata, Offset);
481   return true;
482 }
483 
484 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
485    VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
486    gives the variable VarName either the struct, or a pointer to the struct, as
487    its type.  This is necessary for various behind-the-scenes things the
488    compiler needs to do with by-reference variables in Blocks.
489 
490    However, as far as the original *programmer* is concerned, the variable
491    should still have type 'SomeType', as originally declared.
492 
493    The function getBlockByrefType dives into the __Block_byref_x_VarName
494    struct to find the original type of the variable, which is then assigned to
495    the variable's Debug Information Entry as its real type.  So far, so good.
496    However now the debugger will expect the variable VarName to have the type
497    SomeType.  So we need the location attribute for the variable to be an
498    expression that explains to the debugger how to navigate through the
499    pointers and struct to find the actual variable of type SomeType.
500 
501    The following function does just that.  We start by getting
502    the "normal" location for the variable. This will be the location
503    of either the struct __Block_byref_x_VarName or the pointer to the
504    struct __Block_byref_x_VarName.
505 
506    The struct will look something like:
507 
508    struct __Block_byref_x_VarName {
509      ... <various fields>
510      struct __Block_byref_x_VarName *forwarding;
511      ... <various other fields>
512      SomeType VarName;
513      ... <maybe more fields>
514    };
515 
516    If we are given the struct directly (as our starting point) we
517    need to tell the debugger to:
518 
519    1).  Add the offset of the forwarding field.
520 
521    2).  Follow that pointer to get the real __Block_byref_x_VarName
522    struct to use (the real one may have been copied onto the heap).
523 
524    3).  Add the offset for the field VarName, to find the actual variable.
525 
526    If we started with a pointer to the struct, then we need to
527    dereference that pointer first, before the other steps.
528    Translating this into DWARF ops, we will need to append the following
529    to the current location description for the variable:
530 
531    DW_OP_deref                    -- optional, if we start with a pointer
532    DW_OP_plus_uconst <forward_fld_offset>
533    DW_OP_deref
534    DW_OP_plus_uconst <varName_fld_offset>
535 
536    That is what this function does.  */
537 
538 /// addBlockByrefAddress - Start with the address based on the location
539 /// provided, and generate the DWARF information necessary to find the
540 /// actual Block variable (navigating the Block struct) based on the
541 /// starting location.  Add the DWARF information to the die.  For
542 /// more information, read large comment just above here.
543 ///
544 void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
545                                      dwarf::Attribute Attribute,
546                                      const MachineLocation &Location) {
547   DIType Ty = DV.getType();
548   DIType TmpTy = Ty;
549   uint16_t Tag = Ty.getTag();
550   bool isPointer = false;
551 
552   StringRef varName = DV.getName();
553 
554   if (Tag == dwarf::DW_TAG_pointer_type) {
555     DIDerivedType DTy(Ty);
556     TmpTy = resolve(DTy.getTypeDerivedFrom());
557     isPointer = true;
558   }
559 
560   DICompositeType blockStruct(TmpTy);
561 
562   // Find the __forwarding field and the variable field in the __Block_byref
563   // struct.
564   DIArray Fields = blockStruct.getElements();
565   DIDerivedType varField;
566   DIDerivedType forwardingField;
567 
568   for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
569     DIDerivedType DT(Fields.getElement(i));
570     StringRef fieldName = DT.getName();
571     if (fieldName == "__forwarding")
572       forwardingField = DT;
573     else if (fieldName == varName)
574       varField = DT;
575   }
576 
577   // Get the offsets for the forwarding field and the variable field.
578   unsigned forwardingFieldOffset = forwardingField.getOffsetInBits() >> 3;
579   unsigned varFieldOffset = varField.getOffsetInBits() >> 2;
580 
581   // Decode the original location, and use that as the start of the byref
582   // variable's location.
583   DIELoc *Loc = new (DIEValueAllocator) DIELoc();
584 
585   bool validReg;
586   if (Location.isReg())
587     validReg = addRegisterOpPiece(*Loc, Location.getReg());
588   else
589     validReg = addRegisterOffset(*Loc, Location.getReg(), Location.getOffset());
590 
591   if (!validReg)
592     return;
593 
594   // If we started with a pointer to the __Block_byref... struct, then
595   // the first thing we need to do is dereference the pointer (DW_OP_deref).
596   if (isPointer)
597     addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
598 
599   // Next add the offset for the '__forwarding' field:
600   // DW_OP_plus_uconst ForwardingFieldOffset.  Note there's no point in
601   // adding the offset if it's 0.
602   if (forwardingFieldOffset > 0) {
603     addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
604     addUInt(*Loc, dwarf::DW_FORM_udata, forwardingFieldOffset);
605   }
606 
607   // Now dereference the __forwarding field to get to the real __Block_byref
608   // struct:  DW_OP_deref.
609   addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
610 
611   // Now that we've got the real __Block_byref... struct, add the offset
612   // for the variable's field to get to the location of the actual variable:
613   // DW_OP_plus_uconst varFieldOffset.  Again, don't add if it's 0.
614   if (varFieldOffset > 0) {
615     addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
616     addUInt(*Loc, dwarf::DW_FORM_udata, varFieldOffset);
617   }
618 
619   // Now attach the location information to the DIE.
620   addBlock(Die, Attribute, Loc);
621 }
622 
623 /// Return true if type encoding is unsigned.
624 static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) {
625   DIDerivedType DTy(Ty);
626   if (DTy.isDerivedType()) {
627     dwarf::Tag T = (dwarf::Tag)Ty.getTag();
628     // Encode pointer constants as unsigned bytes. This is used at least for
629     // null pointer constant emission.
630     // (Pieces of) aggregate types that get hacked apart by SROA may also be
631     // represented by a constant. Encode them as unsigned bytes.
632     // FIXME: reference and rvalue_reference /probably/ shouldn't be allowed
633     // here, but accept them for now due to a bug in SROA producing bogus
634     // dbg.values.
635     if (T == dwarf::DW_TAG_array_type ||
636         T == dwarf::DW_TAG_class_type ||
637         T == dwarf::DW_TAG_pointer_type ||
638         T == dwarf::DW_TAG_ptr_to_member_type ||
639         T == dwarf::DW_TAG_reference_type ||
640         T == dwarf::DW_TAG_rvalue_reference_type ||
641         T == dwarf::DW_TAG_structure_type)
642       return true;
643     assert(T == dwarf::DW_TAG_typedef || T == dwarf::DW_TAG_const_type ||
644            T == dwarf::DW_TAG_volatile_type ||
645            T == dwarf::DW_TAG_restrict_type ||
646            T == dwarf::DW_TAG_enumeration_type);
647     if (DITypeRef Deriv = DTy.getTypeDerivedFrom())
648       return isUnsignedDIType(DD, DD->resolve(Deriv));
649     // FIXME: Enums without a fixed underlying type have unknown signedness
650     // here, leading to incorrectly emitted constants.
651     assert(DTy.getTag() == dwarf::DW_TAG_enumeration_type);
652     return false;
653   }
654 
655   DIBasicType BTy(Ty);
656   assert(BTy.isBasicType());
657   unsigned Encoding = BTy.getEncoding();
658   assert((Encoding == dwarf::DW_ATE_unsigned ||
659           Encoding == dwarf::DW_ATE_unsigned_char ||
660           Encoding == dwarf::DW_ATE_signed ||
661           Encoding == dwarf::DW_ATE_signed_char ||
662           Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean ||
663           (Ty.getTag() == dwarf::DW_TAG_unspecified_type &&
664            Ty.getName() == "decltype(nullptr)")) &&
665          "Unsupported encoding");
666   return (Encoding == dwarf::DW_ATE_unsigned ||
667           Encoding == dwarf::DW_ATE_unsigned_char ||
668           Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean ||
669           Ty.getTag() == dwarf::DW_TAG_unspecified_type);
670 }
671 
672 /// If this type is derived from a base type then return base type size.
673 static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
674   unsigned Tag = Ty.getTag();
675 
676   if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef &&
677       Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type &&
678       Tag != dwarf::DW_TAG_restrict_type)
679     return Ty.getSizeInBits();
680 
681   DIType BaseType = DD->resolve(Ty.getTypeDerivedFrom());
682 
683   // If this type is not derived from any type or the type is a declaration then
684   // take conservative approach.
685   if (!BaseType.isValid() || BaseType.isForwardDecl())
686     return Ty.getSizeInBits();
687 
688   // If this is a derived type, go ahead and get the base type, unless it's a
689   // reference then it's just the size of the field. Pointer types have no need
690   // of this since they're a different type of qualification on the type.
691   if (BaseType.getTag() == dwarf::DW_TAG_reference_type ||
692       BaseType.getTag() == dwarf::DW_TAG_rvalue_reference_type)
693     return Ty.getSizeInBits();
694 
695   if (BaseType.isDerivedType())
696     return getBaseTypeSize(DD, DIDerivedType(BaseType));
697 
698   return BaseType.getSizeInBits();
699 }
700 
701 /// addConstantFPValue - Add constant value entry in variable DIE.
702 void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) {
703   assert(MO.isFPImm() && "Invalid machine operand!");
704   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
705   APFloat FPImm = MO.getFPImm()->getValueAPF();
706 
707   // Get the raw data form of the floating point.
708   const APInt FltVal = FPImm.bitcastToAPInt();
709   const char *FltPtr = (const char *)FltVal.getRawData();
710 
711   int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
712   bool LittleEndian = Asm->getDataLayout().isLittleEndian();
713   int Incr = (LittleEndian ? 1 : -1);
714   int Start = (LittleEndian ? 0 : NumBytes - 1);
715   int Stop = (LittleEndian ? NumBytes : -1);
716 
717   // Output the constant to DWARF one byte at a time.
718   for (; Start != Stop; Start += Incr)
719     addUInt(*Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]);
720 
721   addBlock(Die, dwarf::DW_AT_const_value, Block);
722 }
723 
724 /// addConstantFPValue - Add constant value entry in variable DIE.
725 void DwarfUnit::addConstantFPValue(DIE &Die, const ConstantFP *CFP) {
726   // Pass this down to addConstantValue as an unsigned bag of bits.
727   addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true);
728 }
729 
730 /// addConstantValue - Add constant value entry in variable DIE.
731 void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI, DIType Ty) {
732   addConstantValue(Die, CI->getValue(), Ty);
733 }
734 
735 /// addConstantValue - Add constant value entry in variable DIE.
736 void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO,
737                                  DIType Ty) {
738   assert(MO.isImm() && "Invalid machine operand!");
739 
740   addConstantValue(Die, isUnsignedDIType(DD, Ty), MO.getImm());
741 }
742 
743 void DwarfUnit::addConstantValue(DIE &Die, bool Unsigned, uint64_t Val) {
744   // FIXME: This is a bit conservative/simple - it emits negative values always
745   // sign extended to 64 bits rather than minimizing the number of bytes.
746   addUInt(Die, dwarf::DW_AT_const_value,
747           Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata, Val);
748 }
749 
750 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, DIType Ty) {
751   addConstantValue(Die, Val, isUnsignedDIType(DD, Ty));
752 }
753 
754 // addConstantValue - Add constant value entry in variable DIE.
755 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) {
756   unsigned CIBitWidth = Val.getBitWidth();
757   if (CIBitWidth <= 64) {
758     addConstantValue(Die, Unsigned,
759                      Unsigned ? Val.getZExtValue() : Val.getSExtValue());
760     return;
761   }
762 
763   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
764 
765   // Get the raw data form of the large APInt.
766   const uint64_t *Ptr64 = Val.getRawData();
767 
768   int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
769   bool LittleEndian = Asm->getDataLayout().isLittleEndian();
770 
771   // Output the constant to DWARF one byte at a time.
772   for (int i = 0; i < NumBytes; i++) {
773     uint8_t c;
774     if (LittleEndian)
775       c = Ptr64[i / 8] >> (8 * (i & 7));
776     else
777       c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
778     addUInt(*Block, dwarf::DW_FORM_data1, c);
779   }
780 
781   addBlock(Die, dwarf::DW_AT_const_value, Block);
782 }
783 
784 /// addTemplateParams - Add template parameters into buffer.
785 void DwarfUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
786   // Add template parameters.
787   for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
788     DIDescriptor Element = TParams.getElement(i);
789     if (Element.isTemplateTypeParameter())
790       constructTemplateTypeParameterDIE(Buffer,
791                                         DITemplateTypeParameter(Element));
792     else if (Element.isTemplateValueParameter())
793       constructTemplateValueParameterDIE(Buffer,
794                                          DITemplateValueParameter(Element));
795   }
796 }
797 
798 /// getOrCreateContextDIE - Get context owner's DIE.
799 DIE *DwarfUnit::getOrCreateContextDIE(DIScope Context) {
800   if (!Context || Context.isFile())
801     return &getUnitDie();
802   if (Context.isType())
803     return getOrCreateTypeDIE(DIType(Context));
804   if (Context.isNameSpace())
805     return getOrCreateNameSpace(DINameSpace(Context));
806   if (Context.isSubprogram())
807     return getOrCreateSubprogramDIE(DISubprogram(Context));
808   return getDIE(Context);
809 }
810 
811 DIE *DwarfUnit::createTypeDIE(DICompositeType Ty) {
812   DIScope Context = resolve(Ty.getContext());
813   DIE *ContextDIE = getOrCreateContextDIE(Context);
814 
815   if (DIE *TyDIE = getDIE(Ty))
816     return TyDIE;
817 
818   // Create new type.
819   DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
820 
821   constructTypeDIE(TyDIE, Ty);
822 
823   updateAcceleratorTables(Context, Ty, TyDIE);
824   return &TyDIE;
825 }
826 
827 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
828 /// given DIType.
829 DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
830   if (!TyNode)
831     return nullptr;
832 
833   DIType Ty(TyNode);
834   assert(Ty.isType());
835   assert(Ty == resolve(Ty.getRef()) &&
836          "type was not uniqued, possible ODR violation.");
837 
838   // DW_TAG_restrict_type is not supported in DWARF2
839   if (Ty.getTag() == dwarf::DW_TAG_restrict_type && DD->getDwarfVersion() <= 2)
840     return getOrCreateTypeDIE(resolve(DIDerivedType(Ty).getTypeDerivedFrom()));
841 
842   // Construct the context before querying for the existence of the DIE in case
843   // such construction creates the DIE.
844   DIScope Context = resolve(Ty.getContext());
845   DIE *ContextDIE = getOrCreateContextDIE(Context);
846   assert(ContextDIE);
847 
848   if (DIE *TyDIE = getDIE(Ty))
849     return TyDIE;
850 
851   // Create new type.
852   DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
853 
854   updateAcceleratorTables(Context, Ty, TyDIE);
855 
856   if (Ty.isBasicType())
857     constructTypeDIE(TyDIE, DIBasicType(Ty));
858   else if (Ty.isCompositeType()) {
859     DICompositeType CTy(Ty);
860     if (GenerateDwarfTypeUnits && !Ty.isForwardDecl())
861       if (MDString *TypeId = CTy.getIdentifier()) {
862         DD->addDwarfTypeUnitType(getCU(), TypeId->getString(), TyDIE, CTy);
863         // Skip updating the accelerator tables since this is not the full type.
864         return &TyDIE;
865       }
866     constructTypeDIE(TyDIE, CTy);
867   } else {
868     assert(Ty.isDerivedType() && "Unknown kind of DIType");
869     constructTypeDIE(TyDIE, DIDerivedType(Ty));
870   }
871 
872   return &TyDIE;
873 }
874 
875 void DwarfUnit::updateAcceleratorTables(DIScope Context, DIType Ty,
876                                         const DIE &TyDIE) {
877   if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
878     bool IsImplementation = 0;
879     if (Ty.isCompositeType()) {
880       DICompositeType CT(Ty);
881       // A runtime language of 0 actually means C/C++ and that any
882       // non-negative value is some version of Objective-C/C++.
883       IsImplementation = (CT.getRunTimeLang() == 0) || CT.isObjcClassComplete();
884     }
885     unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0;
886     DD->addAccelType(Ty.getName(), TyDIE, Flags);
887 
888     if (!Context || Context.isCompileUnit() || Context.isFile() ||
889         Context.isNameSpace())
890       addGlobalType(Ty, TyDIE, Context);
891   }
892 }
893 
894 /// addType - Add a new type attribute to the specified entity.
895 void DwarfUnit::addType(DIE &Entity, DIType Ty, dwarf::Attribute Attribute) {
896   assert(Ty && "Trying to add a type that doesn't exist?");
897 
898   // Check for pre-existence.
899   DIEEntry *Entry = getDIEEntry(Ty);
900   // If it exists then use the existing value.
901   if (Entry) {
902     addDIEEntry(Entity, Attribute, Entry);
903     return;
904   }
905 
906   // Construct type.
907   DIE *Buffer = getOrCreateTypeDIE(Ty);
908 
909   // Set up proxy.
910   Entry = createDIEEntry(*Buffer);
911   insertDIEEntry(Ty, Entry);
912   addDIEEntry(Entity, Attribute, Entry);
913 }
914 
915 /// getParentContextString - Walks the metadata parent chain in a language
916 /// specific manner (using the compile unit language) and returns
917 /// it as a string. This is done at the metadata level because DIEs may
918 /// not currently have been added to the parent context and walking the
919 /// DIEs looking for names is more expensive than walking the metadata.
920 std::string DwarfUnit::getParentContextString(DIScope Context) const {
921   if (!Context)
922     return "";
923 
924   // FIXME: Decide whether to implement this for non-C++ languages.
925   if (getLanguage() != dwarf::DW_LANG_C_plus_plus)
926     return "";
927 
928   std::string CS;
929   SmallVector<DIScope, 1> Parents;
930   while (!Context.isCompileUnit()) {
931     Parents.push_back(Context);
932     if (Context.getContext())
933       Context = resolve(Context.getContext());
934     else
935       // Structure, etc types will have a NULL context if they're at the top
936       // level.
937       break;
938   }
939 
940   // Reverse iterate over our list to go from the outermost construct to the
941   // innermost.
942   for (SmallVectorImpl<DIScope>::reverse_iterator I = Parents.rbegin(),
943                                                   E = Parents.rend();
944        I != E; ++I) {
945     DIScope Ctx = *I;
946     StringRef Name = Ctx.getName();
947     if (Name.empty() && Ctx.isNameSpace())
948       Name = "(anonymous namespace)";
949     if (!Name.empty()) {
950       CS += Name;
951       CS += "::";
952     }
953   }
954   return CS;
955 }
956 
957 /// constructTypeDIE - Construct basic type die from DIBasicType.
958 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
959   // Get core information.
960   StringRef Name = BTy.getName();
961   // Add name if not anonymous or intermediate type.
962   if (!Name.empty())
963     addString(Buffer, dwarf::DW_AT_name, Name);
964 
965   // An unspecified type only has a name attribute.
966   if (BTy.getTag() == dwarf::DW_TAG_unspecified_type)
967     return;
968 
969   addUInt(Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
970           BTy.getEncoding());
971 
972   uint64_t Size = BTy.getSizeInBits() >> 3;
973   addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
974 }
975 
976 /// constructTypeDIE - Construct derived type die from DIDerivedType.
977 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
978   // Get core information.
979   StringRef Name = DTy.getName();
980   uint64_t Size = DTy.getSizeInBits() >> 3;
981   uint16_t Tag = Buffer.getTag();
982 
983   // Map to main type, void will not have a type.
984   DIType FromTy = resolve(DTy.getTypeDerivedFrom());
985   if (FromTy)
986     addType(Buffer, FromTy);
987 
988   // Add name if not anonymous or intermediate type.
989   if (!Name.empty())
990     addString(Buffer, dwarf::DW_AT_name, Name);
991 
992   // Add size if non-zero (derived types might be zero-sized.)
993   if (Size && Tag != dwarf::DW_TAG_pointer_type
994            && Tag != dwarf::DW_TAG_ptr_to_member_type)
995     addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
996 
997   if (Tag == dwarf::DW_TAG_ptr_to_member_type)
998     addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
999                 *getOrCreateTypeDIE(resolve(DTy.getClassType())));
1000   // Add source line info if available and TyDesc is not a forward declaration.
1001   if (!DTy.isForwardDecl())
1002     addSourceLine(Buffer, DTy);
1003 }
1004 
1005 /// constructSubprogramArguments - Construct function argument DIEs.
1006 void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeArray Args) {
1007   for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
1008     DIType Ty = resolve(Args.getElement(i));
1009     if (!Ty) {
1010       assert(i == N-1 && "Unspecified parameter must be the last argument");
1011       createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
1012     } else {
1013       DIE &Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
1014       addType(Arg, Ty);
1015       if (Ty.isArtificial())
1016         addFlag(Arg, dwarf::DW_AT_artificial);
1017     }
1018   }
1019 }
1020 
1021 /// constructTypeDIE - Construct type DIE from DICompositeType.
1022 void DwarfUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
1023   // Add name if not anonymous or intermediate type.
1024   StringRef Name = CTy.getName();
1025 
1026   uint64_t Size = CTy.getSizeInBits() >> 3;
1027   uint16_t Tag = Buffer.getTag();
1028 
1029   switch (Tag) {
1030   case dwarf::DW_TAG_array_type:
1031     constructArrayTypeDIE(Buffer, CTy);
1032     break;
1033   case dwarf::DW_TAG_enumeration_type:
1034     constructEnumTypeDIE(Buffer, CTy);
1035     break;
1036   case dwarf::DW_TAG_subroutine_type: {
1037     // Add return type. A void return won't have a type.
1038     DITypeArray Elements = DISubroutineType(CTy).getTypeArray();
1039     DIType RTy(resolve(Elements.getElement(0)));
1040     if (RTy)
1041       addType(Buffer, RTy);
1042 
1043     bool isPrototyped = true;
1044     if (Elements.getNumElements() == 2 &&
1045         !Elements.getElement(1))
1046       isPrototyped = false;
1047 
1048     constructSubprogramArguments(Buffer, Elements);
1049 
1050     // Add prototype flag if we're dealing with a C language and the
1051     // function has been prototyped.
1052     uint16_t Language = getLanguage();
1053     if (isPrototyped &&
1054         (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1055          Language == dwarf::DW_LANG_ObjC))
1056       addFlag(Buffer, dwarf::DW_AT_prototyped);
1057 
1058     if (CTy.isLValueReference())
1059       addFlag(Buffer, dwarf::DW_AT_reference);
1060 
1061     if (CTy.isRValueReference())
1062       addFlag(Buffer, dwarf::DW_AT_rvalue_reference);
1063   } break;
1064   case dwarf::DW_TAG_structure_type:
1065   case dwarf::DW_TAG_union_type:
1066   case dwarf::DW_TAG_class_type: {
1067     // Add elements to structure type.
1068     DIArray Elements = CTy.getElements();
1069     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1070       DIDescriptor Element = Elements.getElement(i);
1071       if (Element.isSubprogram())
1072         getOrCreateSubprogramDIE(DISubprogram(Element));
1073       else if (Element.isDerivedType()) {
1074         DIDerivedType DDTy(Element);
1075         if (DDTy.getTag() == dwarf::DW_TAG_friend) {
1076           DIE &ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer);
1077           addType(ElemDie, resolve(DDTy.getTypeDerivedFrom()),
1078                   dwarf::DW_AT_friend);
1079         } else if (DDTy.isStaticMember()) {
1080           getOrCreateStaticMemberDIE(DDTy);
1081         } else {
1082           constructMemberDIE(Buffer, DDTy);
1083         }
1084       } else if (Element.isObjCProperty()) {
1085         DIObjCProperty Property(Element);
1086         DIE &ElemDie = createAndAddDIE(Property.getTag(), Buffer);
1087         StringRef PropertyName = Property.getObjCPropertyName();
1088         addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
1089         if (Property.getType())
1090           addType(ElemDie, Property.getType());
1091         addSourceLine(ElemDie, Property);
1092         StringRef GetterName = Property.getObjCPropertyGetterName();
1093         if (!GetterName.empty())
1094           addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
1095         StringRef SetterName = Property.getObjCPropertySetterName();
1096         if (!SetterName.empty())
1097           addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
1098         unsigned PropertyAttributes = 0;
1099         if (Property.isReadOnlyObjCProperty())
1100           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
1101         if (Property.isReadWriteObjCProperty())
1102           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
1103         if (Property.isAssignObjCProperty())
1104           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
1105         if (Property.isRetainObjCProperty())
1106           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
1107         if (Property.isCopyObjCProperty())
1108           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
1109         if (Property.isNonAtomicObjCProperty())
1110           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1111         if (PropertyAttributes)
1112           addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
1113                   PropertyAttributes);
1114 
1115         DIEEntry *Entry = getDIEEntry(Element);
1116         if (!Entry) {
1117           Entry = createDIEEntry(ElemDie);
1118           insertDIEEntry(Element, Entry);
1119         }
1120       } else
1121         continue;
1122     }
1123 
1124     if (CTy.isAppleBlockExtension())
1125       addFlag(Buffer, dwarf::DW_AT_APPLE_block);
1126 
1127     // This is outside the DWARF spec, but GDB expects a DW_AT_containing_type
1128     // inside C++ composite types to point to the base class with the vtable.
1129     DICompositeType ContainingType(resolve(CTy.getContainingType()));
1130     if (ContainingType)
1131       addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
1132                   *getOrCreateTypeDIE(ContainingType));
1133 
1134     if (CTy.isObjcClassComplete())
1135       addFlag(Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1136 
1137     // Add template parameters to a class, structure or union types.
1138     // FIXME: The support isn't in the metadata for this yet.
1139     if (Tag == dwarf::DW_TAG_class_type ||
1140         Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type)
1141       addTemplateParams(Buffer, CTy.getTemplateParams());
1142 
1143     break;
1144   }
1145   default:
1146     break;
1147   }
1148 
1149   // Add name if not anonymous or intermediate type.
1150   if (!Name.empty())
1151     addString(Buffer, dwarf::DW_AT_name, Name);
1152 
1153   if (Tag == dwarf::DW_TAG_enumeration_type ||
1154       Tag == dwarf::DW_TAG_class_type || Tag == dwarf::DW_TAG_structure_type ||
1155       Tag == dwarf::DW_TAG_union_type) {
1156     // Add size if non-zero (derived types might be zero-sized.)
1157     // TODO: Do we care about size for enum forward declarations?
1158     if (Size)
1159       addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
1160     else if (!CTy.isForwardDecl())
1161       // Add zero size if it is not a forward declaration.
1162       addUInt(Buffer, dwarf::DW_AT_byte_size, None, 0);
1163 
1164     // If we're a forward decl, say so.
1165     if (CTy.isForwardDecl())
1166       addFlag(Buffer, dwarf::DW_AT_declaration);
1167 
1168     // Add source line info if available.
1169     if (!CTy.isForwardDecl())
1170       addSourceLine(Buffer, CTy);
1171 
1172     // No harm in adding the runtime language to the declaration.
1173     unsigned RLang = CTy.getRunTimeLang();
1174     if (RLang)
1175       addUInt(Buffer, dwarf::DW_AT_APPLE_runtime_class, dwarf::DW_FORM_data1,
1176               RLang);
1177   }
1178 }
1179 
1180 /// constructTemplateTypeParameterDIE - Construct new DIE for the given
1181 /// DITemplateTypeParameter.
1182 void DwarfUnit::constructTemplateTypeParameterDIE(DIE &Buffer,
1183                                                   DITemplateTypeParameter TP) {
1184   DIE &ParamDIE =
1185       createAndAddDIE(dwarf::DW_TAG_template_type_parameter, Buffer);
1186   // Add the type if it exists, it could be void and therefore no type.
1187   if (TP.getType())
1188     addType(ParamDIE, resolve(TP.getType()));
1189   if (!TP.getName().empty())
1190     addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1191 }
1192 
1193 /// constructTemplateValueParameterDIE - Construct new DIE for the given
1194 /// DITemplateValueParameter.
1195 void
1196 DwarfUnit::constructTemplateValueParameterDIE(DIE &Buffer,
1197                                               DITemplateValueParameter VP) {
1198   DIE &ParamDIE = createAndAddDIE(VP.getTag(), Buffer);
1199 
1200   // Add the type if there is one, template template and template parameter
1201   // packs will not have a type.
1202   if (VP.getTag() == dwarf::DW_TAG_template_value_parameter)
1203     addType(ParamDIE, resolve(VP.getType()));
1204   if (!VP.getName().empty())
1205     addString(ParamDIE, dwarf::DW_AT_name, VP.getName());
1206   if (Metadata *Val = VP.getValue()) {
1207     if (ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(Val))
1208       addConstantValue(ParamDIE, CI, resolve(VP.getType()));
1209     else if (GlobalValue *GV = mdconst::dyn_extract<GlobalValue>(Val)) {
1210       // For declaration non-type template parameters (such as global values and
1211       // functions)
1212       DIELoc *Loc = new (DIEValueAllocator) DIELoc();
1213       addOpAddress(*Loc, Asm->getSymbol(GV));
1214       // Emit DW_OP_stack_value to use the address as the immediate value of the
1215       // parameter, rather than a pointer to it.
1216       addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1217       addBlock(ParamDIE, dwarf::DW_AT_location, Loc);
1218     } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1219       assert(isa<MDString>(Val));
1220       addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1221                 cast<MDString>(Val)->getString());
1222     } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1223       assert(isa<MDNode>(Val));
1224       DIArray A(cast<MDNode>(Val));
1225       addTemplateParams(ParamDIE, A);
1226     }
1227   }
1228 }
1229 
1230 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1231 DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) {
1232   // Construct the context before querying for the existence of the DIE in case
1233   // such construction creates the DIE.
1234   DIE *ContextDIE = getOrCreateContextDIE(NS.getContext());
1235 
1236   if (DIE *NDie = getDIE(NS))
1237     return NDie;
1238   DIE &NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS);
1239 
1240   StringRef Name = NS.getName();
1241   if (!Name.empty())
1242     addString(NDie, dwarf::DW_AT_name, NS.getName());
1243   else
1244     Name = "(anonymous namespace)";
1245   DD->addAccelNamespace(Name, NDie);
1246   addGlobalName(Name, NDie, NS.getContext());
1247   addSourceLine(NDie, NS);
1248   return &NDie;
1249 }
1250 
1251 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1252 DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP, bool Minimal) {
1253   // Construct the context before querying for the existence of the DIE in case
1254   // such construction creates the DIE (as is the case for member function
1255   // declarations).
1256   DIE *ContextDIE =
1257       Minimal ? &getUnitDie() : getOrCreateContextDIE(resolve(SP.getContext()));
1258 
1259   if (DIE *SPDie = getDIE(SP))
1260     return SPDie;
1261 
1262   if (DISubprogram SPDecl = SP.getFunctionDeclaration()) {
1263     if (!Minimal) {
1264       // Add subprogram definitions to the CU die directly.
1265       ContextDIE = &getUnitDie();
1266       // Build the decl now to ensure it precedes the definition.
1267       getOrCreateSubprogramDIE(SPDecl);
1268     }
1269   }
1270 
1271   // DW_TAG_inlined_subroutine may refer to this DIE.
1272   DIE &SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP);
1273 
1274   // Stop here and fill this in later, depending on whether or not this
1275   // subprogram turns out to have inlined instances or not.
1276   if (SP.isDefinition())
1277     return &SPDie;
1278 
1279   applySubprogramAttributes(SP, SPDie);
1280   return &SPDie;
1281 }
1282 
1283 bool DwarfUnit::applySubprogramDefinitionAttributes(DISubprogram SP,
1284                                                     DIE &SPDie) {
1285   DIE *DeclDie = nullptr;
1286   StringRef DeclLinkageName;
1287   if (DISubprogram SPDecl = SP.getFunctionDeclaration()) {
1288     DeclDie = getDIE(SPDecl);
1289     assert(DeclDie && "This DIE should've already been constructed when the "
1290                       "definition DIE was created in "
1291                       "getOrCreateSubprogramDIE");
1292     DeclLinkageName = SPDecl.getLinkageName();
1293   }
1294 
1295   // Add function template parameters.
1296   addTemplateParams(SPDie, SP.getTemplateParams());
1297 
1298   // Add the linkage name if we have one and it isn't in the Decl.
1299   StringRef LinkageName = SP.getLinkageName();
1300   assert(((LinkageName.empty() || DeclLinkageName.empty()) ||
1301           LinkageName == DeclLinkageName) &&
1302          "decl has a linkage name and it is different");
1303   if (!LinkageName.empty() && DeclLinkageName.empty())
1304     addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1305               GlobalValue::getRealLinkageName(LinkageName));
1306 
1307   if (!DeclDie)
1308     return false;
1309 
1310   // Refer to the function declaration where all the other attributes will be
1311   // found.
1312   addDIEEntry(SPDie, dwarf::DW_AT_specification, *DeclDie);
1313   return true;
1314 }
1315 
1316 void DwarfUnit::applySubprogramAttributes(DISubprogram SP, DIE &SPDie,
1317                                           bool Minimal) {
1318   if (!Minimal)
1319     if (applySubprogramDefinitionAttributes(SP, SPDie))
1320       return;
1321 
1322   // Constructors and operators for anonymous aggregates do not have names.
1323   if (!SP.getName().empty())
1324     addString(SPDie, dwarf::DW_AT_name, SP.getName());
1325 
1326   // Skip the rest of the attributes under -gmlt to save space.
1327   if (Minimal)
1328     return;
1329 
1330   addSourceLine(SPDie, SP);
1331 
1332   // Add the prototype if we have a prototype and we have a C like
1333   // language.
1334   uint16_t Language = getLanguage();
1335   if (SP.isPrototyped() &&
1336       (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1337        Language == dwarf::DW_LANG_ObjC))
1338     addFlag(SPDie, dwarf::DW_AT_prototyped);
1339 
1340   DISubroutineType SPTy = SP.getType();
1341   assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1342          "the type of a subprogram should be a subroutine");
1343 
1344   DITypeArray Args = SPTy.getTypeArray();
1345   // Add a return type. If this is a type like a C/C++ void type we don't add a
1346   // return type.
1347   if (resolve(Args.getElement(0)))
1348     addType(SPDie, DIType(resolve(Args.getElement(0))));
1349 
1350   unsigned VK = SP.getVirtuality();
1351   if (VK) {
1352     addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1353     DIELoc *Block = getDIELoc();
1354     addUInt(*Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1355     addUInt(*Block, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1356     addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
1357     ContainingTypeMap.insert(
1358         std::make_pair(&SPDie, resolve(SP.getContainingType())));
1359   }
1360 
1361   if (!SP.isDefinition()) {
1362     addFlag(SPDie, dwarf::DW_AT_declaration);
1363 
1364     // Add arguments. Do not add arguments for subprogram definition. They will
1365     // be handled while processing variables.
1366     constructSubprogramArguments(SPDie, Args);
1367   }
1368 
1369   if (SP.isArtificial())
1370     addFlag(SPDie, dwarf::DW_AT_artificial);
1371 
1372   if (!SP.isLocalToUnit())
1373     addFlag(SPDie, dwarf::DW_AT_external);
1374 
1375   if (SP.isOptimized())
1376     addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1377 
1378   if (unsigned isa = Asm->getISAEncoding()) {
1379     addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1380   }
1381 
1382   if (SP.isLValueReference())
1383     addFlag(SPDie, dwarf::DW_AT_reference);
1384 
1385   if (SP.isRValueReference())
1386     addFlag(SPDie, dwarf::DW_AT_rvalue_reference);
1387 
1388   if (SP.isProtected())
1389     addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1390             dwarf::DW_ACCESS_protected);
1391   else if (SP.isPrivate())
1392     addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1393             dwarf::DW_ACCESS_private);
1394   else if (SP.isPublic())
1395     addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1396             dwarf::DW_ACCESS_public);
1397 
1398   if (SP.isExplicit())
1399     addFlag(SPDie, dwarf::DW_AT_explicit);
1400 }
1401 
1402 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1403 void DwarfUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy) {
1404   DIE &DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer);
1405   addDIEEntry(DW_Subrange, dwarf::DW_AT_type, *IndexTy);
1406 
1407   // The LowerBound value defines the lower bounds which is typically zero for
1408   // C/C++. The Count value is the number of elements.  Values are 64 bit. If
1409   // Count == -1 then the array is unbounded and we do not emit
1410   // DW_AT_lower_bound and DW_AT_count attributes.
1411   int64_t LowerBound = SR.getLo();
1412   int64_t DefaultLowerBound = getDefaultLowerBound();
1413   int64_t Count = SR.getCount();
1414 
1415   if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1416     addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
1417 
1418   if (Count != -1)
1419     // FIXME: An unbounded array should reference the expression that defines
1420     // the array.
1421     addUInt(DW_Subrange, dwarf::DW_AT_count, None, Count);
1422 }
1423 
1424 DIE *DwarfUnit::getIndexTyDie() {
1425   if (IndexTyDie)
1426     return IndexTyDie;
1427   // Construct an integer type to use for indexes.
1428   IndexTyDie = &createAndAddDIE(dwarf::DW_TAG_base_type, UnitDie);
1429   addString(*IndexTyDie, dwarf::DW_AT_name, "sizetype");
1430   addUInt(*IndexTyDie, dwarf::DW_AT_byte_size, None, sizeof(int64_t));
1431   addUInt(*IndexTyDie, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1432           dwarf::DW_ATE_unsigned);
1433   return IndexTyDie;
1434 }
1435 
1436 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1437 void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
1438   if (CTy.isVector())
1439     addFlag(Buffer, dwarf::DW_AT_GNU_vector);
1440 
1441   // Emit the element type.
1442   addType(Buffer, resolve(CTy.getTypeDerivedFrom()));
1443 
1444   // Get an anonymous type for index type.
1445   // FIXME: This type should be passed down from the front end
1446   // as different languages may have different sizes for indexes.
1447   DIE *IdxTy = getIndexTyDie();
1448 
1449   // Add subranges to array type.
1450   DIArray Elements = CTy.getElements();
1451   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1452     DIDescriptor Element = Elements.getElement(i);
1453     if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1454       constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1455   }
1456 }
1457 
1458 /// constructEnumTypeDIE - Construct an enum type DIE from DICompositeType.
1459 void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) {
1460   DIArray Elements = CTy.getElements();
1461 
1462   // Add enumerators to enumeration type.
1463   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1464     DIEnumerator Enum(Elements.getElement(i));
1465     if (Enum.isEnumerator()) {
1466       DIE &Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
1467       StringRef Name = Enum.getName();
1468       addString(Enumerator, dwarf::DW_AT_name, Name);
1469       int64_t Value = Enum.getEnumValue();
1470       addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
1471               Value);
1472     }
1473   }
1474   DIType DTy = resolve(CTy.getTypeDerivedFrom());
1475   if (DTy) {
1476     addType(Buffer, DTy);
1477     addFlag(Buffer, dwarf::DW_AT_enum_class);
1478   }
1479 }
1480 
1481 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1482 /// vtables.
1483 void DwarfUnit::constructContainingTypeDIEs() {
1484   for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1485                                                  CE = ContainingTypeMap.end();
1486        CI != CE; ++CI) {
1487     DIE &SPDie = *CI->first;
1488     DIDescriptor D(CI->second);
1489     if (!D)
1490       continue;
1491     DIE *NDie = getDIE(D);
1492     if (!NDie)
1493       continue;
1494     addDIEEntry(SPDie, dwarf::DW_AT_containing_type, *NDie);
1495   }
1496 }
1497 
1498 /// constructMemberDIE - Construct member DIE from DIDerivedType.
1499 void DwarfUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT) {
1500   DIE &MemberDie = createAndAddDIE(DT.getTag(), Buffer);
1501   StringRef Name = DT.getName();
1502   if (!Name.empty())
1503     addString(MemberDie, dwarf::DW_AT_name, Name);
1504 
1505   addType(MemberDie, resolve(DT.getTypeDerivedFrom()));
1506 
1507   addSourceLine(MemberDie, DT);
1508 
1509   if (DT.getTag() == dwarf::DW_TAG_inheritance && DT.isVirtual()) {
1510 
1511     // For C++, virtual base classes are not at fixed offset. Use following
1512     // expression to extract appropriate offset from vtable.
1513     // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1514 
1515     DIELoc *VBaseLocationDie = new (DIEValueAllocator) DIELoc();
1516     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1517     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1518     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1519     addUInt(*VBaseLocationDie, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1520     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1521     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1522     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1523 
1524     addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie);
1525   } else {
1526     uint64_t Size = DT.getSizeInBits();
1527     uint64_t FieldSize = getBaseTypeSize(DD, DT);
1528     uint64_t OffsetInBytes;
1529 
1530     if (Size != FieldSize) {
1531       // Handle bitfield, assume bytes are 8 bits.
1532       addUInt(MemberDie, dwarf::DW_AT_byte_size, None, FieldSize/8);
1533       addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size);
1534 
1535       uint64_t Offset = DT.getOffsetInBits();
1536       uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1537       uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1538       uint64_t FieldOffset = (HiMark - FieldSize);
1539       Offset -= FieldOffset;
1540 
1541       // Maybe we need to work from the other end.
1542       if (Asm->getDataLayout().isLittleEndian())
1543         Offset = FieldSize - (Offset + Size);
1544       addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset);
1545 
1546       // Here DW_AT_data_member_location points to the anonymous
1547       // field that includes this bit field.
1548       OffsetInBytes = FieldOffset >> 3;
1549     } else
1550       // This is not a bitfield.
1551       OffsetInBytes = DT.getOffsetInBits() >> 3;
1552 
1553     if (DD->getDwarfVersion() <= 2) {
1554       DIELoc *MemLocationDie = new (DIEValueAllocator) DIELoc();
1555       addUInt(*MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1556       addUInt(*MemLocationDie, dwarf::DW_FORM_udata, OffsetInBytes);
1557       addBlock(MemberDie, dwarf::DW_AT_data_member_location, MemLocationDie);
1558     } else
1559       addUInt(MemberDie, dwarf::DW_AT_data_member_location, None,
1560               OffsetInBytes);
1561   }
1562 
1563   if (DT.isProtected())
1564     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1565             dwarf::DW_ACCESS_protected);
1566   else if (DT.isPrivate())
1567     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1568             dwarf::DW_ACCESS_private);
1569   // Otherwise C++ member and base classes are considered public.
1570   else if (DT.isPublic())
1571     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1572             dwarf::DW_ACCESS_public);
1573   if (DT.isVirtual())
1574     addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1575             dwarf::DW_VIRTUALITY_virtual);
1576 
1577   // Objective-C properties.
1578   if (MDNode *PNode = DT.getObjCProperty())
1579     if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1580       MemberDie.addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1581                          PropertyDie);
1582 
1583   if (DT.isArtificial())
1584     addFlag(MemberDie, dwarf::DW_AT_artificial);
1585 }
1586 
1587 /// getOrCreateStaticMemberDIE - Create new DIE for C++ static member.
1588 DIE *DwarfUnit::getOrCreateStaticMemberDIE(DIDerivedType DT) {
1589   if (!DT.Verify())
1590     return nullptr;
1591 
1592   // Construct the context before querying for the existence of the DIE in case
1593   // such construction creates the DIE.
1594   DIE *ContextDIE = getOrCreateContextDIE(resolve(DT.getContext()));
1595   assert(dwarf::isType(ContextDIE->getTag()) &&
1596          "Static member should belong to a type.");
1597 
1598   if (DIE *StaticMemberDIE = getDIE(DT))
1599     return StaticMemberDIE;
1600 
1601   DIE &StaticMemberDIE = createAndAddDIE(DT.getTag(), *ContextDIE, DT);
1602 
1603   DIType Ty = resolve(DT.getTypeDerivedFrom());
1604 
1605   addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1606   addType(StaticMemberDIE, Ty);
1607   addSourceLine(StaticMemberDIE, DT);
1608   addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1609   addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1610 
1611   // FIXME: We could omit private if the parent is a class_type, and
1612   // public if the parent is something else.
1613   if (DT.isProtected())
1614     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1615             dwarf::DW_ACCESS_protected);
1616   else if (DT.isPrivate())
1617     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1618             dwarf::DW_ACCESS_private);
1619   else if (DT.isPublic())
1620     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1621             dwarf::DW_ACCESS_public);
1622 
1623   if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
1624     addConstantValue(StaticMemberDIE, CI, Ty);
1625   if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
1626     addConstantFPValue(StaticMemberDIE, CFP);
1627 
1628   return &StaticMemberDIE;
1629 }
1630 
1631 void DwarfUnit::emitHeader(const MCSymbol *ASectionSym) const {
1632   // Emit size of content not including length itself
1633   Asm->OutStreamer.AddComment("Length of Unit");
1634   Asm->EmitInt32(getHeaderSize() + UnitDie.getSize());
1635 
1636   Asm->OutStreamer.AddComment("DWARF version number");
1637   Asm->EmitInt16(DD->getDwarfVersion());
1638   Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1639   // We share one abbreviations table across all units so it's always at the
1640   // start of the section. Use a relocatable offset where needed to ensure
1641   // linking doesn't invalidate that offset.
1642   if (ASectionSym)
1643     Asm->EmitSectionOffset(ASectionSym, ASectionSym);
1644   else
1645     // Use a constant value when no symbol is provided.
1646     Asm->EmitInt32(0);
1647   Asm->OutStreamer.AddComment("Address Size (in bytes)");
1648   Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1649 }
1650 
1651 void DwarfUnit::initSection(const MCSection *Section) {
1652   assert(!this->Section);
1653   this->Section = Section;
1654 }
1655 
1656 void DwarfTypeUnit::emitHeader(const MCSymbol *ASectionSym) const {
1657   DwarfUnit::emitHeader(ASectionSym);
1658   Asm->OutStreamer.AddComment("Type Signature");
1659   Asm->OutStreamer.EmitIntValue(TypeSignature, sizeof(TypeSignature));
1660   Asm->OutStreamer.AddComment("Type DIE Offset");
1661   // In a skeleton type unit there is no type DIE so emit a zero offset.
1662   Asm->OutStreamer.EmitIntValue(Ty ? Ty->getOffset() : 0,
1663                                 sizeof(Ty->getOffset()));
1664 }
1665 
1666 bool DwarfTypeUnit::isDwoUnit() const {
1667   // Since there are no skeleton type units, all type units are dwo type units
1668   // when split DWARF is being used.
1669   return DD->useSplitDwarf();
1670 }
1671