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