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