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