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