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