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