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 "DwarfDebug.h"
17 #include "llvm/ADT/APFloat.h"
18 #include "llvm/IR/Constants.h"
19 #include "llvm/IR/DIBuilder.h"
20 #include "llvm/IR/DataLayout.h"
21 #include "llvm/IR/GlobalVariable.h"
22 #include "llvm/IR/Instructions.h"
23 #include "llvm/IR/Mangler.h"
24 #include "llvm/MC/MCAsmInfo.h"
25 #include "llvm/MC/MCContext.h"
26 #include "llvm/MC/MCSection.h"
27 #include "llvm/MC/MCStreamer.h"
28 #include "llvm/Support/CommandLine.h"
29 #include "llvm/Target/TargetFrameLowering.h"
30 #include "llvm/Target/TargetLoweringObjectFile.h"
31 #include "llvm/Target/TargetMachine.h"
32 #include "llvm/Target/TargetRegisterInfo.h"
33 
34 using namespace llvm;
35 
36 #define DEBUG_TYPE "dwarfdebug"
37 
38 static cl::opt<bool>
39 GenerateDwarfTypeUnits("generate-type-units", cl::Hidden,
40                        cl::desc("Generate DWARF4 type units."),
41                        cl::init(false));
42 
43 /// Unit - Unit constructor.
44 DwarfUnit::DwarfUnit(unsigned UID, dwarf::Tag UnitTag, DICompileUnit Node,
45                      AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU)
46     : UniqueID(UID), CUNode(Node), UnitDie(UnitTag), DebugInfoOffset(0), Asm(A),
47       DD(DW), DU(DWU), IndexTyDie(nullptr), Section(nullptr),
48       Skeleton(nullptr) {
49   assert(UnitTag == dwarf::DW_TAG_compile_unit ||
50          UnitTag == dwarf::DW_TAG_type_unit);
51   DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
52 }
53 
54 DwarfCompileUnit::DwarfCompileUnit(unsigned UID, DICompileUnit Node,
55                                    AsmPrinter *A, DwarfDebug *DW,
56                                    DwarfFile *DWU)
57     : DwarfUnit(UID, dwarf::DW_TAG_compile_unit, Node, A, DW, DWU) {
58   insertDIE(Node, &getUnitDie());
59 }
60 
61 DwarfTypeUnit::DwarfTypeUnit(unsigned UID, DwarfCompileUnit &CU, AsmPrinter *A,
62                              DwarfDebug *DW, DwarfFile *DWU,
63                              MCDwarfDwoLineTable *SplitLineTable)
64     : DwarfUnit(UID, dwarf::DW_TAG_type_unit, CU.getCUNode(), A, DW, DWU),
65       CU(CU), SplitLineTable(SplitLineTable) {
66   if (SplitLineTable)
67     addSectionOffset(UnitDie, dwarf::DW_AT_stmt_list, 0);
68 }
69 
70 /// ~Unit - Destructor for compile unit.
71 DwarfUnit::~DwarfUnit() {
72   for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
73     DIEBlocks[j]->~DIEBlock();
74   for (unsigned j = 0, M = DIELocs.size(); j < M; ++j)
75     DIELocs[j]->~DIELoc();
76 }
77 
78 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
79 /// information entry.
80 DIEEntry *DwarfUnit::createDIEEntry(DIE &Entry) {
81   DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry);
82   return Value;
83 }
84 
85 /// getDefaultLowerBound - Return the default lower bound for an array. If the
86 /// DWARF version doesn't handle the language, return -1.
87 int64_t DwarfUnit::getDefaultLowerBound() const {
88   switch (getLanguage()) {
89   default:
90     break;
91 
92   case dwarf::DW_LANG_C89:
93   case dwarf::DW_LANG_C99:
94   case dwarf::DW_LANG_C:
95   case dwarf::DW_LANG_C_plus_plus:
96   case dwarf::DW_LANG_ObjC:
97   case dwarf::DW_LANG_ObjC_plus_plus:
98     return 0;
99 
100   case dwarf::DW_LANG_Fortran77:
101   case dwarf::DW_LANG_Fortran90:
102   case dwarf::DW_LANG_Fortran95:
103     return 1;
104 
105   // The languages below have valid values only if the DWARF version >= 4.
106   case dwarf::DW_LANG_Java:
107   case dwarf::DW_LANG_Python:
108   case dwarf::DW_LANG_UPC:
109   case dwarf::DW_LANG_D:
110     if (dwarf::DWARF_VERSION >= 4)
111       return 0;
112     break;
113 
114   case dwarf::DW_LANG_Ada83:
115   case dwarf::DW_LANG_Ada95:
116   case dwarf::DW_LANG_Cobol74:
117   case dwarf::DW_LANG_Cobol85:
118   case dwarf::DW_LANG_Modula2:
119   case dwarf::DW_LANG_Pascal83:
120   case dwarf::DW_LANG_PLI:
121     if (dwarf::DWARF_VERSION >= 4)
122       return 1;
123     break;
124   }
125 
126   return -1;
127 }
128 
129 /// Check whether the DIE for this MDNode can be shared across CUs.
130 static bool isShareableAcrossCUs(DIDescriptor D) {
131   // When the MDNode can be part of the type system, the DIE can be shared
132   // across CUs.
133   // Combining type units and cross-CU DIE sharing is lower value (since
134   // cross-CU DIE sharing is used in LTO and removes type redundancy at that
135   // level already) but may be implementable for some value in projects
136   // building multiple independent libraries with LTO and then linking those
137   // together.
138   return (D.isType() ||
139           (D.isSubprogram() && !DISubprogram(D).isDefinition())) &&
140          !GenerateDwarfTypeUnits;
141 }
142 
143 /// getDIE - Returns the debug information entry map slot for the
144 /// specified debug variable. We delegate the request to DwarfDebug
145 /// when the DIE for this MDNode can be shared across CUs. The mappings
146 /// will be kept in DwarfDebug for shareable DIEs.
147 DIE *DwarfUnit::getDIE(DIDescriptor D) const {
148   if (isShareableAcrossCUs(D))
149     return DD->getDIE(D);
150   return MDNodeToDieMap.lookup(D);
151 }
152 
153 /// insertDIE - Insert DIE into the map. We delegate the request to DwarfDebug
154 /// when the DIE for this MDNode can be shared across CUs. The mappings
155 /// will be kept in DwarfDebug for shareable DIEs.
156 void DwarfUnit::insertDIE(DIDescriptor Desc, DIE *D) {
157   if (isShareableAcrossCUs(Desc)) {
158     DD->insertDIE(Desc, D);
159     return;
160   }
161   MDNodeToDieMap.insert(std::make_pair(Desc, D));
162 }
163 
164 /// addFlag - Add a flag that is true.
165 void DwarfUnit::addFlag(DIE &Die, dwarf::Attribute Attribute) {
166   if (DD->getDwarfVersion() >= 4)
167     Die.addValue(Attribute, dwarf::DW_FORM_flag_present, DIEIntegerOne);
168   else
169     Die.addValue(Attribute, dwarf::DW_FORM_flag, DIEIntegerOne);
170 }
171 
172 /// addUInt - Add an unsigned integer attribute data and value.
173 ///
174 void DwarfUnit::addUInt(DIE &Die, dwarf::Attribute Attribute,
175                         Optional<dwarf::Form> Form, uint64_t Integer) {
176   if (!Form)
177     Form = DIEInteger::BestForm(false, Integer);
178   DIEValue *Value = Integer == 1 ? DIEIntegerOne : new (DIEValueAllocator)
179                         DIEInteger(Integer);
180   Die.addValue(Attribute, *Form, Value);
181 }
182 
183 void DwarfUnit::addUInt(DIE &Block, dwarf::Form Form, uint64_t Integer) {
184   addUInt(Block, (dwarf::Attribute)0, Form, Integer);
185 }
186 
187 /// addSInt - Add an signed integer attribute data and value.
188 ///
189 void DwarfUnit::addSInt(DIE &Die, dwarf::Attribute Attribute,
190                         Optional<dwarf::Form> Form, int64_t Integer) {
191   if (!Form)
192     Form = DIEInteger::BestForm(true, Integer);
193   DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
194   Die.addValue(Attribute, *Form, Value);
195 }
196 
197 void DwarfUnit::addSInt(DIELoc &Die, Optional<dwarf::Form> Form,
198                         int64_t Integer) {
199   addSInt(Die, (dwarf::Attribute)0, Form, Integer);
200 }
201 
202 /// addString - Add a string attribute data and value. We always emit a
203 /// reference to the string pool instead of immediate strings so that DIEs have
204 /// more predictable sizes. In the case of split dwarf we emit an index
205 /// into another table which gets us the static offset into the string
206 /// table.
207 void DwarfUnit::addString(DIE &Die, dwarf::Attribute Attribute,
208                           StringRef String) {
209 
210   if (!DD->useSplitDwarf())
211     return addLocalString(Die, Attribute, String);
212 
213   unsigned idx = DU->getStringPool().getIndex(*Asm, String);
214   DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
215   DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
216   Die.addValue(Attribute, dwarf::DW_FORM_GNU_str_index, Str);
217 }
218 
219 /// addLocalString - Add a string attribute data and value. This is guaranteed
220 /// to be in the local string pool instead of indirected.
221 void DwarfUnit::addLocalString(DIE &Die, dwarf::Attribute Attribute,
222                                StringRef String) {
223   MCSymbol *Symb = DU->getStringPool().getSymbol(*Asm, String);
224   DIEValue *Value;
225   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
226     Value = new (DIEValueAllocator) DIELabel(Symb);
227   else {
228     MCSymbol *StringPool = DU->getStringPool().getSectionSymbol();
229     Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
230   }
231   DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
232   Die.addValue(Attribute, dwarf::DW_FORM_strp, Str);
233 }
234 
235 /// addExpr - Add a Dwarf expression attribute data and value.
236 ///
237 void DwarfUnit::addExpr(DIELoc &Die, dwarf::Form Form, const MCExpr *Expr) {
238   DIEValue *Value = new (DIEValueAllocator) DIEExpr(Expr);
239   Die.addValue((dwarf::Attribute)0, Form, Value);
240 }
241 
242 /// addLocationList - Add a Dwarf loclistptr attribute data and value.
243 ///
244 void DwarfUnit::addLocationList(DIE &Die, dwarf::Attribute Attribute,
245                                 unsigned Index) {
246   DIEValue *Value = new (DIEValueAllocator) DIELocList(Index);
247   dwarf::Form Form = DD->getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset
248                                                 : dwarf::DW_FORM_data4;
249   Die.addValue(Attribute, Form, Value);
250 }
251 
252 /// addLabel - Add a Dwarf label attribute data and value.
253 ///
254 void DwarfUnit::addLabel(DIE &Die, dwarf::Attribute Attribute, dwarf::Form Form,
255                          const MCSymbol *Label) {
256   DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
257   Die.addValue(Attribute, Form, Value);
258 }
259 
260 void DwarfUnit::addLabel(DIELoc &Die, dwarf::Form Form, const MCSymbol *Label) {
261   addLabel(Die, (dwarf::Attribute)0, Form, Label);
262 }
263 
264 /// addSectionLabel - Add a Dwarf section label attribute data and value.
265 ///
266 void DwarfUnit::addSectionLabel(DIE &Die, dwarf::Attribute Attribute,
267                                 const MCSymbol *Label) {
268   if (DD->getDwarfVersion() >= 4)
269     addLabel(Die, Attribute, dwarf::DW_FORM_sec_offset, Label);
270   else
271     addLabel(Die, Attribute, dwarf::DW_FORM_data4, Label);
272 }
273 
274 /// addSectionOffset - Add an offset into a section attribute data and value.
275 ///
276 void DwarfUnit::addSectionOffset(DIE &Die, dwarf::Attribute Attribute,
277                                  uint64_t Integer) {
278   if (DD->getDwarfVersion() >= 4)
279     addUInt(Die, Attribute, dwarf::DW_FORM_sec_offset, Integer);
280   else
281     addUInt(Die, Attribute, dwarf::DW_FORM_data4, Integer);
282 }
283 
284 /// addLabelAddress - Add a dwarf label attribute data and value using
285 /// DW_FORM_addr or DW_FORM_GNU_addr_index.
286 ///
287 void DwarfCompileUnit::addLabelAddress(DIE &Die, dwarf::Attribute Attribute,
288                                        const MCSymbol *Label) {
289 
290   if (!DD->useSplitDwarf())
291     return addLocalLabelAddress(Die, Attribute, Label);
292 
293   if (Label)
294     DD->addArangeLabel(SymbolCU(this, Label));
295 
296   unsigned idx = DD->getAddressPool().getIndex(Label);
297   DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
298   Die.addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
299 }
300 
301 void DwarfCompileUnit::addLocalLabelAddress(DIE &Die,
302                                             dwarf::Attribute Attribute,
303                                             const MCSymbol *Label) {
304   if (Label)
305     DD->addArangeLabel(SymbolCU(this, Label));
306 
307   Die.addValue(Attribute, dwarf::DW_FORM_addr,
308                Label ? (DIEValue *)new (DIEValueAllocator) DIELabel(Label)
309                      : new (DIEValueAllocator) DIEInteger(0));
310 }
311 
312 unsigned DwarfCompileUnit::getOrCreateSourceID(StringRef FileName, StringRef DirName) {
313   // If we print assembly, we can't separate .file entries according to
314   // compile units. Thus all files will belong to the default compile unit.
315 
316   // FIXME: add a better feature test than hasRawTextSupport. Even better,
317   // extend .file to support this.
318   return Asm->OutStreamer.EmitDwarfFileDirective(
319       0, DirName, FileName,
320       Asm->OutStreamer.hasRawTextSupport() ? 0 : getUniqueID());
321 }
322 
323 unsigned DwarfTypeUnit::getOrCreateSourceID(StringRef FileName, StringRef DirName) {
324   return SplitLineTable ? SplitLineTable->getFile(DirName, FileName)
325                         : getCU().getOrCreateSourceID(FileName, DirName);
326 }
327 
328 /// addOpAddress - Add a dwarf op address data and value using the
329 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
330 ///
331 void DwarfUnit::addOpAddress(DIELoc &Die, const MCSymbol *Sym) {
332   if (!DD->useSplitDwarf()) {
333     addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
334     addLabel(Die, dwarf::DW_FORM_udata, Sym);
335   } else {
336     addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
337     addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
338             DD->getAddressPool().getIndex(Sym));
339   }
340 }
341 
342 /// addSectionDelta - Add a section label delta attribute data and value.
343 ///
344 void DwarfUnit::addSectionDelta(DIE &Die, dwarf::Attribute Attribute,
345                                 const MCSymbol *Hi, const MCSymbol *Lo) {
346   DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
347   Die.addValue(Attribute, DD->getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset
348                                                      : dwarf::DW_FORM_data4,
349                Value);
350 }
351 
352 void DwarfUnit::addLabelDelta(DIE &Die, dwarf::Attribute Attribute,
353                               const MCSymbol *Hi, const MCSymbol *Lo) {
354   DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
355   Die.addValue(Attribute, dwarf::DW_FORM_data4, Value);
356 }
357 
358 /// addDIEEntry - Add a DIE attribute data and value.
359 ///
360 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute, DIE &Entry) {
361   addDIEEntry(Die, Attribute, createDIEEntry(Entry));
362 }
363 
364 void DwarfUnit::addDIETypeSignature(DIE &Die, const DwarfTypeUnit &Type) {
365   // Flag the type unit reference as a declaration so that if it contains
366   // members (implicit special members, static data member definitions, member
367   // declarations for definitions in this CU, etc) consumers don't get confused
368   // and think this is a full definition.
369   addFlag(Die, dwarf::DW_AT_declaration);
370 
371   Die.addValue(dwarf::DW_AT_signature, dwarf::DW_FORM_ref_sig8,
372                new (DIEValueAllocator) DIETypeSignature(Type));
373 }
374 
375 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute,
376                             DIEEntry *Entry) {
377   const DIE *DieCU = Die.getUnitOrNull();
378   const DIE *EntryCU = Entry->getEntry().getUnitOrNull();
379   if (!DieCU)
380     // We assume that Die belongs to this CU, if it is not linked to any CU yet.
381     DieCU = &getUnitDie();
382   if (!EntryCU)
383     EntryCU = &getUnitDie();
384   Die.addValue(Attribute,
385                EntryCU == DieCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
386                Entry);
387 }
388 
389 /// Create a DIE with the given Tag, add the DIE to its parent, and
390 /// call insertDIE if MD is not null.
391 DIE &DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, DIDescriptor N) {
392   assert(Tag != dwarf::DW_TAG_auto_variable &&
393          Tag != dwarf::DW_TAG_arg_variable);
394   Parent.addChild(make_unique<DIE>((dwarf::Tag)Tag));
395   DIE &Die = *Parent.getChildren().back();
396   if (N)
397     insertDIE(N, &Die);
398   return Die;
399 }
400 
401 /// addBlock - Add block data.
402 ///
403 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute, DIELoc *Loc) {
404   Loc->ComputeSize(Asm);
405   DIELocs.push_back(Loc); // Memoize so we can call the destructor later on.
406   Die.addValue(Attribute, Loc->BestForm(DD->getDwarfVersion()), Loc);
407 }
408 
409 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute,
410                          DIEBlock *Block) {
411   Block->ComputeSize(Asm);
412   DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
413   Die.addValue(Attribute, Block->BestForm(), Block);
414 }
415 
416 /// addSourceLine - Add location information to specified debug information
417 /// entry.
418 void DwarfUnit::addSourceLine(DIE &Die, unsigned Line, StringRef File,
419                               StringRef Directory) {
420   if (Line == 0)
421     return;
422 
423   unsigned FileID = getOrCreateSourceID(File, Directory);
424   assert(FileID && "Invalid file id");
425   addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
426   addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
427 }
428 
429 /// addSourceLine - Add location information to specified debug information
430 /// entry.
431 void DwarfUnit::addSourceLine(DIE &Die, DIVariable V) {
432   assert(V.isVariable());
433 
434   addSourceLine(Die, V.getLineNumber(), V.getContext().getFilename(),
435                 V.getContext().getDirectory());
436 }
437 
438 /// addSourceLine - Add location information to specified debug information
439 /// entry.
440 void DwarfUnit::addSourceLine(DIE &Die, DIGlobalVariable G) {
441   assert(G.isGlobalVariable());
442 
443   addSourceLine(Die, G.getLineNumber(), G.getFilename(), G.getDirectory());
444 }
445 
446 /// addSourceLine - Add location information to specified debug information
447 /// entry.
448 void DwarfUnit::addSourceLine(DIE &Die, DISubprogram SP) {
449   assert(SP.isSubprogram());
450 
451   addSourceLine(Die, SP.getLineNumber(), SP.getFilename(), SP.getDirectory());
452 }
453 
454 /// addSourceLine - Add location information to specified debug information
455 /// entry.
456 void DwarfUnit::addSourceLine(DIE &Die, DIType Ty) {
457   assert(Ty.isType());
458 
459   addSourceLine(Die, Ty.getLineNumber(), Ty.getFilename(), Ty.getDirectory());
460 }
461 
462 /// addSourceLine - Add location information to specified debug information
463 /// entry.
464 void DwarfUnit::addSourceLine(DIE &Die, DIObjCProperty Ty) {
465   assert(Ty.isObjCProperty());
466 
467   DIFile File = Ty.getFile();
468   addSourceLine(Die, Ty.getLineNumber(), File.getFilename(),
469                 File.getDirectory());
470 }
471 
472 /// addSourceLine - Add location information to specified debug information
473 /// entry.
474 void DwarfUnit::addSourceLine(DIE &Die, DINameSpace NS) {
475   assert(NS.Verify());
476 
477   addSourceLine(Die, NS.getLineNumber(), NS.getFilename(), NS.getDirectory());
478 }
479 
480 /// addVariableAddress - Add DW_AT_location attribute for a
481 /// DbgVariable based on provided MachineLocation.
482 void DwarfUnit::addVariableAddress(const DbgVariable &DV, DIE &Die,
483                                    MachineLocation Location) {
484   if (DV.variableHasComplexAddress())
485     addComplexAddress(DV, Die, dwarf::DW_AT_location, Location);
486   else if (DV.isBlockByrefVariable())
487     addBlockByrefAddress(DV, Die, dwarf::DW_AT_location, Location);
488   else
489     addAddress(Die, dwarf::DW_AT_location, Location,
490                DV.getVariable().isIndirect());
491 }
492 
493 /// addRegisterOp - Add register operand.
494 void DwarfUnit::addRegisterOp(DIELoc &TheDie, unsigned Reg) {
495   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
496   int DWReg = RI->getDwarfRegNum(Reg, false);
497   bool isSubRegister = DWReg < 0;
498 
499   unsigned Idx = 0;
500 
501   // Go up the super-register chain until we hit a valid dwarf register number.
502   for (MCSuperRegIterator SR(Reg, RI); SR.isValid() && DWReg < 0; ++SR) {
503     DWReg = RI->getDwarfRegNum(*SR, false);
504     if (DWReg >= 0)
505       Idx = RI->getSubRegIndex(*SR, Reg);
506   }
507 
508   if (DWReg < 0) {
509     DEBUG(dbgs() << "Invalid Dwarf register number.\n");
510     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_nop);
511     return;
512   }
513 
514   // Emit register
515   if (DWReg < 32)
516     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
517   else {
518     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
519     addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
520   }
521 
522   // Emit Mask
523   if (isSubRegister) {
524     unsigned Size = RI->getSubRegIdxSize(Idx);
525     unsigned Offset = RI->getSubRegIdxOffset(Idx);
526     if (Offset > 0) {
527       addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bit_piece);
528       addUInt(TheDie, dwarf::DW_FORM_data1, Size);
529       addUInt(TheDie, dwarf::DW_FORM_data1, Offset);
530     } else {
531       unsigned ByteSize = Size / 8; // Assuming 8 bits per byte.
532       addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_piece);
533       addUInt(TheDie, dwarf::DW_FORM_data1, ByteSize);
534     }
535   }
536 }
537 
538 /// addRegisterOffset - Add register offset.
539 void DwarfUnit::addRegisterOffset(DIELoc &TheDie, unsigned Reg,
540                                   int64_t Offset) {
541   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
542   unsigned DWReg = RI->getDwarfRegNum(Reg, false);
543   const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
544   if (Reg == TRI->getFrameRegister(*Asm->MF))
545     // If variable offset is based in frame register then use fbreg.
546     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
547   else if (DWReg < 32)
548     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
549   else {
550     addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
551     addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
552   }
553   addSInt(TheDie, dwarf::DW_FORM_sdata, Offset);
554 }
555 
556 /// addAddress - Add an address attribute to a die based on the location
557 /// provided.
558 void DwarfUnit::addAddress(DIE &Die, dwarf::Attribute Attribute,
559                            const MachineLocation &Location, bool Indirect) {
560   DIELoc *Loc = new (DIEValueAllocator) DIELoc();
561 
562   if (Location.isReg() && !Indirect)
563     addRegisterOp(*Loc, Location.getReg());
564   else {
565     addRegisterOffset(*Loc, Location.getReg(), Location.getOffset());
566     if (Indirect && !Location.isReg()) {
567       addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
568     }
569   }
570 
571   // Now attach the location information to the DIE.
572   addBlock(Die, Attribute, Loc);
573 }
574 
575 /// addComplexAddress - Start with the address based on the location provided,
576 /// and generate the DWARF information necessary to find the actual variable
577 /// given the extra address information encoded in the DbgVariable, starting
578 /// from the starting location.  Add the DWARF information to the die.
579 ///
580 void DwarfUnit::addComplexAddress(const DbgVariable &DV, DIE &Die,
581                                   dwarf::Attribute Attribute,
582                                   const MachineLocation &Location) {
583   DIELoc *Loc = new (DIEValueAllocator) DIELoc();
584   unsigned N = DV.getNumAddrElements();
585   unsigned i = 0;
586   if (Location.isReg()) {
587     if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
588       // If first address element is OpPlus then emit
589       // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
590       addRegisterOffset(*Loc, Location.getReg(), DV.getAddrElement(1));
591       i = 2;
592     } else
593       addRegisterOp(*Loc, Location.getReg());
594   } else
595     addRegisterOffset(*Loc, Location.getReg(), Location.getOffset());
596 
597   for (; i < N; ++i) {
598     uint64_t Element = DV.getAddrElement(i);
599     if (Element == DIBuilder::OpPlus) {
600       addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
601       addUInt(*Loc, dwarf::DW_FORM_udata, DV.getAddrElement(++i));
602     } else if (Element == DIBuilder::OpDeref) {
603       if (!Location.isReg())
604         addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
605     } else
606       llvm_unreachable("unknown DIBuilder Opcode");
607   }
608 
609   // Now attach the location information to the DIE.
610   addBlock(Die, Attribute, Loc);
611 }
612 
613 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
614    VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
615    gives the variable VarName either the struct, or a pointer to the struct, as
616    its type.  This is necessary for various behind-the-scenes things the
617    compiler needs to do with by-reference variables in Blocks.
618 
619    However, as far as the original *programmer* is concerned, the variable
620    should still have type 'SomeType', as originally declared.
621 
622    The function getBlockByrefType dives into the __Block_byref_x_VarName
623    struct to find the original type of the variable, which is then assigned to
624    the variable's Debug Information Entry as its real type.  So far, so good.
625    However now the debugger will expect the variable VarName to have the type
626    SomeType.  So we need the location attribute for the variable to be an
627    expression that explains to the debugger how to navigate through the
628    pointers and struct to find the actual variable of type SomeType.
629 
630    The following function does just that.  We start by getting
631    the "normal" location for the variable. This will be the location
632    of either the struct __Block_byref_x_VarName or the pointer to the
633    struct __Block_byref_x_VarName.
634 
635    The struct will look something like:
636 
637    struct __Block_byref_x_VarName {
638      ... <various fields>
639      struct __Block_byref_x_VarName *forwarding;
640      ... <various other fields>
641      SomeType VarName;
642      ... <maybe more fields>
643    };
644 
645    If we are given the struct directly (as our starting point) we
646    need to tell the debugger to:
647 
648    1).  Add the offset of the forwarding field.
649 
650    2).  Follow that pointer to get the real __Block_byref_x_VarName
651    struct to use (the real one may have been copied onto the heap).
652 
653    3).  Add the offset for the field VarName, to find the actual variable.
654 
655    If we started with a pointer to the struct, then we need to
656    dereference that pointer first, before the other steps.
657    Translating this into DWARF ops, we will need to append the following
658    to the current location description for the variable:
659 
660    DW_OP_deref                    -- optional, if we start with a pointer
661    DW_OP_plus_uconst <forward_fld_offset>
662    DW_OP_deref
663    DW_OP_plus_uconst <varName_fld_offset>
664 
665    That is what this function does.  */
666 
667 /// addBlockByrefAddress - Start with the address based on the location
668 /// provided, and generate the DWARF information necessary to find the
669 /// actual Block variable (navigating the Block struct) based on the
670 /// starting location.  Add the DWARF information to the die.  For
671 /// more information, read large comment just above here.
672 ///
673 void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
674                                      dwarf::Attribute Attribute,
675                                      const MachineLocation &Location) {
676   DIType Ty = DV.getType();
677   DIType TmpTy = Ty;
678   uint16_t Tag = Ty.getTag();
679   bool isPointer = false;
680 
681   StringRef varName = DV.getName();
682 
683   if (Tag == dwarf::DW_TAG_pointer_type) {
684     DIDerivedType DTy(Ty);
685     TmpTy = resolve(DTy.getTypeDerivedFrom());
686     isPointer = true;
687   }
688 
689   DICompositeType blockStruct(TmpTy);
690 
691   // Find the __forwarding field and the variable field in the __Block_byref
692   // struct.
693   DIArray Fields = blockStruct.getTypeArray();
694   DIDerivedType varField;
695   DIDerivedType forwardingField;
696 
697   for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
698     DIDerivedType DT(Fields.getElement(i));
699     StringRef fieldName = DT.getName();
700     if (fieldName == "__forwarding")
701       forwardingField = DT;
702     else if (fieldName == varName)
703       varField = DT;
704   }
705 
706   // Get the offsets for the forwarding field and the variable field.
707   unsigned forwardingFieldOffset = forwardingField.getOffsetInBits() >> 3;
708   unsigned varFieldOffset = varField.getOffsetInBits() >> 2;
709 
710   // Decode the original location, and use that as the start of the byref
711   // variable's location.
712   DIELoc *Loc = new (DIEValueAllocator) DIELoc();
713 
714   if (Location.isReg())
715     addRegisterOp(*Loc, Location.getReg());
716   else
717     addRegisterOffset(*Loc, Location.getReg(), Location.getOffset());
718 
719   // If we started with a pointer to the __Block_byref... struct, then
720   // the first thing we need to do is dereference the pointer (DW_OP_deref).
721   if (isPointer)
722     addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
723 
724   // Next add the offset for the '__forwarding' field:
725   // DW_OP_plus_uconst ForwardingFieldOffset.  Note there's no point in
726   // adding the offset if it's 0.
727   if (forwardingFieldOffset > 0) {
728     addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
729     addUInt(*Loc, dwarf::DW_FORM_udata, forwardingFieldOffset);
730   }
731 
732   // Now dereference the __forwarding field to get to the real __Block_byref
733   // struct:  DW_OP_deref.
734   addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
735 
736   // Now that we've got the real __Block_byref... struct, add the offset
737   // for the variable's field to get to the location of the actual variable:
738   // DW_OP_plus_uconst varFieldOffset.  Again, don't add if it's 0.
739   if (varFieldOffset > 0) {
740     addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
741     addUInt(*Loc, dwarf::DW_FORM_udata, varFieldOffset);
742   }
743 
744   // Now attach the location information to the DIE.
745   addBlock(Die, Attribute, Loc);
746 }
747 
748 /// Return true if type encoding is unsigned.
749 static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) {
750   DIDerivedType DTy(Ty);
751   if (DTy.isDerivedType()) {
752     if (DIType Deriv = DD->resolve(DTy.getTypeDerivedFrom()))
753       return isUnsignedDIType(DD, Deriv);
754     // FIXME: Enums without a fixed underlying type have unknown signedness
755     // here, leading to incorrectly emitted constants.
756     assert(DTy.getTag() == dwarf::DW_TAG_enumeration_type);
757     return false;
758   }
759 
760   DIBasicType BTy(Ty);
761   assert(BTy.isBasicType());
762   unsigned Encoding = BTy.getEncoding();
763   assert((Encoding == dwarf::DW_ATE_unsigned ||
764           Encoding == dwarf::DW_ATE_unsigned_char ||
765           Encoding == dwarf::DW_ATE_signed ||
766           Encoding == dwarf::DW_ATE_signed_char ||
767           Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean) &&
768          "Unsupported encoding");
769   return (Encoding == dwarf::DW_ATE_unsigned ||
770           Encoding == dwarf::DW_ATE_unsigned_char ||
771           Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean);
772 }
773 
774 /// If this type is derived from a base type then return base type size.
775 static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
776   unsigned Tag = Ty.getTag();
777 
778   if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef &&
779       Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type &&
780       Tag != dwarf::DW_TAG_restrict_type)
781     return Ty.getSizeInBits();
782 
783   DIType BaseType = DD->resolve(Ty.getTypeDerivedFrom());
784 
785   // If this type is not derived from any type or the type is a declaration then
786   // take conservative approach.
787   if (!BaseType.isValid() || BaseType.isForwardDecl())
788     return Ty.getSizeInBits();
789 
790   // If this is a derived type, go ahead and get the base type, unless it's a
791   // reference then it's just the size of the field. Pointer types have no need
792   // of this since they're a different type of qualification on the type.
793   if (BaseType.getTag() == dwarf::DW_TAG_reference_type ||
794       BaseType.getTag() == dwarf::DW_TAG_rvalue_reference_type)
795     return Ty.getSizeInBits();
796 
797   if (BaseType.isDerivedType())
798     return getBaseTypeSize(DD, DIDerivedType(BaseType));
799 
800   return BaseType.getSizeInBits();
801 }
802 
803 /// addConstantFPValue - Add constant value entry in variable DIE.
804 void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) {
805   assert(MO.isFPImm() && "Invalid machine operand!");
806   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
807   APFloat FPImm = MO.getFPImm()->getValueAPF();
808 
809   // Get the raw data form of the floating point.
810   const APInt FltVal = FPImm.bitcastToAPInt();
811   const char *FltPtr = (const char *)FltVal.getRawData();
812 
813   int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
814   bool LittleEndian = Asm->getDataLayout().isLittleEndian();
815   int Incr = (LittleEndian ? 1 : -1);
816   int Start = (LittleEndian ? 0 : NumBytes - 1);
817   int Stop = (LittleEndian ? NumBytes : -1);
818 
819   // Output the constant to DWARF one byte at a time.
820   for (; Start != Stop; Start += Incr)
821     addUInt(*Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]);
822 
823   addBlock(Die, dwarf::DW_AT_const_value, Block);
824 }
825 
826 /// addConstantFPValue - Add constant value entry in variable DIE.
827 void DwarfUnit::addConstantFPValue(DIE &Die, const ConstantFP *CFP) {
828   // Pass this down to addConstantValue as an unsigned bag of bits.
829   addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true);
830 }
831 
832 /// addConstantValue - Add constant value entry in variable DIE.
833 void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI, DIType Ty) {
834   addConstantValue(Die, CI->getValue(), Ty);
835 }
836 
837 /// addConstantValue - Add constant value entry in variable DIE.
838 void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO,
839                                  DIType Ty) {
840   assert(MO.isImm() && "Invalid machine operand!");
841 
842   addConstantValue(Die, isUnsignedDIType(DD, Ty), MO.getImm());
843 }
844 
845 void DwarfUnit::addConstantValue(DIE &Die, bool Unsigned, uint64_t Val) {
846   // FIXME: This is a bit conservative/simple - it emits negative values always
847   // sign extended to 64 bits rather than minimizing the number of bytes.
848   addUInt(Die, dwarf::DW_AT_const_value,
849           Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata, Val);
850 }
851 
852 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, DIType Ty) {
853   addConstantValue(Die, Val, isUnsignedDIType(DD, Ty));
854 }
855 
856 // addConstantValue - Add constant value entry in variable DIE.
857 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) {
858   unsigned CIBitWidth = Val.getBitWidth();
859   if (CIBitWidth <= 64) {
860     addConstantValue(Die, Unsigned,
861                      Unsigned ? Val.getZExtValue() : Val.getSExtValue());
862     return;
863   }
864 
865   DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
866 
867   // Get the raw data form of the large APInt.
868   const uint64_t *Ptr64 = Val.getRawData();
869 
870   int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
871   bool LittleEndian = Asm->getDataLayout().isLittleEndian();
872 
873   // Output the constant to DWARF one byte at a time.
874   for (int i = 0; i < NumBytes; i++) {
875     uint8_t c;
876     if (LittleEndian)
877       c = Ptr64[i / 8] >> (8 * (i & 7));
878     else
879       c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
880     addUInt(*Block, dwarf::DW_FORM_data1, c);
881   }
882 
883   addBlock(Die, dwarf::DW_AT_const_value, Block);
884 }
885 
886 /// addTemplateParams - Add template parameters into buffer.
887 void DwarfUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
888   // Add template parameters.
889   for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
890     DIDescriptor Element = TParams.getElement(i);
891     if (Element.isTemplateTypeParameter())
892       constructTemplateTypeParameterDIE(Buffer,
893                                         DITemplateTypeParameter(Element));
894     else if (Element.isTemplateValueParameter())
895       constructTemplateValueParameterDIE(Buffer,
896                                          DITemplateValueParameter(Element));
897   }
898 }
899 
900 /// getOrCreateContextDIE - Get context owner's DIE.
901 DIE *DwarfUnit::getOrCreateContextDIE(DIScope Context) {
902   if (!Context || Context.isFile())
903     return &getUnitDie();
904   if (Context.isType())
905     return getOrCreateTypeDIE(DIType(Context));
906   if (Context.isNameSpace())
907     return getOrCreateNameSpace(DINameSpace(Context));
908   if (Context.isSubprogram())
909     return getOrCreateSubprogramDIE(DISubprogram(Context));
910   return getDIE(Context);
911 }
912 
913 DIE *DwarfUnit::createTypeDIE(DICompositeType Ty) {
914   DIScope Context = resolve(Ty.getContext());
915   DIE *ContextDIE = getOrCreateContextDIE(Context);
916 
917   if (DIE *TyDIE = getDIE(Ty))
918     return TyDIE;
919 
920   // Create new type.
921   DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
922 
923   constructTypeDIE(TyDIE, Ty);
924 
925   updateAcceleratorTables(Context, Ty, TyDIE);
926   return &TyDIE;
927 }
928 
929 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
930 /// given DIType.
931 DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
932   if (!TyNode)
933     return nullptr;
934 
935   DIType Ty(TyNode);
936   assert(Ty.isType());
937   assert(Ty == resolve(Ty.getRef()) &&
938          "type was not uniqued, possible ODR violation.");
939 
940   // DW_TAG_restrict_type is not supported in DWARF2
941   if (Ty.getTag() == dwarf::DW_TAG_restrict_type && DD->getDwarfVersion() <= 2)
942     return getOrCreateTypeDIE(resolve(DIDerivedType(Ty).getTypeDerivedFrom()));
943 
944   // Construct the context before querying for the existence of the DIE in case
945   // such construction creates the DIE.
946   DIScope Context = resolve(Ty.getContext());
947   DIE *ContextDIE = getOrCreateContextDIE(Context);
948   assert(ContextDIE);
949 
950   if (DIE *TyDIE = getDIE(Ty))
951     return TyDIE;
952 
953   // Create new type.
954   DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
955 
956   updateAcceleratorTables(Context, Ty, TyDIE);
957 
958   if (Ty.isBasicType())
959     constructTypeDIE(TyDIE, DIBasicType(Ty));
960   else if (Ty.isCompositeType()) {
961     DICompositeType CTy(Ty);
962     if (GenerateDwarfTypeUnits && !Ty.isForwardDecl())
963       if (MDString *TypeId = CTy.getIdentifier()) {
964         DD->addDwarfTypeUnitType(getCU(), TypeId->getString(), TyDIE, CTy);
965         // Skip updating the accelerator tables since this is not the full type.
966         return &TyDIE;
967       }
968     constructTypeDIE(TyDIE, CTy);
969   } else {
970     assert(Ty.isDerivedType() && "Unknown kind of DIType");
971     constructTypeDIE(TyDIE, DIDerivedType(Ty));
972   }
973 
974   return &TyDIE;
975 }
976 
977 void DwarfUnit::updateAcceleratorTables(DIScope Context, DIType Ty,
978                                         const DIE &TyDIE) {
979   if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
980     bool IsImplementation = 0;
981     if (Ty.isCompositeType()) {
982       DICompositeType CT(Ty);
983       // A runtime language of 0 actually means C/C++ and that any
984       // non-negative value is some version of Objective-C/C++.
985       IsImplementation = (CT.getRunTimeLang() == 0) || CT.isObjcClassComplete();
986     }
987     unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0;
988     DD->addAccelType(Ty.getName(), TyDIE, Flags);
989 
990     if ((!Context || Context.isCompileUnit() || Context.isFile() ||
991          Context.isNameSpace()) &&
992         getCUNode().getEmissionKind() != DIBuilder::LineTablesOnly)
993       GlobalTypes[getParentContextString(Context) + Ty.getName().str()] =
994           &TyDIE;
995   }
996 }
997 
998 /// addType - Add a new type attribute to the specified entity.
999 void DwarfUnit::addType(DIE &Entity, DIType Ty, dwarf::Attribute Attribute) {
1000   assert(Ty && "Trying to add a type that doesn't exist?");
1001 
1002   // Check for pre-existence.
1003   DIEEntry *Entry = getDIEEntry(Ty);
1004   // If it exists then use the existing value.
1005   if (Entry) {
1006     addDIEEntry(Entity, Attribute, Entry);
1007     return;
1008   }
1009 
1010   // Construct type.
1011   DIE *Buffer = getOrCreateTypeDIE(Ty);
1012 
1013   // Set up proxy.
1014   Entry = createDIEEntry(*Buffer);
1015   insertDIEEntry(Ty, Entry);
1016   addDIEEntry(Entity, Attribute, Entry);
1017 }
1018 
1019 /// addGlobalName - Add a new global name to the compile unit.
1020 void DwarfUnit::addGlobalName(StringRef Name, DIE &Die, DIScope Context) {
1021   if (getCUNode().getEmissionKind() == DIBuilder::LineTablesOnly)
1022     return;
1023   std::string FullName = getParentContextString(Context) + Name.str();
1024   GlobalNames[FullName] = &Die;
1025 }
1026 
1027 /// getParentContextString - Walks the metadata parent chain in a language
1028 /// specific manner (using the compile unit language) and returns
1029 /// it as a string. This is done at the metadata level because DIEs may
1030 /// not currently have been added to the parent context and walking the
1031 /// DIEs looking for names is more expensive than walking the metadata.
1032 std::string DwarfUnit::getParentContextString(DIScope Context) const {
1033   if (!Context)
1034     return "";
1035 
1036   // FIXME: Decide whether to implement this for non-C++ languages.
1037   if (getLanguage() != dwarf::DW_LANG_C_plus_plus)
1038     return "";
1039 
1040   std::string CS;
1041   SmallVector<DIScope, 1> Parents;
1042   while (!Context.isCompileUnit()) {
1043     Parents.push_back(Context);
1044     if (Context.getContext())
1045       Context = resolve(Context.getContext());
1046     else
1047       // Structure, etc types will have a NULL context if they're at the top
1048       // level.
1049       break;
1050   }
1051 
1052   // Reverse iterate over our list to go from the outermost construct to the
1053   // innermost.
1054   for (SmallVectorImpl<DIScope>::reverse_iterator I = Parents.rbegin(),
1055                                                   E = Parents.rend();
1056        I != E; ++I) {
1057     DIScope Ctx = *I;
1058     StringRef Name = Ctx.getName();
1059     if (!Name.empty()) {
1060       CS += Name;
1061       CS += "::";
1062     }
1063   }
1064   return CS;
1065 }
1066 
1067 /// constructTypeDIE - Construct basic type die from DIBasicType.
1068 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
1069   // Get core information.
1070   StringRef Name = BTy.getName();
1071   // Add name if not anonymous or intermediate type.
1072   if (!Name.empty())
1073     addString(Buffer, dwarf::DW_AT_name, Name);
1074 
1075   // An unspecified type only has a name attribute.
1076   if (BTy.getTag() == dwarf::DW_TAG_unspecified_type)
1077     return;
1078 
1079   addUInt(Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1080           BTy.getEncoding());
1081 
1082   uint64_t Size = BTy.getSizeInBits() >> 3;
1083   addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
1084 }
1085 
1086 /// constructTypeDIE - Construct derived type die from DIDerivedType.
1087 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
1088   // Get core information.
1089   StringRef Name = DTy.getName();
1090   uint64_t Size = DTy.getSizeInBits() >> 3;
1091   uint16_t Tag = Buffer.getTag();
1092 
1093   // Map to main type, void will not have a type.
1094   DIType FromTy = resolve(DTy.getTypeDerivedFrom());
1095   if (FromTy)
1096     addType(Buffer, FromTy);
1097 
1098   // Add name if not anonymous or intermediate type.
1099   if (!Name.empty())
1100     addString(Buffer, dwarf::DW_AT_name, Name);
1101 
1102   // Add size if non-zero (derived types might be zero-sized.)
1103   if (Size && Tag != dwarf::DW_TAG_pointer_type)
1104     addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
1105 
1106   if (Tag == dwarf::DW_TAG_ptr_to_member_type)
1107     addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
1108                 *getOrCreateTypeDIE(resolve(DTy.getClassType())));
1109   // Add source line info if available and TyDesc is not a forward declaration.
1110   if (!DTy.isForwardDecl())
1111     addSourceLine(Buffer, DTy);
1112 }
1113 
1114 /// constructSubprogramArguments - Construct function argument DIEs.
1115 void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DIArray Args) {
1116   for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
1117     DIDescriptor Ty = Args.getElement(i);
1118     if (Ty.isUnspecifiedParameter()) {
1119       assert(i == N-1 && "Unspecified parameter must be the last argument");
1120       createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
1121     } else {
1122       DIE &Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
1123       addType(Arg, DIType(Ty));
1124       if (DIType(Ty).isArtificial())
1125         addFlag(Arg, dwarf::DW_AT_artificial);
1126     }
1127   }
1128 }
1129 
1130 /// constructTypeDIE - Construct type DIE from DICompositeType.
1131 void DwarfUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
1132   // Add name if not anonymous or intermediate type.
1133   StringRef Name = CTy.getName();
1134 
1135   uint64_t Size = CTy.getSizeInBits() >> 3;
1136   uint16_t Tag = Buffer.getTag();
1137 
1138   switch (Tag) {
1139   case dwarf::DW_TAG_array_type:
1140     constructArrayTypeDIE(Buffer, CTy);
1141     break;
1142   case dwarf::DW_TAG_enumeration_type:
1143     constructEnumTypeDIE(Buffer, CTy);
1144     break;
1145   case dwarf::DW_TAG_subroutine_type: {
1146     // Add return type. A void return won't have a type.
1147     DIArray Elements = CTy.getTypeArray();
1148     DIType RTy(Elements.getElement(0));
1149     if (RTy)
1150       addType(Buffer, RTy);
1151 
1152     bool isPrototyped = true;
1153     if (Elements.getNumElements() == 2 &&
1154         Elements.getElement(1).isUnspecifiedParameter())
1155       isPrototyped = false;
1156 
1157     constructSubprogramArguments(Buffer, Elements);
1158 
1159     // Add prototype flag if we're dealing with a C language and the
1160     // function has been prototyped.
1161     uint16_t Language = getLanguage();
1162     if (isPrototyped &&
1163         (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1164          Language == dwarf::DW_LANG_ObjC))
1165       addFlag(Buffer, dwarf::DW_AT_prototyped);
1166 
1167     if (CTy.isLValueReference())
1168       addFlag(Buffer, dwarf::DW_AT_reference);
1169 
1170     if (CTy.isRValueReference())
1171       addFlag(Buffer, dwarf::DW_AT_rvalue_reference);
1172   } break;
1173   case dwarf::DW_TAG_structure_type:
1174   case dwarf::DW_TAG_union_type:
1175   case dwarf::DW_TAG_class_type: {
1176     // Add elements to structure type.
1177     DIArray Elements = CTy.getTypeArray();
1178     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1179       DIDescriptor Element = Elements.getElement(i);
1180       if (Element.isSubprogram())
1181         getOrCreateSubprogramDIE(DISubprogram(Element));
1182       else if (Element.isDerivedType()) {
1183         DIDerivedType DDTy(Element);
1184         if (DDTy.getTag() == dwarf::DW_TAG_friend) {
1185           DIE &ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer);
1186           addType(ElemDie, resolve(DDTy.getTypeDerivedFrom()),
1187                   dwarf::DW_AT_friend);
1188         } else if (DDTy.isStaticMember()) {
1189           getOrCreateStaticMemberDIE(DDTy);
1190         } else {
1191           constructMemberDIE(Buffer, DDTy);
1192         }
1193       } else if (Element.isObjCProperty()) {
1194         DIObjCProperty Property(Element);
1195         DIE &ElemDie = createAndAddDIE(Property.getTag(), Buffer);
1196         StringRef PropertyName = Property.getObjCPropertyName();
1197         addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
1198         if (Property.getType())
1199           addType(ElemDie, Property.getType());
1200         addSourceLine(ElemDie, Property);
1201         StringRef GetterName = Property.getObjCPropertyGetterName();
1202         if (!GetterName.empty())
1203           addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
1204         StringRef SetterName = Property.getObjCPropertySetterName();
1205         if (!SetterName.empty())
1206           addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
1207         unsigned PropertyAttributes = 0;
1208         if (Property.isReadOnlyObjCProperty())
1209           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
1210         if (Property.isReadWriteObjCProperty())
1211           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
1212         if (Property.isAssignObjCProperty())
1213           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
1214         if (Property.isRetainObjCProperty())
1215           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
1216         if (Property.isCopyObjCProperty())
1217           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
1218         if (Property.isNonAtomicObjCProperty())
1219           PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1220         if (PropertyAttributes)
1221           addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
1222                   PropertyAttributes);
1223 
1224         DIEEntry *Entry = getDIEEntry(Element);
1225         if (!Entry) {
1226           Entry = createDIEEntry(ElemDie);
1227           insertDIEEntry(Element, Entry);
1228         }
1229       } else
1230         continue;
1231     }
1232 
1233     if (CTy.isAppleBlockExtension())
1234       addFlag(Buffer, dwarf::DW_AT_APPLE_block);
1235 
1236     DICompositeType ContainingType(resolve(CTy.getContainingType()));
1237     if (ContainingType)
1238       addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
1239                   *getOrCreateTypeDIE(ContainingType));
1240 
1241     if (CTy.isObjcClassComplete())
1242       addFlag(Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1243 
1244     // Add template parameters to a class, structure or union types.
1245     // FIXME: The support isn't in the metadata for this yet.
1246     if (Tag == dwarf::DW_TAG_class_type ||
1247         Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type)
1248       addTemplateParams(Buffer, CTy.getTemplateParams());
1249 
1250     break;
1251   }
1252   default:
1253     break;
1254   }
1255 
1256   // Add name if not anonymous or intermediate type.
1257   if (!Name.empty())
1258     addString(Buffer, dwarf::DW_AT_name, Name);
1259 
1260   if (Tag == dwarf::DW_TAG_enumeration_type ||
1261       Tag == dwarf::DW_TAG_class_type || Tag == dwarf::DW_TAG_structure_type ||
1262       Tag == dwarf::DW_TAG_union_type) {
1263     // Add size if non-zero (derived types might be zero-sized.)
1264     // TODO: Do we care about size for enum forward declarations?
1265     if (Size)
1266       addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
1267     else if (!CTy.isForwardDecl())
1268       // Add zero size if it is not a forward declaration.
1269       addUInt(Buffer, dwarf::DW_AT_byte_size, None, 0);
1270 
1271     // If we're a forward decl, say so.
1272     if (CTy.isForwardDecl())
1273       addFlag(Buffer, dwarf::DW_AT_declaration);
1274 
1275     // Add source line info if available.
1276     if (!CTy.isForwardDecl())
1277       addSourceLine(Buffer, CTy);
1278 
1279     // No harm in adding the runtime language to the declaration.
1280     unsigned RLang = CTy.getRunTimeLang();
1281     if (RLang)
1282       addUInt(Buffer, dwarf::DW_AT_APPLE_runtime_class, dwarf::DW_FORM_data1,
1283               RLang);
1284   }
1285 }
1286 
1287 /// constructTemplateTypeParameterDIE - Construct new DIE for the given
1288 /// DITemplateTypeParameter.
1289 void DwarfUnit::constructTemplateTypeParameterDIE(DIE &Buffer,
1290                                                   DITemplateTypeParameter TP) {
1291   DIE &ParamDIE =
1292       createAndAddDIE(dwarf::DW_TAG_template_type_parameter, Buffer);
1293   // Add the type if it exists, it could be void and therefore no type.
1294   if (TP.getType())
1295     addType(ParamDIE, resolve(TP.getType()));
1296   if (!TP.getName().empty())
1297     addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1298 }
1299 
1300 /// constructTemplateValueParameterDIE - Construct new DIE for the given
1301 /// DITemplateValueParameter.
1302 void
1303 DwarfUnit::constructTemplateValueParameterDIE(DIE &Buffer,
1304                                               DITemplateValueParameter VP) {
1305   DIE &ParamDIE = createAndAddDIE(VP.getTag(), Buffer);
1306 
1307   // Add the type if there is one, template template and template parameter
1308   // packs will not have a type.
1309   if (VP.getTag() == dwarf::DW_TAG_template_value_parameter)
1310     addType(ParamDIE, resolve(VP.getType()));
1311   if (!VP.getName().empty())
1312     addString(ParamDIE, dwarf::DW_AT_name, VP.getName());
1313   if (Value *Val = VP.getValue()) {
1314     if (ConstantInt *CI = dyn_cast<ConstantInt>(Val))
1315       addConstantValue(ParamDIE, CI, resolve(VP.getType()));
1316     else if (GlobalValue *GV = dyn_cast<GlobalValue>(Val)) {
1317       // For declaration non-type template parameters (such as global values and
1318       // functions)
1319       DIELoc *Loc = new (DIEValueAllocator) DIELoc();
1320       addOpAddress(*Loc, Asm->getSymbol(GV));
1321       // Emit DW_OP_stack_value to use the address as the immediate value of the
1322       // parameter, rather than a pointer to it.
1323       addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1324       addBlock(ParamDIE, dwarf::DW_AT_location, Loc);
1325     } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1326       assert(isa<MDString>(Val));
1327       addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1328                 cast<MDString>(Val)->getString());
1329     } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1330       assert(isa<MDNode>(Val));
1331       DIArray A(cast<MDNode>(Val));
1332       addTemplateParams(ParamDIE, A);
1333     }
1334   }
1335 }
1336 
1337 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1338 DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) {
1339   // Construct the context before querying for the existence of the DIE in case
1340   // such construction creates the DIE.
1341   DIE *ContextDIE = getOrCreateContextDIE(NS.getContext());
1342 
1343   if (DIE *NDie = getDIE(NS))
1344     return NDie;
1345   DIE &NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS);
1346 
1347   if (!NS.getName().empty()) {
1348     addString(NDie, dwarf::DW_AT_name, NS.getName());
1349     DD->addAccelNamespace(NS.getName(), NDie);
1350     addGlobalName(NS.getName(), NDie, NS.getContext());
1351   } else
1352     DD->addAccelNamespace("(anonymous namespace)", NDie);
1353   addSourceLine(NDie, NS);
1354   return &NDie;
1355 }
1356 
1357 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1358 DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
1359   // Construct the context before querying for the existence of the DIE in case
1360   // such construction creates the DIE (as is the case for member function
1361   // declarations).
1362   DIScope Context = resolve(SP.getContext());
1363   DIE *ContextDIE = getOrCreateContextDIE(Context);
1364 
1365   // Unique declarations based on the ODR, where applicable.
1366   SP = DISubprogram(DD->resolve(SP.getRef()));
1367   assert(SP.Verify());
1368 
1369   if (DIE *SPDie = getDIE(SP))
1370     return SPDie;
1371 
1372   DISubprogram SPDecl = SP.getFunctionDeclaration();
1373   if (SPDecl.isSubprogram())
1374     // Add subprogram definitions to the CU die directly.
1375     ContextDIE = &getUnitDie();
1376 
1377   // DW_TAG_inlined_subroutine may refer to this DIE.
1378   DIE &SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP);
1379 
1380   DIE *DeclDie = nullptr;
1381   if (SPDecl.isSubprogram())
1382     DeclDie = getOrCreateSubprogramDIE(SPDecl);
1383 
1384   // Add function template parameters.
1385   addTemplateParams(SPDie, SP.getTemplateParams());
1386 
1387   if (DeclDie)
1388     // Refer function declaration directly.
1389     addDIEEntry(SPDie, dwarf::DW_AT_specification, *DeclDie);
1390 
1391   // Add the linkage name if we have one and it isn't in the Decl.
1392   StringRef LinkageName = SP.getLinkageName();
1393   if (!LinkageName.empty()) {
1394     if (SPDecl.isSubprogram() && !SPDecl.getLinkageName().empty())
1395       assert(SPDecl.getLinkageName() == SP.getLinkageName() &&
1396              "decl has a linkage name and it is different");
1397     else
1398       addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1399                 GlobalValue::getRealLinkageName(LinkageName));
1400   }
1401 
1402   // If this DIE is going to refer declaration info using AT_specification
1403   // then there is no need to add other attributes.
1404   if (DeclDie)
1405     return &SPDie;
1406 
1407   // Constructors and operators for anonymous aggregates do not have names.
1408   if (!SP.getName().empty())
1409     addString(SPDie, dwarf::DW_AT_name, SP.getName());
1410 
1411   addSourceLine(SPDie, SP);
1412 
1413   // Add the prototype if we have a prototype and we have a C like
1414   // language.
1415   uint16_t Language = getLanguage();
1416   if (SP.isPrototyped() &&
1417       (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1418        Language == dwarf::DW_LANG_ObjC))
1419     addFlag(SPDie, dwarf::DW_AT_prototyped);
1420 
1421   DICompositeType SPTy = SP.getType();
1422   assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1423          "the type of a subprogram should be a subroutine");
1424 
1425   DIArray Args = SPTy.getTypeArray();
1426   // Add a return type. If this is a type like a C/C++ void type we don't add a
1427   // return type.
1428   if (Args.getElement(0))
1429     addType(SPDie, DIType(Args.getElement(0)));
1430 
1431   unsigned VK = SP.getVirtuality();
1432   if (VK) {
1433     addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1434     DIELoc *Block = getDIELoc();
1435     addUInt(*Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1436     addUInt(*Block, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1437     addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
1438     ContainingTypeMap.insert(
1439         std::make_pair(&SPDie, resolve(SP.getContainingType())));
1440   }
1441 
1442   if (!SP.isDefinition()) {
1443     addFlag(SPDie, dwarf::DW_AT_declaration);
1444 
1445     // Add arguments. Do not add arguments for subprogram definition. They will
1446     // be handled while processing variables.
1447     constructSubprogramArguments(SPDie, Args);
1448   }
1449 
1450   if (SP.isArtificial())
1451     addFlag(SPDie, dwarf::DW_AT_artificial);
1452 
1453   if (!SP.isLocalToUnit())
1454     addFlag(SPDie, dwarf::DW_AT_external);
1455 
1456   if (SP.isOptimized())
1457     addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1458 
1459   if (unsigned isa = Asm->getISAEncoding()) {
1460     addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1461   }
1462 
1463   if (SP.isLValueReference())
1464     addFlag(SPDie, dwarf::DW_AT_reference);
1465 
1466   if (SP.isRValueReference())
1467     addFlag(SPDie, dwarf::DW_AT_rvalue_reference);
1468 
1469   if (SP.isProtected())
1470     addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1471             dwarf::DW_ACCESS_protected);
1472   else if (SP.isPrivate())
1473     addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1474             dwarf::DW_ACCESS_private);
1475   else
1476     addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1477             dwarf::DW_ACCESS_public);
1478 
1479   if (SP.isExplicit())
1480     addFlag(SPDie, dwarf::DW_AT_explicit);
1481 
1482   return &SPDie;
1483 }
1484 
1485 // Return const expression if value is a GEP to access merged global
1486 // constant. e.g.
1487 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
1488 static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
1489   const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
1490   if (!CE || CE->getNumOperands() != 3 ||
1491       CE->getOpcode() != Instruction::GetElementPtr)
1492     return nullptr;
1493 
1494   // First operand points to a global struct.
1495   Value *Ptr = CE->getOperand(0);
1496   if (!isa<GlobalValue>(Ptr) ||
1497       !isa<StructType>(cast<PointerType>(Ptr->getType())->getElementType()))
1498     return nullptr;
1499 
1500   // Second operand is zero.
1501   const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
1502   if (!CI || !CI->isZero())
1503     return nullptr;
1504 
1505   // Third operand is offset.
1506   if (!isa<ConstantInt>(CE->getOperand(2)))
1507     return nullptr;
1508 
1509   return CE;
1510 }
1511 
1512 /// createGlobalVariableDIE - create global variable DIE.
1513 void DwarfCompileUnit::createGlobalVariableDIE(DIGlobalVariable GV) {
1514   // Check for pre-existence.
1515   if (getDIE(GV))
1516     return;
1517 
1518   assert(GV.isGlobalVariable());
1519 
1520   DIScope GVContext = GV.getContext();
1521   DIType GTy = DD->resolve(GV.getType());
1522 
1523   // If this is a static data member definition, some attributes belong
1524   // to the declaration DIE.
1525   DIE *VariableDIE = nullptr;
1526   bool IsStaticMember = false;
1527   DIDerivedType SDMDecl = GV.getStaticDataMemberDeclaration();
1528   if (SDMDecl.Verify()) {
1529     assert(SDMDecl.isStaticMember() && "Expected static member decl");
1530     // We need the declaration DIE that is in the static member's class.
1531     VariableDIE = getOrCreateStaticMemberDIE(SDMDecl);
1532     IsStaticMember = true;
1533   }
1534 
1535   // If this is not a static data member definition, create the variable
1536   // DIE and add the initial set of attributes to it.
1537   if (!VariableDIE) {
1538     // Construct the context before querying for the existence of the DIE in
1539     // case such construction creates the DIE.
1540     DIE *ContextDIE = getOrCreateContextDIE(GVContext);
1541 
1542     // Add to map.
1543     VariableDIE = &createAndAddDIE(GV.getTag(), *ContextDIE, GV);
1544 
1545     // Add name and type.
1546     addString(*VariableDIE, dwarf::DW_AT_name, GV.getDisplayName());
1547     addType(*VariableDIE, GTy);
1548 
1549     // Add scoping info.
1550     if (!GV.isLocalToUnit())
1551       addFlag(*VariableDIE, dwarf::DW_AT_external);
1552 
1553     // Add line number info.
1554     addSourceLine(*VariableDIE, GV);
1555   }
1556 
1557   // Add location.
1558   bool addToAccelTable = false;
1559   DIE *VariableSpecDIE = nullptr;
1560   bool isGlobalVariable = GV.getGlobal() != nullptr;
1561   if (isGlobalVariable) {
1562     addToAccelTable = true;
1563     DIELoc *Loc = new (DIEValueAllocator) DIELoc();
1564     const MCSymbol *Sym = Asm->getSymbol(GV.getGlobal());
1565     if (GV.getGlobal()->isThreadLocal()) {
1566       // FIXME: Make this work with -gsplit-dwarf.
1567       unsigned PointerSize = Asm->getDataLayout().getPointerSize();
1568       assert((PointerSize == 4 || PointerSize == 8) &&
1569              "Add support for other sizes if necessary");
1570       // Based on GCC's support for TLS:
1571       if (!DD->useSplitDwarf()) {
1572         // 1) Start with a constNu of the appropriate pointer size
1573         addUInt(*Loc, dwarf::DW_FORM_data1,
1574                 PointerSize == 4 ? dwarf::DW_OP_const4u : dwarf::DW_OP_const8u);
1575         // 2) containing the (relocated) offset of the TLS variable
1576         //    within the module's TLS block.
1577         addExpr(*Loc, dwarf::DW_FORM_udata,
1578                 Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym));
1579       } else {
1580         addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
1581         addUInt(*Loc, dwarf::DW_FORM_udata,
1582                 DD->getAddressPool().getIndex(Sym, /* TLS */ true));
1583       }
1584       // 3) followed by a custom OP to make the debugger do a TLS lookup.
1585       addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_push_tls_address);
1586     } else {
1587       DD->addArangeLabel(SymbolCU(this, Sym));
1588       addOpAddress(*Loc, Sym);
1589     }
1590     // Do not create specification DIE if context is either compile unit
1591     // or a subprogram.
1592     if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
1593         !GVContext.isFile() && !DD->isSubprogramContext(GVContext)) {
1594       // Create specification DIE.
1595       VariableSpecDIE = &createAndAddDIE(dwarf::DW_TAG_variable, UnitDie);
1596       addDIEEntry(*VariableSpecDIE, dwarf::DW_AT_specification, *VariableDIE);
1597       addBlock(*VariableSpecDIE, dwarf::DW_AT_location, Loc);
1598       // A static member's declaration is already flagged as such.
1599       if (!SDMDecl.Verify())
1600         addFlag(*VariableDIE, dwarf::DW_AT_declaration);
1601     } else {
1602       addBlock(*VariableDIE, dwarf::DW_AT_location, Loc);
1603     }
1604     // Add the linkage name.
1605     StringRef LinkageName = GV.getLinkageName();
1606     if (!LinkageName.empty())
1607       // From DWARF4: DIEs to which DW_AT_linkage_name may apply include:
1608       // TAG_common_block, TAG_constant, TAG_entry_point, TAG_subprogram and
1609       // TAG_variable.
1610       addString(IsStaticMember && VariableSpecDIE ? *VariableSpecDIE
1611                                                   : *VariableDIE,
1612                 DD->getDwarfVersion() >= 4 ? dwarf::DW_AT_linkage_name
1613                                            : dwarf::DW_AT_MIPS_linkage_name,
1614                 GlobalValue::getRealLinkageName(LinkageName));
1615   } else if (const ConstantInt *CI =
1616                  dyn_cast_or_null<ConstantInt>(GV.getConstant())) {
1617     // AT_const_value was added when the static member was created. To avoid
1618     // emitting AT_const_value multiple times, we only add AT_const_value when
1619     // it is not a static member.
1620     if (!IsStaticMember)
1621       addConstantValue(*VariableDIE, CI, GTy);
1622   } else if (const ConstantExpr *CE = getMergedGlobalExpr(GV->getOperand(11))) {
1623     addToAccelTable = true;
1624     // GV is a merged global.
1625     DIELoc *Loc = new (DIEValueAllocator) DIELoc();
1626     Value *Ptr = CE->getOperand(0);
1627     MCSymbol *Sym = Asm->getSymbol(cast<GlobalValue>(Ptr));
1628     DD->addArangeLabel(SymbolCU(this, Sym));
1629     addOpAddress(*Loc, Sym);
1630     addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1631     SmallVector<Value *, 3> Idx(CE->op_begin() + 1, CE->op_end());
1632     addUInt(*Loc, dwarf::DW_FORM_udata,
1633             Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx));
1634     addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1635     addBlock(*VariableDIE, dwarf::DW_AT_location, Loc);
1636   }
1637 
1638   if (addToAccelTable) {
1639     DIE &AddrDIE = VariableSpecDIE ? *VariableSpecDIE : *VariableDIE;
1640     DD->addAccelName(GV.getName(), AddrDIE);
1641 
1642     // If the linkage name is different than the name, go ahead and output
1643     // that as well into the name table.
1644     if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
1645       DD->addAccelName(GV.getLinkageName(), AddrDIE);
1646   }
1647 
1648   if (!GV.isLocalToUnit())
1649     addGlobalName(GV.getName(),
1650                   VariableSpecDIE ? *VariableSpecDIE : *VariableDIE,
1651                   GV.getContext());
1652 }
1653 
1654 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1655 void DwarfUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy) {
1656   DIE &DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer);
1657   addDIEEntry(DW_Subrange, dwarf::DW_AT_type, *IndexTy);
1658 
1659   // The LowerBound value defines the lower bounds which is typically zero for
1660   // C/C++. The Count value is the number of elements.  Values are 64 bit. If
1661   // Count == -1 then the array is unbounded and we do not emit
1662   // DW_AT_lower_bound and DW_AT_upper_bound attributes. If LowerBound == 0 and
1663   // Count == 0, then the array has zero elements in which case we do not emit
1664   // an upper bound.
1665   int64_t LowerBound = SR.getLo();
1666   int64_t DefaultLowerBound = getDefaultLowerBound();
1667   int64_t Count = SR.getCount();
1668 
1669   if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1670     addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
1671 
1672   if (Count != -1 && Count != 0)
1673     // FIXME: An unbounded array should reference the expression that defines
1674     // the array.
1675     addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, None,
1676             LowerBound + Count - 1);
1677 }
1678 
1679 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1680 void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
1681   if (CTy.isVector())
1682     addFlag(Buffer, dwarf::DW_AT_GNU_vector);
1683 
1684   // Emit the element type.
1685   addType(Buffer, resolve(CTy.getTypeDerivedFrom()));
1686 
1687   // Get an anonymous type for index type.
1688   // FIXME: This type should be passed down from the front end
1689   // as different languages may have different sizes for indexes.
1690   DIE *IdxTy = getIndexTyDie();
1691   if (!IdxTy) {
1692     // Construct an integer type to use for indexes.
1693     IdxTy = &createAndAddDIE(dwarf::DW_TAG_base_type, UnitDie);
1694     addString(*IdxTy, dwarf::DW_AT_name, "sizetype");
1695     addUInt(*IdxTy, dwarf::DW_AT_byte_size, None, sizeof(int64_t));
1696     addUInt(*IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1697             dwarf::DW_ATE_unsigned);
1698     setIndexTyDie(IdxTy);
1699   }
1700 
1701   // Add subranges to array type.
1702   DIArray Elements = CTy.getTypeArray();
1703   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1704     DIDescriptor Element = Elements.getElement(i);
1705     if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1706       constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1707   }
1708 }
1709 
1710 /// constructEnumTypeDIE - Construct an enum type DIE from DICompositeType.
1711 void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) {
1712   DIArray Elements = CTy.getTypeArray();
1713 
1714   // Add enumerators to enumeration type.
1715   for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1716     DIEnumerator Enum(Elements.getElement(i));
1717     if (Enum.isEnumerator()) {
1718       DIE &Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
1719       StringRef Name = Enum.getName();
1720       addString(Enumerator, dwarf::DW_AT_name, Name);
1721       int64_t Value = Enum.getEnumValue();
1722       addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
1723               Value);
1724     }
1725   }
1726   DIType DTy = resolve(CTy.getTypeDerivedFrom());
1727   if (DTy) {
1728     addType(Buffer, DTy);
1729     addFlag(Buffer, dwarf::DW_AT_enum_class);
1730   }
1731 }
1732 
1733 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1734 /// vtables.
1735 void DwarfUnit::constructContainingTypeDIEs() {
1736   for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1737                                                  CE = ContainingTypeMap.end();
1738        CI != CE; ++CI) {
1739     DIE &SPDie = *CI->first;
1740     DIDescriptor D(CI->second);
1741     if (!D)
1742       continue;
1743     DIE *NDie = getDIE(D);
1744     if (!NDie)
1745       continue;
1746     addDIEEntry(SPDie, dwarf::DW_AT_containing_type, *NDie);
1747   }
1748 }
1749 
1750 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
1751 std::unique_ptr<DIE> DwarfUnit::constructVariableDIE(DbgVariable &DV,
1752                                                      AbstractOrInlined AbsIn) {
1753   auto D = constructVariableDIEImpl(DV, AbsIn);
1754   DV.setDIE(*D);
1755   return D;
1756 }
1757 
1758 std::unique_ptr<DIE>
1759 DwarfUnit::constructVariableDIEImpl(const DbgVariable &DV,
1760                                     AbstractOrInlined AbsIn) {
1761   StringRef Name = DV.getName();
1762 
1763   // Define variable debug information entry.
1764   auto VariableDie = make_unique<DIE>(DV.getTag());
1765   DbgVariable *AbsVar = DV.getAbstractVariable();
1766   DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : nullptr;
1767   if (AbsDIE)
1768     addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin, *AbsDIE);
1769   else {
1770     if (!Name.empty())
1771       addString(*VariableDie, dwarf::DW_AT_name, Name);
1772     addSourceLine(*VariableDie, DV.getVariable());
1773     addType(*VariableDie, DV.getType());
1774   }
1775 
1776   if (AbsIn != AOI_Inlined && DV.isArtificial())
1777     addFlag(*VariableDie, dwarf::DW_AT_artificial);
1778 
1779   if (AbsIn == AOI_Abstract)
1780     return VariableDie;
1781 
1782   // Add variable address.
1783 
1784   unsigned Offset = DV.getDotDebugLocOffset();
1785   if (Offset != ~0U) {
1786     addLocationList(*VariableDie, dwarf::DW_AT_location, Offset);
1787     return VariableDie;
1788   }
1789 
1790   // Check if variable is described by a DBG_VALUE instruction.
1791   if (const MachineInstr *DVInsn = DV.getMInsn()) {
1792     assert(DVInsn->getNumOperands() == 3);
1793     if (DVInsn->getOperand(0).isReg()) {
1794       const MachineOperand RegOp = DVInsn->getOperand(0);
1795       // If the second operand is an immediate, this is an indirect value.
1796       if (DVInsn->getOperand(1).isImm()) {
1797         MachineLocation Location(RegOp.getReg(),
1798                                  DVInsn->getOperand(1).getImm());
1799         addVariableAddress(DV, *VariableDie, Location);
1800       } else if (RegOp.getReg())
1801         addVariableAddress(DV, *VariableDie, MachineLocation(RegOp.getReg()));
1802     } else if (DVInsn->getOperand(0).isImm())
1803       addConstantValue(*VariableDie, DVInsn->getOperand(0), DV.getType());
1804     else if (DVInsn->getOperand(0).isFPImm())
1805       addConstantFPValue(*VariableDie, DVInsn->getOperand(0));
1806     else if (DVInsn->getOperand(0).isCImm())
1807       addConstantValue(*VariableDie, DVInsn->getOperand(0).getCImm(),
1808                        DV.getType());
1809 
1810     return VariableDie;
1811   }
1812 
1813   // .. else use frame index.
1814   int FI = DV.getFrameIndex();
1815   if (FI != ~0) {
1816     unsigned FrameReg = 0;
1817     const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1818     int Offset = TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
1819     MachineLocation Location(FrameReg, Offset);
1820     addVariableAddress(DV, *VariableDie, Location);
1821   }
1822 
1823   return VariableDie;
1824 }
1825 
1826 /// constructMemberDIE - Construct member DIE from DIDerivedType.
1827 void DwarfUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT) {
1828   DIE &MemberDie = createAndAddDIE(DT.getTag(), Buffer);
1829   StringRef Name = DT.getName();
1830   if (!Name.empty())
1831     addString(MemberDie, dwarf::DW_AT_name, Name);
1832 
1833   addType(MemberDie, resolve(DT.getTypeDerivedFrom()));
1834 
1835   addSourceLine(MemberDie, DT);
1836 
1837   if (DT.getTag() == dwarf::DW_TAG_inheritance && DT.isVirtual()) {
1838 
1839     // For C++, virtual base classes are not at fixed offset. Use following
1840     // expression to extract appropriate offset from vtable.
1841     // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1842 
1843     DIELoc *VBaseLocationDie = new (DIEValueAllocator) DIELoc();
1844     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1845     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1846     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1847     addUInt(*VBaseLocationDie, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1848     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1849     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1850     addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1851 
1852     addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie);
1853   } else {
1854     uint64_t Size = DT.getSizeInBits();
1855     uint64_t FieldSize = getBaseTypeSize(DD, DT);
1856     uint64_t OffsetInBytes;
1857 
1858     if (Size != FieldSize) {
1859       // Handle bitfield, assume bytes are 8 bits.
1860       addUInt(MemberDie, dwarf::DW_AT_byte_size, None, FieldSize/8);
1861       addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size);
1862 
1863       uint64_t Offset = DT.getOffsetInBits();
1864       uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1865       uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1866       uint64_t FieldOffset = (HiMark - FieldSize);
1867       Offset -= FieldOffset;
1868 
1869       // Maybe we need to work from the other end.
1870       if (Asm->getDataLayout().isLittleEndian())
1871         Offset = FieldSize - (Offset + Size);
1872       addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset);
1873 
1874       // Here DW_AT_data_member_location points to the anonymous
1875       // field that includes this bit field.
1876       OffsetInBytes = FieldOffset >> 3;
1877     } else
1878       // This is not a bitfield.
1879       OffsetInBytes = DT.getOffsetInBits() >> 3;
1880 
1881     if (DD->getDwarfVersion() <= 2) {
1882       DIELoc *MemLocationDie = new (DIEValueAllocator) DIELoc();
1883       addUInt(*MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1884       addUInt(*MemLocationDie, dwarf::DW_FORM_udata, OffsetInBytes);
1885       addBlock(MemberDie, dwarf::DW_AT_data_member_location, MemLocationDie);
1886     } else
1887       addUInt(MemberDie, dwarf::DW_AT_data_member_location, None,
1888               OffsetInBytes);
1889   }
1890 
1891   if (DT.isProtected())
1892     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1893             dwarf::DW_ACCESS_protected);
1894   else if (DT.isPrivate())
1895     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1896             dwarf::DW_ACCESS_private);
1897   // Otherwise C++ member and base classes are considered public.
1898   else
1899     addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1900             dwarf::DW_ACCESS_public);
1901   if (DT.isVirtual())
1902     addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1903             dwarf::DW_VIRTUALITY_virtual);
1904 
1905   // Objective-C properties.
1906   if (MDNode *PNode = DT.getObjCProperty())
1907     if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1908       MemberDie.addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1909                          PropertyDie);
1910 
1911   if (DT.isArtificial())
1912     addFlag(MemberDie, dwarf::DW_AT_artificial);
1913 }
1914 
1915 /// getOrCreateStaticMemberDIE - Create new DIE for C++ static member.
1916 DIE *DwarfUnit::getOrCreateStaticMemberDIE(DIDerivedType DT) {
1917   if (!DT.Verify())
1918     return nullptr;
1919 
1920   // Construct the context before querying for the existence of the DIE in case
1921   // such construction creates the DIE.
1922   DIE *ContextDIE = getOrCreateContextDIE(resolve(DT.getContext()));
1923   assert(dwarf::isType(ContextDIE->getTag()) &&
1924          "Static member should belong to a type.");
1925 
1926   if (DIE *StaticMemberDIE = getDIE(DT))
1927     return StaticMemberDIE;
1928 
1929   DIE &StaticMemberDIE = createAndAddDIE(DT.getTag(), *ContextDIE, DT);
1930 
1931   DIType Ty = resolve(DT.getTypeDerivedFrom());
1932 
1933   addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1934   addType(StaticMemberDIE, Ty);
1935   addSourceLine(StaticMemberDIE, DT);
1936   addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1937   addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1938 
1939   // FIXME: We could omit private if the parent is a class_type, and
1940   // public if the parent is something else.
1941   if (DT.isProtected())
1942     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1943             dwarf::DW_ACCESS_protected);
1944   else if (DT.isPrivate())
1945     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1946             dwarf::DW_ACCESS_private);
1947   else
1948     addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1949             dwarf::DW_ACCESS_public);
1950 
1951   if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
1952     addConstantValue(StaticMemberDIE, CI, Ty);
1953   if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
1954     addConstantFPValue(StaticMemberDIE, CFP);
1955 
1956   return &StaticMemberDIE;
1957 }
1958 
1959 void DwarfUnit::emitHeader(const MCSymbol *ASectionSym) const {
1960   Asm->OutStreamer.AddComment("DWARF version number");
1961   Asm->EmitInt16(DD->getDwarfVersion());
1962   Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1963   // We share one abbreviations table across all units so it's always at the
1964   // start of the section. Use a relocatable offset where needed to ensure
1965   // linking doesn't invalidate that offset.
1966   if (ASectionSym)
1967     Asm->EmitSectionOffset(ASectionSym, ASectionSym);
1968   else
1969     // Use a constant value when no symbol is provided.
1970     Asm->EmitInt32(0);
1971   Asm->OutStreamer.AddComment("Address Size (in bytes)");
1972   Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1973 }
1974 
1975 void DwarfUnit::addRange(RangeSpan Range) {
1976   // Only add a range for this unit if we're emitting full debug.
1977   if (getCUNode().getEmissionKind() == DIBuilder::FullDebug) {
1978     // If we have no current ranges just add the range and return, otherwise,
1979     // check the current section and CU against the previous section and CU we
1980     // emitted into and the subprogram was contained within. If these are the
1981     // same then extend our current range, otherwise add this as a new range.
1982     if (CURanges.size() == 0 ||
1983         this != DD->getPrevCU() ||
1984         Asm->getCurrentSection() != DD->getPrevSection()) {
1985       CURanges.push_back(Range);
1986       return;
1987     }
1988 
1989     assert(&(CURanges.back().getEnd()->getSection()) ==
1990                &(Range.getEnd()->getSection()) &&
1991            "We can only append to a range in the same section!");
1992     CURanges.back().setEnd(Range.getEnd());
1993   }
1994 }
1995 
1996 void DwarfCompileUnit::initStmtList(MCSymbol *DwarfLineSectionSym) {
1997   // Define start line table label for each Compile Unit.
1998   MCSymbol *LineTableStartSym =
1999       Asm->OutStreamer.getDwarfLineTableSymbol(getUniqueID());
2000 
2001   stmtListIndex = UnitDie.getValues().size();
2002 
2003   // DW_AT_stmt_list is a offset of line number information for this
2004   // compile unit in debug_line section. For split dwarf this is
2005   // left in the skeleton CU and so not included.
2006   // The line table entries are not always emitted in assembly, so it
2007   // is not okay to use line_table_start here.
2008   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2009     addSectionLabel(UnitDie, dwarf::DW_AT_stmt_list, LineTableStartSym);
2010   else
2011     addSectionDelta(UnitDie, dwarf::DW_AT_stmt_list, LineTableStartSym,
2012                     DwarfLineSectionSym);
2013 }
2014 
2015 void DwarfCompileUnit::applyStmtList(DIE &D) {
2016   D.addValue(dwarf::DW_AT_stmt_list,
2017              UnitDie.getAbbrev().getData()[stmtListIndex].getForm(),
2018              UnitDie.getValues()[stmtListIndex]);
2019 }
2020 
2021 void DwarfTypeUnit::emitHeader(const MCSymbol *ASectionSym) const {
2022   DwarfUnit::emitHeader(ASectionSym);
2023   Asm->OutStreamer.AddComment("Type Signature");
2024   Asm->OutStreamer.EmitIntValue(TypeSignature, sizeof(TypeSignature));
2025   Asm->OutStreamer.AddComment("Type DIE Offset");
2026   // In a skeleton type unit there is no type DIE so emit a zero offset.
2027   Asm->OutStreamer.EmitIntValue(Ty ? Ty->getOffset() : 0,
2028                                 sizeof(Ty->getOffset()));
2029 }
2030 
2031 void DwarfTypeUnit::initSection(const MCSection *Section) {
2032   assert(!this->Section);
2033   this->Section = Section;
2034   // Since each type unit is contained in its own COMDAT section, the begin
2035   // label and the section label are the same. Using the begin label emission in
2036   // DwarfDebug to emit the section label as well is slightly subtle/sneaky, but
2037   // the only other alternative of lazily constructing start-of-section labels
2038   // and storing a mapping in DwarfDebug (or AsmPrinter).
2039   this->SectionSym = this->LabelBegin =
2040       Asm->GetTempSymbol(Section->getLabelBeginName(), getUniqueID());
2041   this->LabelEnd =
2042       Asm->GetTempSymbol(Section->getLabelEndName(), getUniqueID());
2043 }
2044