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