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 "DwarfDebug.h" 17 #include "llvm/ADT/APFloat.h" 18 #include "llvm/IR/Constants.h" 19 #include "llvm/IR/DIBuilder.h" 20 #include "llvm/IR/DataLayout.h" 21 #include "llvm/IR/GlobalVariable.h" 22 #include "llvm/IR/Instructions.h" 23 #include "llvm/IR/Mangler.h" 24 #include "llvm/MC/MCAsmInfo.h" 25 #include "llvm/MC/MCContext.h" 26 #include "llvm/MC/MCSection.h" 27 #include "llvm/MC/MCStreamer.h" 28 #include "llvm/Support/CommandLine.h" 29 #include "llvm/Target/TargetFrameLowering.h" 30 #include "llvm/Target/TargetLoweringObjectFile.h" 31 #include "llvm/Target/TargetMachine.h" 32 #include "llvm/Target/TargetRegisterInfo.h" 33 #include "llvm/Target/TargetSubtargetInfo.h" 34 35 using namespace llvm; 36 37 #define DEBUG_TYPE "dwarfdebug" 38 39 static cl::opt<bool> 40 GenerateDwarfTypeUnits("generate-type-units", cl::Hidden, 41 cl::desc("Generate DWARF4 type units."), 42 cl::init(false)); 43 44 /// Unit - Unit constructor. 45 DwarfUnit::DwarfUnit(unsigned UID, dwarf::Tag UnitTag, DICompileUnit Node, 46 AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU) 47 : UniqueID(UID), CUNode(Node), UnitDie(UnitTag), DebugInfoOffset(0), Asm(A), 48 DD(DW), DU(DWU), IndexTyDie(nullptr), Section(nullptr), 49 Skeleton(nullptr) { 50 assert(UnitTag == dwarf::DW_TAG_compile_unit || 51 UnitTag == dwarf::DW_TAG_type_unit); 52 DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1); 53 } 54 55 DwarfCompileUnit::DwarfCompileUnit(unsigned UID, DICompileUnit Node, 56 AsmPrinter *A, DwarfDebug *DW, 57 DwarfFile *DWU) 58 : DwarfUnit(UID, dwarf::DW_TAG_compile_unit, Node, A, DW, DWU) { 59 insertDIE(Node, &getUnitDie()); 60 } 61 62 DwarfTypeUnit::DwarfTypeUnit(unsigned UID, DwarfCompileUnit &CU, AsmPrinter *A, 63 DwarfDebug *DW, DwarfFile *DWU, 64 MCDwarfDwoLineTable *SplitLineTable) 65 : DwarfUnit(UID, dwarf::DW_TAG_type_unit, CU.getCUNode(), A, DW, DWU), 66 CU(CU), SplitLineTable(SplitLineTable) { 67 if (SplitLineTable) 68 addSectionOffset(UnitDie, dwarf::DW_AT_stmt_list, 0); 69 } 70 71 /// ~Unit - Destructor for compile unit. 72 DwarfUnit::~DwarfUnit() { 73 for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j) 74 DIEBlocks[j]->~DIEBlock(); 75 for (unsigned j = 0, M = DIELocs.size(); j < M; ++j) 76 DIELocs[j]->~DIELoc(); 77 } 78 79 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug 80 /// information entry. 81 DIEEntry *DwarfUnit::createDIEEntry(DIE &Entry) { 82 DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry); 83 return Value; 84 } 85 86 /// getDefaultLowerBound - Return the default lower bound for an array. If the 87 /// DWARF version doesn't handle the language, return -1. 88 int64_t DwarfUnit::getDefaultLowerBound() const { 89 switch (getLanguage()) { 90 default: 91 break; 92 93 case dwarf::DW_LANG_C89: 94 case dwarf::DW_LANG_C99: 95 case dwarf::DW_LANG_C: 96 case dwarf::DW_LANG_C_plus_plus: 97 case dwarf::DW_LANG_ObjC: 98 case dwarf::DW_LANG_ObjC_plus_plus: 99 return 0; 100 101 case dwarf::DW_LANG_Fortran77: 102 case dwarf::DW_LANG_Fortran90: 103 case dwarf::DW_LANG_Fortran95: 104 return 1; 105 106 // The languages below have valid values only if the DWARF version >= 4. 107 case dwarf::DW_LANG_Java: 108 case dwarf::DW_LANG_Python: 109 case dwarf::DW_LANG_UPC: 110 case dwarf::DW_LANG_D: 111 if (dwarf::DWARF_VERSION >= 4) 112 return 0; 113 break; 114 115 case dwarf::DW_LANG_Ada83: 116 case dwarf::DW_LANG_Ada95: 117 case dwarf::DW_LANG_Cobol74: 118 case dwarf::DW_LANG_Cobol85: 119 case dwarf::DW_LANG_Modula2: 120 case dwarf::DW_LANG_Pascal83: 121 case dwarf::DW_LANG_PLI: 122 if (dwarf::DWARF_VERSION >= 4) 123 return 1; 124 break; 125 } 126 127 return -1; 128 } 129 130 /// Check whether the DIE for this MDNode can be shared across CUs. 131 static bool isShareableAcrossCUs(DIDescriptor D) { 132 // When the MDNode can be part of the type system, the DIE can be shared 133 // across CUs. 134 // Combining type units and cross-CU DIE sharing is lower value (since 135 // cross-CU DIE sharing is used in LTO and removes type redundancy at that 136 // level already) but may be implementable for some value in projects 137 // building multiple independent libraries with LTO and then linking those 138 // together. 139 return (D.isType() || 140 (D.isSubprogram() && !DISubprogram(D).isDefinition())) && 141 !GenerateDwarfTypeUnits; 142 } 143 144 /// getDIE - Returns the debug information entry map slot for the 145 /// specified debug variable. We delegate the request to DwarfDebug 146 /// when the DIE for this MDNode can be shared across CUs. The mappings 147 /// will be kept in DwarfDebug for shareable DIEs. 148 DIE *DwarfUnit::getDIE(DIDescriptor D) const { 149 if (isShareableAcrossCUs(D)) 150 return DD->getDIE(D); 151 return MDNodeToDieMap.lookup(D); 152 } 153 154 /// insertDIE - Insert DIE into the map. We delegate the request to DwarfDebug 155 /// when the DIE for this MDNode can be shared across CUs. The mappings 156 /// will be kept in DwarfDebug for shareable DIEs. 157 void DwarfUnit::insertDIE(DIDescriptor Desc, DIE *D) { 158 if (isShareableAcrossCUs(Desc)) { 159 DD->insertDIE(Desc, D); 160 return; 161 } 162 MDNodeToDieMap.insert(std::make_pair(Desc, D)); 163 } 164 165 /// addFlag - Add a flag that is true. 166 void DwarfUnit::addFlag(DIE &Die, dwarf::Attribute Attribute) { 167 if (DD->getDwarfVersion() >= 4) 168 Die.addValue(Attribute, dwarf::DW_FORM_flag_present, DIEIntegerOne); 169 else 170 Die.addValue(Attribute, dwarf::DW_FORM_flag, DIEIntegerOne); 171 } 172 173 /// addUInt - Add an unsigned integer attribute data and value. 174 /// 175 void DwarfUnit::addUInt(DIE &Die, dwarf::Attribute Attribute, 176 Optional<dwarf::Form> Form, uint64_t Integer) { 177 if (!Form) 178 Form = DIEInteger::BestForm(false, Integer); 179 DIEValue *Value = Integer == 1 ? DIEIntegerOne : new (DIEValueAllocator) 180 DIEInteger(Integer); 181 Die.addValue(Attribute, *Form, Value); 182 } 183 184 void DwarfUnit::addUInt(DIE &Block, dwarf::Form Form, uint64_t Integer) { 185 addUInt(Block, (dwarf::Attribute)0, Form, Integer); 186 } 187 188 /// addSInt - Add an signed integer attribute data and value. 189 /// 190 void DwarfUnit::addSInt(DIE &Die, dwarf::Attribute Attribute, 191 Optional<dwarf::Form> Form, int64_t Integer) { 192 if (!Form) 193 Form = DIEInteger::BestForm(true, Integer); 194 DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer); 195 Die.addValue(Attribute, *Form, Value); 196 } 197 198 void DwarfUnit::addSInt(DIELoc &Die, Optional<dwarf::Form> Form, 199 int64_t Integer) { 200 addSInt(Die, (dwarf::Attribute)0, Form, Integer); 201 } 202 203 /// addString - Add a string attribute data and value. We always emit a 204 /// reference to the string pool instead of immediate strings so that DIEs have 205 /// more predictable sizes. In the case of split dwarf we emit an index 206 /// into another table which gets us the static offset into the string 207 /// table. 208 void DwarfUnit::addString(DIE &Die, dwarf::Attribute Attribute, 209 StringRef String) { 210 211 if (!DD->useSplitDwarf()) 212 return addLocalString(Die, Attribute, String); 213 214 unsigned idx = DU->getStringPool().getIndex(*Asm, String); 215 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx); 216 DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String); 217 Die.addValue(Attribute, dwarf::DW_FORM_GNU_str_index, Str); 218 } 219 220 /// addLocalString - Add a string attribute data and value. This is guaranteed 221 /// to be in the local string pool instead of indirected. 222 void DwarfUnit::addLocalString(DIE &Die, dwarf::Attribute Attribute, 223 StringRef String) { 224 MCSymbol *Symb = DU->getStringPool().getSymbol(*Asm, String); 225 DIEValue *Value; 226 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) 227 Value = new (DIEValueAllocator) DIELabel(Symb); 228 else 229 Value = new (DIEValueAllocator) DIEDelta(Symb, DD->getDebugStrSym()); 230 DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String); 231 Die.addValue(Attribute, dwarf::DW_FORM_strp, Str); 232 } 233 234 /// addExpr - Add a Dwarf expression attribute data and value. 235 /// 236 void DwarfUnit::addExpr(DIELoc &Die, dwarf::Form Form, const MCExpr *Expr) { 237 DIEValue *Value = new (DIEValueAllocator) DIEExpr(Expr); 238 Die.addValue((dwarf::Attribute)0, Form, Value); 239 } 240 241 /// addLocationList - Add a Dwarf loclistptr attribute data and value. 242 /// 243 void DwarfUnit::addLocationList(DIE &Die, dwarf::Attribute Attribute, 244 unsigned Index) { 245 DIEValue *Value = new (DIEValueAllocator) DIELocList(Index); 246 dwarf::Form Form = DD->getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset 247 : dwarf::DW_FORM_data4; 248 Die.addValue(Attribute, Form, Value); 249 } 250 251 /// addLabel - Add a Dwarf label attribute data and value. 252 /// 253 void DwarfUnit::addLabel(DIE &Die, dwarf::Attribute Attribute, dwarf::Form Form, 254 const MCSymbol *Label) { 255 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label); 256 Die.addValue(Attribute, Form, Value); 257 } 258 259 void DwarfUnit::addLabel(DIELoc &Die, dwarf::Form Form, const MCSymbol *Label) { 260 addLabel(Die, (dwarf::Attribute)0, Form, Label); 261 } 262 263 /// addSectionLabel - Add a Dwarf section label attribute data and value. 264 /// 265 void DwarfUnit::addSectionLabel(DIE &Die, dwarf::Attribute Attribute, 266 const MCSymbol *Label) { 267 if (DD->getDwarfVersion() >= 4) 268 addLabel(Die, Attribute, dwarf::DW_FORM_sec_offset, Label); 269 else 270 addLabel(Die, Attribute, dwarf::DW_FORM_data4, Label); 271 } 272 273 /// addSectionOffset - Add an offset into a section attribute data and value. 274 /// 275 void DwarfUnit::addSectionOffset(DIE &Die, dwarf::Attribute Attribute, 276 uint64_t Integer) { 277 if (DD->getDwarfVersion() >= 4) 278 addUInt(Die, Attribute, dwarf::DW_FORM_sec_offset, Integer); 279 else 280 addUInt(Die, Attribute, dwarf::DW_FORM_data4, Integer); 281 } 282 283 /// addLabelAddress - Add a dwarf label attribute data and value using 284 /// DW_FORM_addr or DW_FORM_GNU_addr_index. 285 /// 286 void DwarfCompileUnit::addLabelAddress(DIE &Die, dwarf::Attribute Attribute, 287 const MCSymbol *Label) { 288 289 // Don't use the address pool in non-fission or in the skeleton unit itself. 290 // FIXME: Once GDB supports this, it's probably worthwhile using the address 291 // pool from the skeleton - maybe even in non-fission (possibly fewer 292 // relocations by sharing them in the pool, but we have other ideas about how 293 // to reduce the number of relocations as well/instead). 294 if (!DD->useSplitDwarf() || !Skeleton) 295 return addLocalLabelAddress(Die, Attribute, Label); 296 297 if (Label) 298 DD->addArangeLabel(SymbolCU(this, Label)); 299 300 unsigned idx = DD->getAddressPool().getIndex(Label); 301 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx); 302 Die.addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value); 303 } 304 305 void DwarfCompileUnit::addLocalLabelAddress(DIE &Die, 306 dwarf::Attribute Attribute, 307 const MCSymbol *Label) { 308 if (Label) 309 DD->addArangeLabel(SymbolCU(this, Label)); 310 311 Die.addValue(Attribute, dwarf::DW_FORM_addr, 312 Label ? (DIEValue *)new (DIEValueAllocator) DIELabel(Label) 313 : new (DIEValueAllocator) DIEInteger(0)); 314 } 315 316 unsigned DwarfCompileUnit::getOrCreateSourceID(StringRef FileName, StringRef DirName) { 317 // If we print assembly, we can't separate .file entries according to 318 // compile units. Thus all files will belong to the default compile unit. 319 320 // FIXME: add a better feature test than hasRawTextSupport. Even better, 321 // extend .file to support this. 322 return Asm->OutStreamer.EmitDwarfFileDirective( 323 0, DirName, FileName, 324 Asm->OutStreamer.hasRawTextSupport() ? 0 : getUniqueID()); 325 } 326 327 unsigned DwarfTypeUnit::getOrCreateSourceID(StringRef FileName, StringRef DirName) { 328 return SplitLineTable ? SplitLineTable->getFile(DirName, FileName) 329 : getCU().getOrCreateSourceID(FileName, DirName); 330 } 331 332 /// addOpAddress - Add a dwarf op address data and value using the 333 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index. 334 /// 335 void DwarfUnit::addOpAddress(DIELoc &Die, const MCSymbol *Sym) { 336 if (!DD->useSplitDwarf()) { 337 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr); 338 addLabel(Die, dwarf::DW_FORM_udata, Sym); 339 } else { 340 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index); 341 addUInt(Die, dwarf::DW_FORM_GNU_addr_index, 342 DD->getAddressPool().getIndex(Sym)); 343 } 344 } 345 346 /// addSectionDelta - Add a section label delta attribute data and value. 347 /// 348 void DwarfUnit::addSectionDelta(DIE &Die, dwarf::Attribute Attribute, 349 const MCSymbol *Hi, const MCSymbol *Lo) { 350 DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo); 351 Die.addValue(Attribute, DD->getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset 352 : dwarf::DW_FORM_data4, 353 Value); 354 } 355 356 void DwarfUnit::addLabelDelta(DIE &Die, dwarf::Attribute Attribute, 357 const MCSymbol *Hi, const MCSymbol *Lo) { 358 DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo); 359 Die.addValue(Attribute, dwarf::DW_FORM_data4, Value); 360 } 361 362 /// addDIEEntry - Add a DIE attribute data and value. 363 /// 364 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute, DIE &Entry) { 365 addDIEEntry(Die, Attribute, createDIEEntry(Entry)); 366 } 367 368 void DwarfUnit::addDIETypeSignature(DIE &Die, const DwarfTypeUnit &Type) { 369 // Flag the type unit reference as a declaration so that if it contains 370 // members (implicit special members, static data member definitions, member 371 // declarations for definitions in this CU, etc) consumers don't get confused 372 // and think this is a full definition. 373 addFlag(Die, dwarf::DW_AT_declaration); 374 375 Die.addValue(dwarf::DW_AT_signature, dwarf::DW_FORM_ref_sig8, 376 new (DIEValueAllocator) DIETypeSignature(Type)); 377 } 378 379 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute, 380 DIEEntry *Entry) { 381 const DIE *DieCU = Die.getUnitOrNull(); 382 const DIE *EntryCU = Entry->getEntry().getUnitOrNull(); 383 if (!DieCU) 384 // We assume that Die belongs to this CU, if it is not linked to any CU yet. 385 DieCU = &getUnitDie(); 386 if (!EntryCU) 387 EntryCU = &getUnitDie(); 388 Die.addValue(Attribute, 389 EntryCU == DieCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr, 390 Entry); 391 } 392 393 /// Create a DIE with the given Tag, add the DIE to its parent, and 394 /// call insertDIE if MD is not null. 395 DIE &DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, DIDescriptor N) { 396 assert(Tag != dwarf::DW_TAG_auto_variable && 397 Tag != dwarf::DW_TAG_arg_variable); 398 Parent.addChild(make_unique<DIE>((dwarf::Tag)Tag)); 399 DIE &Die = *Parent.getChildren().back(); 400 if (N) 401 insertDIE(N, &Die); 402 return Die; 403 } 404 405 /// addBlock - Add block data. 406 /// 407 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute, DIELoc *Loc) { 408 Loc->ComputeSize(Asm); 409 DIELocs.push_back(Loc); // Memoize so we can call the destructor later on. 410 Die.addValue(Attribute, Loc->BestForm(DD->getDwarfVersion()), Loc); 411 } 412 413 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute, 414 DIEBlock *Block) { 415 Block->ComputeSize(Asm); 416 DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on. 417 Die.addValue(Attribute, Block->BestForm(), Block); 418 } 419 420 /// addSourceLine - Add location information to specified debug information 421 /// entry. 422 void DwarfUnit::addSourceLine(DIE &Die, unsigned Line, StringRef File, 423 StringRef Directory) { 424 if (Line == 0) 425 return; 426 427 unsigned FileID = getOrCreateSourceID(File, Directory); 428 assert(FileID && "Invalid file id"); 429 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID); 430 addUInt(Die, dwarf::DW_AT_decl_line, None, Line); 431 } 432 433 /// addSourceLine - Add location information to specified debug information 434 /// entry. 435 void DwarfUnit::addSourceLine(DIE &Die, DIVariable V) { 436 assert(V.isVariable()); 437 438 addSourceLine(Die, V.getLineNumber(), V.getContext().getFilename(), 439 V.getContext().getDirectory()); 440 } 441 442 /// addSourceLine - Add location information to specified debug information 443 /// entry. 444 void DwarfUnit::addSourceLine(DIE &Die, DIGlobalVariable G) { 445 assert(G.isGlobalVariable()); 446 447 addSourceLine(Die, G.getLineNumber(), G.getFilename(), G.getDirectory()); 448 } 449 450 /// addSourceLine - Add location information to specified debug information 451 /// entry. 452 void DwarfUnit::addSourceLine(DIE &Die, DISubprogram SP) { 453 assert(SP.isSubprogram()); 454 455 addSourceLine(Die, SP.getLineNumber(), SP.getFilename(), SP.getDirectory()); 456 } 457 458 /// addSourceLine - Add location information to specified debug information 459 /// entry. 460 void DwarfUnit::addSourceLine(DIE &Die, DIType Ty) { 461 assert(Ty.isType()); 462 463 addSourceLine(Die, Ty.getLineNumber(), Ty.getFilename(), Ty.getDirectory()); 464 } 465 466 /// addSourceLine - Add location information to specified debug information 467 /// entry. 468 void DwarfUnit::addSourceLine(DIE &Die, DIObjCProperty Ty) { 469 assert(Ty.isObjCProperty()); 470 471 DIFile File = Ty.getFile(); 472 addSourceLine(Die, Ty.getLineNumber(), File.getFilename(), 473 File.getDirectory()); 474 } 475 476 /// addSourceLine - Add location information to specified debug information 477 /// entry. 478 void DwarfUnit::addSourceLine(DIE &Die, DINameSpace NS) { 479 assert(NS.Verify()); 480 481 addSourceLine(Die, NS.getLineNumber(), NS.getFilename(), NS.getDirectory()); 482 } 483 484 /// addVariableAddress - Add DW_AT_location attribute for a 485 /// DbgVariable based on provided MachineLocation. 486 void DwarfUnit::addVariableAddress(const DbgVariable &DV, DIE &Die, 487 MachineLocation Location) { 488 if (DV.variableHasComplexAddress()) 489 addComplexAddress(DV, Die, dwarf::DW_AT_location, Location); 490 else if (DV.isBlockByrefVariable()) 491 addBlockByrefAddress(DV, Die, dwarf::DW_AT_location, Location); 492 else 493 addAddress(Die, dwarf::DW_AT_location, Location, 494 DV.getVariable().isIndirect()); 495 } 496 497 /// addRegisterOp - Add register operand. 498 // FIXME: Ideally, this would share the implementation with 499 // AsmPrinter::EmitDwarfRegOpPiece. 500 void DwarfUnit::addRegisterOpPiece(DIELoc &TheDie, unsigned Reg, 501 unsigned SizeInBits, unsigned OffsetInBits) { 502 const TargetRegisterInfo *RI = Asm->TM.getSubtargetImpl()->getRegisterInfo(); 503 int DWReg = RI->getDwarfRegNum(Reg, false); 504 bool isSubRegister = DWReg < 0; 505 506 unsigned Idx = 0; 507 508 // Go up the super-register chain until we hit a valid dwarf register number. 509 for (MCSuperRegIterator SR(Reg, RI); SR.isValid() && DWReg < 0; ++SR) { 510 DWReg = RI->getDwarfRegNum(*SR, false); 511 if (DWReg >= 0) 512 Idx = RI->getSubRegIndex(*SR, Reg); 513 } 514 515 if (DWReg < 0) { 516 DEBUG(dbgs() << "Invalid Dwarf register number.\n"); 517 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_nop); 518 return; 519 } 520 521 // Emit register. 522 if (DWReg < 32) 523 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg); 524 else { 525 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_regx); 526 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg); 527 } 528 529 // Emit mask. 530 bool isPiece = SizeInBits > 0; 531 if (isSubRegister || isPiece) { 532 const unsigned SizeOfByte = 8; 533 unsigned RegSizeInBits = RI->getSubRegIdxSize(Idx); 534 unsigned RegOffsetInBits = RI->getSubRegIdxOffset(Idx); 535 unsigned PieceSizeInBits = std::max(SizeInBits, RegSizeInBits); 536 unsigned PieceOffsetInBits = OffsetInBits ? OffsetInBits : RegOffsetInBits; 537 assert(RegSizeInBits >= SizeInBits && "register smaller than value"); 538 539 if (RegOffsetInBits != PieceOffsetInBits) { 540 // Manually shift the value into place, since the DW_OP_piece 541 // describes the part of the variable, not the position of the 542 // subregister. 543 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu); 544 addUInt(TheDie, dwarf::DW_FORM_data1, RegOffsetInBits); 545 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_shr); 546 } 547 548 if (PieceOffsetInBits > 0 || PieceSizeInBits % SizeOfByte) { 549 assert(PieceSizeInBits > 0 && "piece has zero size"); 550 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bit_piece); 551 addUInt(TheDie, dwarf::DW_FORM_data1, PieceSizeInBits); 552 addUInt(TheDie, dwarf::DW_FORM_data1, PieceOffsetInBits); 553 } else { 554 assert(PieceSizeInBits > 0 && "piece has zero size"); 555 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_piece); 556 addUInt(TheDie, dwarf::DW_FORM_data1, PieceSizeInBits/SizeOfByte); 557 } 558 } 559 } 560 561 /// addRegisterOffset - Add register offset. 562 void DwarfUnit::addRegisterOffset(DIELoc &TheDie, unsigned Reg, 563 int64_t Offset) { 564 const TargetRegisterInfo *RI = Asm->TM.getSubtargetImpl()->getRegisterInfo(); 565 unsigned DWReg = RI->getDwarfRegNum(Reg, false); 566 const TargetRegisterInfo *TRI = Asm->TM.getSubtargetImpl()->getRegisterInfo(); 567 if (Reg == TRI->getFrameRegister(*Asm->MF)) 568 // If variable offset is based in frame register then use fbreg. 569 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg); 570 else if (DWReg < 32) 571 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg); 572 else { 573 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx); 574 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg); 575 } 576 addSInt(TheDie, dwarf::DW_FORM_sdata, Offset); 577 } 578 579 /// addAddress - Add an address attribute to a die based on the location 580 /// provided. 581 void DwarfUnit::addAddress(DIE &Die, dwarf::Attribute Attribute, 582 const MachineLocation &Location, bool Indirect) { 583 DIELoc *Loc = new (DIEValueAllocator) DIELoc(); 584 585 if (Location.isReg() && !Indirect) 586 addRegisterOpPiece(*Loc, Location.getReg()); 587 else { 588 addRegisterOffset(*Loc, Location.getReg(), Location.getOffset()); 589 if (Indirect && !Location.isReg()) { 590 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref); 591 } 592 } 593 594 // Now attach the location information to the DIE. 595 addBlock(Die, Attribute, Loc); 596 } 597 598 /// addComplexAddress - Start with the address based on the location provided, 599 /// and generate the DWARF information necessary to find the actual variable 600 /// given the extra address information encoded in the DbgVariable, starting 601 /// from the starting location. Add the DWARF information to the die. 602 /// 603 void DwarfUnit::addComplexAddress(const DbgVariable &DV, DIE &Die, 604 dwarf::Attribute Attribute, 605 const MachineLocation &Location) { 606 DIELoc *Loc = new (DIEValueAllocator) DIELoc(); 607 unsigned N = DV.getNumAddrElements(); 608 unsigned i = 0; 609 if (Location.isReg()) { 610 if (N >= 2 && DV.getAddrElement(0) == dwarf::DW_OP_plus) { 611 assert(!DV.getVariable().isIndirect() && 612 "double indirection not handled"); 613 // If first address element is OpPlus then emit 614 // DW_OP_breg + Offset instead of DW_OP_reg + Offset. 615 addRegisterOffset(*Loc, Location.getReg(), DV.getAddrElement(1)); 616 i = 2; 617 } else if (N >= 2 && DV.getAddrElement(0) == dwarf::DW_OP_deref) { 618 assert(!DV.getVariable().isIndirect() && 619 "double indirection not handled"); 620 addRegisterOpPiece(*Loc, Location.getReg(), 621 DV.getExpression().getPieceSize(), 622 DV.getExpression().getPieceOffset()); 623 i = 3; 624 } else 625 addRegisterOpPiece(*Loc, Location.getReg()); 626 } else 627 addRegisterOffset(*Loc, Location.getReg(), Location.getOffset()); 628 629 for (; i < N; ++i) { 630 uint64_t Element = DV.getAddrElement(i); 631 if (Element == dwarf::DW_OP_plus) { 632 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst); 633 addUInt(*Loc, dwarf::DW_FORM_udata, DV.getAddrElement(++i)); 634 635 } else if (Element == dwarf::DW_OP_deref) { 636 if (!Location.isReg()) 637 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref); 638 639 } else if (Element == dwarf::DW_OP_piece) { 640 const unsigned SizeOfByte = 8; 641 unsigned PieceOffsetInBits = DV.getAddrElement(++i)*SizeOfByte; 642 unsigned PieceSizeInBits = DV.getAddrElement(++i)*SizeOfByte; 643 // Emit DW_OP_bit_piece Size Offset. 644 assert(PieceSizeInBits > 0 && "piece has zero size"); 645 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_bit_piece); 646 addUInt(*Loc, dwarf::DW_FORM_udata, PieceSizeInBits); 647 addUInt(*Loc, dwarf::DW_FORM_udata, PieceOffsetInBits); 648 649 } else 650 llvm_unreachable("unknown DIBuilder Opcode"); 651 } 652 653 // Now attach the location information to the DIE. 654 addBlock(Die, Attribute, Loc); 655 } 656 657 /* Byref variables, in Blocks, are declared by the programmer as "SomeType 658 VarName;", but the compiler creates a __Block_byref_x_VarName struct, and 659 gives the variable VarName either the struct, or a pointer to the struct, as 660 its type. This is necessary for various behind-the-scenes things the 661 compiler needs to do with by-reference variables in Blocks. 662 663 However, as far as the original *programmer* is concerned, the variable 664 should still have type 'SomeType', as originally declared. 665 666 The function getBlockByrefType dives into the __Block_byref_x_VarName 667 struct to find the original type of the variable, which is then assigned to 668 the variable's Debug Information Entry as its real type. So far, so good. 669 However now the debugger will expect the variable VarName to have the type 670 SomeType. So we need the location attribute for the variable to be an 671 expression that explains to the debugger how to navigate through the 672 pointers and struct to find the actual variable of type SomeType. 673 674 The following function does just that. We start by getting 675 the "normal" location for the variable. This will be the location 676 of either the struct __Block_byref_x_VarName or the pointer to the 677 struct __Block_byref_x_VarName. 678 679 The struct will look something like: 680 681 struct __Block_byref_x_VarName { 682 ... <various fields> 683 struct __Block_byref_x_VarName *forwarding; 684 ... <various other fields> 685 SomeType VarName; 686 ... <maybe more fields> 687 }; 688 689 If we are given the struct directly (as our starting point) we 690 need to tell the debugger to: 691 692 1). Add the offset of the forwarding field. 693 694 2). Follow that pointer to get the real __Block_byref_x_VarName 695 struct to use (the real one may have been copied onto the heap). 696 697 3). Add the offset for the field VarName, to find the actual variable. 698 699 If we started with a pointer to the struct, then we need to 700 dereference that pointer first, before the other steps. 701 Translating this into DWARF ops, we will need to append the following 702 to the current location description for the variable: 703 704 DW_OP_deref -- optional, if we start with a pointer 705 DW_OP_plus_uconst <forward_fld_offset> 706 DW_OP_deref 707 DW_OP_plus_uconst <varName_fld_offset> 708 709 That is what this function does. */ 710 711 /// addBlockByrefAddress - Start with the address based on the location 712 /// provided, and generate the DWARF information necessary to find the 713 /// actual Block variable (navigating the Block struct) based on the 714 /// starting location. Add the DWARF information to the die. For 715 /// more information, read large comment just above here. 716 /// 717 void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die, 718 dwarf::Attribute Attribute, 719 const MachineLocation &Location) { 720 DIType Ty = DV.getType(); 721 DIType TmpTy = Ty; 722 uint16_t Tag = Ty.getTag(); 723 bool isPointer = false; 724 725 StringRef varName = DV.getName(); 726 727 if (Tag == dwarf::DW_TAG_pointer_type) { 728 DIDerivedType DTy(Ty); 729 TmpTy = resolve(DTy.getTypeDerivedFrom()); 730 isPointer = true; 731 } 732 733 DICompositeType blockStruct(TmpTy); 734 735 // Find the __forwarding field and the variable field in the __Block_byref 736 // struct. 737 DIArray Fields = blockStruct.getElements(); 738 DIDerivedType varField; 739 DIDerivedType forwardingField; 740 741 for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) { 742 DIDerivedType DT(Fields.getElement(i)); 743 StringRef fieldName = DT.getName(); 744 if (fieldName == "__forwarding") 745 forwardingField = DT; 746 else if (fieldName == varName) 747 varField = DT; 748 } 749 750 // Get the offsets for the forwarding field and the variable field. 751 unsigned forwardingFieldOffset = forwardingField.getOffsetInBits() >> 3; 752 unsigned varFieldOffset = varField.getOffsetInBits() >> 2; 753 754 // Decode the original location, and use that as the start of the byref 755 // variable's location. 756 DIELoc *Loc = new (DIEValueAllocator) DIELoc(); 757 758 if (Location.isReg()) 759 addRegisterOpPiece(*Loc, Location.getReg()); 760 else 761 addRegisterOffset(*Loc, Location.getReg(), Location.getOffset()); 762 763 // If we started with a pointer to the __Block_byref... struct, then 764 // the first thing we need to do is dereference the pointer (DW_OP_deref). 765 if (isPointer) 766 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref); 767 768 // Next add the offset for the '__forwarding' field: 769 // DW_OP_plus_uconst ForwardingFieldOffset. Note there's no point in 770 // adding the offset if it's 0. 771 if (forwardingFieldOffset > 0) { 772 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst); 773 addUInt(*Loc, dwarf::DW_FORM_udata, forwardingFieldOffset); 774 } 775 776 // Now dereference the __forwarding field to get to the real __Block_byref 777 // struct: DW_OP_deref. 778 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref); 779 780 // Now that we've got the real __Block_byref... struct, add the offset 781 // for the variable's field to get to the location of the actual variable: 782 // DW_OP_plus_uconst varFieldOffset. Again, don't add if it's 0. 783 if (varFieldOffset > 0) { 784 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst); 785 addUInt(*Loc, dwarf::DW_FORM_udata, varFieldOffset); 786 } 787 788 // Now attach the location information to the DIE. 789 addBlock(Die, Attribute, Loc); 790 } 791 792 /// Return true if type encoding is unsigned. 793 static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) { 794 DIDerivedType DTy(Ty); 795 if (DTy.isDerivedType()) { 796 dwarf::Tag T = (dwarf::Tag)Ty.getTag(); 797 // Encode pointer constants as unsigned bytes. This is used at least for 798 // null pointer constant emission. 799 // FIXME: reference and rvalue_reference /probably/ shouldn't be allowed 800 // here, but accept them for now due to a bug in SROA producing bogus 801 // dbg.values. 802 if (T == dwarf::DW_TAG_pointer_type || 803 T == dwarf::DW_TAG_ptr_to_member_type || 804 T == dwarf::DW_TAG_reference_type || 805 T == dwarf::DW_TAG_rvalue_reference_type) 806 return true; 807 assert(T == dwarf::DW_TAG_typedef || T == dwarf::DW_TAG_const_type || 808 T == dwarf::DW_TAG_volatile_type || 809 T == dwarf::DW_TAG_restrict_type || 810 T == dwarf::DW_TAG_enumeration_type); 811 if (DITypeRef Deriv = DTy.getTypeDerivedFrom()) 812 return isUnsignedDIType(DD, DD->resolve(Deriv)); 813 // FIXME: Enums without a fixed underlying type have unknown signedness 814 // here, leading to incorrectly emitted constants. 815 assert(DTy.getTag() == dwarf::DW_TAG_enumeration_type); 816 return false; 817 } 818 819 DIBasicType BTy(Ty); 820 assert(BTy.isBasicType()); 821 unsigned Encoding = BTy.getEncoding(); 822 assert((Encoding == dwarf::DW_ATE_unsigned || 823 Encoding == dwarf::DW_ATE_unsigned_char || 824 Encoding == dwarf::DW_ATE_signed || 825 Encoding == dwarf::DW_ATE_signed_char || 826 Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean) && 827 "Unsupported encoding"); 828 return (Encoding == dwarf::DW_ATE_unsigned || 829 Encoding == dwarf::DW_ATE_unsigned_char || 830 Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean); 831 } 832 833 /// If this type is derived from a base type then return base type size. 834 static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) { 835 unsigned Tag = Ty.getTag(); 836 837 if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef && 838 Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type && 839 Tag != dwarf::DW_TAG_restrict_type) 840 return Ty.getSizeInBits(); 841 842 DIType BaseType = DD->resolve(Ty.getTypeDerivedFrom()); 843 844 // If this type is not derived from any type or the type is a declaration then 845 // take conservative approach. 846 if (!BaseType.isValid() || BaseType.isForwardDecl()) 847 return Ty.getSizeInBits(); 848 849 // If this is a derived type, go ahead and get the base type, unless it's a 850 // reference then it's just the size of the field. Pointer types have no need 851 // of this since they're a different type of qualification on the type. 852 if (BaseType.getTag() == dwarf::DW_TAG_reference_type || 853 BaseType.getTag() == dwarf::DW_TAG_rvalue_reference_type) 854 return Ty.getSizeInBits(); 855 856 if (BaseType.isDerivedType()) 857 return getBaseTypeSize(DD, DIDerivedType(BaseType)); 858 859 return BaseType.getSizeInBits(); 860 } 861 862 /// addConstantFPValue - Add constant value entry in variable DIE. 863 void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) { 864 assert(MO.isFPImm() && "Invalid machine operand!"); 865 DIEBlock *Block = new (DIEValueAllocator) DIEBlock(); 866 APFloat FPImm = MO.getFPImm()->getValueAPF(); 867 868 // Get the raw data form of the floating point. 869 const APInt FltVal = FPImm.bitcastToAPInt(); 870 const char *FltPtr = (const char *)FltVal.getRawData(); 871 872 int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte. 873 bool LittleEndian = Asm->getDataLayout().isLittleEndian(); 874 int Incr = (LittleEndian ? 1 : -1); 875 int Start = (LittleEndian ? 0 : NumBytes - 1); 876 int Stop = (LittleEndian ? NumBytes : -1); 877 878 // Output the constant to DWARF one byte at a time. 879 for (; Start != Stop; Start += Incr) 880 addUInt(*Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]); 881 882 addBlock(Die, dwarf::DW_AT_const_value, Block); 883 } 884 885 /// addConstantFPValue - Add constant value entry in variable DIE. 886 void DwarfUnit::addConstantFPValue(DIE &Die, const ConstantFP *CFP) { 887 // Pass this down to addConstantValue as an unsigned bag of bits. 888 addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true); 889 } 890 891 /// addConstantValue - Add constant value entry in variable DIE. 892 void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI, DIType Ty) { 893 addConstantValue(Die, CI->getValue(), Ty); 894 } 895 896 /// addConstantValue - Add constant value entry in variable DIE. 897 void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO, 898 DIType Ty) { 899 assert(MO.isImm() && "Invalid machine operand!"); 900 901 addConstantValue(Die, isUnsignedDIType(DD, Ty), MO.getImm()); 902 } 903 904 void DwarfUnit::addConstantValue(DIE &Die, bool Unsigned, uint64_t Val) { 905 // FIXME: This is a bit conservative/simple - it emits negative values always 906 // sign extended to 64 bits rather than minimizing the number of bytes. 907 addUInt(Die, dwarf::DW_AT_const_value, 908 Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata, Val); 909 } 910 911 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, DIType Ty) { 912 addConstantValue(Die, Val, isUnsignedDIType(DD, Ty)); 913 } 914 915 // addConstantValue - Add constant value entry in variable DIE. 916 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) { 917 unsigned CIBitWidth = Val.getBitWidth(); 918 if (CIBitWidth <= 64) { 919 addConstantValue(Die, Unsigned, 920 Unsigned ? Val.getZExtValue() : Val.getSExtValue()); 921 return; 922 } 923 924 DIEBlock *Block = new (DIEValueAllocator) DIEBlock(); 925 926 // Get the raw data form of the large APInt. 927 const uint64_t *Ptr64 = Val.getRawData(); 928 929 int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte. 930 bool LittleEndian = Asm->getDataLayout().isLittleEndian(); 931 932 // Output the constant to DWARF one byte at a time. 933 for (int i = 0; i < NumBytes; i++) { 934 uint8_t c; 935 if (LittleEndian) 936 c = Ptr64[i / 8] >> (8 * (i & 7)); 937 else 938 c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7)); 939 addUInt(*Block, dwarf::DW_FORM_data1, c); 940 } 941 942 addBlock(Die, dwarf::DW_AT_const_value, Block); 943 } 944 945 /// addTemplateParams - Add template parameters into buffer. 946 void DwarfUnit::addTemplateParams(DIE &Buffer, DIArray TParams) { 947 // Add template parameters. 948 for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) { 949 DIDescriptor Element = TParams.getElement(i); 950 if (Element.isTemplateTypeParameter()) 951 constructTemplateTypeParameterDIE(Buffer, 952 DITemplateTypeParameter(Element)); 953 else if (Element.isTemplateValueParameter()) 954 constructTemplateValueParameterDIE(Buffer, 955 DITemplateValueParameter(Element)); 956 } 957 } 958 959 /// getOrCreateContextDIE - Get context owner's DIE. 960 DIE *DwarfUnit::getOrCreateContextDIE(DIScope Context) { 961 if (!Context || Context.isFile()) 962 return &getUnitDie(); 963 if (Context.isType()) 964 return getOrCreateTypeDIE(DIType(Context)); 965 if (Context.isNameSpace()) 966 return getOrCreateNameSpace(DINameSpace(Context)); 967 if (Context.isSubprogram()) 968 return getOrCreateSubprogramDIE(DISubprogram(Context)); 969 return getDIE(Context); 970 } 971 972 DIE *DwarfUnit::createTypeDIE(DICompositeType Ty) { 973 DIScope Context = resolve(Ty.getContext()); 974 DIE *ContextDIE = getOrCreateContextDIE(Context); 975 976 if (DIE *TyDIE = getDIE(Ty)) 977 return TyDIE; 978 979 // Create new type. 980 DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty); 981 982 constructTypeDIE(TyDIE, Ty); 983 984 updateAcceleratorTables(Context, Ty, TyDIE); 985 return &TyDIE; 986 } 987 988 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the 989 /// given DIType. 990 DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) { 991 if (!TyNode) 992 return nullptr; 993 994 DIType Ty(TyNode); 995 assert(Ty.isType()); 996 assert(Ty == resolve(Ty.getRef()) && 997 "type was not uniqued, possible ODR violation."); 998 999 // DW_TAG_restrict_type is not supported in DWARF2 1000 if (Ty.getTag() == dwarf::DW_TAG_restrict_type && DD->getDwarfVersion() <= 2) 1001 return getOrCreateTypeDIE(resolve(DIDerivedType(Ty).getTypeDerivedFrom())); 1002 1003 // Construct the context before querying for the existence of the DIE in case 1004 // such construction creates the DIE. 1005 DIScope Context = resolve(Ty.getContext()); 1006 DIE *ContextDIE = getOrCreateContextDIE(Context); 1007 assert(ContextDIE); 1008 1009 if (DIE *TyDIE = getDIE(Ty)) 1010 return TyDIE; 1011 1012 // Create new type. 1013 DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty); 1014 1015 updateAcceleratorTables(Context, Ty, TyDIE); 1016 1017 if (Ty.isBasicType()) 1018 constructTypeDIE(TyDIE, DIBasicType(Ty)); 1019 else if (Ty.isCompositeType()) { 1020 DICompositeType CTy(Ty); 1021 if (GenerateDwarfTypeUnits && !Ty.isForwardDecl()) 1022 if (MDString *TypeId = CTy.getIdentifier()) { 1023 DD->addDwarfTypeUnitType(getCU(), TypeId->getString(), TyDIE, CTy); 1024 // Skip updating the accelerator tables since this is not the full type. 1025 return &TyDIE; 1026 } 1027 constructTypeDIE(TyDIE, CTy); 1028 } else { 1029 assert(Ty.isDerivedType() && "Unknown kind of DIType"); 1030 constructTypeDIE(TyDIE, DIDerivedType(Ty)); 1031 } 1032 1033 return &TyDIE; 1034 } 1035 1036 void DwarfUnit::updateAcceleratorTables(DIScope Context, DIType Ty, 1037 const DIE &TyDIE) { 1038 if (!Ty.getName().empty() && !Ty.isForwardDecl()) { 1039 bool IsImplementation = 0; 1040 if (Ty.isCompositeType()) { 1041 DICompositeType CT(Ty); 1042 // A runtime language of 0 actually means C/C++ and that any 1043 // non-negative value is some version of Objective-C/C++. 1044 IsImplementation = (CT.getRunTimeLang() == 0) || CT.isObjcClassComplete(); 1045 } 1046 unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0; 1047 DD->addAccelType(Ty.getName(), TyDIE, Flags); 1048 1049 if ((!Context || Context.isCompileUnit() || Context.isFile() || 1050 Context.isNameSpace()) && 1051 getCUNode().getEmissionKind() != DIBuilder::LineTablesOnly) 1052 GlobalTypes[getParentContextString(Context) + Ty.getName().str()] = 1053 &TyDIE; 1054 } 1055 } 1056 1057 /// addType - Add a new type attribute to the specified entity. 1058 void DwarfUnit::addType(DIE &Entity, DIType Ty, dwarf::Attribute Attribute) { 1059 assert(Ty && "Trying to add a type that doesn't exist?"); 1060 1061 // Check for pre-existence. 1062 DIEEntry *Entry = getDIEEntry(Ty); 1063 // If it exists then use the existing value. 1064 if (Entry) { 1065 addDIEEntry(Entity, Attribute, Entry); 1066 return; 1067 } 1068 1069 // Construct type. 1070 DIE *Buffer = getOrCreateTypeDIE(Ty); 1071 1072 // Set up proxy. 1073 Entry = createDIEEntry(*Buffer); 1074 insertDIEEntry(Ty, Entry); 1075 addDIEEntry(Entity, Attribute, Entry); 1076 } 1077 1078 /// addGlobalName - Add a new global name to the compile unit. 1079 void DwarfUnit::addGlobalName(StringRef Name, DIE &Die, DIScope Context) { 1080 if (getCUNode().getEmissionKind() == DIBuilder::LineTablesOnly) 1081 return; 1082 std::string FullName = getParentContextString(Context) + Name.str(); 1083 GlobalNames[FullName] = &Die; 1084 } 1085 1086 /// getParentContextString - Walks the metadata parent chain in a language 1087 /// specific manner (using the compile unit language) and returns 1088 /// it as a string. This is done at the metadata level because DIEs may 1089 /// not currently have been added to the parent context and walking the 1090 /// DIEs looking for names is more expensive than walking the metadata. 1091 std::string DwarfUnit::getParentContextString(DIScope Context) const { 1092 if (!Context) 1093 return ""; 1094 1095 // FIXME: Decide whether to implement this for non-C++ languages. 1096 if (getLanguage() != dwarf::DW_LANG_C_plus_plus) 1097 return ""; 1098 1099 std::string CS; 1100 SmallVector<DIScope, 1> Parents; 1101 while (!Context.isCompileUnit()) { 1102 Parents.push_back(Context); 1103 if (Context.getContext()) 1104 Context = resolve(Context.getContext()); 1105 else 1106 // Structure, etc types will have a NULL context if they're at the top 1107 // level. 1108 break; 1109 } 1110 1111 // Reverse iterate over our list to go from the outermost construct to the 1112 // innermost. 1113 for (SmallVectorImpl<DIScope>::reverse_iterator I = Parents.rbegin(), 1114 E = Parents.rend(); 1115 I != E; ++I) { 1116 DIScope Ctx = *I; 1117 StringRef Name = Ctx.getName(); 1118 if (Name.empty() && Ctx.isNameSpace()) 1119 Name = "(anonymous namespace)"; 1120 if (!Name.empty()) { 1121 CS += Name; 1122 CS += "::"; 1123 } 1124 } 1125 return CS; 1126 } 1127 1128 /// constructTypeDIE - Construct basic type die from DIBasicType. 1129 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) { 1130 // Get core information. 1131 StringRef Name = BTy.getName(); 1132 // Add name if not anonymous or intermediate type. 1133 if (!Name.empty()) 1134 addString(Buffer, dwarf::DW_AT_name, Name); 1135 1136 // An unspecified type only has a name attribute. 1137 if (BTy.getTag() == dwarf::DW_TAG_unspecified_type) 1138 return; 1139 1140 addUInt(Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, 1141 BTy.getEncoding()); 1142 1143 uint64_t Size = BTy.getSizeInBits() >> 3; 1144 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size); 1145 } 1146 1147 /// constructTypeDIE - Construct derived type die from DIDerivedType. 1148 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) { 1149 // Get core information. 1150 StringRef Name = DTy.getName(); 1151 uint64_t Size = DTy.getSizeInBits() >> 3; 1152 uint16_t Tag = Buffer.getTag(); 1153 1154 // Map to main type, void will not have a type. 1155 DIType FromTy = resolve(DTy.getTypeDerivedFrom()); 1156 if (FromTy) 1157 addType(Buffer, FromTy); 1158 1159 // Add name if not anonymous or intermediate type. 1160 if (!Name.empty()) 1161 addString(Buffer, dwarf::DW_AT_name, Name); 1162 1163 // Add size if non-zero (derived types might be zero-sized.) 1164 if (Size && Tag != dwarf::DW_TAG_pointer_type) 1165 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size); 1166 1167 if (Tag == dwarf::DW_TAG_ptr_to_member_type) 1168 addDIEEntry(Buffer, dwarf::DW_AT_containing_type, 1169 *getOrCreateTypeDIE(resolve(DTy.getClassType()))); 1170 // Add source line info if available and TyDesc is not a forward declaration. 1171 if (!DTy.isForwardDecl()) 1172 addSourceLine(Buffer, DTy); 1173 } 1174 1175 /// constructSubprogramArguments - Construct function argument DIEs. 1176 void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeArray Args) { 1177 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) { 1178 DIType Ty = resolve(Args.getElement(i)); 1179 if (!Ty) { 1180 assert(i == N-1 && "Unspecified parameter must be the last argument"); 1181 createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer); 1182 } else { 1183 DIE &Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer); 1184 addType(Arg, DIType(Ty)); 1185 if (DIType(Ty).isArtificial()) 1186 addFlag(Arg, dwarf::DW_AT_artificial); 1187 } 1188 } 1189 } 1190 1191 /// constructTypeDIE - Construct type DIE from DICompositeType. 1192 void DwarfUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) { 1193 // Add name if not anonymous or intermediate type. 1194 StringRef Name = CTy.getName(); 1195 1196 uint64_t Size = CTy.getSizeInBits() >> 3; 1197 uint16_t Tag = Buffer.getTag(); 1198 1199 switch (Tag) { 1200 case dwarf::DW_TAG_array_type: 1201 constructArrayTypeDIE(Buffer, CTy); 1202 break; 1203 case dwarf::DW_TAG_enumeration_type: 1204 constructEnumTypeDIE(Buffer, CTy); 1205 break; 1206 case dwarf::DW_TAG_subroutine_type: { 1207 // Add return type. A void return won't have a type. 1208 DITypeArray Elements = DISubroutineType(CTy).getTypeArray(); 1209 DIType RTy(resolve(Elements.getElement(0))); 1210 if (RTy) 1211 addType(Buffer, RTy); 1212 1213 bool isPrototyped = true; 1214 if (Elements.getNumElements() == 2 && 1215 !Elements.getElement(1)) 1216 isPrototyped = false; 1217 1218 constructSubprogramArguments(Buffer, Elements); 1219 1220 // Add prototype flag if we're dealing with a C language and the 1221 // function has been prototyped. 1222 uint16_t Language = getLanguage(); 1223 if (isPrototyped && 1224 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 || 1225 Language == dwarf::DW_LANG_ObjC)) 1226 addFlag(Buffer, dwarf::DW_AT_prototyped); 1227 1228 if (CTy.isLValueReference()) 1229 addFlag(Buffer, dwarf::DW_AT_reference); 1230 1231 if (CTy.isRValueReference()) 1232 addFlag(Buffer, dwarf::DW_AT_rvalue_reference); 1233 } break; 1234 case dwarf::DW_TAG_structure_type: 1235 case dwarf::DW_TAG_union_type: 1236 case dwarf::DW_TAG_class_type: { 1237 // Add elements to structure type. 1238 DIArray Elements = CTy.getElements(); 1239 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) { 1240 DIDescriptor Element = Elements.getElement(i); 1241 if (Element.isSubprogram()) 1242 getOrCreateSubprogramDIE(DISubprogram(Element)); 1243 else if (Element.isDerivedType()) { 1244 DIDerivedType DDTy(Element); 1245 if (DDTy.getTag() == dwarf::DW_TAG_friend) { 1246 DIE &ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer); 1247 addType(ElemDie, resolve(DDTy.getTypeDerivedFrom()), 1248 dwarf::DW_AT_friend); 1249 } else if (DDTy.isStaticMember()) { 1250 getOrCreateStaticMemberDIE(DDTy); 1251 } else { 1252 constructMemberDIE(Buffer, DDTy); 1253 } 1254 } else if (Element.isObjCProperty()) { 1255 DIObjCProperty Property(Element); 1256 DIE &ElemDie = createAndAddDIE(Property.getTag(), Buffer); 1257 StringRef PropertyName = Property.getObjCPropertyName(); 1258 addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName); 1259 if (Property.getType()) 1260 addType(ElemDie, Property.getType()); 1261 addSourceLine(ElemDie, Property); 1262 StringRef GetterName = Property.getObjCPropertyGetterName(); 1263 if (!GetterName.empty()) 1264 addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName); 1265 StringRef SetterName = Property.getObjCPropertySetterName(); 1266 if (!SetterName.empty()) 1267 addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName); 1268 unsigned PropertyAttributes = 0; 1269 if (Property.isReadOnlyObjCProperty()) 1270 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly; 1271 if (Property.isReadWriteObjCProperty()) 1272 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite; 1273 if (Property.isAssignObjCProperty()) 1274 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign; 1275 if (Property.isRetainObjCProperty()) 1276 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain; 1277 if (Property.isCopyObjCProperty()) 1278 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy; 1279 if (Property.isNonAtomicObjCProperty()) 1280 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic; 1281 if (PropertyAttributes) 1282 addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None, 1283 PropertyAttributes); 1284 1285 DIEEntry *Entry = getDIEEntry(Element); 1286 if (!Entry) { 1287 Entry = createDIEEntry(ElemDie); 1288 insertDIEEntry(Element, Entry); 1289 } 1290 } else 1291 continue; 1292 } 1293 1294 if (CTy.isAppleBlockExtension()) 1295 addFlag(Buffer, dwarf::DW_AT_APPLE_block); 1296 1297 DICompositeType ContainingType(resolve(CTy.getContainingType())); 1298 if (ContainingType) 1299 addDIEEntry(Buffer, dwarf::DW_AT_containing_type, 1300 *getOrCreateTypeDIE(ContainingType)); 1301 1302 if (CTy.isObjcClassComplete()) 1303 addFlag(Buffer, dwarf::DW_AT_APPLE_objc_complete_type); 1304 1305 // Add template parameters to a class, structure or union types. 1306 // FIXME: The support isn't in the metadata for this yet. 1307 if (Tag == dwarf::DW_TAG_class_type || 1308 Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type) 1309 addTemplateParams(Buffer, CTy.getTemplateParams()); 1310 1311 break; 1312 } 1313 default: 1314 break; 1315 } 1316 1317 // Add name if not anonymous or intermediate type. 1318 if (!Name.empty()) 1319 addString(Buffer, dwarf::DW_AT_name, Name); 1320 1321 if (Tag == dwarf::DW_TAG_enumeration_type || 1322 Tag == dwarf::DW_TAG_class_type || Tag == dwarf::DW_TAG_structure_type || 1323 Tag == dwarf::DW_TAG_union_type) { 1324 // Add size if non-zero (derived types might be zero-sized.) 1325 // TODO: Do we care about size for enum forward declarations? 1326 if (Size) 1327 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size); 1328 else if (!CTy.isForwardDecl()) 1329 // Add zero size if it is not a forward declaration. 1330 addUInt(Buffer, dwarf::DW_AT_byte_size, None, 0); 1331 1332 // If we're a forward decl, say so. 1333 if (CTy.isForwardDecl()) 1334 addFlag(Buffer, dwarf::DW_AT_declaration); 1335 1336 // Add source line info if available. 1337 if (!CTy.isForwardDecl()) 1338 addSourceLine(Buffer, CTy); 1339 1340 // No harm in adding the runtime language to the declaration. 1341 unsigned RLang = CTy.getRunTimeLang(); 1342 if (RLang) 1343 addUInt(Buffer, dwarf::DW_AT_APPLE_runtime_class, dwarf::DW_FORM_data1, 1344 RLang); 1345 } 1346 } 1347 1348 /// constructTemplateTypeParameterDIE - Construct new DIE for the given 1349 /// DITemplateTypeParameter. 1350 void DwarfUnit::constructTemplateTypeParameterDIE(DIE &Buffer, 1351 DITemplateTypeParameter TP) { 1352 DIE &ParamDIE = 1353 createAndAddDIE(dwarf::DW_TAG_template_type_parameter, Buffer); 1354 // Add the type if it exists, it could be void and therefore no type. 1355 if (TP.getType()) 1356 addType(ParamDIE, resolve(TP.getType())); 1357 if (!TP.getName().empty()) 1358 addString(ParamDIE, dwarf::DW_AT_name, TP.getName()); 1359 } 1360 1361 /// constructTemplateValueParameterDIE - Construct new DIE for the given 1362 /// DITemplateValueParameter. 1363 void 1364 DwarfUnit::constructTemplateValueParameterDIE(DIE &Buffer, 1365 DITemplateValueParameter VP) { 1366 DIE &ParamDIE = createAndAddDIE(VP.getTag(), Buffer); 1367 1368 // Add the type if there is one, template template and template parameter 1369 // packs will not have a type. 1370 if (VP.getTag() == dwarf::DW_TAG_template_value_parameter) 1371 addType(ParamDIE, resolve(VP.getType())); 1372 if (!VP.getName().empty()) 1373 addString(ParamDIE, dwarf::DW_AT_name, VP.getName()); 1374 if (Value *Val = VP.getValue()) { 1375 if (ConstantInt *CI = dyn_cast<ConstantInt>(Val)) 1376 addConstantValue(ParamDIE, CI, resolve(VP.getType())); 1377 else if (GlobalValue *GV = dyn_cast<GlobalValue>(Val)) { 1378 // For declaration non-type template parameters (such as global values and 1379 // functions) 1380 DIELoc *Loc = new (DIEValueAllocator) DIELoc(); 1381 addOpAddress(*Loc, Asm->getSymbol(GV)); 1382 // Emit DW_OP_stack_value to use the address as the immediate value of the 1383 // parameter, rather than a pointer to it. 1384 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value); 1385 addBlock(ParamDIE, dwarf::DW_AT_location, Loc); 1386 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_template_param) { 1387 assert(isa<MDString>(Val)); 1388 addString(ParamDIE, dwarf::DW_AT_GNU_template_name, 1389 cast<MDString>(Val)->getString()); 1390 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) { 1391 assert(isa<MDNode>(Val)); 1392 DIArray A(cast<MDNode>(Val)); 1393 addTemplateParams(ParamDIE, A); 1394 } 1395 } 1396 } 1397 1398 /// getOrCreateNameSpace - Create a DIE for DINameSpace. 1399 DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) { 1400 // Construct the context before querying for the existence of the DIE in case 1401 // such construction creates the DIE. 1402 DIE *ContextDIE = getOrCreateContextDIE(NS.getContext()); 1403 1404 if (DIE *NDie = getDIE(NS)) 1405 return NDie; 1406 DIE &NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS); 1407 1408 StringRef Name = NS.getName(); 1409 if (!Name.empty()) 1410 addString(NDie, dwarf::DW_AT_name, NS.getName()); 1411 else 1412 Name = "(anonymous namespace)"; 1413 DD->addAccelNamespace(Name, NDie); 1414 addGlobalName(Name, NDie, NS.getContext()); 1415 addSourceLine(NDie, NS); 1416 return &NDie; 1417 } 1418 1419 /// getOrCreateSubprogramDIE - Create new DIE using SP. 1420 DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP) { 1421 // Construct the context before querying for the existence of the DIE in case 1422 // such construction creates the DIE (as is the case for member function 1423 // declarations). 1424 DIE *ContextDIE = getOrCreateContextDIE(resolve(SP.getContext())); 1425 1426 if (DIE *SPDie = getDIE(SP)) 1427 return SPDie; 1428 1429 if (DISubprogram SPDecl = SP.getFunctionDeclaration()) { 1430 // Add subprogram definitions to the CU die directly. 1431 ContextDIE = &getUnitDie(); 1432 // Build the decl now to ensure it precedes the definition. 1433 getOrCreateSubprogramDIE(SPDecl); 1434 } 1435 1436 // DW_TAG_inlined_subroutine may refer to this DIE. 1437 DIE &SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP); 1438 1439 // Stop here and fill this in later, depending on whether or not this 1440 // subprogram turns out to have inlined instances or not. 1441 if (SP.isDefinition()) 1442 return &SPDie; 1443 1444 applySubprogramAttributes(SP, SPDie); 1445 return &SPDie; 1446 } 1447 1448 void DwarfUnit::applySubprogramAttributesToDefinition(DISubprogram SP, DIE &SPDie) { 1449 DISubprogram SPDecl = SP.getFunctionDeclaration(); 1450 DIScope Context = resolve(SPDecl ? SPDecl.getContext() : SP.getContext()); 1451 applySubprogramAttributes(SP, SPDie); 1452 addGlobalName(SP.getName(), SPDie, Context); 1453 } 1454 1455 void DwarfUnit::applySubprogramAttributes(DISubprogram SP, DIE &SPDie) { 1456 DIE *DeclDie = nullptr; 1457 StringRef DeclLinkageName; 1458 if (DISubprogram SPDecl = SP.getFunctionDeclaration()) { 1459 DeclDie = getDIE(SPDecl); 1460 assert(DeclDie && "This DIE should've already been constructed when the " 1461 "definition DIE was created in " 1462 "getOrCreateSubprogramDIE"); 1463 DeclLinkageName = SPDecl.getLinkageName(); 1464 } 1465 1466 // Add function template parameters. 1467 addTemplateParams(SPDie, SP.getTemplateParams()); 1468 1469 // Add the linkage name if we have one and it isn't in the Decl. 1470 StringRef LinkageName = SP.getLinkageName(); 1471 assert(((LinkageName.empty() || DeclLinkageName.empty()) || 1472 LinkageName == DeclLinkageName) && 1473 "decl has a linkage name and it is different"); 1474 if (!LinkageName.empty() && DeclLinkageName.empty()) 1475 addString(SPDie, dwarf::DW_AT_MIPS_linkage_name, 1476 GlobalValue::getRealLinkageName(LinkageName)); 1477 1478 if (DeclDie) { 1479 // Refer to the function declaration where all the other attributes will be 1480 // found. 1481 addDIEEntry(SPDie, dwarf::DW_AT_specification, *DeclDie); 1482 return; 1483 } 1484 1485 // Constructors and operators for anonymous aggregates do not have names. 1486 if (!SP.getName().empty()) 1487 addString(SPDie, dwarf::DW_AT_name, SP.getName()); 1488 1489 // Skip the rest of the attributes under -gmlt to save space. 1490 if(getCUNode().getEmissionKind() == DIBuilder::LineTablesOnly) 1491 return; 1492 1493 addSourceLine(SPDie, SP); 1494 1495 // Add the prototype if we have a prototype and we have a C like 1496 // language. 1497 uint16_t Language = getLanguage(); 1498 if (SP.isPrototyped() && 1499 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 || 1500 Language == dwarf::DW_LANG_ObjC)) 1501 addFlag(SPDie, dwarf::DW_AT_prototyped); 1502 1503 DISubroutineType SPTy = SP.getType(); 1504 assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type && 1505 "the type of a subprogram should be a subroutine"); 1506 1507 DITypeArray Args = SPTy.getTypeArray(); 1508 // Add a return type. If this is a type like a C/C++ void type we don't add a 1509 // return type. 1510 if (resolve(Args.getElement(0))) 1511 addType(SPDie, DIType(resolve(Args.getElement(0)))); 1512 1513 unsigned VK = SP.getVirtuality(); 1514 if (VK) { 1515 addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK); 1516 DIELoc *Block = getDIELoc(); 1517 addUInt(*Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu); 1518 addUInt(*Block, dwarf::DW_FORM_udata, SP.getVirtualIndex()); 1519 addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block); 1520 ContainingTypeMap.insert( 1521 std::make_pair(&SPDie, resolve(SP.getContainingType()))); 1522 } 1523 1524 if (!SP.isDefinition()) { 1525 addFlag(SPDie, dwarf::DW_AT_declaration); 1526 1527 // Add arguments. Do not add arguments for subprogram definition. They will 1528 // be handled while processing variables. 1529 constructSubprogramArguments(SPDie, Args); 1530 } 1531 1532 if (SP.isArtificial()) 1533 addFlag(SPDie, dwarf::DW_AT_artificial); 1534 1535 if (!SP.isLocalToUnit()) 1536 addFlag(SPDie, dwarf::DW_AT_external); 1537 1538 if (SP.isOptimized()) 1539 addFlag(SPDie, dwarf::DW_AT_APPLE_optimized); 1540 1541 if (unsigned isa = Asm->getISAEncoding()) { 1542 addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa); 1543 } 1544 1545 if (SP.isLValueReference()) 1546 addFlag(SPDie, dwarf::DW_AT_reference); 1547 1548 if (SP.isRValueReference()) 1549 addFlag(SPDie, dwarf::DW_AT_rvalue_reference); 1550 1551 if (SP.isProtected()) 1552 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1, 1553 dwarf::DW_ACCESS_protected); 1554 else if (SP.isPrivate()) 1555 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1, 1556 dwarf::DW_ACCESS_private); 1557 else if (SP.isPublic()) 1558 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1, 1559 dwarf::DW_ACCESS_public); 1560 1561 if (SP.isExplicit()) 1562 addFlag(SPDie, dwarf::DW_AT_explicit); 1563 } 1564 1565 void DwarfUnit::applyVariableAttributes(const DbgVariable &Var, 1566 DIE &VariableDie) { 1567 StringRef Name = Var.getName(); 1568 if (!Name.empty()) 1569 addString(VariableDie, dwarf::DW_AT_name, Name); 1570 addSourceLine(VariableDie, Var.getVariable()); 1571 addType(VariableDie, Var.getType()); 1572 if (Var.isArtificial()) 1573 addFlag(VariableDie, dwarf::DW_AT_artificial); 1574 } 1575 1576 // Return const expression if value is a GEP to access merged global 1577 // constant. e.g. 1578 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0) 1579 static const ConstantExpr *getMergedGlobalExpr(const Value *V) { 1580 const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V); 1581 if (!CE || CE->getNumOperands() != 3 || 1582 CE->getOpcode() != Instruction::GetElementPtr) 1583 return nullptr; 1584 1585 // First operand points to a global struct. 1586 Value *Ptr = CE->getOperand(0); 1587 if (!isa<GlobalValue>(Ptr) || 1588 !isa<StructType>(cast<PointerType>(Ptr->getType())->getElementType())) 1589 return nullptr; 1590 1591 // Second operand is zero. 1592 const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1)); 1593 if (!CI || !CI->isZero()) 1594 return nullptr; 1595 1596 // Third operand is offset. 1597 if (!isa<ConstantInt>(CE->getOperand(2))) 1598 return nullptr; 1599 1600 return CE; 1601 } 1602 1603 /// getOrCreateGlobalVariableDIE - get or create global variable DIE. 1604 DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(DIGlobalVariable GV) { 1605 // Check for pre-existence. 1606 if (DIE *Die = getDIE(GV)) 1607 return Die; 1608 1609 assert(GV.isGlobalVariable()); 1610 1611 DIScope GVContext = GV.getContext(); 1612 DIType GTy = DD->resolve(GV.getType()); 1613 1614 // If this is a static data member definition, some attributes belong 1615 // to the declaration DIE. 1616 DIE *VariableDIE = nullptr; 1617 bool IsStaticMember = false; 1618 DIDerivedType SDMDecl = GV.getStaticDataMemberDeclaration(); 1619 if (SDMDecl.Verify()) { 1620 assert(SDMDecl.isStaticMember() && "Expected static member decl"); 1621 // We need the declaration DIE that is in the static member's class. 1622 VariableDIE = getOrCreateStaticMemberDIE(SDMDecl); 1623 IsStaticMember = true; 1624 } 1625 1626 // If this is not a static data member definition, create the variable 1627 // DIE and add the initial set of attributes to it. 1628 if (!VariableDIE) { 1629 // Construct the context before querying for the existence of the DIE in 1630 // case such construction creates the DIE. 1631 DIE *ContextDIE = getOrCreateContextDIE(GVContext); 1632 1633 // Add to map. 1634 VariableDIE = &createAndAddDIE(GV.getTag(), *ContextDIE, GV); 1635 1636 // Add name and type. 1637 addString(*VariableDIE, dwarf::DW_AT_name, GV.getDisplayName()); 1638 addType(*VariableDIE, GTy); 1639 1640 // Add scoping info. 1641 if (!GV.isLocalToUnit()) 1642 addFlag(*VariableDIE, dwarf::DW_AT_external); 1643 1644 // Add line number info. 1645 addSourceLine(*VariableDIE, GV); 1646 } 1647 1648 // Add location. 1649 bool addToAccelTable = false; 1650 DIE *VariableSpecDIE = nullptr; 1651 bool isGlobalVariable = GV.getGlobal() != nullptr; 1652 if (isGlobalVariable) { 1653 addToAccelTable = true; 1654 DIELoc *Loc = new (DIEValueAllocator) DIELoc(); 1655 const MCSymbol *Sym = Asm->getSymbol(GV.getGlobal()); 1656 if (GV.getGlobal()->isThreadLocal()) { 1657 // FIXME: Make this work with -gsplit-dwarf. 1658 unsigned PointerSize = Asm->getDataLayout().getPointerSize(); 1659 assert((PointerSize == 4 || PointerSize == 8) && 1660 "Add support for other sizes if necessary"); 1661 // Based on GCC's support for TLS: 1662 if (!DD->useSplitDwarf()) { 1663 // 1) Start with a constNu of the appropriate pointer size 1664 addUInt(*Loc, dwarf::DW_FORM_data1, 1665 PointerSize == 4 ? dwarf::DW_OP_const4u : dwarf::DW_OP_const8u); 1666 // 2) containing the (relocated) offset of the TLS variable 1667 // within the module's TLS block. 1668 addExpr(*Loc, dwarf::DW_FORM_udata, 1669 Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym)); 1670 } else { 1671 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index); 1672 addUInt(*Loc, dwarf::DW_FORM_udata, 1673 DD->getAddressPool().getIndex(Sym, /* TLS */ true)); 1674 } 1675 // 3) followed by a custom OP to make the debugger do a TLS lookup. 1676 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_push_tls_address); 1677 } else { 1678 DD->addArangeLabel(SymbolCU(this, Sym)); 1679 addOpAddress(*Loc, Sym); 1680 } 1681 // A static member's declaration is already flagged as such. 1682 if (!SDMDecl.Verify() && !GV.isDefinition()) 1683 addFlag(*VariableDIE, dwarf::DW_AT_declaration); 1684 // Do not create specification DIE if context is either compile unit 1685 // or a subprogram. 1686 if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() && 1687 !GVContext.isFile() && !DD->isSubprogramContext(GVContext)) { 1688 // Create specification DIE. 1689 VariableSpecDIE = &createAndAddDIE(dwarf::DW_TAG_variable, UnitDie); 1690 addDIEEntry(*VariableSpecDIE, dwarf::DW_AT_specification, *VariableDIE); 1691 addBlock(*VariableSpecDIE, dwarf::DW_AT_location, Loc); 1692 // A static member's declaration is already flagged as such. 1693 if (!SDMDecl.Verify()) 1694 addFlag(*VariableDIE, dwarf::DW_AT_declaration); 1695 } else { 1696 addBlock(*VariableDIE, dwarf::DW_AT_location, Loc); 1697 } 1698 // Add the linkage name. 1699 StringRef LinkageName = GV.getLinkageName(); 1700 if (!LinkageName.empty()) 1701 // From DWARF4: DIEs to which DW_AT_linkage_name may apply include: 1702 // TAG_common_block, TAG_constant, TAG_entry_point, TAG_subprogram and 1703 // TAG_variable. 1704 addString(IsStaticMember && VariableSpecDIE ? *VariableSpecDIE 1705 : *VariableDIE, 1706 DD->getDwarfVersion() >= 4 ? dwarf::DW_AT_linkage_name 1707 : dwarf::DW_AT_MIPS_linkage_name, 1708 GlobalValue::getRealLinkageName(LinkageName)); 1709 } else if (const ConstantInt *CI = 1710 dyn_cast_or_null<ConstantInt>(GV.getConstant())) { 1711 // AT_const_value was added when the static member was created. To avoid 1712 // emitting AT_const_value multiple times, we only add AT_const_value when 1713 // it is not a static member. 1714 if (!IsStaticMember) 1715 addConstantValue(*VariableDIE, CI, GTy); 1716 } else if (const ConstantExpr *CE = getMergedGlobalExpr(GV->getOperand(11))) { 1717 addToAccelTable = true; 1718 // GV is a merged global. 1719 DIELoc *Loc = new (DIEValueAllocator) DIELoc(); 1720 Value *Ptr = CE->getOperand(0); 1721 MCSymbol *Sym = Asm->getSymbol(cast<GlobalValue>(Ptr)); 1722 DD->addArangeLabel(SymbolCU(this, Sym)); 1723 addOpAddress(*Loc, Sym); 1724 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_constu); 1725 SmallVector<Value *, 3> Idx(CE->op_begin() + 1, CE->op_end()); 1726 addUInt(*Loc, dwarf::DW_FORM_udata, 1727 Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx)); 1728 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus); 1729 addBlock(*VariableDIE, dwarf::DW_AT_location, Loc); 1730 } 1731 1732 DIE *ResultDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE; 1733 1734 if (addToAccelTable) { 1735 DD->addAccelName(GV.getName(), *ResultDIE); 1736 1737 // If the linkage name is different than the name, go ahead and output 1738 // that as well into the name table. 1739 if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName()) 1740 DD->addAccelName(GV.getLinkageName(), *ResultDIE); 1741 } 1742 1743 addGlobalName(GV.getName(), *ResultDIE, GV.getContext()); 1744 return ResultDIE; 1745 } 1746 1747 /// constructSubrangeDIE - Construct subrange DIE from DISubrange. 1748 void DwarfUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy) { 1749 DIE &DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer); 1750 addDIEEntry(DW_Subrange, dwarf::DW_AT_type, *IndexTy); 1751 1752 // The LowerBound value defines the lower bounds which is typically zero for 1753 // C/C++. The Count value is the number of elements. Values are 64 bit. If 1754 // Count == -1 then the array is unbounded and we do not emit 1755 // DW_AT_lower_bound and DW_AT_count attributes. 1756 int64_t LowerBound = SR.getLo(); 1757 int64_t DefaultLowerBound = getDefaultLowerBound(); 1758 int64_t Count = SR.getCount(); 1759 1760 if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound) 1761 addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound); 1762 1763 if (Count != -1) 1764 // FIXME: An unbounded array should reference the expression that defines 1765 // the array. 1766 addUInt(DW_Subrange, dwarf::DW_AT_count, None, Count); 1767 } 1768 1769 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType. 1770 void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) { 1771 if (CTy.isVector()) 1772 addFlag(Buffer, dwarf::DW_AT_GNU_vector); 1773 1774 // Emit the element type. 1775 addType(Buffer, resolve(CTy.getTypeDerivedFrom())); 1776 1777 // Get an anonymous type for index type. 1778 // FIXME: This type should be passed down from the front end 1779 // as different languages may have different sizes for indexes. 1780 DIE *IdxTy = getIndexTyDie(); 1781 if (!IdxTy) { 1782 // Construct an integer type to use for indexes. 1783 IdxTy = &createAndAddDIE(dwarf::DW_TAG_base_type, UnitDie); 1784 addString(*IdxTy, dwarf::DW_AT_name, "sizetype"); 1785 addUInt(*IdxTy, dwarf::DW_AT_byte_size, None, sizeof(int64_t)); 1786 addUInt(*IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, 1787 dwarf::DW_ATE_unsigned); 1788 setIndexTyDie(IdxTy); 1789 } 1790 1791 // Add subranges to array type. 1792 DIArray Elements = CTy.getElements(); 1793 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) { 1794 DIDescriptor Element = Elements.getElement(i); 1795 if (Element.getTag() == dwarf::DW_TAG_subrange_type) 1796 constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy); 1797 } 1798 } 1799 1800 /// constructEnumTypeDIE - Construct an enum type DIE from DICompositeType. 1801 void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) { 1802 DIArray Elements = CTy.getElements(); 1803 1804 // Add enumerators to enumeration type. 1805 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) { 1806 DIEnumerator Enum(Elements.getElement(i)); 1807 if (Enum.isEnumerator()) { 1808 DIE &Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer); 1809 StringRef Name = Enum.getName(); 1810 addString(Enumerator, dwarf::DW_AT_name, Name); 1811 int64_t Value = Enum.getEnumValue(); 1812 addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, 1813 Value); 1814 } 1815 } 1816 DIType DTy = resolve(CTy.getTypeDerivedFrom()); 1817 if (DTy) { 1818 addType(Buffer, DTy); 1819 addFlag(Buffer, dwarf::DW_AT_enum_class); 1820 } 1821 } 1822 1823 /// constructContainingTypeDIEs - Construct DIEs for types that contain 1824 /// vtables. 1825 void DwarfUnit::constructContainingTypeDIEs() { 1826 for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(), 1827 CE = ContainingTypeMap.end(); 1828 CI != CE; ++CI) { 1829 DIE &SPDie = *CI->first; 1830 DIDescriptor D(CI->second); 1831 if (!D) 1832 continue; 1833 DIE *NDie = getDIE(D); 1834 if (!NDie) 1835 continue; 1836 addDIEEntry(SPDie, dwarf::DW_AT_containing_type, *NDie); 1837 } 1838 } 1839 1840 /// constructVariableDIE - Construct a DIE for the given DbgVariable. 1841 std::unique_ptr<DIE> DwarfUnit::constructVariableDIE(DbgVariable &DV, 1842 bool Abstract) { 1843 auto D = constructVariableDIEImpl(DV, Abstract); 1844 DV.setDIE(*D); 1845 return D; 1846 } 1847 1848 std::unique_ptr<DIE> DwarfUnit::constructVariableDIEImpl(const DbgVariable &DV, 1849 bool Abstract) { 1850 // Define variable debug information entry. 1851 auto VariableDie = make_unique<DIE>(DV.getTag()); 1852 1853 if (Abstract) { 1854 applyVariableAttributes(DV, *VariableDie); 1855 return VariableDie; 1856 } 1857 1858 // Add variable address. 1859 1860 unsigned Offset = DV.getDotDebugLocOffset(); 1861 if (Offset != ~0U) { 1862 addLocationList(*VariableDie, dwarf::DW_AT_location, Offset); 1863 return VariableDie; 1864 } 1865 1866 // Check if variable is described by a DBG_VALUE instruction. 1867 if (const MachineInstr *DVInsn = DV.getMInsn()) { 1868 assert(DVInsn->getNumOperands() == 4); 1869 if (DVInsn->getOperand(0).isReg()) { 1870 const MachineOperand RegOp = DVInsn->getOperand(0); 1871 // If the second operand is an immediate, this is an indirect value. 1872 if (DVInsn->getOperand(1).isImm()) { 1873 MachineLocation Location(RegOp.getReg(), 1874 DVInsn->getOperand(1).getImm()); 1875 addVariableAddress(DV, *VariableDie, Location); 1876 } else if (RegOp.getReg()) 1877 addVariableAddress(DV, *VariableDie, MachineLocation(RegOp.getReg())); 1878 } else if (DVInsn->getOperand(0).isImm()) 1879 addConstantValue(*VariableDie, DVInsn->getOperand(0), DV.getType()); 1880 else if (DVInsn->getOperand(0).isFPImm()) 1881 addConstantFPValue(*VariableDie, DVInsn->getOperand(0)); 1882 else if (DVInsn->getOperand(0).isCImm()) 1883 addConstantValue(*VariableDie, DVInsn->getOperand(0).getCImm(), 1884 DV.getType()); 1885 1886 return VariableDie; 1887 } 1888 1889 // .. else use frame index. 1890 int FI = DV.getFrameIndex(); 1891 if (FI != ~0) { 1892 unsigned FrameReg = 0; 1893 const TargetFrameLowering *TFI = 1894 Asm->TM.getSubtargetImpl()->getFrameLowering(); 1895 int Offset = TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg); 1896 MachineLocation Location(FrameReg, Offset); 1897 addVariableAddress(DV, *VariableDie, Location); 1898 } 1899 1900 return VariableDie; 1901 } 1902 1903 /// constructMemberDIE - Construct member DIE from DIDerivedType. 1904 void DwarfUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT) { 1905 DIE &MemberDie = createAndAddDIE(DT.getTag(), Buffer); 1906 StringRef Name = DT.getName(); 1907 if (!Name.empty()) 1908 addString(MemberDie, dwarf::DW_AT_name, Name); 1909 1910 addType(MemberDie, resolve(DT.getTypeDerivedFrom())); 1911 1912 addSourceLine(MemberDie, DT); 1913 1914 if (DT.getTag() == dwarf::DW_TAG_inheritance && DT.isVirtual()) { 1915 1916 // For C++, virtual base classes are not at fixed offset. Use following 1917 // expression to extract appropriate offset from vtable. 1918 // BaseAddr = ObAddr + *((*ObAddr) - Offset) 1919 1920 DIELoc *VBaseLocationDie = new (DIEValueAllocator) DIELoc(); 1921 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup); 1922 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref); 1923 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu); 1924 addUInt(*VBaseLocationDie, dwarf::DW_FORM_udata, DT.getOffsetInBits()); 1925 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus); 1926 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref); 1927 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus); 1928 1929 addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie); 1930 } else { 1931 uint64_t Size = DT.getSizeInBits(); 1932 uint64_t FieldSize = getBaseTypeSize(DD, DT); 1933 uint64_t OffsetInBytes; 1934 1935 if (Size != FieldSize) { 1936 // Handle bitfield, assume bytes are 8 bits. 1937 addUInt(MemberDie, dwarf::DW_AT_byte_size, None, FieldSize/8); 1938 addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size); 1939 1940 uint64_t Offset = DT.getOffsetInBits(); 1941 uint64_t AlignMask = ~(DT.getAlignInBits() - 1); 1942 uint64_t HiMark = (Offset + FieldSize) & AlignMask; 1943 uint64_t FieldOffset = (HiMark - FieldSize); 1944 Offset -= FieldOffset; 1945 1946 // Maybe we need to work from the other end. 1947 if (Asm->getDataLayout().isLittleEndian()) 1948 Offset = FieldSize - (Offset + Size); 1949 addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset); 1950 1951 // Here DW_AT_data_member_location points to the anonymous 1952 // field that includes this bit field. 1953 OffsetInBytes = FieldOffset >> 3; 1954 } else 1955 // This is not a bitfield. 1956 OffsetInBytes = DT.getOffsetInBits() >> 3; 1957 1958 if (DD->getDwarfVersion() <= 2) { 1959 DIELoc *MemLocationDie = new (DIEValueAllocator) DIELoc(); 1960 addUInt(*MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst); 1961 addUInt(*MemLocationDie, dwarf::DW_FORM_udata, OffsetInBytes); 1962 addBlock(MemberDie, dwarf::DW_AT_data_member_location, MemLocationDie); 1963 } else 1964 addUInt(MemberDie, dwarf::DW_AT_data_member_location, None, 1965 OffsetInBytes); 1966 } 1967 1968 if (DT.isProtected()) 1969 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1, 1970 dwarf::DW_ACCESS_protected); 1971 else if (DT.isPrivate()) 1972 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1, 1973 dwarf::DW_ACCESS_private); 1974 // Otherwise C++ member and base classes are considered public. 1975 else if (DT.isPublic()) 1976 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1, 1977 dwarf::DW_ACCESS_public); 1978 if (DT.isVirtual()) 1979 addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, 1980 dwarf::DW_VIRTUALITY_virtual); 1981 1982 // Objective-C properties. 1983 if (MDNode *PNode = DT.getObjCProperty()) 1984 if (DIEEntry *PropertyDie = getDIEEntry(PNode)) 1985 MemberDie.addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4, 1986 PropertyDie); 1987 1988 if (DT.isArtificial()) 1989 addFlag(MemberDie, dwarf::DW_AT_artificial); 1990 } 1991 1992 /// getOrCreateStaticMemberDIE - Create new DIE for C++ static member. 1993 DIE *DwarfUnit::getOrCreateStaticMemberDIE(DIDerivedType DT) { 1994 if (!DT.Verify()) 1995 return nullptr; 1996 1997 // Construct the context before querying for the existence of the DIE in case 1998 // such construction creates the DIE. 1999 DIE *ContextDIE = getOrCreateContextDIE(resolve(DT.getContext())); 2000 assert(dwarf::isType(ContextDIE->getTag()) && 2001 "Static member should belong to a type."); 2002 2003 if (DIE *StaticMemberDIE = getDIE(DT)) 2004 return StaticMemberDIE; 2005 2006 DIE &StaticMemberDIE = createAndAddDIE(DT.getTag(), *ContextDIE, DT); 2007 2008 DIType Ty = resolve(DT.getTypeDerivedFrom()); 2009 2010 addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName()); 2011 addType(StaticMemberDIE, Ty); 2012 addSourceLine(StaticMemberDIE, DT); 2013 addFlag(StaticMemberDIE, dwarf::DW_AT_external); 2014 addFlag(StaticMemberDIE, dwarf::DW_AT_declaration); 2015 2016 // FIXME: We could omit private if the parent is a class_type, and 2017 // public if the parent is something else. 2018 if (DT.isProtected()) 2019 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1, 2020 dwarf::DW_ACCESS_protected); 2021 else if (DT.isPrivate()) 2022 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1, 2023 dwarf::DW_ACCESS_private); 2024 else if (DT.isPublic()) 2025 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1, 2026 dwarf::DW_ACCESS_public); 2027 2028 if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant())) 2029 addConstantValue(StaticMemberDIE, CI, Ty); 2030 if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant())) 2031 addConstantFPValue(StaticMemberDIE, CFP); 2032 2033 return &StaticMemberDIE; 2034 } 2035 2036 void DwarfUnit::emitHeader(const MCSymbol *ASectionSym) const { 2037 Asm->OutStreamer.AddComment("DWARF version number"); 2038 Asm->EmitInt16(DD->getDwarfVersion()); 2039 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section"); 2040 // We share one abbreviations table across all units so it's always at the 2041 // start of the section. Use a relocatable offset where needed to ensure 2042 // linking doesn't invalidate that offset. 2043 if (ASectionSym) 2044 Asm->EmitSectionOffset(ASectionSym, ASectionSym); 2045 else 2046 // Use a constant value when no symbol is provided. 2047 Asm->EmitInt32(0); 2048 Asm->OutStreamer.AddComment("Address Size (in bytes)"); 2049 Asm->EmitInt8(Asm->getDataLayout().getPointerSize()); 2050 } 2051 2052 void DwarfCompileUnit::addRange(RangeSpan Range) { 2053 bool SameAsPrevCU = this == DD->getPrevCU(); 2054 DD->setPrevCU(this); 2055 // If we have no current ranges just add the range and return, otherwise, 2056 // check the current section and CU against the previous section and CU we 2057 // emitted into and the subprogram was contained within. If these are the 2058 // same then extend our current range, otherwise add this as a new range. 2059 if (CURanges.empty() || !SameAsPrevCU || 2060 (&CURanges.back().getEnd()->getSection() != 2061 &Range.getEnd()->getSection())) { 2062 CURanges.push_back(Range); 2063 return; 2064 } 2065 2066 CURanges.back().setEnd(Range.getEnd()); 2067 } 2068 2069 void DwarfCompileUnit::initStmtList(MCSymbol *DwarfLineSectionSym) { 2070 // Define start line table label for each Compile Unit. 2071 MCSymbol *LineTableStartSym = 2072 Asm->OutStreamer.getDwarfLineTableSymbol(getUniqueID()); 2073 2074 stmtListIndex = UnitDie.getValues().size(); 2075 2076 // DW_AT_stmt_list is a offset of line number information for this 2077 // compile unit in debug_line section. For split dwarf this is 2078 // left in the skeleton CU and so not included. 2079 // The line table entries are not always emitted in assembly, so it 2080 // is not okay to use line_table_start here. 2081 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) 2082 addSectionLabel(UnitDie, dwarf::DW_AT_stmt_list, LineTableStartSym); 2083 else 2084 addSectionDelta(UnitDie, dwarf::DW_AT_stmt_list, LineTableStartSym, 2085 DwarfLineSectionSym); 2086 } 2087 2088 void DwarfCompileUnit::applyStmtList(DIE &D) { 2089 D.addValue(dwarf::DW_AT_stmt_list, 2090 UnitDie.getAbbrev().getData()[stmtListIndex].getForm(), 2091 UnitDie.getValues()[stmtListIndex]); 2092 } 2093 2094 void DwarfTypeUnit::emitHeader(const MCSymbol *ASectionSym) const { 2095 DwarfUnit::emitHeader(ASectionSym); 2096 Asm->OutStreamer.AddComment("Type Signature"); 2097 Asm->OutStreamer.EmitIntValue(TypeSignature, sizeof(TypeSignature)); 2098 Asm->OutStreamer.AddComment("Type DIE Offset"); 2099 // In a skeleton type unit there is no type DIE so emit a zero offset. 2100 Asm->OutStreamer.EmitIntValue(Ty ? Ty->getOffset() : 0, 2101 sizeof(Ty->getOffset())); 2102 } 2103 2104 void DwarfTypeUnit::initSection(const MCSection *Section) { 2105 assert(!this->Section); 2106 this->Section = Section; 2107 // Since each type unit is contained in its own COMDAT section, the begin 2108 // label and the section label are the same. Using the begin label emission in 2109 // DwarfDebug to emit the section label as well is slightly subtle/sneaky, but 2110 // the only other alternative of lazily constructing start-of-section labels 2111 // and storing a mapping in DwarfDebug (or AsmPrinter). 2112 this->SectionSym = this->LabelBegin = 2113 Asm->GetTempSymbol(Section->getLabelBeginName(), getUniqueID()); 2114 this->LabelEnd = 2115 Asm->GetTempSymbol(Section->getLabelEndName(), getUniqueID()); 2116 } 2117