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