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