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