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