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