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