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