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