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 "DwarfAccelTable.h"
16 #include "DwarfCompileUnit.h"
17 #include "DwarfDebug.h"
18 #include "DwarfExpression.h"
19 #include "llvm/ADT/APFloat.h"
20 #include "llvm/CodeGen/MachineFunction.h"
21 #include "llvm/IR/Constants.h"
22 #include "llvm/IR/DIBuilder.h"
23 #include "llvm/IR/DataLayout.h"
24 #include "llvm/IR/GlobalVariable.h"
25 #include "llvm/IR/Instructions.h"
26 #include "llvm/IR/Mangler.h"
27 #include "llvm/MC/MCAsmInfo.h"
28 #include "llvm/MC/MCContext.h"
29 #include "llvm/MC/MCSection.h"
30 #include "llvm/MC/MCStreamer.h"
31 #include "llvm/Support/CommandLine.h"
32 #include "llvm/Target/TargetFrameLowering.h"
33 #include "llvm/Target/TargetLoweringObjectFile.h"
34 #include "llvm/Target/TargetMachine.h"
35 #include "llvm/Target/TargetRegisterInfo.h"
36 #include "llvm/Target/TargetSubtargetInfo.h"
40 #define DEBUG_TYPE "dwarfdebug"
43 GenerateDwarfTypeUnits("generate-type-units", cl::Hidden,
44 cl::desc("Generate DWARF4 type units."),
47 DIEDwarfExpression::DIEDwarfExpression(const AsmPrinter &AP, DwarfUnit &DU,
49 : DwarfExpression(*AP.MF->getSubtarget().getRegisterInfo(),
50 AP.getDwarfDebug()->getDwarfVersion()),
51 AP(AP), DU(DU), DIE(DIE) {}
53 void DIEDwarfExpression::EmitOp(uint8_t Op, const char* Comment) {
54 DU.addUInt(DIE, dwarf::DW_FORM_data1, Op);
56 void DIEDwarfExpression::EmitSigned(int64_t Value) {
57 DU.addSInt(DIE, dwarf::DW_FORM_sdata, Value);
59 void DIEDwarfExpression::EmitUnsigned(uint64_t Value) {
60 DU.addUInt(DIE, dwarf::DW_FORM_udata, Value);
62 bool DIEDwarfExpression::isFrameRegister(unsigned MachineReg) {
63 return MachineReg == TRI.getFrameRegister(*AP.MF);
66 DwarfUnit::DwarfUnit(unsigned UID, dwarf::Tag UnitTag,
67 const DICompileUnit *Node, AsmPrinter *A, DwarfDebug *DW,
69 : UniqueID(UID), CUNode(Node),
70 UnitDie(*DIE::get(DIEValueAllocator, UnitTag)), DebugInfoOffset(0),
71 Asm(A), DD(DW), DU(DWU), IndexTyDie(nullptr), Section(nullptr) {
72 assert(UnitTag == dwarf::DW_TAG_compile_unit ||
73 UnitTag == dwarf::DW_TAG_type_unit);
76 DwarfTypeUnit::DwarfTypeUnit(unsigned UID, DwarfCompileUnit &CU, AsmPrinter *A,
77 DwarfDebug *DW, DwarfFile *DWU,
78 MCDwarfDwoLineTable *SplitLineTable)
79 : DwarfUnit(UID, dwarf::DW_TAG_type_unit, CU.getCUNode(), A, DW, DWU),
80 CU(CU), SplitLineTable(SplitLineTable) {
82 addSectionOffset(UnitDie, dwarf::DW_AT_stmt_list, 0);
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 case dwarf::DW_LANG_C89:
98 case dwarf::DW_LANG_C99:
99 case dwarf::DW_LANG_C:
100 case dwarf::DW_LANG_C_plus_plus:
101 case dwarf::DW_LANG_ObjC:
102 case dwarf::DW_LANG_ObjC_plus_plus:
105 case dwarf::DW_LANG_Fortran77:
106 case dwarf::DW_LANG_Fortran90:
107 case dwarf::DW_LANG_Fortran95:
110 // The languages below have valid values only if the DWARF version >= 4.
111 case dwarf::DW_LANG_Java:
112 case dwarf::DW_LANG_Python:
113 case dwarf::DW_LANG_UPC:
114 case dwarf::DW_LANG_D:
115 if (dwarf::DWARF_VERSION >= 4)
119 case dwarf::DW_LANG_Ada83:
120 case dwarf::DW_LANG_Ada95:
121 case dwarf::DW_LANG_Cobol74:
122 case dwarf::DW_LANG_Cobol85:
123 case dwarf::DW_LANG_Modula2:
124 case dwarf::DW_LANG_Pascal83:
125 case dwarf::DW_LANG_PLI:
126 if (dwarf::DWARF_VERSION >= 4)
130 // The languages below have valid values only if the DWARF version >= 5.
131 case dwarf::DW_LANG_OpenCL:
132 case dwarf::DW_LANG_Go:
133 case dwarf::DW_LANG_Haskell:
134 case dwarf::DW_LANG_C_plus_plus_03:
135 case dwarf::DW_LANG_C_plus_plus_11:
136 case dwarf::DW_LANG_OCaml:
137 case dwarf::DW_LANG_Rust:
138 case dwarf::DW_LANG_C11:
139 case dwarf::DW_LANG_Swift:
140 case dwarf::DW_LANG_Dylan:
141 case dwarf::DW_LANG_C_plus_plus_14:
142 if (dwarf::DWARF_VERSION >= 5)
146 case dwarf::DW_LANG_Modula3:
147 case dwarf::DW_LANG_Julia:
148 case dwarf::DW_LANG_Fortran03:
149 case dwarf::DW_LANG_Fortran08:
150 if (dwarf::DWARF_VERSION >= 5)
158 /// Check whether the DIE for this MDNode can be shared across CUs.
159 static bool isShareableAcrossCUs(const DINode *D) {
160 // When the MDNode can be part of the type system, the DIE can be shared
162 // Combining type units and cross-CU DIE sharing is lower value (since
163 // cross-CU DIE sharing is used in LTO and removes type redundancy at that
164 // level already) but may be implementable for some value in projects
165 // building multiple independent libraries with LTO and then linking those
167 return (isa<DIType>(D) ||
168 (isa<DISubprogram>(D) && !cast<DISubprogram>(D)->isDefinition())) &&
169 !GenerateDwarfTypeUnits;
172 DIE *DwarfUnit::getDIE(const DINode *D) const {
173 if (isShareableAcrossCUs(D))
174 return DU->getDIE(D);
175 return MDNodeToDieMap.lookup(D);
178 void DwarfUnit::insertDIE(const DINode *Desc, DIE *D) {
179 if (isShareableAcrossCUs(Desc)) {
180 DU->insertDIE(Desc, D);
183 MDNodeToDieMap.insert(std::make_pair(Desc, D));
186 void DwarfUnit::addFlag(DIE &Die, dwarf::Attribute Attribute) {
187 if (DD->getDwarfVersion() >= 4)
188 Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_flag_present,
191 Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_flag,
195 void DwarfUnit::addUInt(DIE &Die, dwarf::Attribute Attribute,
196 Optional<dwarf::Form> Form, uint64_t Integer) {
198 Form = DIEInteger::BestForm(false, Integer);
199 Die.addValue(DIEValueAllocator, Attribute, *Form, DIEInteger(Integer));
202 void DwarfUnit::addUInt(DIE &Block, dwarf::Form Form, uint64_t Integer) {
203 addUInt(Block, (dwarf::Attribute)0, Form, Integer);
206 void DwarfUnit::addSInt(DIE &Die, dwarf::Attribute Attribute,
207 Optional<dwarf::Form> Form, int64_t Integer) {
209 Form = DIEInteger::BestForm(true, Integer);
210 Die.addValue(DIEValueAllocator, Attribute, *Form, DIEInteger(Integer));
213 void DwarfUnit::addSInt(DIELoc &Die, Optional<dwarf::Form> Form,
215 addSInt(Die, (dwarf::Attribute)0, Form, Integer);
218 void DwarfUnit::addString(DIE &Die, dwarf::Attribute Attribute,
220 Die.addValue(DIEValueAllocator, Attribute,
221 isDwoUnit() ? dwarf::DW_FORM_GNU_str_index : dwarf::DW_FORM_strp,
222 DIEString(DU->getStringPool().getEntry(*Asm, String)));
225 DIE::value_iterator DwarfUnit::addLabel(DIE &Die, dwarf::Attribute Attribute,
227 const MCSymbol *Label) {
228 return Die.addValue(DIEValueAllocator, Attribute, Form, DIELabel(Label));
231 void DwarfUnit::addLabel(DIELoc &Die, dwarf::Form Form, const MCSymbol *Label) {
232 addLabel(Die, (dwarf::Attribute)0, Form, Label);
235 void DwarfUnit::addSectionOffset(DIE &Die, dwarf::Attribute Attribute,
237 if (DD->getDwarfVersion() >= 4)
238 addUInt(Die, Attribute, dwarf::DW_FORM_sec_offset, Integer);
240 addUInt(Die, Attribute, dwarf::DW_FORM_data4, Integer);
243 unsigned DwarfTypeUnit::getOrCreateSourceID(StringRef FileName, StringRef DirName) {
244 return SplitLineTable ? SplitLineTable->getFile(DirName, FileName)
245 : getCU().getOrCreateSourceID(FileName, DirName);
248 void DwarfUnit::addOpAddress(DIELoc &Die, const MCSymbol *Sym) {
249 if (!DD->useSplitDwarf()) {
250 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
251 addLabel(Die, dwarf::DW_FORM_udata, Sym);
253 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
254 addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
255 DD->getAddressPool().getIndex(Sym));
259 void DwarfUnit::addLabelDelta(DIE &Die, dwarf::Attribute Attribute,
260 const MCSymbol *Hi, const MCSymbol *Lo) {
261 Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_data4,
262 new (DIEValueAllocator) DIEDelta(Hi, Lo));
265 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute, DIE &Entry) {
266 addDIEEntry(Die, Attribute, DIEEntry(Entry));
269 void DwarfUnit::addDIETypeSignature(DIE &Die, const DwarfTypeUnit &Type) {
270 // Flag the type unit reference as a declaration so that if it contains
271 // members (implicit special members, static data member definitions, member
272 // declarations for definitions in this CU, etc) consumers don't get confused
273 // and think this is a full definition.
274 addFlag(Die, dwarf::DW_AT_declaration);
276 Die.addValue(DIEValueAllocator, dwarf::DW_AT_signature,
277 dwarf::DW_FORM_ref_sig8, DIETypeSignature(Type));
280 void DwarfUnit::addDIETypeSignature(DIE &Die, dwarf::Attribute Attribute,
281 StringRef Identifier) {
282 uint64_t Signature = DD->makeTypeSignature(Identifier);
283 Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_ref_sig8,
284 DIEInteger(Signature));
287 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute,
289 const DIE *DieCU = Die.getUnitOrNull();
290 const DIE *EntryCU = Entry.getEntry().getUnitOrNull();
292 // We assume that Die belongs to this CU, if it is not linked to any CU yet.
293 DieCU = &getUnitDie();
295 EntryCU = &getUnitDie();
296 Die.addValue(DIEValueAllocator, Attribute,
297 EntryCU == DieCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
301 DIE &DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, const DINode *N) {
302 DIE &Die = Parent.addChild(DIE::get(DIEValueAllocator, (dwarf::Tag)Tag));
308 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute, DIELoc *Loc) {
309 Loc->ComputeSize(Asm);
310 DIELocs.push_back(Loc); // Memoize so we can call the destructor later on.
311 Die.addValue(DIEValueAllocator, Attribute,
312 Loc->BestForm(DD->getDwarfVersion()), Loc);
315 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute,
317 Block->ComputeSize(Asm);
318 DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
319 Die.addValue(DIEValueAllocator, Attribute, Block->BestForm(), Block);
322 void DwarfUnit::addSourceLine(DIE &Die, unsigned Line, StringRef File,
323 StringRef Directory) {
327 unsigned FileID = getOrCreateSourceID(File, Directory);
328 assert(FileID && "Invalid file id");
329 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
330 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
333 void DwarfUnit::addSourceLine(DIE &Die, const DILocalVariable *V) {
336 addSourceLine(Die, V->getLine(), V->getScope()->getFilename(),
337 V->getScope()->getDirectory());
340 void DwarfUnit::addSourceLine(DIE &Die, const DIGlobalVariable *G) {
343 addSourceLine(Die, G->getLine(), G->getFilename(), G->getDirectory());
346 void DwarfUnit::addSourceLine(DIE &Die, const DISubprogram *SP) {
349 addSourceLine(Die, SP->getLine(), SP->getFilename(), SP->getDirectory());
352 void DwarfUnit::addSourceLine(DIE &Die, const DIType *Ty) {
355 addSourceLine(Die, Ty->getLine(), Ty->getFilename(), Ty->getDirectory());
358 void DwarfUnit::addSourceLine(DIE &Die, const DIObjCProperty *Ty) {
361 addSourceLine(Die, Ty->getLine(), Ty->getFilename(), Ty->getDirectory());
364 void DwarfUnit::addSourceLine(DIE &Die, const DINamespace *NS) {
365 addSourceLine(Die, NS->getLine(), NS->getFilename(), NS->getDirectory());
368 bool DwarfUnit::addRegisterOpPiece(DIELoc &TheDie, unsigned Reg,
369 unsigned SizeInBits, unsigned OffsetInBits) {
370 DIEDwarfExpression Expr(*Asm, *this, TheDie);
371 Expr.AddMachineRegPiece(Reg, SizeInBits, OffsetInBits);
375 bool DwarfUnit::addRegisterOffset(DIELoc &TheDie, unsigned Reg,
377 DIEDwarfExpression Expr(*Asm, *this, TheDie);
378 return Expr.AddMachineRegIndirect(Reg, Offset);
381 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
382 VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
383 gives the variable VarName either the struct, or a pointer to the struct, as
384 its type. This is necessary for various behind-the-scenes things the
385 compiler needs to do with by-reference variables in Blocks.
387 However, as far as the original *programmer* is concerned, the variable
388 should still have type 'SomeType', as originally declared.
390 The function getBlockByrefType dives into the __Block_byref_x_VarName
391 struct to find the original type of the variable, which is then assigned to
392 the variable's Debug Information Entry as its real type. So far, so good.
393 However now the debugger will expect the variable VarName to have the type
394 SomeType. So we need the location attribute for the variable to be an
395 expression that explains to the debugger how to navigate through the
396 pointers and struct to find the actual variable of type SomeType.
398 The following function does just that. We start by getting
399 the "normal" location for the variable. This will be the location
400 of either the struct __Block_byref_x_VarName or the pointer to the
401 struct __Block_byref_x_VarName.
403 The struct will look something like:
405 struct __Block_byref_x_VarName {
407 struct __Block_byref_x_VarName *forwarding;
408 ... <various other fields>
410 ... <maybe more fields>
413 If we are given the struct directly (as our starting point) we
414 need to tell the debugger to:
416 1). Add the offset of the forwarding field.
418 2). Follow that pointer to get the real __Block_byref_x_VarName
419 struct to use (the real one may have been copied onto the heap).
421 3). Add the offset for the field VarName, to find the actual variable.
423 If we started with a pointer to the struct, then we need to
424 dereference that pointer first, before the other steps.
425 Translating this into DWARF ops, we will need to append the following
426 to the current location description for the variable:
428 DW_OP_deref -- optional, if we start with a pointer
429 DW_OP_plus_uconst <forward_fld_offset>
431 DW_OP_plus_uconst <varName_fld_offset>
433 That is what this function does. */
435 void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
436 dwarf::Attribute Attribute,
437 const MachineLocation &Location) {
438 const DIType *Ty = DV.getType();
439 const DIType *TmpTy = Ty;
440 uint16_t Tag = Ty->getTag();
441 bool isPointer = false;
443 StringRef varName = DV.getName();
445 if (Tag == dwarf::DW_TAG_pointer_type) {
446 auto *DTy = cast<DIDerivedType>(Ty);
447 TmpTy = resolve(DTy->getBaseType());
451 // Find the __forwarding field and the variable field in the __Block_byref
453 DINodeArray Fields = cast<DICompositeType>(TmpTy)->getElements();
454 const DIDerivedType *varField = nullptr;
455 const DIDerivedType *forwardingField = nullptr;
457 for (unsigned i = 0, N = Fields.size(); i < N; ++i) {
458 auto *DT = cast<DIDerivedType>(Fields[i]);
459 StringRef fieldName = DT->getName();
460 if (fieldName == "__forwarding")
461 forwardingField = DT;
462 else if (fieldName == varName)
466 // Get the offsets for the forwarding field and the variable field.
467 unsigned forwardingFieldOffset = forwardingField->getOffsetInBits() >> 3;
468 unsigned varFieldOffset = varField->getOffsetInBits() >> 2;
470 // Decode the original location, and use that as the start of the byref
471 // variable's location.
472 DIELoc *Loc = new (DIEValueAllocator) DIELoc;
475 if (Location.isReg())
476 validReg = addRegisterOpPiece(*Loc, Location.getReg());
478 validReg = addRegisterOffset(*Loc, Location.getReg(), Location.getOffset());
483 // If we started with a pointer to the __Block_byref... struct, then
484 // the first thing we need to do is dereference the pointer (DW_OP_deref).
486 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
488 // Next add the offset for the '__forwarding' field:
489 // DW_OP_plus_uconst ForwardingFieldOffset. Note there's no point in
490 // adding the offset if it's 0.
491 if (forwardingFieldOffset > 0) {
492 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
493 addUInt(*Loc, dwarf::DW_FORM_udata, forwardingFieldOffset);
496 // Now dereference the __forwarding field to get to the real __Block_byref
497 // struct: DW_OP_deref.
498 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
500 // Now that we've got the real __Block_byref... struct, add the offset
501 // for the variable's field to get to the location of the actual variable:
502 // DW_OP_plus_uconst varFieldOffset. Again, don't add if it's 0.
503 if (varFieldOffset > 0) {
504 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
505 addUInt(*Loc, dwarf::DW_FORM_udata, varFieldOffset);
508 // Now attach the location information to the DIE.
509 addBlock(Die, Attribute, Loc);
512 /// Return true if type encoding is unsigned.
513 static bool isUnsignedDIType(DwarfDebug *DD, const DIType *Ty) {
514 if (auto *CTy = dyn_cast<DICompositeType>(Ty)) {
515 // FIXME: Enums without a fixed underlying type have unknown signedness
516 // here, leading to incorrectly emitted constants.
517 if (CTy->getTag() == dwarf::DW_TAG_enumeration_type)
520 // (Pieces of) aggregate types that get hacked apart by SROA may be
521 // represented by a constant. Encode them as unsigned bytes.
525 if (auto *DTy = dyn_cast<DIDerivedType>(Ty)) {
526 dwarf::Tag T = (dwarf::Tag)Ty->getTag();
527 // Encode pointer constants as unsigned bytes. This is used at least for
528 // null pointer constant emission.
529 // FIXME: reference and rvalue_reference /probably/ shouldn't be allowed
530 // here, but accept them for now due to a bug in SROA producing bogus
532 if (T == dwarf::DW_TAG_pointer_type ||
533 T == dwarf::DW_TAG_ptr_to_member_type ||
534 T == dwarf::DW_TAG_reference_type ||
535 T == dwarf::DW_TAG_rvalue_reference_type)
537 assert(T == dwarf::DW_TAG_typedef || T == dwarf::DW_TAG_const_type ||
538 T == dwarf::DW_TAG_volatile_type ||
539 T == dwarf::DW_TAG_restrict_type);
540 DITypeRef Deriv = DTy->getBaseType();
541 assert(Deriv && "Expected valid base type");
542 return isUnsignedDIType(DD, DD->resolve(Deriv));
545 auto *BTy = cast<DIBasicType>(Ty);
546 unsigned Encoding = BTy->getEncoding();
547 assert((Encoding == dwarf::DW_ATE_unsigned ||
548 Encoding == dwarf::DW_ATE_unsigned_char ||
549 Encoding == dwarf::DW_ATE_signed ||
550 Encoding == dwarf::DW_ATE_signed_char ||
551 Encoding == dwarf::DW_ATE_float || Encoding == dwarf::DW_ATE_UTF ||
552 Encoding == dwarf::DW_ATE_boolean ||
553 (Ty->getTag() == dwarf::DW_TAG_unspecified_type &&
554 Ty->getName() == "decltype(nullptr)")) &&
555 "Unsupported encoding");
556 return Encoding == dwarf::DW_ATE_unsigned ||
557 Encoding == dwarf::DW_ATE_unsigned_char ||
558 Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean ||
559 Ty->getTag() == dwarf::DW_TAG_unspecified_type;
562 /// If this type is derived from a base type then return base type size.
563 static uint64_t getBaseTypeSize(DwarfDebug *DD, const DIDerivedType *Ty) {
564 unsigned Tag = Ty->getTag();
566 if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef &&
567 Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type &&
568 Tag != dwarf::DW_TAG_restrict_type)
569 return Ty->getSizeInBits();
571 auto *BaseType = DD->resolve(Ty->getBaseType());
573 assert(BaseType && "Unexpected invalid base type");
575 // If this is a derived type, go ahead and get the base type, unless it's a
576 // reference then it's just the size of the field. Pointer types have no need
577 // of this since they're a different type of qualification on the type.
578 if (BaseType->getTag() == dwarf::DW_TAG_reference_type ||
579 BaseType->getTag() == dwarf::DW_TAG_rvalue_reference_type)
580 return Ty->getSizeInBits();
582 if (auto *DT = dyn_cast<DIDerivedType>(BaseType))
583 return getBaseTypeSize(DD, DT);
585 return BaseType->getSizeInBits();
588 void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) {
589 assert(MO.isFPImm() && "Invalid machine operand!");
590 DIEBlock *Block = new (DIEValueAllocator) DIEBlock;
591 APFloat FPImm = MO.getFPImm()->getValueAPF();
593 // Get the raw data form of the floating point.
594 const APInt FltVal = FPImm.bitcastToAPInt();
595 const char *FltPtr = (const char *)FltVal.getRawData();
597 int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
598 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
599 int Incr = (LittleEndian ? 1 : -1);
600 int Start = (LittleEndian ? 0 : NumBytes - 1);
601 int Stop = (LittleEndian ? NumBytes : -1);
603 // Output the constant to DWARF one byte at a time.
604 for (; Start != Stop; Start += Incr)
605 addUInt(*Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]);
607 addBlock(Die, dwarf::DW_AT_const_value, Block);
610 void DwarfUnit::addConstantFPValue(DIE &Die, const ConstantFP *CFP) {
611 // Pass this down to addConstantValue as an unsigned bag of bits.
612 addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true);
615 void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI,
617 addConstantValue(Die, CI->getValue(), Ty);
620 void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO,
622 assert(MO.isImm() && "Invalid machine operand!");
624 addConstantValue(Die, isUnsignedDIType(DD, Ty), MO.getImm());
627 void DwarfUnit::addConstantValue(DIE &Die, bool Unsigned, uint64_t Val) {
628 // FIXME: This is a bit conservative/simple - it emits negative values always
629 // sign extended to 64 bits rather than minimizing the number of bytes.
630 addUInt(Die, dwarf::DW_AT_const_value,
631 Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata, Val);
634 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, const DIType *Ty) {
635 addConstantValue(Die, Val, isUnsignedDIType(DD, Ty));
638 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) {
639 unsigned CIBitWidth = Val.getBitWidth();
640 if (CIBitWidth <= 64) {
641 addConstantValue(Die, Unsigned,
642 Unsigned ? Val.getZExtValue() : Val.getSExtValue());
646 DIEBlock *Block = new (DIEValueAllocator) DIEBlock;
648 // Get the raw data form of the large APInt.
649 const uint64_t *Ptr64 = Val.getRawData();
651 int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
652 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
654 // Output the constant to DWARF one byte at a time.
655 for (int i = 0; i < NumBytes; i++) {
658 c = Ptr64[i / 8] >> (8 * (i & 7));
660 c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
661 addUInt(*Block, dwarf::DW_FORM_data1, c);
664 addBlock(Die, dwarf::DW_AT_const_value, Block);
667 void DwarfUnit::addLinkageName(DIE &Die, StringRef LinkageName) {
668 if (!LinkageName.empty())
670 DD->getDwarfVersion() >= 4 ? dwarf::DW_AT_linkage_name
671 : dwarf::DW_AT_MIPS_linkage_name,
672 GlobalValue::getRealLinkageName(LinkageName));
675 void DwarfUnit::addTemplateParams(DIE &Buffer, DINodeArray TParams) {
676 // Add template parameters.
677 for (const auto *Element : TParams) {
678 if (auto *TTP = dyn_cast<DITemplateTypeParameter>(Element))
679 constructTemplateTypeParameterDIE(Buffer, TTP);
680 else if (auto *TVP = dyn_cast<DITemplateValueParameter>(Element))
681 constructTemplateValueParameterDIE(Buffer, TVP);
685 DIE *DwarfUnit::getOrCreateContextDIE(const DIScope *Context) {
686 if (!Context || isa<DIFile>(Context))
687 return &getUnitDie();
688 if (auto *T = dyn_cast<DIType>(Context))
689 return getOrCreateTypeDIE(T);
690 if (auto *NS = dyn_cast<DINamespace>(Context))
691 return getOrCreateNameSpace(NS);
692 if (auto *SP = dyn_cast<DISubprogram>(Context))
693 return getOrCreateSubprogramDIE(SP);
694 return getDIE(Context);
697 DIE *DwarfUnit::createTypeDIE(const DICompositeType *Ty) {
698 auto *Context = resolve(Ty->getScope());
699 DIE *ContextDIE = getOrCreateContextDIE(Context);
701 if (DIE *TyDIE = getDIE(Ty))
705 DIE &TyDIE = createAndAddDIE(Ty->getTag(), *ContextDIE, Ty);
707 constructTypeDIE(TyDIE, cast<DICompositeType>(Ty));
709 if (!Ty->isExternalTypeRef())
710 updateAcceleratorTables(Context, Ty, TyDIE);
714 DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
718 auto *Ty = cast<DIType>(TyNode);
719 assert(Ty == resolve(Ty->getRef()) &&
720 "type was not uniqued, possible ODR violation.");
722 // DW_TAG_restrict_type is not supported in DWARF2
723 if (Ty->getTag() == dwarf::DW_TAG_restrict_type && DD->getDwarfVersion() <= 2)
724 return getOrCreateTypeDIE(resolve(cast<DIDerivedType>(Ty)->getBaseType()));
726 // Construct the context before querying for the existence of the DIE in case
727 // such construction creates the DIE.
728 auto *Context = resolve(Ty->getScope());
729 DIE *ContextDIE = getOrCreateContextDIE(Context);
732 if (DIE *TyDIE = getDIE(Ty))
736 DIE &TyDIE = createAndAddDIE(Ty->getTag(), *ContextDIE, Ty);
738 updateAcceleratorTables(Context, Ty, TyDIE);
740 if (auto *BT = dyn_cast<DIBasicType>(Ty))
741 constructTypeDIE(TyDIE, BT);
742 else if (auto *STy = dyn_cast<DISubroutineType>(Ty))
743 constructTypeDIE(TyDIE, STy);
744 else if (auto *CTy = dyn_cast<DICompositeType>(Ty)) {
745 if (GenerateDwarfTypeUnits && !Ty->isForwardDecl())
746 if (MDString *TypeId = CTy->getRawIdentifier()) {
747 DD->addDwarfTypeUnitType(getCU(), TypeId->getString(), TyDIE, CTy);
748 // Skip updating the accelerator tables since this is not the full type.
751 constructTypeDIE(TyDIE, CTy);
753 constructTypeDIE(TyDIE, cast<DIDerivedType>(Ty));
759 void DwarfUnit::updateAcceleratorTables(const DIScope *Context,
760 const DIType *Ty, const DIE &TyDIE) {
761 if (!Ty->getName().empty() && !Ty->isForwardDecl()) {
762 bool IsImplementation = 0;
763 if (auto *CT = dyn_cast<DICompositeType>(Ty)) {
764 // A runtime language of 0 actually means C/C++ and that any
765 // non-negative value is some version of Objective-C/C++.
766 IsImplementation = CT->getRuntimeLang() == 0 || CT->isObjcClassComplete();
768 unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0;
769 DD->addAccelType(Ty->getName(), TyDIE, Flags);
771 if (!Context || isa<DICompileUnit>(Context) || isa<DIFile>(Context) ||
772 isa<DINamespace>(Context))
773 addGlobalType(Ty, TyDIE, Context);
777 void DwarfUnit::addType(DIE &Entity, const DIType *Ty,
778 dwarf::Attribute Attribute) {
779 assert(Ty && "Trying to add a type that doesn't exist?");
780 addDIEEntry(Entity, Attribute, DIEEntry(*getOrCreateTypeDIE(Ty)));
783 std::string DwarfUnit::getParentContextString(const DIScope *Context) const {
787 // FIXME: Decide whether to implement this for non-C++ languages.
788 if (getLanguage() != dwarf::DW_LANG_C_plus_plus)
792 SmallVector<const DIScope *, 1> Parents;
793 while (!isa<DICompileUnit>(Context)) {
794 Parents.push_back(Context);
795 if (Context->getScope())
796 Context = resolve(Context->getScope());
798 // Structure, etc types will have a NULL context if they're at the top
803 // Reverse iterate over our list to go from the outermost construct to the
805 for (const DIScope *Ctx : make_range(Parents.rbegin(), Parents.rend())) {
806 StringRef Name = Ctx->getName();
807 if (Name.empty() && isa<DINamespace>(Ctx))
808 Name = "(anonymous namespace)";
817 void DwarfUnit::constructTypeDIE(DIE &Buffer, const DIBasicType *BTy) {
818 // Get core information.
819 StringRef Name = BTy->getName();
820 // Add name if not anonymous or intermediate type.
822 addString(Buffer, dwarf::DW_AT_name, Name);
824 // An unspecified type only has a name attribute.
825 if (BTy->getTag() == dwarf::DW_TAG_unspecified_type)
828 addUInt(Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
831 uint64_t Size = BTy->getSizeInBits() >> 3;
832 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
835 void DwarfUnit::constructTypeDIE(DIE &Buffer, const DIDerivedType *DTy) {
836 // Get core information.
837 StringRef Name = DTy->getName();
838 uint64_t Size = DTy->getSizeInBits() >> 3;
839 uint16_t Tag = Buffer.getTag();
841 // Map to main type, void will not have a type.
842 const DIType *FromTy = resolve(DTy->getBaseType());
844 addType(Buffer, FromTy);
846 // Add name if not anonymous or intermediate type.
848 addString(Buffer, dwarf::DW_AT_name, Name);
850 // Add size if non-zero (derived types might be zero-sized.)
851 if (Size && Tag != dwarf::DW_TAG_pointer_type
852 && Tag != dwarf::DW_TAG_ptr_to_member_type)
853 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
855 if (Tag == dwarf::DW_TAG_ptr_to_member_type)
857 Buffer, dwarf::DW_AT_containing_type,
858 *getOrCreateTypeDIE(resolve(cast<DIDerivedType>(DTy)->getClassType())));
859 // Add source line info if available and TyDesc is not a forward declaration.
860 if (!DTy->isForwardDecl())
861 addSourceLine(Buffer, DTy);
864 void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeRefArray Args) {
865 for (unsigned i = 1, N = Args.size(); i < N; ++i) {
866 const DIType *Ty = resolve(Args[i]);
868 assert(i == N-1 && "Unspecified parameter must be the last argument");
869 createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
871 DIE &Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
873 if (Ty->isArtificial())
874 addFlag(Arg, dwarf::DW_AT_artificial);
879 void DwarfUnit::constructTypeDIE(DIE &Buffer, const DISubroutineType *CTy) {
880 // Add return type. A void return won't have a type.
881 auto Elements = cast<DISubroutineType>(CTy)->getTypeArray();
883 if (auto RTy = resolve(Elements[0]))
884 addType(Buffer, RTy);
886 bool isPrototyped = true;
887 if (Elements.size() == 2 && !Elements[1])
888 isPrototyped = false;
890 constructSubprogramArguments(Buffer, Elements);
892 // Add prototype flag if we're dealing with a C language and the function has
894 uint16_t Language = getLanguage();
896 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
897 Language == dwarf::DW_LANG_ObjC))
898 addFlag(Buffer, dwarf::DW_AT_prototyped);
900 if (CTy->isLValueReference())
901 addFlag(Buffer, dwarf::DW_AT_reference);
903 if (CTy->isRValueReference())
904 addFlag(Buffer, dwarf::DW_AT_rvalue_reference);
907 void DwarfUnit::constructTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
908 if (CTy->isExternalTypeRef()) {
909 StringRef Identifier = CTy->getIdentifier();
910 assert(!Identifier.empty() && "external type ref without identifier");
911 addFlag(Buffer, dwarf::DW_AT_declaration);
912 return addDIETypeSignature(Buffer, dwarf::DW_AT_signature, Identifier);
915 // Add name if not anonymous or intermediate type.
916 StringRef Name = CTy->getName();
918 uint64_t Size = CTy->getSizeInBits() >> 3;
919 uint16_t Tag = Buffer.getTag();
922 case dwarf::DW_TAG_array_type:
923 constructArrayTypeDIE(Buffer, CTy);
925 case dwarf::DW_TAG_enumeration_type:
926 constructEnumTypeDIE(Buffer, CTy);
928 case dwarf::DW_TAG_structure_type:
929 case dwarf::DW_TAG_union_type:
930 case dwarf::DW_TAG_class_type: {
931 // Add elements to structure type.
932 DINodeArray Elements = CTy->getElements();
933 for (const auto *Element : Elements) {
936 if (auto *SP = dyn_cast<DISubprogram>(Element))
937 getOrCreateSubprogramDIE(SP);
938 else if (auto *DDTy = dyn_cast<DIDerivedType>(Element)) {
939 if (DDTy->getTag() == dwarf::DW_TAG_friend) {
940 DIE &ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer);
941 addType(ElemDie, resolve(DDTy->getBaseType()), dwarf::DW_AT_friend);
942 } else if (DDTy->isStaticMember()) {
943 getOrCreateStaticMemberDIE(DDTy);
945 constructMemberDIE(Buffer, DDTy);
947 } else if (auto *Property = dyn_cast<DIObjCProperty>(Element)) {
948 DIE &ElemDie = createAndAddDIE(Property->getTag(), Buffer);
949 StringRef PropertyName = Property->getName();
950 addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
951 if (Property->getType())
952 addType(ElemDie, resolve(Property->getType()));
953 addSourceLine(ElemDie, Property);
954 StringRef GetterName = Property->getGetterName();
955 if (!GetterName.empty())
956 addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
957 StringRef SetterName = Property->getSetterName();
958 if (!SetterName.empty())
959 addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
960 if (unsigned PropertyAttributes = Property->getAttributes())
961 addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
966 if (CTy->isAppleBlockExtension())
967 addFlag(Buffer, dwarf::DW_AT_APPLE_block);
969 // This is outside the DWARF spec, but GDB expects a DW_AT_containing_type
970 // inside C++ composite types to point to the base class with the vtable.
971 if (auto *ContainingType =
972 dyn_cast_or_null<DICompositeType>(resolve(CTy->getVTableHolder())))
973 addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
974 *getOrCreateTypeDIE(ContainingType));
976 if (CTy->isObjcClassComplete())
977 addFlag(Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
979 // Add template parameters to a class, structure or union types.
980 // FIXME: The support isn't in the metadata for this yet.
981 if (Tag == dwarf::DW_TAG_class_type ||
982 Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type)
983 addTemplateParams(Buffer, CTy->getTemplateParams());
991 // Add name if not anonymous or intermediate type.
993 addString(Buffer, dwarf::DW_AT_name, Name);
995 if (Tag == dwarf::DW_TAG_enumeration_type ||
996 Tag == dwarf::DW_TAG_class_type || Tag == dwarf::DW_TAG_structure_type ||
997 Tag == dwarf::DW_TAG_union_type) {
998 // Add size if non-zero (derived types might be zero-sized.)
999 // TODO: Do we care about size for enum forward declarations?
1001 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
1002 else if (!CTy->isForwardDecl())
1003 // Add zero size if it is not a forward declaration.
1004 addUInt(Buffer, dwarf::DW_AT_byte_size, None, 0);
1006 // If we're a forward decl, say so.
1007 if (CTy->isForwardDecl())
1008 addFlag(Buffer, dwarf::DW_AT_declaration);
1010 // Add source line info if available.
1011 if (!CTy->isForwardDecl())
1012 addSourceLine(Buffer, CTy);
1014 // No harm in adding the runtime language to the declaration.
1015 unsigned RLang = CTy->getRuntimeLang();
1017 addUInt(Buffer, dwarf::DW_AT_APPLE_runtime_class, dwarf::DW_FORM_data1,
1022 void DwarfUnit::constructTemplateTypeParameterDIE(
1023 DIE &Buffer, const DITemplateTypeParameter *TP) {
1025 createAndAddDIE(dwarf::DW_TAG_template_type_parameter, Buffer);
1026 // Add the type if it exists, it could be void and therefore no type.
1028 addType(ParamDIE, resolve(TP->getType()));
1029 if (!TP->getName().empty())
1030 addString(ParamDIE, dwarf::DW_AT_name, TP->getName());
1033 void DwarfUnit::constructTemplateValueParameterDIE(
1034 DIE &Buffer, const DITemplateValueParameter *VP) {
1035 DIE &ParamDIE = createAndAddDIE(VP->getTag(), Buffer);
1037 // Add the type if there is one, template template and template parameter
1038 // packs will not have a type.
1039 if (VP->getTag() == dwarf::DW_TAG_template_value_parameter)
1040 addType(ParamDIE, resolve(VP->getType()));
1041 if (!VP->getName().empty())
1042 addString(ParamDIE, dwarf::DW_AT_name, VP->getName());
1043 if (Metadata *Val = VP->getValue()) {
1044 if (ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(Val))
1045 addConstantValue(ParamDIE, CI, resolve(VP->getType()));
1046 else if (GlobalValue *GV = mdconst::dyn_extract<GlobalValue>(Val)) {
1047 // For declaration non-type template parameters (such as global values and
1049 DIELoc *Loc = new (DIEValueAllocator) DIELoc;
1050 addOpAddress(*Loc, Asm->getSymbol(GV));
1051 // Emit DW_OP_stack_value to use the address as the immediate value of the
1052 // parameter, rather than a pointer to it.
1053 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1054 addBlock(ParamDIE, dwarf::DW_AT_location, Loc);
1055 } else if (VP->getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1056 assert(isa<MDString>(Val));
1057 addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1058 cast<MDString>(Val)->getString());
1059 } else if (VP->getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1060 addTemplateParams(ParamDIE, cast<MDTuple>(Val));
1065 DIE *DwarfUnit::getOrCreateNameSpace(const DINamespace *NS) {
1066 // Construct the context before querying for the existence of the DIE in case
1067 // such construction creates the DIE.
1068 DIE *ContextDIE = getOrCreateContextDIE(NS->getScope());
1070 if (DIE *NDie = getDIE(NS))
1072 DIE &NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS);
1074 StringRef Name = NS->getName();
1076 addString(NDie, dwarf::DW_AT_name, NS->getName());
1078 Name = "(anonymous namespace)";
1079 DD->addAccelNamespace(Name, NDie);
1080 addGlobalName(Name, NDie, NS->getScope());
1081 addSourceLine(NDie, NS);
1085 DIE *DwarfUnit::getOrCreateModule(const DIModule *M) {
1086 // Construct the context before querying for the existence of the DIE in case
1087 // such construction creates the DIE.
1088 DIE *ContextDIE = getOrCreateContextDIE(M->getScope());
1090 if (DIE *MDie = getDIE(M))
1092 DIE &MDie = createAndAddDIE(dwarf::DW_TAG_module, *ContextDIE, M);
1094 if (!M->getName().empty()) {
1095 addString(MDie, dwarf::DW_AT_name, M->getName());
1096 addGlobalName(M->getName(), MDie, M->getScope());
1098 if (!M->getConfigurationMacros().empty())
1099 addString(MDie, dwarf::DW_AT_LLVM_config_macros,
1100 M->getConfigurationMacros());
1101 if (!M->getIncludePath().empty())
1102 addString(MDie, dwarf::DW_AT_LLVM_include_path, M->getIncludePath());
1103 if (!M->getISysRoot().empty())
1104 addString(MDie, dwarf::DW_AT_LLVM_isysroot, M->getISysRoot());
1109 DIE *DwarfUnit::getOrCreateSubprogramDIE(const DISubprogram *SP, bool Minimal) {
1110 // Construct the context before querying for the existence of the DIE in case
1111 // such construction creates the DIE (as is the case for member function
1114 Minimal ? &getUnitDie() : getOrCreateContextDIE(resolve(SP->getScope()));
1116 if (DIE *SPDie = getDIE(SP))
1119 if (auto *SPDecl = SP->getDeclaration()) {
1121 // Add subprogram definitions to the CU die directly.
1122 ContextDIE = &getUnitDie();
1123 // Build the decl now to ensure it precedes the definition.
1124 getOrCreateSubprogramDIE(SPDecl);
1128 // DW_TAG_inlined_subroutine may refer to this DIE.
1129 DIE &SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP);
1131 // Stop here and fill this in later, depending on whether or not this
1132 // subprogram turns out to have inlined instances or not.
1133 if (SP->isDefinition())
1136 applySubprogramAttributes(SP, SPDie);
1140 bool DwarfUnit::applySubprogramDefinitionAttributes(const DISubprogram *SP,
1142 DIE *DeclDie = nullptr;
1143 StringRef DeclLinkageName;
1144 if (auto *SPDecl = SP->getDeclaration()) {
1145 DeclDie = getDIE(SPDecl);
1146 assert(DeclDie && "This DIE should've already been constructed when the "
1147 "definition DIE was created in "
1148 "getOrCreateSubprogramDIE");
1149 DeclLinkageName = SPDecl->getLinkageName();
1152 // Add function template parameters.
1153 addTemplateParams(SPDie, SP->getTemplateParams());
1155 // Add the linkage name if we have one and it isn't in the Decl.
1156 StringRef LinkageName = SP->getLinkageName();
1157 assert(((LinkageName.empty() || DeclLinkageName.empty()) ||
1158 LinkageName == DeclLinkageName) &&
1159 "decl has a linkage name and it is different");
1160 if (DeclLinkageName.empty())
1161 addLinkageName(SPDie, LinkageName);
1166 // Refer to the function declaration where all the other attributes will be
1168 addDIEEntry(SPDie, dwarf::DW_AT_specification, *DeclDie);
1172 void DwarfUnit::applySubprogramAttributes(const DISubprogram *SP, DIE &SPDie,
1175 if (applySubprogramDefinitionAttributes(SP, SPDie))
1178 // Constructors and operators for anonymous aggregates do not have names.
1179 if (!SP->getName().empty())
1180 addString(SPDie, dwarf::DW_AT_name, SP->getName());
1182 // Skip the rest of the attributes under -gmlt to save space.
1186 addSourceLine(SPDie, SP);
1188 // Add the prototype if we have a prototype and we have a C like
1190 uint16_t Language = getLanguage();
1191 if (SP->isPrototyped() &&
1192 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1193 Language == dwarf::DW_LANG_ObjC))
1194 addFlag(SPDie, dwarf::DW_AT_prototyped);
1196 const DISubroutineType *SPTy = SP->getType();
1197 assert(SPTy->getTag() == dwarf::DW_TAG_subroutine_type &&
1198 "the type of a subprogram should be a subroutine");
1200 auto Args = SPTy->getTypeArray();
1201 // Add a return type. If this is a type like a C/C++ void type we don't add a
1204 if (auto Ty = resolve(Args[0]))
1207 unsigned VK = SP->getVirtuality();
1209 addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1210 DIELoc *Block = getDIELoc();
1211 addUInt(*Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1212 addUInt(*Block, dwarf::DW_FORM_udata, SP->getVirtualIndex());
1213 addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
1214 ContainingTypeMap.insert(
1215 std::make_pair(&SPDie, resolve(SP->getContainingType())));
1218 if (!SP->isDefinition()) {
1219 addFlag(SPDie, dwarf::DW_AT_declaration);
1221 // Add arguments. Do not add arguments for subprogram definition. They will
1222 // be handled while processing variables.
1223 constructSubprogramArguments(SPDie, Args);
1226 if (SP->isArtificial())
1227 addFlag(SPDie, dwarf::DW_AT_artificial);
1229 if (!SP->isLocalToUnit())
1230 addFlag(SPDie, dwarf::DW_AT_external);
1232 if (SP->isOptimized())
1233 addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1235 if (unsigned isa = Asm->getISAEncoding())
1236 addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1238 if (SP->isLValueReference())
1239 addFlag(SPDie, dwarf::DW_AT_reference);
1241 if (SP->isRValueReference())
1242 addFlag(SPDie, dwarf::DW_AT_rvalue_reference);
1244 if (SP->isProtected())
1245 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1246 dwarf::DW_ACCESS_protected);
1247 else if (SP->isPrivate())
1248 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1249 dwarf::DW_ACCESS_private);
1250 else if (SP->isPublic())
1251 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1252 dwarf::DW_ACCESS_public);
1254 if (SP->isExplicit())
1255 addFlag(SPDie, dwarf::DW_AT_explicit);
1258 void DwarfUnit::constructSubrangeDIE(DIE &Buffer, const DISubrange *SR,
1260 DIE &DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer);
1261 addDIEEntry(DW_Subrange, dwarf::DW_AT_type, *IndexTy);
1263 // The LowerBound value defines the lower bounds which is typically zero for
1264 // C/C++. The Count value is the number of elements. Values are 64 bit. If
1265 // Count == -1 then the array is unbounded and we do not emit
1266 // DW_AT_lower_bound and DW_AT_count attributes.
1267 int64_t LowerBound = SR->getLowerBound();
1268 int64_t DefaultLowerBound = getDefaultLowerBound();
1269 int64_t Count = SR->getCount();
1271 if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1272 addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
1275 // FIXME: An unbounded array should reference the expression that defines
1277 addUInt(DW_Subrange, dwarf::DW_AT_count, None, Count);
1280 DIE *DwarfUnit::getIndexTyDie() {
1283 // Construct an integer type to use for indexes.
1284 IndexTyDie = &createAndAddDIE(dwarf::DW_TAG_base_type, UnitDie);
1285 addString(*IndexTyDie, dwarf::DW_AT_name, "sizetype");
1286 addUInt(*IndexTyDie, dwarf::DW_AT_byte_size, None, sizeof(int64_t));
1287 addUInt(*IndexTyDie, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1288 dwarf::DW_ATE_unsigned);
1292 void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
1293 if (CTy->isVector())
1294 addFlag(Buffer, dwarf::DW_AT_GNU_vector);
1296 // Emit the element type.
1297 addType(Buffer, resolve(CTy->getBaseType()));
1299 // Get an anonymous type for index type.
1300 // FIXME: This type should be passed down from the front end
1301 // as different languages may have different sizes for indexes.
1302 DIE *IdxTy = getIndexTyDie();
1304 // Add subranges to array type.
1305 DINodeArray Elements = CTy->getElements();
1306 for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
1307 // FIXME: Should this really be such a loose cast?
1308 if (auto *Element = dyn_cast_or_null<DINode>(Elements[i]))
1309 if (Element->getTag() == dwarf::DW_TAG_subrange_type)
1310 constructSubrangeDIE(Buffer, cast<DISubrange>(Element), IdxTy);
1314 void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
1315 DINodeArray Elements = CTy->getElements();
1317 // Add enumerators to enumeration type.
1318 for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
1319 auto *Enum = dyn_cast_or_null<DIEnumerator>(Elements[i]);
1321 DIE &Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
1322 StringRef Name = Enum->getName();
1323 addString(Enumerator, dwarf::DW_AT_name, Name);
1324 int64_t Value = Enum->getValue();
1325 addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
1329 const DIType *DTy = resolve(CTy->getBaseType());
1331 addType(Buffer, DTy);
1332 addFlag(Buffer, dwarf::DW_AT_enum_class);
1336 void DwarfUnit::constructContainingTypeDIEs() {
1337 for (auto CI = ContainingTypeMap.begin(), CE = ContainingTypeMap.end();
1339 DIE &SPDie = *CI->first;
1340 const DINode *D = CI->second;
1343 DIE *NDie = getDIE(D);
1346 addDIEEntry(SPDie, dwarf::DW_AT_containing_type, *NDie);
1350 void DwarfUnit::constructMemberDIE(DIE &Buffer, const DIDerivedType *DT) {
1351 DIE &MemberDie = createAndAddDIE(DT->getTag(), Buffer);
1352 StringRef Name = DT->getName();
1354 addString(MemberDie, dwarf::DW_AT_name, Name);
1356 addType(MemberDie, resolve(DT->getBaseType()));
1358 addSourceLine(MemberDie, DT);
1360 if (DT->getTag() == dwarf::DW_TAG_inheritance && DT->isVirtual()) {
1362 // For C++, virtual base classes are not at fixed offset. Use following
1363 // expression to extract appropriate offset from vtable.
1364 // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1366 DIELoc *VBaseLocationDie = new (DIEValueAllocator) DIELoc;
1367 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1368 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1369 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1370 addUInt(*VBaseLocationDie, dwarf::DW_FORM_udata, DT->getOffsetInBits());
1371 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1372 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1373 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1375 addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie);
1377 uint64_t Size = DT->getSizeInBits();
1378 uint64_t FieldSize = getBaseTypeSize(DD, DT);
1379 uint64_t OffsetInBytes;
1381 if (FieldSize && Size != FieldSize) {
1382 // Handle bitfield, assume bytes are 8 bits.
1383 addUInt(MemberDie, dwarf::DW_AT_byte_size, None, FieldSize/8);
1384 addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size);
1386 // The DWARF 2 DW_AT_bit_offset is counting the bits between the most
1387 // significant bit of the aligned storage unit containing the bit field to
1388 // the most significan bit of the bit field.
1390 // FIXME: DWARF 4 states that DW_AT_data_bit_offset (which
1391 // counts from the beginning, regardless of endianness) should
1395 // Struct Align Align Align
1397 // +-----------+-----*-----+-----*-----+--
1398 // | ... |b1|b2|b3|b4|
1399 // +-----------+-----*-----+-----*-----+--
1400 // | | |<-- Size ->| |
1401 // |<---- Offset --->| |<--->|
1402 // | | | \_ DW_AT_bit_offset (little endian)
1404 // |<--------->| \_ StartBitOffset = DW_AT_bit_offset (big endian)
1405 // \ = DW_AT_data_bit_offset (biendian)
1407 uint64_t Offset = DT->getOffsetInBits();
1408 uint64_t Align = DT->getAlignInBits() ? DT->getAlignInBits() : FieldSize;
1409 uint64_t AlignMask = ~(Align - 1);
1410 // The bits from the start of the storage unit to the start of the field.
1411 uint64_t StartBitOffset = Offset - (Offset & AlignMask);
1412 // The endian-dependent DWARF 2 offset.
1413 uint64_t DwarfBitOffset = Asm->getDataLayout().isLittleEndian()
1414 ? OffsetToAlignment(Offset + Size, Align)
1417 // The byte offset of the field's aligned storage unit inside the struct.
1418 OffsetInBytes = (Offset - StartBitOffset) / 8;
1419 addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, DwarfBitOffset);
1421 // This is not a bitfield.
1422 OffsetInBytes = DT->getOffsetInBits() / 8;
1424 if (DD->getDwarfVersion() <= 2) {
1425 DIELoc *MemLocationDie = new (DIEValueAllocator) DIELoc;
1426 addUInt(*MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1427 addUInt(*MemLocationDie, dwarf::DW_FORM_udata, OffsetInBytes);
1428 addBlock(MemberDie, dwarf::DW_AT_data_member_location, MemLocationDie);
1430 addUInt(MemberDie, dwarf::DW_AT_data_member_location, None,
1434 if (DT->isProtected())
1435 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1436 dwarf::DW_ACCESS_protected);
1437 else if (DT->isPrivate())
1438 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1439 dwarf::DW_ACCESS_private);
1440 // Otherwise C++ member and base classes are considered public.
1441 else if (DT->isPublic())
1442 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1443 dwarf::DW_ACCESS_public);
1444 if (DT->isVirtual())
1445 addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1446 dwarf::DW_VIRTUALITY_virtual);
1448 // Objective-C properties.
1449 if (DINode *PNode = DT->getObjCProperty())
1450 if (DIE *PDie = getDIE(PNode))
1451 MemberDie.addValue(DIEValueAllocator, dwarf::DW_AT_APPLE_property,
1452 dwarf::DW_FORM_ref4, DIEEntry(*PDie));
1454 if (DT->isArtificial())
1455 addFlag(MemberDie, dwarf::DW_AT_artificial);
1458 DIE *DwarfUnit::getOrCreateStaticMemberDIE(const DIDerivedType *DT) {
1462 // Construct the context before querying for the existence of the DIE in case
1463 // such construction creates the DIE.
1464 DIE *ContextDIE = getOrCreateContextDIE(resolve(DT->getScope()));
1465 assert(dwarf::isType(ContextDIE->getTag()) &&
1466 "Static member should belong to a type.");
1468 if (DIE *StaticMemberDIE = getDIE(DT))
1469 return StaticMemberDIE;
1471 DIE &StaticMemberDIE = createAndAddDIE(DT->getTag(), *ContextDIE, DT);
1473 const DIType *Ty = resolve(DT->getBaseType());
1475 addString(StaticMemberDIE, dwarf::DW_AT_name, DT->getName());
1476 addType(StaticMemberDIE, Ty);
1477 addSourceLine(StaticMemberDIE, DT);
1478 addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1479 addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1481 // FIXME: We could omit private if the parent is a class_type, and
1482 // public if the parent is something else.
1483 if (DT->isProtected())
1484 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1485 dwarf::DW_ACCESS_protected);
1486 else if (DT->isPrivate())
1487 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1488 dwarf::DW_ACCESS_private);
1489 else if (DT->isPublic())
1490 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1491 dwarf::DW_ACCESS_public);
1493 if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT->getConstant()))
1494 addConstantValue(StaticMemberDIE, CI, Ty);
1495 if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT->getConstant()))
1496 addConstantFPValue(StaticMemberDIE, CFP);
1498 return &StaticMemberDIE;
1501 void DwarfUnit::emitHeader(bool UseOffsets) {
1502 // Emit size of content not including length itself
1503 Asm->OutStreamer->AddComment("Length of Unit");
1504 Asm->EmitInt32(getHeaderSize() + UnitDie.getSize());
1506 Asm->OutStreamer->AddComment("DWARF version number");
1507 Asm->EmitInt16(DD->getDwarfVersion());
1508 Asm->OutStreamer->AddComment("Offset Into Abbrev. Section");
1510 // We share one abbreviations table across all units so it's always at the
1511 // start of the section. Use a relocatable offset where needed to ensure
1512 // linking doesn't invalidate that offset.
1513 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1514 Asm->emitDwarfSymbolReference(TLOF.getDwarfAbbrevSection()->getBeginSymbol(),
1517 Asm->OutStreamer->AddComment("Address Size (in bytes)");
1518 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1521 void DwarfUnit::initSection(MCSection *Section) {
1522 assert(!this->Section);
1523 this->Section = Section;
1526 void DwarfTypeUnit::emitHeader(bool UseOffsets) {
1527 DwarfUnit::emitHeader(UseOffsets);
1528 Asm->OutStreamer->AddComment("Type Signature");
1529 Asm->OutStreamer->EmitIntValue(TypeSignature, sizeof(TypeSignature));
1530 Asm->OutStreamer->AddComment("Type DIE Offset");
1531 // In a skeleton type unit there is no type DIE so emit a zero offset.
1532 Asm->OutStreamer->EmitIntValue(Ty ? Ty->getOffset() : 0,
1533 sizeof(Ty->getOffset()));
1536 bool DwarfTypeUnit::isDwoUnit() const {
1537 // Since there are no skeleton type units, all type units are dwo type units
1538 // when split DWARF is being used.
1539 return DD->useSplitDwarf();