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