1 //===-- llvm/CodeGen/DwarfUnit.cpp - Dwarf Type and Compile Units ---------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains support for constructing a dwarf compile unit.
12 //===----------------------------------------------------------------------===//
14 #include "DwarfUnit.h"
15 #include "AddressPool.h"
16 #include "DwarfCompileUnit.h"
17 #include "DwarfDebug.h"
18 #include "DwarfExpression.h"
19 #include "llvm/ADT/APFloat.h"
20 #include "llvm/ADT/APInt.h"
21 #include "llvm/ADT/None.h"
22 #include "llvm/ADT/StringExtras.h"
23 #include "llvm/ADT/iterator_range.h"
24 #include "llvm/CodeGen/MachineFunction.h"
25 #include "llvm/CodeGen/MachineOperand.h"
26 #include "llvm/CodeGen/TargetRegisterInfo.h"
27 #include "llvm/CodeGen/TargetSubtargetInfo.h"
28 #include "llvm/IR/Constants.h"
29 #include "llvm/IR/DataLayout.h"
30 #include "llvm/IR/GlobalValue.h"
31 #include "llvm/IR/Metadata.h"
32 #include "llvm/MC/MCAsmInfo.h"
33 #include "llvm/MC/MCContext.h"
34 #include "llvm/MC/MCDwarf.h"
35 #include "llvm/MC/MCSection.h"
36 #include "llvm/MC/MCStreamer.h"
37 #include "llvm/MC/MachineLocation.h"
38 #include "llvm/Support/Casting.h"
39 #include "llvm/Support/CommandLine.h"
40 #include "llvm/Target/TargetLoweringObjectFile.h"
48 #define DEBUG_TYPE "dwarfdebug"
50 DIEDwarfExpression::DIEDwarfExpression(const AsmPrinter &AP, DwarfUnit &DU,
52 : DwarfExpression(AP.getDwarfVersion()), AP(AP), DU(DU),
55 void DIEDwarfExpression::emitOp(uint8_t Op, const char* Comment) {
56 DU.addUInt(DIE, dwarf::DW_FORM_data1, Op);
59 void DIEDwarfExpression::emitSigned(int64_t Value) {
60 DU.addSInt(DIE, dwarf::DW_FORM_sdata, Value);
63 void DIEDwarfExpression::emitUnsigned(uint64_t Value) {
64 DU.addUInt(DIE, dwarf::DW_FORM_udata, Value);
67 bool DIEDwarfExpression::isFrameRegister(const TargetRegisterInfo &TRI,
68 unsigned MachineReg) {
69 return MachineReg == TRI.getFrameRegister(*AP.MF);
72 DwarfUnit::DwarfUnit(dwarf::Tag UnitTag, const DICompileUnit *Node,
73 AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU)
74 : DIEUnit(A->getDwarfVersion(), A->MAI->getCodePointerSize(), UnitTag),
75 CUNode(Node), Asm(A), DD(DW), DU(DWU), IndexTyDie(nullptr) {
78 DwarfTypeUnit::DwarfTypeUnit(DwarfCompileUnit &CU, AsmPrinter *A,
79 DwarfDebug *DW, DwarfFile *DWU,
80 MCDwarfDwoLineTable *SplitLineTable)
81 : DwarfUnit(dwarf::DW_TAG_type_unit, CU.getCUNode(), A, DW, DWU), CU(CU),
82 SplitLineTable(SplitLineTable) {
85 DwarfUnit::~DwarfUnit() {
86 for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
87 DIEBlocks[j]->~DIEBlock();
88 for (unsigned j = 0, M = DIELocs.size(); j < M; ++j)
89 DIELocs[j]->~DIELoc();
92 int64_t DwarfUnit::getDefaultLowerBound() const {
93 switch (getLanguage()) {
97 // The languages below have valid values in all DWARF versions.
98 case dwarf::DW_LANG_C:
99 case dwarf::DW_LANG_C89:
100 case dwarf::DW_LANG_C_plus_plus:
103 case dwarf::DW_LANG_Fortran77:
104 case dwarf::DW_LANG_Fortran90:
107 // The languages below have valid values only if the DWARF version >= 3.
108 case dwarf::DW_LANG_C99:
109 case dwarf::DW_LANG_ObjC:
110 case dwarf::DW_LANG_ObjC_plus_plus:
111 if (DD->getDwarfVersion() >= 3)
115 case dwarf::DW_LANG_Fortran95:
116 if (DD->getDwarfVersion() >= 3)
120 // Starting with DWARF v4, all defined languages have valid values.
121 case dwarf::DW_LANG_D:
122 case dwarf::DW_LANG_Java:
123 case dwarf::DW_LANG_Python:
124 case dwarf::DW_LANG_UPC:
125 if (DD->getDwarfVersion() >= 4)
129 case dwarf::DW_LANG_Ada83:
130 case dwarf::DW_LANG_Ada95:
131 case dwarf::DW_LANG_Cobol74:
132 case dwarf::DW_LANG_Cobol85:
133 case dwarf::DW_LANG_Modula2:
134 case dwarf::DW_LANG_Pascal83:
135 case dwarf::DW_LANG_PLI:
136 if (DD->getDwarfVersion() >= 4)
140 // The languages below are new in DWARF v5.
141 case dwarf::DW_LANG_BLISS:
142 case dwarf::DW_LANG_C11:
143 case dwarf::DW_LANG_C_plus_plus_03:
144 case dwarf::DW_LANG_C_plus_plus_11:
145 case dwarf::DW_LANG_C_plus_plus_14:
146 case dwarf::DW_LANG_Dylan:
147 case dwarf::DW_LANG_Go:
148 case dwarf::DW_LANG_Haskell:
149 case dwarf::DW_LANG_OCaml:
150 case dwarf::DW_LANG_OpenCL:
151 case dwarf::DW_LANG_RenderScript:
152 case dwarf::DW_LANG_Rust:
153 case dwarf::DW_LANG_Swift:
154 if (DD->getDwarfVersion() >= 5)
158 case dwarf::DW_LANG_Fortran03:
159 case dwarf::DW_LANG_Fortran08:
160 case dwarf::DW_LANG_Julia:
161 case dwarf::DW_LANG_Modula3:
162 if (DD->getDwarfVersion() >= 5)
170 /// Check whether the DIE for this MDNode can be shared across CUs.
171 bool DwarfUnit::isShareableAcrossCUs(const DINode *D) const {
172 // When the MDNode can be part of the type system, the DIE can be shared
174 // Combining type units and cross-CU DIE sharing is lower value (since
175 // cross-CU DIE sharing is used in LTO and removes type redundancy at that
176 // level already) but may be implementable for some value in projects
177 // building multiple independent libraries with LTO and then linking those
179 if (isDwoUnit() && !DD->shareAcrossDWOCUs())
181 return (isa<DIType>(D) ||
182 (isa<DISubprogram>(D) && !cast<DISubprogram>(D)->isDefinition())) &&
183 !DD->generateTypeUnits();
186 DIE *DwarfUnit::getDIE(const DINode *D) const {
187 if (isShareableAcrossCUs(D))
188 return DU->getDIE(D);
189 return MDNodeToDieMap.lookup(D);
192 void DwarfUnit::insertDIE(const DINode *Desc, DIE *D) {
193 if (isShareableAcrossCUs(Desc)) {
194 DU->insertDIE(Desc, D);
197 MDNodeToDieMap.insert(std::make_pair(Desc, D));
200 void DwarfUnit::addFlag(DIE &Die, dwarf::Attribute Attribute) {
201 if (DD->getDwarfVersion() >= 4)
202 Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_flag_present,
205 Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_flag,
209 void DwarfUnit::addUInt(DIEValueList &Die, dwarf::Attribute Attribute,
210 Optional<dwarf::Form> Form, uint64_t Integer) {
212 Form = DIEInteger::BestForm(false, Integer);
213 assert(Form != dwarf::DW_FORM_implicit_const &&
214 "DW_FORM_implicit_const is used only for signed integers");
215 Die.addValue(DIEValueAllocator, Attribute, *Form, DIEInteger(Integer));
218 void DwarfUnit::addUInt(DIEValueList &Block, dwarf::Form Form,
220 addUInt(Block, (dwarf::Attribute)0, Form, Integer);
223 void DwarfUnit::addSInt(DIEValueList &Die, dwarf::Attribute Attribute,
224 Optional<dwarf::Form> Form, int64_t Integer) {
226 Form = DIEInteger::BestForm(true, Integer);
227 Die.addValue(DIEValueAllocator, Attribute, *Form, DIEInteger(Integer));
230 void DwarfUnit::addSInt(DIELoc &Die, Optional<dwarf::Form> Form,
232 addSInt(Die, (dwarf::Attribute)0, Form, Integer);
235 void DwarfUnit::addString(DIE &Die, dwarf::Attribute Attribute,
237 if (DD->useInlineStrings()) {
238 Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_string,
239 new (DIEValueAllocator)
240 DIEInlineString(String, DIEValueAllocator));
243 auto StringPoolEntry = DU->getStringPool().getEntry(*Asm, String);
245 isDwoUnit() ? dwarf::DW_FORM_GNU_str_index : dwarf::DW_FORM_strp;
246 // For DWARF v5 and beyond, use the smallest strx? form possible.
247 if (useSegmentedStringOffsetsTable()) {
248 IxForm = dwarf::DW_FORM_strx1;
249 unsigned Index = StringPoolEntry.getIndex();
250 if (Index > 0xffffff)
251 IxForm = dwarf::DW_FORM_strx4;
252 else if (Index > 0xffff)
253 IxForm = dwarf::DW_FORM_strx3;
254 else if (Index > 0xff)
255 IxForm = dwarf::DW_FORM_strx2;
257 Die.addValue(DIEValueAllocator, Attribute, IxForm,
258 DIEString(StringPoolEntry));
261 DIEValueList::value_iterator DwarfUnit::addLabel(DIEValueList &Die,
262 dwarf::Attribute Attribute,
264 const MCSymbol *Label) {
265 return Die.addValue(DIEValueAllocator, Attribute, Form, DIELabel(Label));
268 void DwarfUnit::addLabel(DIELoc &Die, dwarf::Form Form, const MCSymbol *Label) {
269 addLabel(Die, (dwarf::Attribute)0, Form, Label);
272 void DwarfUnit::addSectionOffset(DIE &Die, dwarf::Attribute Attribute,
274 if (DD->getDwarfVersion() >= 4)
275 addUInt(Die, Attribute, dwarf::DW_FORM_sec_offset, Integer);
277 addUInt(Die, Attribute, dwarf::DW_FORM_data4, Integer);
280 MD5::MD5Result *DwarfUnit::getMD5AsBytes(const DIFile *File) const {
282 if (DD->getDwarfVersion() < 5)
284 Optional<DIFile::ChecksumInfo<StringRef>> Checksum = File->getChecksum();
285 if (!Checksum || Checksum->Kind != DIFile::CSK_MD5)
288 // Convert the string checksum to an MD5Result for the streamer.
289 // The verifier validates the checksum so we assume it's okay.
290 // An MD5 checksum is 16 bytes.
291 std::string ChecksumString = fromHex(Checksum->Value);
292 void *CKMem = Asm->OutStreamer->getContext().allocate(16, 1);
293 memcpy(CKMem, ChecksumString.data(), 16);
294 return reinterpret_cast<MD5::MD5Result *>(CKMem);
297 unsigned DwarfTypeUnit::getOrCreateSourceID(const DIFile *File) {
299 return getCU().getOrCreateSourceID(File);
300 if (!UsedLineTable) {
301 UsedLineTable = true;
302 // This is a split type unit that needs a line table.
303 addSectionOffset(getUnitDie(), dwarf::DW_AT_stmt_list, 0);
305 return SplitLineTable->getFile(File->getDirectory(), File->getFilename(),
306 getMD5AsBytes(File), File->getSource());
309 void DwarfUnit::addOpAddress(DIELoc &Die, const MCSymbol *Sym) {
310 if (!DD->useSplitDwarf()) {
311 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
312 addLabel(Die, dwarf::DW_FORM_udata, Sym);
314 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
315 addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
316 DD->getAddressPool().getIndex(Sym));
320 void DwarfUnit::addLabelDelta(DIE &Die, dwarf::Attribute Attribute,
321 const MCSymbol *Hi, const MCSymbol *Lo) {
322 Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_data4,
323 new (DIEValueAllocator) DIEDelta(Hi, Lo));
326 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute, DIE &Entry) {
327 addDIEEntry(Die, Attribute, DIEEntry(Entry));
330 void DwarfUnit::addDIETypeSignature(DIE &Die, uint64_t Signature) {
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);
337 Die.addValue(DIEValueAllocator, dwarf::DW_AT_signature,
338 dwarf::DW_FORM_ref_sig8, DIEInteger(Signature));
341 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute,
343 const DIEUnit *CU = Die.getUnit();
344 const DIEUnit *EntryCU = Entry.getEntry().getUnit();
346 // We assume that Die belongs to this CU, if it is not linked to any CU yet.
347 CU = getUnitDie().getUnit();
349 EntryCU = getUnitDie().getUnit();
350 Die.addValue(DIEValueAllocator, Attribute,
351 EntryCU == CU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
355 DIE &DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, const DINode *N) {
356 DIE &Die = Parent.addChild(DIE::get(DIEValueAllocator, (dwarf::Tag)Tag));
362 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute, DIELoc *Loc) {
363 Loc->ComputeSize(Asm);
364 DIELocs.push_back(Loc); // Memoize so we can call the destructor later on.
365 Die.addValue(DIEValueAllocator, Attribute,
366 Loc->BestForm(DD->getDwarfVersion()), Loc);
369 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute,
371 Block->ComputeSize(Asm);
372 DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
373 Die.addValue(DIEValueAllocator, Attribute, Block->BestForm(), Block);
376 void DwarfUnit::addSourceLine(DIE &Die, unsigned Line, const DIFile *File) {
380 unsigned FileID = getOrCreateSourceID(File);
381 assert(FileID && "Invalid file id");
382 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
383 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
386 void DwarfUnit::addSourceLine(DIE &Die, const DILocalVariable *V) {
389 addSourceLine(Die, V->getLine(), V->getFile());
392 void DwarfUnit::addSourceLine(DIE &Die, const DIGlobalVariable *G) {
395 addSourceLine(Die, G->getLine(), G->getFile());
398 void DwarfUnit::addSourceLine(DIE &Die, const DISubprogram *SP) {
401 addSourceLine(Die, SP->getLine(), SP->getFile());
404 void DwarfUnit::addSourceLine(DIE &Die, const DIType *Ty) {
407 addSourceLine(Die, Ty->getLine(), Ty->getFile());
410 void DwarfUnit::addSourceLine(DIE &Die, const DIObjCProperty *Ty) {
413 addSourceLine(Die, Ty->getLine(), Ty->getFile());
416 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
417 VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
418 gives the variable VarName either the struct, or a pointer to the struct, as
419 its type. This is necessary for various behind-the-scenes things the
420 compiler needs to do with by-reference variables in Blocks.
422 However, as far as the original *programmer* is concerned, the variable
423 should still have type 'SomeType', as originally declared.
425 The function getBlockByrefType dives into the __Block_byref_x_VarName
426 struct to find the original type of the variable, which is then assigned to
427 the variable's Debug Information Entry as its real type. So far, so good.
428 However now the debugger will expect the variable VarName to have the type
429 SomeType. So we need the location attribute for the variable to be an
430 expression that explains to the debugger how to navigate through the
431 pointers and struct to find the actual variable of type SomeType.
433 The following function does just that. We start by getting
434 the "normal" location for the variable. This will be the location
435 of either the struct __Block_byref_x_VarName or the pointer to the
436 struct __Block_byref_x_VarName.
438 The struct will look something like:
440 struct __Block_byref_x_VarName {
442 struct __Block_byref_x_VarName *forwarding;
443 ... <various other fields>
445 ... <maybe more fields>
448 If we are given the struct directly (as our starting point) we
449 need to tell the debugger to:
451 1). Add the offset of the forwarding field.
453 2). Follow that pointer to get the real __Block_byref_x_VarName
454 struct to use (the real one may have been copied onto the heap).
456 3). Add the offset for the field VarName, to find the actual variable.
458 If we started with a pointer to the struct, then we need to
459 dereference that pointer first, before the other steps.
460 Translating this into DWARF ops, we will need to append the following
461 to the current location description for the variable:
463 DW_OP_deref -- optional, if we start with a pointer
464 DW_OP_plus_uconst <forward_fld_offset>
466 DW_OP_plus_uconst <varName_fld_offset>
468 That is what this function does. */
470 void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
471 dwarf::Attribute Attribute,
472 const MachineLocation &Location) {
473 const DIType *Ty = DV.getType();
474 const DIType *TmpTy = Ty;
475 uint16_t Tag = Ty->getTag();
476 bool isPointer = false;
478 StringRef varName = DV.getName();
480 if (Tag == dwarf::DW_TAG_pointer_type) {
481 auto *DTy = cast<DIDerivedType>(Ty);
482 TmpTy = resolve(DTy->getBaseType());
486 // Find the __forwarding field and the variable field in the __Block_byref
488 DINodeArray Fields = cast<DICompositeType>(TmpTy)->getElements();
489 const DIDerivedType *varField = nullptr;
490 const DIDerivedType *forwardingField = nullptr;
492 for (unsigned i = 0, N = Fields.size(); i < N; ++i) {
493 auto *DT = cast<DIDerivedType>(Fields[i]);
494 StringRef fieldName = DT->getName();
495 if (fieldName == "__forwarding")
496 forwardingField = DT;
497 else if (fieldName == varName)
501 // Get the offsets for the forwarding field and the variable field.
502 unsigned forwardingFieldOffset = forwardingField->getOffsetInBits() >> 3;
503 unsigned varFieldOffset = varField->getOffsetInBits() >> 2;
505 // Decode the original location, and use that as the start of the byref
506 // variable's location.
507 DIELoc *Loc = new (DIEValueAllocator) DIELoc;
508 DIEDwarfExpression DwarfExpr(*Asm, *this, *Loc);
509 if (Location.isIndirect())
510 DwarfExpr.setMemoryLocationKind();
512 SmallVector<uint64_t, 6> Ops;
513 // If we started with a pointer to the __Block_byref... struct, then
514 // the first thing we need to do is dereference the pointer (DW_OP_deref).
516 Ops.push_back(dwarf::DW_OP_deref);
518 // Next add the offset for the '__forwarding' field:
519 // DW_OP_plus_uconst ForwardingFieldOffset. Note there's no point in
520 // adding the offset if it's 0.
521 if (forwardingFieldOffset > 0) {
522 Ops.push_back(dwarf::DW_OP_plus_uconst);
523 Ops.push_back(forwardingFieldOffset);
526 // Now dereference the __forwarding field to get to the real __Block_byref
527 // struct: DW_OP_deref.
528 Ops.push_back(dwarf::DW_OP_deref);
530 // Now that we've got the real __Block_byref... struct, add the offset
531 // for the variable's field to get to the location of the actual variable:
532 // DW_OP_plus_uconst varFieldOffset. Again, don't add if it's 0.
533 if (varFieldOffset > 0) {
534 Ops.push_back(dwarf::DW_OP_plus_uconst);
535 Ops.push_back(varFieldOffset);
538 DIExpressionCursor Cursor(Ops);
539 const TargetRegisterInfo &TRI = *Asm->MF->getSubtarget().getRegisterInfo();
540 if (!DwarfExpr.addMachineRegExpression(TRI, Cursor, Location.getReg()))
542 DwarfExpr.addExpression(std::move(Cursor));
544 // Now attach the location information to the DIE.
545 addBlock(Die, Attribute, DwarfExpr.finalize());
548 /// Return true if type encoding is unsigned.
549 static bool isUnsignedDIType(DwarfDebug *DD, const DIType *Ty) {
550 if (auto *CTy = dyn_cast<DICompositeType>(Ty)) {
551 // FIXME: Enums without a fixed underlying type have unknown signedness
552 // here, leading to incorrectly emitted constants.
553 if (CTy->getTag() == dwarf::DW_TAG_enumeration_type)
556 // (Pieces of) aggregate types that get hacked apart by SROA may be
557 // represented by a constant. Encode them as unsigned bytes.
561 if (auto *DTy = dyn_cast<DIDerivedType>(Ty)) {
562 dwarf::Tag T = (dwarf::Tag)Ty->getTag();
563 // Encode pointer constants as unsigned bytes. This is used at least for
564 // null pointer constant emission.
565 // FIXME: reference and rvalue_reference /probably/ shouldn't be allowed
566 // here, but accept them for now due to a bug in SROA producing bogus
568 if (T == dwarf::DW_TAG_pointer_type ||
569 T == dwarf::DW_TAG_ptr_to_member_type ||
570 T == dwarf::DW_TAG_reference_type ||
571 T == dwarf::DW_TAG_rvalue_reference_type)
573 assert(T == dwarf::DW_TAG_typedef || T == dwarf::DW_TAG_const_type ||
574 T == dwarf::DW_TAG_volatile_type ||
575 T == dwarf::DW_TAG_restrict_type || T == dwarf::DW_TAG_atomic_type);
576 DITypeRef Deriv = DTy->getBaseType();
577 assert(Deriv && "Expected valid base type");
578 return isUnsignedDIType(DD, DD->resolve(Deriv));
581 auto *BTy = cast<DIBasicType>(Ty);
582 unsigned Encoding = BTy->getEncoding();
583 assert((Encoding == dwarf::DW_ATE_unsigned ||
584 Encoding == dwarf::DW_ATE_unsigned_char ||
585 Encoding == dwarf::DW_ATE_signed ||
586 Encoding == dwarf::DW_ATE_signed_char ||
587 Encoding == dwarf::DW_ATE_float || Encoding == dwarf::DW_ATE_UTF ||
588 Encoding == dwarf::DW_ATE_boolean ||
589 (Ty->getTag() == dwarf::DW_TAG_unspecified_type &&
590 Ty->getName() == "decltype(nullptr)")) &&
591 "Unsupported encoding");
592 return Encoding == dwarf::DW_ATE_unsigned ||
593 Encoding == dwarf::DW_ATE_unsigned_char ||
594 Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean ||
595 Ty->getTag() == dwarf::DW_TAG_unspecified_type;
598 void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) {
599 assert(MO.isFPImm() && "Invalid machine operand!");
600 DIEBlock *Block = new (DIEValueAllocator) DIEBlock;
601 APFloat FPImm = MO.getFPImm()->getValueAPF();
603 // Get the raw data form of the floating point.
604 const APInt FltVal = FPImm.bitcastToAPInt();
605 const char *FltPtr = (const char *)FltVal.getRawData();
607 int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
608 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
609 int Incr = (LittleEndian ? 1 : -1);
610 int Start = (LittleEndian ? 0 : NumBytes - 1);
611 int Stop = (LittleEndian ? NumBytes : -1);
613 // Output the constant to DWARF one byte at a time.
614 for (; Start != Stop; Start += Incr)
615 addUInt(*Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]);
617 addBlock(Die, dwarf::DW_AT_const_value, Block);
620 void DwarfUnit::addConstantFPValue(DIE &Die, const ConstantFP *CFP) {
621 // Pass this down to addConstantValue as an unsigned bag of bits.
622 addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true);
625 void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI,
627 addConstantValue(Die, CI->getValue(), Ty);
630 void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO,
632 assert(MO.isImm() && "Invalid machine operand!");
634 addConstantValue(Die, isUnsignedDIType(DD, Ty), MO.getImm());
637 void DwarfUnit::addConstantValue(DIE &Die, bool Unsigned, uint64_t Val) {
638 // FIXME: This is a bit conservative/simple - it emits negative values always
639 // sign extended to 64 bits rather than minimizing the number of bytes.
640 addUInt(Die, dwarf::DW_AT_const_value,
641 Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata, Val);
644 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, const DIType *Ty) {
645 addConstantValue(Die, Val, isUnsignedDIType(DD, Ty));
648 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) {
649 unsigned CIBitWidth = Val.getBitWidth();
650 if (CIBitWidth <= 64) {
651 addConstantValue(Die, Unsigned,
652 Unsigned ? Val.getZExtValue() : Val.getSExtValue());
656 DIEBlock *Block = new (DIEValueAllocator) DIEBlock;
658 // Get the raw data form of the large APInt.
659 const uint64_t *Ptr64 = Val.getRawData();
661 int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
662 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
664 // Output the constant to DWARF one byte at a time.
665 for (int i = 0; i < NumBytes; i++) {
668 c = Ptr64[i / 8] >> (8 * (i & 7));
670 c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
671 addUInt(*Block, dwarf::DW_FORM_data1, c);
674 addBlock(Die, dwarf::DW_AT_const_value, Block);
677 void DwarfUnit::addLinkageName(DIE &Die, StringRef LinkageName) {
678 if (!LinkageName.empty())
680 DD->getDwarfVersion() >= 4 ? dwarf::DW_AT_linkage_name
681 : dwarf::DW_AT_MIPS_linkage_name,
682 GlobalValue::dropLLVMManglingEscape(LinkageName));
685 void DwarfUnit::addTemplateParams(DIE &Buffer, DINodeArray TParams) {
686 // Add template parameters.
687 for (const auto *Element : TParams) {
688 if (auto *TTP = dyn_cast<DITemplateTypeParameter>(Element))
689 constructTemplateTypeParameterDIE(Buffer, TTP);
690 else if (auto *TVP = dyn_cast<DITemplateValueParameter>(Element))
691 constructTemplateValueParameterDIE(Buffer, TVP);
695 /// Add thrown types.
696 void DwarfUnit::addThrownTypes(DIE &Die, DINodeArray ThrownTypes) {
697 for (const auto *Ty : ThrownTypes) {
698 DIE &TT = createAndAddDIE(dwarf::DW_TAG_thrown_type, Die);
699 addType(TT, cast<DIType>(Ty));
703 DIE *DwarfUnit::getOrCreateContextDIE(const DIScope *Context) {
704 if (!Context || isa<DIFile>(Context))
705 return &getUnitDie();
706 if (auto *T = dyn_cast<DIType>(Context))
707 return getOrCreateTypeDIE(T);
708 if (auto *NS = dyn_cast<DINamespace>(Context))
709 return getOrCreateNameSpace(NS);
710 if (auto *SP = dyn_cast<DISubprogram>(Context))
711 return getOrCreateSubprogramDIE(SP);
712 if (auto *M = dyn_cast<DIModule>(Context))
713 return getOrCreateModule(M);
714 return getDIE(Context);
717 DIE *DwarfTypeUnit::createTypeDIE(const DICompositeType *Ty) {
718 auto *Context = resolve(Ty->getScope());
719 DIE *ContextDIE = getOrCreateContextDIE(Context);
721 if (DIE *TyDIE = getDIE(Ty))
725 DIE &TyDIE = createAndAddDIE(Ty->getTag(), *ContextDIE, Ty);
727 constructTypeDIE(TyDIE, cast<DICompositeType>(Ty));
729 updateAcceleratorTables(Context, Ty, TyDIE);
733 DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
737 auto *Ty = cast<DIType>(TyNode);
739 // DW_TAG_restrict_type is not supported in DWARF2
740 if (Ty->getTag() == dwarf::DW_TAG_restrict_type && DD->getDwarfVersion() <= 2)
741 return getOrCreateTypeDIE(resolve(cast<DIDerivedType>(Ty)->getBaseType()));
743 // DW_TAG_atomic_type is not supported in DWARF < 5
744 if (Ty->getTag() == dwarf::DW_TAG_atomic_type && DD->getDwarfVersion() < 5)
745 return getOrCreateTypeDIE(resolve(cast<DIDerivedType>(Ty)->getBaseType()));
747 // Construct the context before querying for the existence of the DIE in case
748 // such construction creates the DIE.
749 auto *Context = resolve(Ty->getScope());
750 DIE *ContextDIE = getOrCreateContextDIE(Context);
753 if (DIE *TyDIE = getDIE(Ty))
757 DIE &TyDIE = createAndAddDIE(Ty->getTag(), *ContextDIE, Ty);
759 updateAcceleratorTables(Context, Ty, TyDIE);
761 if (auto *BT = dyn_cast<DIBasicType>(Ty))
762 constructTypeDIE(TyDIE, BT);
763 else if (auto *STy = dyn_cast<DISubroutineType>(Ty))
764 constructTypeDIE(TyDIE, STy);
765 else if (auto *CTy = dyn_cast<DICompositeType>(Ty)) {
766 if (DD->generateTypeUnits() && !Ty->isForwardDecl())
767 if (MDString *TypeId = CTy->getRawIdentifier()) {
768 DD->addDwarfTypeUnitType(getCU(), TypeId->getString(), TyDIE, CTy);
769 // Skip updating the accelerator tables since this is not the full type.
772 constructTypeDIE(TyDIE, CTy);
774 constructTypeDIE(TyDIE, cast<DIDerivedType>(Ty));
780 void DwarfUnit::updateAcceleratorTables(const DIScope *Context,
781 const DIType *Ty, const DIE &TyDIE) {
782 if (!Ty->getName().empty() && !Ty->isForwardDecl()) {
783 bool IsImplementation = false;
784 if (auto *CT = dyn_cast<DICompositeType>(Ty)) {
785 // A runtime language of 0 actually means C/C++ and that any
786 // non-negative value is some version of Objective-C/C++.
787 IsImplementation = CT->getRuntimeLang() == 0 || CT->isObjcClassComplete();
789 unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0;
790 DD->addAccelType(Ty->getName(), TyDIE, Flags);
792 if (!Context || isa<DICompileUnit>(Context) || isa<DIFile>(Context) ||
793 isa<DINamespace>(Context))
794 addGlobalType(Ty, TyDIE, Context);
798 void DwarfUnit::addType(DIE &Entity, const DIType *Ty,
799 dwarf::Attribute Attribute) {
800 assert(Ty && "Trying to add a type that doesn't exist?");
801 addDIEEntry(Entity, Attribute, DIEEntry(*getOrCreateTypeDIE(Ty)));
804 std::string DwarfUnit::getParentContextString(const DIScope *Context) const {
808 // FIXME: Decide whether to implement this for non-C++ languages.
809 if (getLanguage() != dwarf::DW_LANG_C_plus_plus)
813 SmallVector<const DIScope *, 1> Parents;
814 while (!isa<DICompileUnit>(Context)) {
815 Parents.push_back(Context);
816 if (Context->getScope())
817 Context = resolve(Context->getScope());
819 // Structure, etc types will have a NULL context if they're at the top
824 // Reverse iterate over our list to go from the outermost construct to the
826 for (const DIScope *Ctx : make_range(Parents.rbegin(), Parents.rend())) {
827 StringRef Name = Ctx->getName();
828 if (Name.empty() && isa<DINamespace>(Ctx))
829 Name = "(anonymous namespace)";
838 void DwarfUnit::constructTypeDIE(DIE &Buffer, const DIBasicType *BTy) {
839 // Get core information.
840 StringRef Name = BTy->getName();
841 // Add name if not anonymous or intermediate type.
843 addString(Buffer, dwarf::DW_AT_name, Name);
845 // An unspecified type only has a name attribute.
846 if (BTy->getTag() == dwarf::DW_TAG_unspecified_type)
849 addUInt(Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
852 uint64_t Size = BTy->getSizeInBits() >> 3;
853 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
856 void DwarfUnit::constructTypeDIE(DIE &Buffer, const DIDerivedType *DTy) {
857 // Get core information.
858 StringRef Name = DTy->getName();
859 uint64_t Size = DTy->getSizeInBits() >> 3;
860 uint16_t Tag = Buffer.getTag();
862 // Map to main type, void will not have a type.
863 const DIType *FromTy = resolve(DTy->getBaseType());
865 addType(Buffer, FromTy);
867 // Add name if not anonymous or intermediate type.
869 addString(Buffer, dwarf::DW_AT_name, Name);
871 // Add size if non-zero (derived types might be zero-sized.)
872 if (Size && Tag != dwarf::DW_TAG_pointer_type
873 && Tag != dwarf::DW_TAG_ptr_to_member_type
874 && Tag != dwarf::DW_TAG_reference_type
875 && Tag != dwarf::DW_TAG_rvalue_reference_type)
876 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
878 if (Tag == dwarf::DW_TAG_ptr_to_member_type)
880 Buffer, dwarf::DW_AT_containing_type,
881 *getOrCreateTypeDIE(resolve(cast<DIDerivedType>(DTy)->getClassType())));
882 // Add source line info if available and TyDesc is not a forward declaration.
883 if (!DTy->isForwardDecl())
884 addSourceLine(Buffer, DTy);
886 // If DWARF address space value is other than None, add it for pointer and
887 // reference types as DW_AT_address_class.
888 if (DTy->getDWARFAddressSpace() && (Tag == dwarf::DW_TAG_pointer_type ||
889 Tag == dwarf::DW_TAG_reference_type))
890 addUInt(Buffer, dwarf::DW_AT_address_class, dwarf::DW_FORM_data4,
891 DTy->getDWARFAddressSpace().getValue());
894 void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeRefArray Args) {
895 for (unsigned i = 1, N = Args.size(); i < N; ++i) {
896 const DIType *Ty = resolve(Args[i]);
898 assert(i == N-1 && "Unspecified parameter must be the last argument");
899 createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
901 DIE &Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
903 if (Ty->isArtificial())
904 addFlag(Arg, dwarf::DW_AT_artificial);
909 void DwarfUnit::constructTypeDIE(DIE &Buffer, const DISubroutineType *CTy) {
910 // Add return type. A void return won't have a type.
911 auto Elements = cast<DISubroutineType>(CTy)->getTypeArray();
913 if (auto RTy = resolve(Elements[0]))
914 addType(Buffer, RTy);
916 bool isPrototyped = true;
917 if (Elements.size() == 2 && !Elements[1])
918 isPrototyped = false;
920 constructSubprogramArguments(Buffer, Elements);
922 // Add prototype flag if we're dealing with a C language and the function has
924 uint16_t Language = getLanguage();
926 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
927 Language == dwarf::DW_LANG_ObjC))
928 addFlag(Buffer, dwarf::DW_AT_prototyped);
930 // Add a DW_AT_calling_convention if this has an explicit convention.
931 if (CTy->getCC() && CTy->getCC() != dwarf::DW_CC_normal)
932 addUInt(Buffer, dwarf::DW_AT_calling_convention, dwarf::DW_FORM_data1,
935 if (CTy->isLValueReference())
936 addFlag(Buffer, dwarf::DW_AT_reference);
938 if (CTy->isRValueReference())
939 addFlag(Buffer, dwarf::DW_AT_rvalue_reference);
942 void DwarfUnit::constructTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
943 // Add name if not anonymous or intermediate type.
944 StringRef Name = CTy->getName();
946 uint64_t Size = CTy->getSizeInBits() >> 3;
947 uint16_t Tag = Buffer.getTag();
950 case dwarf::DW_TAG_array_type:
951 constructArrayTypeDIE(Buffer, CTy);
953 case dwarf::DW_TAG_enumeration_type:
954 constructEnumTypeDIE(Buffer, CTy);
956 case dwarf::DW_TAG_variant_part:
957 case dwarf::DW_TAG_structure_type:
958 case dwarf::DW_TAG_union_type:
959 case dwarf::DW_TAG_class_type: {
960 // Emit the discriminator for a variant part.
961 DIDerivedType *Discriminator = nullptr;
962 if (Tag == dwarf::DW_TAG_variant_part) {
963 Discriminator = CTy->getDiscriminator();
966 // If the variant part has a discriminant, the discriminant is
967 // represented by a separate debugging information entry which is
968 // a child of the variant part entry.
969 DIE &DiscMember = constructMemberDIE(Buffer, Discriminator);
970 addDIEEntry(Buffer, dwarf::DW_AT_discr, DiscMember);
974 // Add elements to structure type.
975 DINodeArray Elements = CTy->getElements();
976 for (const auto *Element : Elements) {
979 if (auto *SP = dyn_cast<DISubprogram>(Element))
980 getOrCreateSubprogramDIE(SP);
981 else if (auto *DDTy = dyn_cast<DIDerivedType>(Element)) {
982 if (DDTy->getTag() == dwarf::DW_TAG_friend) {
983 DIE &ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer);
984 addType(ElemDie, resolve(DDTy->getBaseType()), dwarf::DW_AT_friend);
985 } else if (DDTy->isStaticMember()) {
986 getOrCreateStaticMemberDIE(DDTy);
987 } else if (Tag == dwarf::DW_TAG_variant_part) {
988 // When emitting a variant part, wrap each member in
990 DIE &Variant = createAndAddDIE(dwarf::DW_TAG_variant, Buffer);
991 if (const ConstantInt *CI =
992 dyn_cast_or_null<ConstantInt>(DDTy->getDiscriminantValue())) {
993 if (isUnsignedDIType(DD, resolve(Discriminator->getBaseType())))
994 addUInt(Variant, dwarf::DW_AT_discr_value, None, CI->getZExtValue());
996 addSInt(Variant, dwarf::DW_AT_discr_value, None, CI->getSExtValue());
998 constructMemberDIE(Variant, DDTy);
1000 constructMemberDIE(Buffer, DDTy);
1002 } else if (auto *Property = dyn_cast<DIObjCProperty>(Element)) {
1003 DIE &ElemDie = createAndAddDIE(Property->getTag(), Buffer);
1004 StringRef PropertyName = Property->getName();
1005 addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
1006 if (Property->getType())
1007 addType(ElemDie, resolve(Property->getType()));
1008 addSourceLine(ElemDie, Property);
1009 StringRef GetterName = Property->getGetterName();
1010 if (!GetterName.empty())
1011 addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
1012 StringRef SetterName = Property->getSetterName();
1013 if (!SetterName.empty())
1014 addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
1015 if (unsigned PropertyAttributes = Property->getAttributes())
1016 addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
1017 PropertyAttributes);
1018 } else if (auto *Composite = dyn_cast<DICompositeType>(Element)) {
1019 if (Composite->getTag() == dwarf::DW_TAG_variant_part) {
1020 DIE &VariantPart = createAndAddDIE(Composite->getTag(), Buffer);
1021 constructTypeDIE(VariantPart, Composite);
1026 if (CTy->isAppleBlockExtension())
1027 addFlag(Buffer, dwarf::DW_AT_APPLE_block);
1029 // This is outside the DWARF spec, but GDB expects a DW_AT_containing_type
1030 // inside C++ composite types to point to the base class with the vtable.
1031 // Rust uses DW_AT_containing_type to link a vtable to the type
1032 // for which it was created.
1033 if (auto *ContainingType = resolve(CTy->getVTableHolder()))
1034 addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
1035 *getOrCreateTypeDIE(ContainingType));
1037 if (CTy->isObjcClassComplete())
1038 addFlag(Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1040 // Add template parameters to a class, structure or union types.
1041 // FIXME: The support isn't in the metadata for this yet.
1042 if (Tag == dwarf::DW_TAG_class_type ||
1043 Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type)
1044 addTemplateParams(Buffer, CTy->getTemplateParams());
1046 // Add the type's non-standard calling convention.
1048 if (CTy->isTypePassByValue())
1049 CC = dwarf::DW_CC_pass_by_value;
1050 else if (CTy->isTypePassByReference())
1051 CC = dwarf::DW_CC_pass_by_reference;
1053 addUInt(Buffer, dwarf::DW_AT_calling_convention, dwarf::DW_FORM_data1,
1061 // Add name if not anonymous or intermediate type.
1063 addString(Buffer, dwarf::DW_AT_name, Name);
1065 if (Tag == dwarf::DW_TAG_enumeration_type ||
1066 Tag == dwarf::DW_TAG_class_type || Tag == dwarf::DW_TAG_structure_type ||
1067 Tag == dwarf::DW_TAG_union_type) {
1068 // Add size if non-zero (derived types might be zero-sized.)
1069 // TODO: Do we care about size for enum forward declarations?
1071 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
1072 else if (!CTy->isForwardDecl())
1073 // Add zero size if it is not a forward declaration.
1074 addUInt(Buffer, dwarf::DW_AT_byte_size, None, 0);
1076 // If we're a forward decl, say so.
1077 if (CTy->isForwardDecl())
1078 addFlag(Buffer, dwarf::DW_AT_declaration);
1080 // Add source line info if available.
1081 if (!CTy->isForwardDecl())
1082 addSourceLine(Buffer, CTy);
1084 // No harm in adding the runtime language to the declaration.
1085 unsigned RLang = CTy->getRuntimeLang();
1087 addUInt(Buffer, dwarf::DW_AT_APPLE_runtime_class, dwarf::DW_FORM_data1,
1090 // Add align info if available.
1091 if (uint32_t AlignInBytes = CTy->getAlignInBytes())
1092 addUInt(Buffer, dwarf::DW_AT_alignment, dwarf::DW_FORM_udata,
1097 void DwarfUnit::constructTemplateTypeParameterDIE(
1098 DIE &Buffer, const DITemplateTypeParameter *TP) {
1100 createAndAddDIE(dwarf::DW_TAG_template_type_parameter, Buffer);
1101 // Add the type if it exists, it could be void and therefore no type.
1103 addType(ParamDIE, resolve(TP->getType()));
1104 if (!TP->getName().empty())
1105 addString(ParamDIE, dwarf::DW_AT_name, TP->getName());
1108 void DwarfUnit::constructTemplateValueParameterDIE(
1109 DIE &Buffer, const DITemplateValueParameter *VP) {
1110 DIE &ParamDIE = createAndAddDIE(VP->getTag(), Buffer);
1112 // Add the type if there is one, template template and template parameter
1113 // packs will not have a type.
1114 if (VP->getTag() == dwarf::DW_TAG_template_value_parameter)
1115 addType(ParamDIE, resolve(VP->getType()));
1116 if (!VP->getName().empty())
1117 addString(ParamDIE, dwarf::DW_AT_name, VP->getName());
1118 if (Metadata *Val = VP->getValue()) {
1119 if (ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(Val))
1120 addConstantValue(ParamDIE, CI, resolve(VP->getType()));
1121 else if (GlobalValue *GV = mdconst::dyn_extract<GlobalValue>(Val)) {
1122 // We cannot describe the location of dllimport'd entities: the
1123 // computation of their address requires loads from the IAT.
1124 if (!GV->hasDLLImportStorageClass()) {
1125 // For declaration non-type template parameters (such as global values
1127 DIELoc *Loc = new (DIEValueAllocator) DIELoc;
1128 addOpAddress(*Loc, Asm->getSymbol(GV));
1129 // Emit DW_OP_stack_value to use the address as the immediate value of
1130 // the parameter, rather than a pointer to it.
1131 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1132 addBlock(ParamDIE, dwarf::DW_AT_location, Loc);
1134 } else if (VP->getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1135 assert(isa<MDString>(Val));
1136 addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1137 cast<MDString>(Val)->getString());
1138 } else if (VP->getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1139 addTemplateParams(ParamDIE, cast<MDTuple>(Val));
1144 DIE *DwarfUnit::getOrCreateNameSpace(const DINamespace *NS) {
1145 // Construct the context before querying for the existence of the DIE in case
1146 // such construction creates the DIE.
1147 DIE *ContextDIE = getOrCreateContextDIE(NS->getScope());
1149 if (DIE *NDie = getDIE(NS))
1151 DIE &NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS);
1153 StringRef Name = NS->getName();
1155 addString(NDie, dwarf::DW_AT_name, NS->getName());
1157 Name = "(anonymous namespace)";
1158 DD->addAccelNamespace(Name, NDie);
1159 addGlobalName(Name, NDie, NS->getScope());
1160 if (NS->getExportSymbols())
1161 addFlag(NDie, dwarf::DW_AT_export_symbols);
1165 DIE *DwarfUnit::getOrCreateModule(const DIModule *M) {
1166 // Construct the context before querying for the existence of the DIE in case
1167 // such construction creates the DIE.
1168 DIE *ContextDIE = getOrCreateContextDIE(M->getScope());
1170 if (DIE *MDie = getDIE(M))
1172 DIE &MDie = createAndAddDIE(dwarf::DW_TAG_module, *ContextDIE, M);
1174 if (!M->getName().empty()) {
1175 addString(MDie, dwarf::DW_AT_name, M->getName());
1176 addGlobalName(M->getName(), MDie, M->getScope());
1178 if (!M->getConfigurationMacros().empty())
1179 addString(MDie, dwarf::DW_AT_LLVM_config_macros,
1180 M->getConfigurationMacros());
1181 if (!M->getIncludePath().empty())
1182 addString(MDie, dwarf::DW_AT_LLVM_include_path, M->getIncludePath());
1183 if (!M->getISysRoot().empty())
1184 addString(MDie, dwarf::DW_AT_LLVM_isysroot, M->getISysRoot());
1189 DIE *DwarfUnit::getOrCreateSubprogramDIE(const DISubprogram *SP, bool Minimal) {
1190 // Construct the context before querying for the existence of the DIE in case
1191 // such construction creates the DIE (as is the case for member function
1194 Minimal ? &getUnitDie() : getOrCreateContextDIE(resolve(SP->getScope()));
1196 if (DIE *SPDie = getDIE(SP))
1199 if (auto *SPDecl = SP->getDeclaration()) {
1201 // Add subprogram definitions to the CU die directly.
1202 ContextDIE = &getUnitDie();
1203 // Build the decl now to ensure it precedes the definition.
1204 getOrCreateSubprogramDIE(SPDecl);
1208 // DW_TAG_inlined_subroutine may refer to this DIE.
1209 DIE &SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP);
1211 // Stop here and fill this in later, depending on whether or not this
1212 // subprogram turns out to have inlined instances or not.
1213 if (SP->isDefinition())
1216 applySubprogramAttributes(SP, SPDie);
1220 bool DwarfUnit::applySubprogramDefinitionAttributes(const DISubprogram *SP,
1222 DIE *DeclDie = nullptr;
1223 StringRef DeclLinkageName;
1224 if (auto *SPDecl = SP->getDeclaration()) {
1225 DeclDie = getDIE(SPDecl);
1226 assert(DeclDie && "This DIE should've already been constructed when the "
1227 "definition DIE was created in "
1228 "getOrCreateSubprogramDIE");
1229 // Look at the Decl's linkage name only if we emitted it.
1230 if (DD->useAllLinkageNames())
1231 DeclLinkageName = SPDecl->getLinkageName();
1232 unsigned DeclID = getOrCreateSourceID(SPDecl->getFile());
1233 unsigned DefID = getOrCreateSourceID(SP->getFile());
1234 if (DeclID != DefID)
1235 addUInt(SPDie, dwarf::DW_AT_decl_file, None, DefID);
1237 if (SP->getLine() != SPDecl->getLine())
1238 addUInt(SPDie, dwarf::DW_AT_decl_line, None, SP->getLine());
1241 // Add function template parameters.
1242 addTemplateParams(SPDie, SP->getTemplateParams());
1244 // Add the linkage name if we have one and it isn't in the Decl.
1245 StringRef LinkageName = SP->getLinkageName();
1246 assert(((LinkageName.empty() || DeclLinkageName.empty()) ||
1247 LinkageName == DeclLinkageName) &&
1248 "decl has a linkage name and it is different");
1249 if (DeclLinkageName.empty() &&
1250 // Always emit it for abstract subprograms.
1251 (DD->useAllLinkageNames() || DU->getAbstractSPDies().lookup(SP)))
1252 addLinkageName(SPDie, LinkageName);
1257 // Refer to the function declaration where all the other attributes will be
1259 addDIEEntry(SPDie, dwarf::DW_AT_specification, *DeclDie);
1263 void DwarfUnit::applySubprogramAttributes(const DISubprogram *SP, DIE &SPDie,
1264 bool SkipSPAttributes) {
1265 // If -fdebug-info-for-profiling is enabled, need to emit the subprogram
1266 // and its source location.
1267 bool SkipSPSourceLocation = SkipSPAttributes &&
1268 !CUNode->getDebugInfoForProfiling();
1269 if (!SkipSPSourceLocation)
1270 if (applySubprogramDefinitionAttributes(SP, SPDie))
1273 // Constructors and operators for anonymous aggregates do not have names.
1274 if (!SP->getName().empty())
1275 addString(SPDie, dwarf::DW_AT_name, SP->getName());
1277 if (!SkipSPSourceLocation)
1278 addSourceLine(SPDie, SP);
1280 // Skip the rest of the attributes under -gmlt to save space.
1281 if (SkipSPAttributes)
1284 // Add the prototype if we have a prototype and we have a C like
1286 uint16_t Language = getLanguage();
1287 if (SP->isPrototyped() &&
1288 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1289 Language == dwarf::DW_LANG_ObjC))
1290 addFlag(SPDie, dwarf::DW_AT_prototyped);
1293 DITypeRefArray Args;
1294 if (const DISubroutineType *SPTy = SP->getType()) {
1295 Args = SPTy->getTypeArray();
1299 // Add a DW_AT_calling_convention if this has an explicit convention.
1300 if (CC && CC != dwarf::DW_CC_normal)
1301 addUInt(SPDie, dwarf::DW_AT_calling_convention, dwarf::DW_FORM_data1, CC);
1303 // Add a return type. If this is a type like a C/C++ void type we don't add a
1306 if (auto Ty = resolve(Args[0]))
1309 unsigned VK = SP->getVirtuality();
1311 addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1312 if (SP->getVirtualIndex() != -1u) {
1313 DIELoc *Block = getDIELoc();
1314 addUInt(*Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1315 addUInt(*Block, dwarf::DW_FORM_udata, SP->getVirtualIndex());
1316 addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
1318 ContainingTypeMap.insert(
1319 std::make_pair(&SPDie, resolve(SP->getContainingType())));
1322 if (!SP->isDefinition()) {
1323 addFlag(SPDie, dwarf::DW_AT_declaration);
1325 // Add arguments. Do not add arguments for subprogram definition. They will
1326 // be handled while processing variables.
1327 constructSubprogramArguments(SPDie, Args);
1330 addThrownTypes(SPDie, SP->getThrownTypes());
1332 if (SP->isArtificial())
1333 addFlag(SPDie, dwarf::DW_AT_artificial);
1335 if (!SP->isLocalToUnit())
1336 addFlag(SPDie, dwarf::DW_AT_external);
1338 if (DD->useAppleExtensionAttributes()) {
1339 if (SP->isOptimized())
1340 addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1342 if (unsigned isa = Asm->getISAEncoding())
1343 addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1346 if (SP->isLValueReference())
1347 addFlag(SPDie, dwarf::DW_AT_reference);
1349 if (SP->isRValueReference())
1350 addFlag(SPDie, dwarf::DW_AT_rvalue_reference);
1352 if (SP->isNoReturn())
1353 addFlag(SPDie, dwarf::DW_AT_noreturn);
1355 if (SP->isProtected())
1356 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1357 dwarf::DW_ACCESS_protected);
1358 else if (SP->isPrivate())
1359 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1360 dwarf::DW_ACCESS_private);
1361 else if (SP->isPublic())
1362 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1363 dwarf::DW_ACCESS_public);
1365 if (SP->isExplicit())
1366 addFlag(SPDie, dwarf::DW_AT_explicit);
1368 if (SP->isMainSubprogram())
1369 addFlag(SPDie, dwarf::DW_AT_main_subprogram);
1372 void DwarfUnit::constructSubrangeDIE(DIE &Buffer, const DISubrange *SR,
1374 DIE &DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer);
1375 addDIEEntry(DW_Subrange, dwarf::DW_AT_type, *IndexTy);
1377 // The LowerBound value defines the lower bounds which is typically zero for
1378 // C/C++. The Count value is the number of elements. Values are 64 bit. If
1379 // Count == -1 then the array is unbounded and we do not emit
1380 // DW_AT_lower_bound and DW_AT_count attributes.
1381 int64_t LowerBound = SR->getLowerBound();
1382 int64_t DefaultLowerBound = getDefaultLowerBound();
1384 if (auto *CI = SR->getCount().dyn_cast<ConstantInt*>())
1385 Count = CI->getSExtValue();
1387 if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1388 addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
1390 if (auto *CV = SR->getCount().dyn_cast<DIVariable*>()) {
1391 if (auto *CountVarDIE = getDIE(CV))
1392 addDIEEntry(DW_Subrange, dwarf::DW_AT_count, *CountVarDIE);
1393 } else if (Count != -1)
1394 addUInt(DW_Subrange, dwarf::DW_AT_count, None, Count);
1397 DIE *DwarfUnit::getIndexTyDie() {
1400 // Construct an integer type to use for indexes.
1401 IndexTyDie = &createAndAddDIE(dwarf::DW_TAG_base_type, getUnitDie());
1402 StringRef Name = "__ARRAY_SIZE_TYPE__";
1403 addString(*IndexTyDie, dwarf::DW_AT_name, Name);
1404 addUInt(*IndexTyDie, dwarf::DW_AT_byte_size, None, sizeof(int64_t));
1405 addUInt(*IndexTyDie, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1406 dwarf::DW_ATE_unsigned);
1407 DD->addAccelType(Name, *IndexTyDie, /*Flags*/ 0);
1411 /// Returns true if the vector's size differs from the sum of sizes of elements
1412 /// the user specified. This can occur if the vector has been rounded up to
1413 /// fit memory alignment constraints.
1414 static bool hasVectorBeenPadded(const DICompositeType *CTy) {
1415 assert(CTy && CTy->isVector() && "Composite type is not a vector");
1416 const uint64_t ActualSize = CTy->getSizeInBits();
1418 // Obtain the size of each element in the vector.
1419 DIType *BaseTy = CTy->getBaseType().resolve();
1420 assert(BaseTy && "Unknown vector element type.");
1421 const uint64_t ElementSize = BaseTy->getSizeInBits();
1423 // Locate the number of elements in the vector.
1424 const DINodeArray Elements = CTy->getElements();
1425 assert(Elements.size() == 1 &&
1426 Elements[0]->getTag() == dwarf::DW_TAG_subrange_type &&
1427 "Invalid vector element array, expected one element of type subrange");
1428 const auto Subrange = cast<DISubrange>(Elements[0]);
1429 const auto CI = Subrange->getCount().get<ConstantInt *>();
1430 const int32_t NumVecElements = CI->getSExtValue();
1432 // Ensure we found the element count and that the actual size is wide
1433 // enough to contain the requested size.
1434 assert(ActualSize >= (NumVecElements * ElementSize) && "Invalid vector size");
1435 return ActualSize != (NumVecElements * ElementSize);
1438 void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
1439 if (CTy->isVector()) {
1440 addFlag(Buffer, dwarf::DW_AT_GNU_vector);
1441 if (hasVectorBeenPadded(CTy))
1442 addUInt(Buffer, dwarf::DW_AT_byte_size, None,
1443 CTy->getSizeInBits() / CHAR_BIT);
1446 // Emit the element type.
1447 addType(Buffer, resolve(CTy->getBaseType()));
1449 // Get an anonymous type for index type.
1450 // FIXME: This type should be passed down from the front end
1451 // as different languages may have different sizes for indexes.
1452 DIE *IdxTy = getIndexTyDie();
1454 // Add subranges to array type.
1455 DINodeArray Elements = CTy->getElements();
1456 for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
1457 // FIXME: Should this really be such a loose cast?
1458 if (auto *Element = dyn_cast_or_null<DINode>(Elements[i]))
1459 if (Element->getTag() == dwarf::DW_TAG_subrange_type)
1460 constructSubrangeDIE(Buffer, cast<DISubrange>(Element), IdxTy);
1464 void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
1465 const DIType *DTy = resolve(CTy->getBaseType());
1466 bool IsUnsigned = DTy && isUnsignedDIType(DD, DTy);
1468 if (DD->getDwarfVersion() >= 3)
1469 addType(Buffer, DTy);
1470 if (DD->getDwarfVersion() >= 4 && (CTy->getFlags() & DINode::FlagFixedEnum))
1471 addFlag(Buffer, dwarf::DW_AT_enum_class);
1474 DINodeArray Elements = CTy->getElements();
1476 // Add enumerators to enumeration type.
1477 for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
1478 auto *Enum = dyn_cast_or_null<DIEnumerator>(Elements[i]);
1480 DIE &Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
1481 StringRef Name = Enum->getName();
1482 addString(Enumerator, dwarf::DW_AT_name, Name);
1483 auto Value = static_cast<uint64_t>(Enum->getValue());
1484 addConstantValue(Enumerator, IsUnsigned, Value);
1489 void DwarfUnit::constructContainingTypeDIEs() {
1490 for (auto CI = ContainingTypeMap.begin(), CE = ContainingTypeMap.end();
1492 DIE &SPDie = *CI->first;
1493 const DINode *D = CI->second;
1496 DIE *NDie = getDIE(D);
1499 addDIEEntry(SPDie, dwarf::DW_AT_containing_type, *NDie);
1503 DIE &DwarfUnit::constructMemberDIE(DIE &Buffer, const DIDerivedType *DT) {
1504 DIE &MemberDie = createAndAddDIE(DT->getTag(), Buffer);
1505 StringRef Name = DT->getName();
1507 addString(MemberDie, dwarf::DW_AT_name, Name);
1509 if (DIType *Resolved = resolve(DT->getBaseType()))
1510 addType(MemberDie, Resolved);
1512 addSourceLine(MemberDie, DT);
1514 if (DT->getTag() == dwarf::DW_TAG_inheritance && DT->isVirtual()) {
1516 // For C++, virtual base classes are not at fixed offset. Use following
1517 // expression to extract appropriate offset from vtable.
1518 // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1520 DIELoc *VBaseLocationDie = new (DIEValueAllocator) DIELoc;
1521 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1522 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1523 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1524 addUInt(*VBaseLocationDie, dwarf::DW_FORM_udata, DT->getOffsetInBits());
1525 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1526 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1527 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1529 addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie);
1531 uint64_t Size = DT->getSizeInBits();
1532 uint64_t FieldSize = DD->getBaseTypeSize(DT);
1533 uint32_t AlignInBytes = DT->getAlignInBytes();
1534 uint64_t OffsetInBytes;
1536 bool IsBitfield = FieldSize && Size != FieldSize;
1538 // Handle bitfield, assume bytes are 8 bits.
1539 if (DD->useDWARF2Bitfields())
1540 addUInt(MemberDie, dwarf::DW_AT_byte_size, None, FieldSize/8);
1541 addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size);
1543 uint64_t Offset = DT->getOffsetInBits();
1544 // We can't use DT->getAlignInBits() here: AlignInBits for member type
1545 // is non-zero if and only if alignment was forced (e.g. _Alignas()),
1546 // which can't be done with bitfields. Thus we use FieldSize here.
1547 uint32_t AlignInBits = FieldSize;
1548 uint32_t AlignMask = ~(AlignInBits - 1);
1549 // The bits from the start of the storage unit to the start of the field.
1550 uint64_t StartBitOffset = Offset - (Offset & AlignMask);
1551 // The byte offset of the field's aligned storage unit inside the struct.
1552 OffsetInBytes = (Offset - StartBitOffset) / 8;
1554 if (DD->useDWARF2Bitfields()) {
1555 uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1556 uint64_t FieldOffset = (HiMark - FieldSize);
1557 Offset -= FieldOffset;
1559 // Maybe we need to work from the other end.
1560 if (Asm->getDataLayout().isLittleEndian())
1561 Offset = FieldSize - (Offset + Size);
1563 addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset);
1564 OffsetInBytes = FieldOffset >> 3;
1566 addUInt(MemberDie, dwarf::DW_AT_data_bit_offset, None, Offset);
1569 // This is not a bitfield.
1570 OffsetInBytes = DT->getOffsetInBits() / 8;
1572 addUInt(MemberDie, dwarf::DW_AT_alignment, dwarf::DW_FORM_udata,
1576 if (DD->getDwarfVersion() <= 2) {
1577 DIELoc *MemLocationDie = new (DIEValueAllocator) DIELoc;
1578 addUInt(*MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1579 addUInt(*MemLocationDie, dwarf::DW_FORM_udata, OffsetInBytes);
1580 addBlock(MemberDie, dwarf::DW_AT_data_member_location, MemLocationDie);
1581 } else if (!IsBitfield || DD->useDWARF2Bitfields())
1582 addUInt(MemberDie, dwarf::DW_AT_data_member_location, None,
1586 if (DT->isProtected())
1587 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1588 dwarf::DW_ACCESS_protected);
1589 else if (DT->isPrivate())
1590 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1591 dwarf::DW_ACCESS_private);
1592 // Otherwise C++ member and base classes are considered public.
1593 else if (DT->isPublic())
1594 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1595 dwarf::DW_ACCESS_public);
1596 if (DT->isVirtual())
1597 addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1598 dwarf::DW_VIRTUALITY_virtual);
1600 // Objective-C properties.
1601 if (DINode *PNode = DT->getObjCProperty())
1602 if (DIE *PDie = getDIE(PNode))
1603 MemberDie.addValue(DIEValueAllocator, dwarf::DW_AT_APPLE_property,
1604 dwarf::DW_FORM_ref4, DIEEntry(*PDie));
1606 if (DT->isArtificial())
1607 addFlag(MemberDie, dwarf::DW_AT_artificial);
1612 DIE *DwarfUnit::getOrCreateStaticMemberDIE(const DIDerivedType *DT) {
1616 // Construct the context before querying for the existence of the DIE in case
1617 // such construction creates the DIE.
1618 DIE *ContextDIE = getOrCreateContextDIE(resolve(DT->getScope()));
1619 assert(dwarf::isType(ContextDIE->getTag()) &&
1620 "Static member should belong to a type.");
1622 if (DIE *StaticMemberDIE = getDIE(DT))
1623 return StaticMemberDIE;
1625 DIE &StaticMemberDIE = createAndAddDIE(DT->getTag(), *ContextDIE, DT);
1627 const DIType *Ty = resolve(DT->getBaseType());
1629 addString(StaticMemberDIE, dwarf::DW_AT_name, DT->getName());
1630 addType(StaticMemberDIE, Ty);
1631 addSourceLine(StaticMemberDIE, DT);
1632 addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1633 addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1635 // FIXME: We could omit private if the parent is a class_type, and
1636 // public if the parent is something else.
1637 if (DT->isProtected())
1638 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1639 dwarf::DW_ACCESS_protected);
1640 else if (DT->isPrivate())
1641 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1642 dwarf::DW_ACCESS_private);
1643 else if (DT->isPublic())
1644 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1645 dwarf::DW_ACCESS_public);
1647 if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT->getConstant()))
1648 addConstantValue(StaticMemberDIE, CI, Ty);
1649 if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT->getConstant()))
1650 addConstantFPValue(StaticMemberDIE, CFP);
1652 if (uint32_t AlignInBytes = DT->getAlignInBytes())
1653 addUInt(StaticMemberDIE, dwarf::DW_AT_alignment, dwarf::DW_FORM_udata,
1656 return &StaticMemberDIE;
1659 void DwarfUnit::emitCommonHeader(bool UseOffsets, dwarf::UnitType UT) {
1660 // Emit size of content not including length itself
1661 Asm->OutStreamer->AddComment("Length of Unit");
1662 Asm->emitInt32(getHeaderSize() + getUnitDie().getSize());
1664 Asm->OutStreamer->AddComment("DWARF version number");
1665 unsigned Version = DD->getDwarfVersion();
1666 Asm->emitInt16(Version);
1668 // DWARF v5 reorders the address size and adds a unit type.
1670 Asm->OutStreamer->AddComment("DWARF Unit Type");
1672 Asm->OutStreamer->AddComment("Address Size (in bytes)");
1673 Asm->emitInt8(Asm->MAI->getCodePointerSize());
1676 // We share one abbreviations table across all units so it's always at the
1677 // start of the section. Use a relocatable offset where needed to ensure
1678 // linking doesn't invalidate that offset.
1679 Asm->OutStreamer->AddComment("Offset Into Abbrev. Section");
1680 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1684 Asm->emitDwarfSymbolReference(
1685 TLOF.getDwarfAbbrevSection()->getBeginSymbol(), false);
1688 Asm->OutStreamer->AddComment("Address Size (in bytes)");
1689 Asm->emitInt8(Asm->MAI->getCodePointerSize());
1693 void DwarfTypeUnit::emitHeader(bool UseOffsets) {
1694 DwarfUnit::emitCommonHeader(UseOffsets,
1695 DD->useSplitDwarf() ? dwarf::DW_UT_split_type
1696 : dwarf::DW_UT_type);
1697 Asm->OutStreamer->AddComment("Type Signature");
1698 Asm->OutStreamer->EmitIntValue(TypeSignature, sizeof(TypeSignature));
1699 Asm->OutStreamer->AddComment("Type DIE Offset");
1700 // In a skeleton type unit there is no type DIE so emit a zero offset.
1701 Asm->OutStreamer->EmitIntValue(Ty ? Ty->getOffset() : 0,
1702 sizeof(Ty->getOffset()));
1706 DwarfUnit::addSectionDelta(DIE &Die, dwarf::Attribute Attribute,
1707 const MCSymbol *Hi, const MCSymbol *Lo) {
1708 return Die.addValue(DIEValueAllocator, Attribute,
1709 DD->getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset
1710 : dwarf::DW_FORM_data4,
1711 new (DIEValueAllocator) DIEDelta(Hi, Lo));
1715 DwarfUnit::addSectionLabel(DIE &Die, dwarf::Attribute Attribute,
1716 const MCSymbol *Label, const MCSymbol *Sec) {
1717 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
1718 return addLabel(Die, Attribute,
1719 DD->getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset
1720 : dwarf::DW_FORM_data4,
1722 return addSectionDelta(Die, Attribute, Label, Sec);
1725 bool DwarfTypeUnit::isDwoUnit() const {
1726 // Since there are no skeleton type units, all type units are dwo type units
1727 // when split DWARF is being used.
1728 return DD->useSplitDwarf();
1731 void DwarfTypeUnit::addGlobalName(StringRef Name, const DIE &Die,
1732 const DIScope *Context) {
1733 getCU().addGlobalNameForTypeUnit(Name, Context);
1736 void DwarfTypeUnit::addGlobalType(const DIType *Ty, const DIE &Die,
1737 const DIScope *Context) {
1738 getCU().addGlobalTypeUnitType(Ty, Context);
1741 const MCSymbol *DwarfUnit::getCrossSectionRelativeBaseAddress() const {
1742 if (!Asm->MAI->doesDwarfUseRelocationsAcrossSections())
1746 return getSection()->getBeginSymbol();
1749 void DwarfUnit::addStringOffsetsStart() {
1750 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1751 addSectionLabel(getUnitDie(), dwarf::DW_AT_str_offsets_base,
1752 DU->getStringOffsetsStartSym(),
1753 TLOF.getDwarfStrOffSection()->getBeginSymbol());
1756 void DwarfUnit::addRnglistsBase() {
1757 assert(DD->getDwarfVersion() >= 5 &&
1758 "DW_AT_rnglists_base requires DWARF version 5 or later");
1759 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1760 addSectionLabel(getUnitDie(), dwarf::DW_AT_rnglists_base,
1761 DU->getRnglistsTableBaseSym(),
1762 TLOF.getDwarfRnglistsSection()->getBeginSymbol());