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