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