1 //===- llvm/CodeGen/DwarfDebug.cpp - Dwarf Debug Framework ----------------===// 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 writing dwarf debug info into asm files. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "DwarfDebug.h" 15 #include "ByteStreamer.h" 16 #include "DIEHash.h" 17 #include "DebugLocEntry.h" 18 #include "DebugLocStream.h" 19 #include "DwarfCompileUnit.h" 20 #include "DwarfExpression.h" 21 #include "DwarfFile.h" 22 #include "DwarfUnit.h" 23 #include "llvm/ADT/APInt.h" 24 #include "llvm/ADT/DenseMap.h" 25 #include "llvm/ADT/DenseSet.h" 26 #include "llvm/ADT/MapVector.h" 27 #include "llvm/ADT/STLExtras.h" 28 #include "llvm/ADT/SmallVector.h" 29 #include "llvm/ADT/StringRef.h" 30 #include "llvm/ADT/Triple.h" 31 #include "llvm/ADT/Twine.h" 32 #include "llvm/BinaryFormat/Dwarf.h" 33 #include "llvm/CodeGen/AccelTable.h" 34 #include "llvm/CodeGen/AsmPrinter.h" 35 #include "llvm/CodeGen/DIE.h" 36 #include "llvm/CodeGen/LexicalScopes.h" 37 #include "llvm/CodeGen/MachineBasicBlock.h" 38 #include "llvm/CodeGen/MachineFunction.h" 39 #include "llvm/CodeGen/MachineInstr.h" 40 #include "llvm/CodeGen/MachineModuleInfo.h" 41 #include "llvm/CodeGen/MachineOperand.h" 42 #include "llvm/CodeGen/TargetRegisterInfo.h" 43 #include "llvm/CodeGen/TargetSubtargetInfo.h" 44 #include "llvm/IR/Constants.h" 45 #include "llvm/IR/DebugInfoMetadata.h" 46 #include "llvm/IR/DebugLoc.h" 47 #include "llvm/IR/Function.h" 48 #include "llvm/IR/GlobalVariable.h" 49 #include "llvm/IR/Module.h" 50 #include "llvm/MC/MCAsmInfo.h" 51 #include "llvm/MC/MCContext.h" 52 #include "llvm/MC/MCDwarf.h" 53 #include "llvm/MC/MCSection.h" 54 #include "llvm/MC/MCStreamer.h" 55 #include "llvm/MC/MCSymbol.h" 56 #include "llvm/MC/MCTargetOptions.h" 57 #include "llvm/MC/MachineLocation.h" 58 #include "llvm/MC/SectionKind.h" 59 #include "llvm/Pass.h" 60 #include "llvm/Support/Casting.h" 61 #include "llvm/Support/CommandLine.h" 62 #include "llvm/Support/Debug.h" 63 #include "llvm/Support/ErrorHandling.h" 64 #include "llvm/Support/MD5.h" 65 #include "llvm/Support/MathExtras.h" 66 #include "llvm/Support/Timer.h" 67 #include "llvm/Support/raw_ostream.h" 68 #include "llvm/Target/TargetLoweringObjectFile.h" 69 #include "llvm/Target/TargetMachine.h" 70 #include "llvm/Target/TargetOptions.h" 71 #include <algorithm> 72 #include <cassert> 73 #include <cstddef> 74 #include <cstdint> 75 #include <iterator> 76 #include <string> 77 #include <utility> 78 #include <vector> 79 80 using namespace llvm; 81 82 #define DEBUG_TYPE "dwarfdebug" 83 84 static cl::opt<bool> 85 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden, 86 cl::desc("Disable debug info printing")); 87 88 static cl::opt<bool> UseDwarfRangesBaseAddressSpecifier( 89 "use-dwarf-ranges-base-address-specifier", cl::Hidden, 90 cl::desc("Use base address specifiers in debug_ranges"), cl::init(false)); 91 92 static cl::opt<bool> GenerateARangeSection("generate-arange-section", 93 cl::Hidden, 94 cl::desc("Generate dwarf aranges"), 95 cl::init(false)); 96 97 static cl::opt<bool> SplitDwarfCrossCuReferences( 98 "split-dwarf-cross-cu-references", cl::Hidden, 99 cl::desc("Enable cross-cu references in DWO files"), cl::init(false)); 100 101 enum DefaultOnOff { Default, Enable, Disable }; 102 103 static cl::opt<DefaultOnOff> UnknownLocations( 104 "use-unknown-locations", cl::Hidden, 105 cl::desc("Make an absence of debug location information explicit."), 106 cl::values(clEnumVal(Default, "At top of block or after label"), 107 clEnumVal(Enable, "In all cases"), clEnumVal(Disable, "Never")), 108 cl::init(Default)); 109 110 static cl::opt<AccelTableKind> AccelTables( 111 "accel-tables", cl::Hidden, cl::desc("Output dwarf accelerator tables."), 112 cl::values(clEnumValN(AccelTableKind::Default, "Default", 113 "Default for platform"), 114 clEnumValN(AccelTableKind::None, "Disable", "Disabled."), 115 clEnumValN(AccelTableKind::Apple, "Apple", "Apple"), 116 clEnumValN(AccelTableKind::Dwarf, "Dwarf", "DWARF")), 117 cl::init(AccelTableKind::Default)); 118 119 static cl::opt<DefaultOnOff> 120 DwarfInlinedStrings("dwarf-inlined-strings", cl::Hidden, 121 cl::desc("Use inlined strings rather than string section."), 122 cl::values(clEnumVal(Default, "Default for platform"), 123 clEnumVal(Enable, "Enabled"), 124 clEnumVal(Disable, "Disabled")), 125 cl::init(Default)); 126 127 static cl::opt<bool> 128 NoDwarfPubSections("no-dwarf-pub-sections", cl::Hidden, 129 cl::desc("Disable emission of DWARF pub sections."), 130 cl::init(false)); 131 132 static cl::opt<bool> 133 NoDwarfRangesSection("no-dwarf-ranges-section", cl::Hidden, 134 cl::desc("Disable emission .debug_ranges section."), 135 cl::init(false)); 136 137 static cl::opt<DefaultOnOff> DwarfSectionsAsReferences( 138 "dwarf-sections-as-references", cl::Hidden, 139 cl::desc("Use sections+offset as references rather than labels."), 140 cl::values(clEnumVal(Default, "Default for platform"), 141 clEnumVal(Enable, "Enabled"), clEnumVal(Disable, "Disabled")), 142 cl::init(Default)); 143 144 enum LinkageNameOption { 145 DefaultLinkageNames, 146 AllLinkageNames, 147 AbstractLinkageNames 148 }; 149 150 static cl::opt<LinkageNameOption> 151 DwarfLinkageNames("dwarf-linkage-names", cl::Hidden, 152 cl::desc("Which DWARF linkage-name attributes to emit."), 153 cl::values(clEnumValN(DefaultLinkageNames, "Default", 154 "Default for platform"), 155 clEnumValN(AllLinkageNames, "All", "All"), 156 clEnumValN(AbstractLinkageNames, "Abstract", 157 "Abstract subprograms")), 158 cl::init(DefaultLinkageNames)); 159 160 static const char *const DWARFGroupName = "dwarf"; 161 static const char *const DWARFGroupDescription = "DWARF Emission"; 162 static const char *const DbgTimerName = "writer"; 163 static const char *const DbgTimerDescription = "DWARF Debug Writer"; 164 165 void DebugLocDwarfExpression::emitOp(uint8_t Op, const char *Comment) { 166 BS.EmitInt8( 167 Op, Comment ? Twine(Comment) + " " + dwarf::OperationEncodingString(Op) 168 : dwarf::OperationEncodingString(Op)); 169 } 170 171 void DebugLocDwarfExpression::emitSigned(int64_t Value) { 172 BS.EmitSLEB128(Value, Twine(Value)); 173 } 174 175 void DebugLocDwarfExpression::emitUnsigned(uint64_t Value) { 176 BS.EmitULEB128(Value, Twine(Value)); 177 } 178 179 bool DebugLocDwarfExpression::isFrameRegister(const TargetRegisterInfo &TRI, 180 unsigned MachineReg) { 181 // This information is not available while emitting .debug_loc entries. 182 return false; 183 } 184 185 bool DbgVariable::isBlockByrefVariable() const { 186 assert(Var && "Invalid complex DbgVariable!"); 187 return Var->getType().resolve()->isBlockByrefStruct(); 188 } 189 190 const DIType *DbgVariable::getType() const { 191 DIType *Ty = Var->getType().resolve(); 192 // FIXME: isBlockByrefVariable should be reformulated in terms of complex 193 // addresses instead. 194 if (Ty->isBlockByrefStruct()) { 195 /* Byref variables, in Blocks, are declared by the programmer as 196 "SomeType VarName;", but the compiler creates a 197 __Block_byref_x_VarName struct, and gives the variable VarName 198 either the struct, or a pointer to the struct, as its type. This 199 is necessary for various behind-the-scenes things the compiler 200 needs to do with by-reference variables in blocks. 201 202 However, as far as the original *programmer* is concerned, the 203 variable should still have type 'SomeType', as originally declared. 204 205 The following function dives into the __Block_byref_x_VarName 206 struct to find the original type of the variable. This will be 207 passed back to the code generating the type for the Debug 208 Information Entry for the variable 'VarName'. 'VarName' will then 209 have the original type 'SomeType' in its debug information. 210 211 The original type 'SomeType' will be the type of the field named 212 'VarName' inside the __Block_byref_x_VarName struct. 213 214 NOTE: In order for this to not completely fail on the debugger 215 side, the Debug Information Entry for the variable VarName needs to 216 have a DW_AT_location that tells the debugger how to unwind through 217 the pointers and __Block_byref_x_VarName struct to find the actual 218 value of the variable. The function addBlockByrefType does this. */ 219 DIType *subType = Ty; 220 uint16_t tag = Ty->getTag(); 221 222 if (tag == dwarf::DW_TAG_pointer_type) 223 subType = resolve(cast<DIDerivedType>(Ty)->getBaseType()); 224 225 auto Elements = cast<DICompositeType>(subType)->getElements(); 226 for (unsigned i = 0, N = Elements.size(); i < N; ++i) { 227 auto *DT = cast<DIDerivedType>(Elements[i]); 228 if (getName() == DT->getName()) 229 return resolve(DT->getBaseType()); 230 } 231 } 232 return Ty; 233 } 234 235 ArrayRef<DbgVariable::FrameIndexExpr> DbgVariable::getFrameIndexExprs() const { 236 if (FrameIndexExprs.size() == 1) 237 return FrameIndexExprs; 238 239 assert(llvm::all_of(FrameIndexExprs, 240 [](const FrameIndexExpr &A) { 241 return A.Expr->isFragment(); 242 }) && 243 "multiple FI expressions without DW_OP_LLVM_fragment"); 244 std::sort(FrameIndexExprs.begin(), FrameIndexExprs.end(), 245 [](const FrameIndexExpr &A, const FrameIndexExpr &B) -> bool { 246 return A.Expr->getFragmentInfo()->OffsetInBits < 247 B.Expr->getFragmentInfo()->OffsetInBits; 248 }); 249 250 return FrameIndexExprs; 251 } 252 253 void DbgVariable::addMMIEntry(const DbgVariable &V) { 254 assert(DebugLocListIndex == ~0U && !MInsn && "not an MMI entry"); 255 assert(V.DebugLocListIndex == ~0U && !V.MInsn && "not an MMI entry"); 256 assert(V.Var == Var && "conflicting variable"); 257 assert(V.IA == IA && "conflicting inlined-at location"); 258 259 assert(!FrameIndexExprs.empty() && "Expected an MMI entry"); 260 assert(!V.FrameIndexExprs.empty() && "Expected an MMI entry"); 261 262 // FIXME: This logic should not be necessary anymore, as we now have proper 263 // deduplication. However, without it, we currently run into the assertion 264 // below, which means that we are likely dealing with broken input, i.e. two 265 // non-fragment entries for the same variable at different frame indices. 266 if (FrameIndexExprs.size()) { 267 auto *Expr = FrameIndexExprs.back().Expr; 268 if (!Expr || !Expr->isFragment()) 269 return; 270 } 271 272 for (const auto &FIE : V.FrameIndexExprs) 273 // Ignore duplicate entries. 274 if (llvm::none_of(FrameIndexExprs, [&](const FrameIndexExpr &Other) { 275 return FIE.FI == Other.FI && FIE.Expr == Other.Expr; 276 })) 277 FrameIndexExprs.push_back(FIE); 278 279 assert((FrameIndexExprs.size() == 1 || 280 llvm::all_of(FrameIndexExprs, 281 [](FrameIndexExpr &FIE) { 282 return FIE.Expr && FIE.Expr->isFragment(); 283 })) && 284 "conflicting locations for variable"); 285 } 286 287 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M) 288 : DebugHandlerBase(A), DebugLocs(A->OutStreamer->isVerboseAsm()), 289 InfoHolder(A, "info_string", DIEValueAllocator), 290 SkeletonHolder(A, "skel_string", DIEValueAllocator), 291 IsDarwin(A->TM.getTargetTriple().isOSDarwin()) { 292 const Triple &TT = Asm->TM.getTargetTriple(); 293 294 // Make sure we know our "debugger tuning." The target option takes 295 // precedence; fall back to triple-based defaults. 296 if (Asm->TM.Options.DebuggerTuning != DebuggerKind::Default) 297 DebuggerTuning = Asm->TM.Options.DebuggerTuning; 298 else if (IsDarwin) 299 DebuggerTuning = DebuggerKind::LLDB; 300 else if (TT.isPS4CPU()) 301 DebuggerTuning = DebuggerKind::SCE; 302 else 303 DebuggerTuning = DebuggerKind::GDB; 304 305 // Turn on accelerator tables by default, if tuning for LLDB and the target is 306 // supported. 307 if (AccelTables == AccelTableKind::Default) { 308 if (tuneForLLDB() && A->TM.getTargetTriple().isOSBinFormatMachO()) 309 TheAccelTableKind = AccelTableKind::Apple; 310 else 311 TheAccelTableKind = AccelTableKind::None; 312 } else 313 TheAccelTableKind = AccelTables; 314 315 UseInlineStrings = DwarfInlinedStrings == Enable; 316 HasAppleExtensionAttributes = tuneForLLDB(); 317 318 // Handle split DWARF. 319 HasSplitDwarf = !Asm->TM.Options.MCOptions.SplitDwarfFile.empty(); 320 321 // SCE defaults to linkage names only for abstract subprograms. 322 if (DwarfLinkageNames == DefaultLinkageNames) 323 UseAllLinkageNames = !tuneForSCE(); 324 else 325 UseAllLinkageNames = DwarfLinkageNames == AllLinkageNames; 326 327 unsigned DwarfVersionNumber = Asm->TM.Options.MCOptions.DwarfVersion; 328 unsigned DwarfVersion = DwarfVersionNumber ? DwarfVersionNumber 329 : MMI->getModule()->getDwarfVersion(); 330 // Use dwarf 4 by default if nothing is requested. 331 DwarfVersion = DwarfVersion ? DwarfVersion : dwarf::DWARF_VERSION; 332 333 UsePubSections = !NoDwarfPubSections; 334 UseRangesSection = !NoDwarfRangesSection; 335 336 // Use sections as references. 337 UseSectionsAsReferences = DwarfSectionsAsReferences == Enable; 338 339 // Work around a GDB bug. GDB doesn't support the standard opcode; 340 // SCE doesn't support GNU's; LLDB prefers the standard opcode, which 341 // is defined as of DWARF 3. 342 // See GDB bug 11616 - DW_OP_form_tls_address is unimplemented 343 // https://sourceware.org/bugzilla/show_bug.cgi?id=11616 344 UseGNUTLSOpcode = tuneForGDB() || DwarfVersion < 3; 345 346 // GDB does not fully support the DWARF 4 representation for bitfields. 347 UseDWARF2Bitfields = (DwarfVersion < 4) || tuneForGDB(); 348 349 // The DWARF v5 string offsets table has - possibly shared - contributions 350 // from each compile and type unit each preceded by a header. The string 351 // offsets table used by the pre-DWARF v5 split-DWARF implementation uses 352 // a monolithic string offsets table without any header. 353 UseSegmentedStringOffsetsTable = DwarfVersion >= 5; 354 355 Asm->OutStreamer->getContext().setDwarfVersion(DwarfVersion); 356 } 357 358 // Define out of line so we don't have to include DwarfUnit.h in DwarfDebug.h. 359 DwarfDebug::~DwarfDebug() = default; 360 361 static bool isObjCClass(StringRef Name) { 362 return Name.startswith("+") || Name.startswith("-"); 363 } 364 365 static bool hasObjCCategory(StringRef Name) { 366 if (!isObjCClass(Name)) 367 return false; 368 369 return Name.find(") ") != StringRef::npos; 370 } 371 372 static void getObjCClassCategory(StringRef In, StringRef &Class, 373 StringRef &Category) { 374 if (!hasObjCCategory(In)) { 375 Class = In.slice(In.find('[') + 1, In.find(' ')); 376 Category = ""; 377 return; 378 } 379 380 Class = In.slice(In.find('[') + 1, In.find('(')); 381 Category = In.slice(In.find('[') + 1, In.find(' ')); 382 } 383 384 static StringRef getObjCMethodName(StringRef In) { 385 return In.slice(In.find(' ') + 1, In.find(']')); 386 } 387 388 // Add the various names to the Dwarf accelerator table names. 389 // TODO: Determine whether or not we should add names for programs 390 // that do not have a DW_AT_name or DW_AT_linkage_name field - this 391 // is only slightly different than the lookup of non-standard ObjC names. 392 void DwarfDebug::addSubprogramNames(const DISubprogram *SP, DIE &Die) { 393 if (!SP->isDefinition()) 394 return; 395 addAccelName(SP->getName(), Die); 396 397 // If the linkage name is different than the name, go ahead and output 398 // that as well into the name table. 399 if (SP->getLinkageName() != "" && SP->getName() != SP->getLinkageName()) 400 addAccelName(SP->getLinkageName(), Die); 401 402 // If this is an Objective-C selector name add it to the ObjC accelerator 403 // too. 404 if (isObjCClass(SP->getName())) { 405 StringRef Class, Category; 406 getObjCClassCategory(SP->getName(), Class, Category); 407 addAccelObjC(Class, Die); 408 if (Category != "") 409 addAccelObjC(Category, Die); 410 // Also add the base method name to the name table. 411 addAccelName(getObjCMethodName(SP->getName()), Die); 412 } 413 } 414 415 /// Check whether we should create a DIE for the given Scope, return true 416 /// if we don't create a DIE (the corresponding DIE is null). 417 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) { 418 if (Scope->isAbstractScope()) 419 return false; 420 421 // We don't create a DIE if there is no Range. 422 const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges(); 423 if (Ranges.empty()) 424 return true; 425 426 if (Ranges.size() > 1) 427 return false; 428 429 // We don't create a DIE if we have a single Range and the end label 430 // is null. 431 return !getLabelAfterInsn(Ranges.front().second); 432 } 433 434 template <typename Func> static void forBothCUs(DwarfCompileUnit &CU, Func F) { 435 F(CU); 436 if (auto *SkelCU = CU.getSkeleton()) 437 if (CU.getCUNode()->getSplitDebugInlining()) 438 F(*SkelCU); 439 } 440 441 bool DwarfDebug::shareAcrossDWOCUs() const { 442 return SplitDwarfCrossCuReferences; 443 } 444 445 void DwarfDebug::constructAbstractSubprogramScopeDIE(DwarfCompileUnit &SrcCU, 446 LexicalScope *Scope) { 447 assert(Scope && Scope->getScopeNode()); 448 assert(Scope->isAbstractScope()); 449 assert(!Scope->getInlinedAt()); 450 451 auto *SP = cast<DISubprogram>(Scope->getScopeNode()); 452 453 // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram 454 // was inlined from another compile unit. 455 if (useSplitDwarf() && !shareAcrossDWOCUs() && !SP->getUnit()->getSplitDebugInlining()) 456 // Avoid building the original CU if it won't be used 457 SrcCU.constructAbstractSubprogramScopeDIE(Scope); 458 else { 459 auto &CU = getOrCreateDwarfCompileUnit(SP->getUnit()); 460 if (auto *SkelCU = CU.getSkeleton()) { 461 (shareAcrossDWOCUs() ? CU : SrcCU) 462 .constructAbstractSubprogramScopeDIE(Scope); 463 if (CU.getCUNode()->getSplitDebugInlining()) 464 SkelCU->constructAbstractSubprogramScopeDIE(Scope); 465 } else 466 CU.constructAbstractSubprogramScopeDIE(Scope); 467 } 468 } 469 470 void DwarfDebug::addGnuPubAttributes(DwarfCompileUnit &U, DIE &D) const { 471 if (!U.hasDwarfPubSections()) 472 return; 473 474 U.addFlag(D, dwarf::DW_AT_GNU_pubnames); 475 } 476 477 // Create new DwarfCompileUnit for the given metadata node with tag 478 // DW_TAG_compile_unit. 479 DwarfCompileUnit & 480 DwarfDebug::getOrCreateDwarfCompileUnit(const DICompileUnit *DIUnit) { 481 if (auto *CU = CUMap.lookup(DIUnit)) 482 return *CU; 483 StringRef FN = DIUnit->getFilename(); 484 CompilationDir = DIUnit->getDirectory(); 485 486 auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>( 487 InfoHolder.getUnits().size(), DIUnit, Asm, this, &InfoHolder); 488 DwarfCompileUnit &NewCU = *OwnedUnit; 489 DIE &Die = NewCU.getUnitDie(); 490 InfoHolder.addUnit(std::move(OwnedUnit)); 491 if (useSplitDwarf()) { 492 NewCU.setSkeleton(constructSkeletonCU(NewCU)); 493 NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name, 494 Asm->TM.Options.MCOptions.SplitDwarfFile); 495 } 496 497 for (auto *IE : DIUnit->getImportedEntities()) 498 NewCU.addImportedEntity(IE); 499 500 // LTO with assembly output shares a single line table amongst multiple CUs. 501 // To avoid the compilation directory being ambiguous, let the line table 502 // explicitly describe the directory of all files, never relying on the 503 // compilation directory. 504 if (!Asm->OutStreamer->hasRawTextSupport() || SingleCU) 505 Asm->OutStreamer->emitDwarfFile0Directive( 506 CompilationDir, FN, NewCU.getMD5AsBytes(DIUnit->getFile()), 507 DIUnit->getSource(), NewCU.getUniqueID()); 508 509 StringRef Producer = DIUnit->getProducer(); 510 StringRef Flags = DIUnit->getFlags(); 511 if (!Flags.empty()) { 512 std::string ProducerWithFlags = Producer.str() + " " + Flags.str(); 513 NewCU.addString(Die, dwarf::DW_AT_producer, ProducerWithFlags); 514 } else 515 NewCU.addString(Die, dwarf::DW_AT_producer, Producer); 516 517 NewCU.addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2, 518 DIUnit->getSourceLanguage()); 519 NewCU.addString(Die, dwarf::DW_AT_name, FN); 520 521 // Add DW_str_offsets_base to the unit DIE, except for split units. 522 if (useSegmentedStringOffsetsTable() && !useSplitDwarf()) 523 NewCU.addStringOffsetsStart(); 524 525 if (!useSplitDwarf()) { 526 NewCU.initStmtList(); 527 528 // If we're using split dwarf the compilation dir is going to be in the 529 // skeleton CU and so we don't need to duplicate it here. 530 if (!CompilationDir.empty()) 531 NewCU.addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); 532 533 addGnuPubAttributes(NewCU, Die); 534 } 535 536 if (useAppleExtensionAttributes()) { 537 if (DIUnit->isOptimized()) 538 NewCU.addFlag(Die, dwarf::DW_AT_APPLE_optimized); 539 540 StringRef Flags = DIUnit->getFlags(); 541 if (!Flags.empty()) 542 NewCU.addString(Die, dwarf::DW_AT_APPLE_flags, Flags); 543 544 if (unsigned RVer = DIUnit->getRuntimeVersion()) 545 NewCU.addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers, 546 dwarf::DW_FORM_data1, RVer); 547 } 548 549 if (useSplitDwarf()) 550 NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoDWOSection()); 551 else 552 NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection()); 553 554 if (DIUnit->getDWOId()) { 555 // This CU is either a clang module DWO or a skeleton CU. 556 NewCU.addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 557 DIUnit->getDWOId()); 558 if (!DIUnit->getSplitDebugFilename().empty()) 559 // This is a prefabricated skeleton CU. 560 NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name, 561 DIUnit->getSplitDebugFilename()); 562 } 563 564 CUMap.insert({DIUnit, &NewCU}); 565 CUDieMap.insert({&Die, &NewCU}); 566 return NewCU; 567 } 568 569 void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU, 570 const DIImportedEntity *N) { 571 if (isa<DILocalScope>(N->getScope())) 572 return; 573 if (DIE *D = TheCU.getOrCreateContextDIE(N->getScope())) 574 D->addChild(TheCU.constructImportedEntityDIE(N)); 575 } 576 577 /// Sort and unique GVEs by comparing their fragment offset. 578 static SmallVectorImpl<DwarfCompileUnit::GlobalExpr> & 579 sortGlobalExprs(SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &GVEs) { 580 std::sort(GVEs.begin(), GVEs.end(), 581 [](DwarfCompileUnit::GlobalExpr A, DwarfCompileUnit::GlobalExpr B) { 582 // Sort order: first null exprs, then exprs without fragment 583 // info, then sort by fragment offset in bits. 584 // FIXME: Come up with a more comprehensive comparator so 585 // the sorting isn't non-deterministic, and so the following 586 // std::unique call works correctly. 587 if (!A.Expr || !B.Expr) 588 return !!B.Expr; 589 auto FragmentA = A.Expr->getFragmentInfo(); 590 auto FragmentB = B.Expr->getFragmentInfo(); 591 if (!FragmentA || !FragmentB) 592 return !!FragmentB; 593 return FragmentA->OffsetInBits < FragmentB->OffsetInBits; 594 }); 595 GVEs.erase(std::unique(GVEs.begin(), GVEs.end(), 596 [](DwarfCompileUnit::GlobalExpr A, 597 DwarfCompileUnit::GlobalExpr B) { 598 return A.Expr == B.Expr; 599 }), 600 GVEs.end()); 601 return GVEs; 602 } 603 604 // Emit all Dwarf sections that should come prior to the content. Create 605 // global DIEs and emit initial debug info sections. This is invoked by 606 // the target AsmPrinter. 607 void DwarfDebug::beginModule() { 608 NamedRegionTimer T(DbgTimerName, DbgTimerDescription, DWARFGroupName, 609 DWARFGroupDescription, TimePassesIsEnabled); 610 if (DisableDebugInfoPrinting) 611 return; 612 613 const Module *M = MMI->getModule(); 614 615 unsigned NumDebugCUs = std::distance(M->debug_compile_units_begin(), 616 M->debug_compile_units_end()); 617 // Tell MMI whether we have debug info. 618 MMI->setDebugInfoAvailability(NumDebugCUs > 0); 619 SingleCU = NumDebugCUs == 1; 620 DenseMap<DIGlobalVariable *, SmallVector<DwarfCompileUnit::GlobalExpr, 1>> 621 GVMap; 622 for (const GlobalVariable &Global : M->globals()) { 623 SmallVector<DIGlobalVariableExpression *, 1> GVs; 624 Global.getDebugInfo(GVs); 625 for (auto *GVE : GVs) 626 GVMap[GVE->getVariable()].push_back({&Global, GVE->getExpression()}); 627 } 628 629 // Create the symbol that designates the start of the unit's contribution 630 // to the string offsets table. In a split DWARF scenario, only the skeleton 631 // unit has the DW_AT_str_offsets_base attribute (and hence needs the symbol). 632 if (useSegmentedStringOffsetsTable()) 633 (useSplitDwarf() ? SkeletonHolder : InfoHolder) 634 .setStringOffsetsStartSym(Asm->createTempSymbol("str_offsets_base")); 635 636 for (DICompileUnit *CUNode : M->debug_compile_units()) { 637 // FIXME: Move local imported entities into a list attached to the 638 // subprogram, then this search won't be needed and a 639 // getImportedEntities().empty() test should go below with the rest. 640 bool HasNonLocalImportedEntities = llvm::any_of( 641 CUNode->getImportedEntities(), [](const DIImportedEntity *IE) { 642 return !isa<DILocalScope>(IE->getScope()); 643 }); 644 645 if (!HasNonLocalImportedEntities && CUNode->getEnumTypes().empty() && 646 CUNode->getRetainedTypes().empty() && 647 CUNode->getGlobalVariables().empty() && CUNode->getMacros().empty()) 648 continue; 649 650 DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(CUNode); 651 652 // Global Variables. 653 for (auto *GVE : CUNode->getGlobalVariables()) { 654 // Don't bother adding DIGlobalVariableExpressions listed in the CU if we 655 // already know about the variable and it isn't adding a constant 656 // expression. 657 auto &GVMapEntry = GVMap[GVE->getVariable()]; 658 auto *Expr = GVE->getExpression(); 659 if (!GVMapEntry.size() || (Expr && Expr->isConstant())) 660 GVMapEntry.push_back({nullptr, Expr}); 661 } 662 DenseSet<DIGlobalVariable *> Processed; 663 for (auto *GVE : CUNode->getGlobalVariables()) { 664 DIGlobalVariable *GV = GVE->getVariable(); 665 if (Processed.insert(GV).second) 666 CU.getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV])); 667 } 668 669 for (auto *Ty : CUNode->getEnumTypes()) { 670 // The enum types array by design contains pointers to 671 // MDNodes rather than DIRefs. Unique them here. 672 CU.getOrCreateTypeDIE(cast<DIType>(Ty)); 673 } 674 for (auto *Ty : CUNode->getRetainedTypes()) { 675 // The retained types array by design contains pointers to 676 // MDNodes rather than DIRefs. Unique them here. 677 if (DIType *RT = dyn_cast<DIType>(Ty)) 678 // There is no point in force-emitting a forward declaration. 679 CU.getOrCreateTypeDIE(RT); 680 } 681 // Emit imported_modules last so that the relevant context is already 682 // available. 683 for (auto *IE : CUNode->getImportedEntities()) 684 constructAndAddImportedEntityDIE(CU, IE); 685 } 686 } 687 688 void DwarfDebug::finishVariableDefinitions() { 689 for (const auto &Var : ConcreteVariables) { 690 DIE *VariableDie = Var->getDIE(); 691 assert(VariableDie); 692 // FIXME: Consider the time-space tradeoff of just storing the unit pointer 693 // in the ConcreteVariables list, rather than looking it up again here. 694 // DIE::getUnit isn't simple - it walks parent pointers, etc. 695 DwarfCompileUnit *Unit = CUDieMap.lookup(VariableDie->getUnitDie()); 696 assert(Unit); 697 Unit->finishVariableDefinition(*Var); 698 } 699 } 700 701 void DwarfDebug::finishSubprogramDefinitions() { 702 for (const DISubprogram *SP : ProcessedSPNodes) { 703 assert(SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug); 704 forBothCUs( 705 getOrCreateDwarfCompileUnit(SP->getUnit()), 706 [&](DwarfCompileUnit &CU) { CU.finishSubprogramDefinition(SP); }); 707 } 708 } 709 710 void DwarfDebug::finalizeModuleInfo() { 711 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering(); 712 713 finishSubprogramDefinitions(); 714 715 finishVariableDefinitions(); 716 717 // Include the DWO file name in the hash if there's more than one CU. 718 // This handles ThinLTO's situation where imported CUs may very easily be 719 // duplicate with the same CU partially imported into another ThinLTO unit. 720 StringRef DWOName; 721 if (CUMap.size() > 1) 722 DWOName = Asm->TM.Options.MCOptions.SplitDwarfFile; 723 724 // Handle anything that needs to be done on a per-unit basis after 725 // all other generation. 726 for (const auto &P : CUMap) { 727 auto &TheCU = *P.second; 728 // Emit DW_AT_containing_type attribute to connect types with their 729 // vtable holding type. 730 TheCU.constructContainingTypeDIEs(); 731 732 // Add CU specific attributes if we need to add any. 733 // If we're splitting the dwarf out now that we've got the entire 734 // CU then add the dwo id to it. 735 auto *SkCU = TheCU.getSkeleton(); 736 if (useSplitDwarf()) { 737 // Emit a unique identifier for this CU. 738 uint64_t ID = 739 DIEHash(Asm).computeCUSignature(DWOName, TheCU.getUnitDie()); 740 TheCU.addUInt(TheCU.getUnitDie(), dwarf::DW_AT_GNU_dwo_id, 741 dwarf::DW_FORM_data8, ID); 742 SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id, 743 dwarf::DW_FORM_data8, ID); 744 745 // We don't keep track of which addresses are used in which CU so this 746 // is a bit pessimistic under LTO. 747 if (!AddrPool.isEmpty()) { 748 const MCSymbol *Sym = TLOF.getDwarfAddrSection()->getBeginSymbol(); 749 SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_addr_base, 750 Sym, Sym); 751 } 752 if (!SkCU->getRangeLists().empty()) { 753 const MCSymbol *Sym = TLOF.getDwarfRangesSection()->getBeginSymbol(); 754 SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_ranges_base, 755 Sym, Sym); 756 } 757 } 758 759 // If we have code split among multiple sections or non-contiguous 760 // ranges of code then emit a DW_AT_ranges attribute on the unit that will 761 // remain in the .o file, otherwise add a DW_AT_low_pc. 762 // FIXME: We should use ranges allow reordering of code ala 763 // .subsections_via_symbols in mach-o. This would mean turning on 764 // ranges for all subprogram DIEs for mach-o. 765 DwarfCompileUnit &U = SkCU ? *SkCU : TheCU; 766 if (unsigned NumRanges = TheCU.getRanges().size()) { 767 if (NumRanges > 1 && useRangesSection()) 768 // A DW_AT_low_pc attribute may also be specified in combination with 769 // DW_AT_ranges to specify the default base address for use in 770 // location lists (see Section 2.6.2) and range lists (see Section 771 // 2.17.3). 772 U.addUInt(U.getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0); 773 else 774 U.setBaseAddress(TheCU.getRanges().front().getStart()); 775 U.attachRangesOrLowHighPC(U.getUnitDie(), TheCU.takeRanges()); 776 } 777 778 auto *CUNode = cast<DICompileUnit>(P.first); 779 // If compile Unit has macros, emit "DW_AT_macro_info" attribute. 780 if (CUNode->getMacros()) 781 U.addSectionLabel(U.getUnitDie(), dwarf::DW_AT_macro_info, 782 U.getMacroLabelBegin(), 783 TLOF.getDwarfMacinfoSection()->getBeginSymbol()); 784 } 785 786 // Emit all frontend-produced Skeleton CUs, i.e., Clang modules. 787 for (auto *CUNode : MMI->getModule()->debug_compile_units()) 788 if (CUNode->getDWOId()) 789 getOrCreateDwarfCompileUnit(CUNode); 790 791 // Compute DIE offsets and sizes. 792 InfoHolder.computeSizeAndOffsets(); 793 if (useSplitDwarf()) 794 SkeletonHolder.computeSizeAndOffsets(); 795 } 796 797 // Emit all Dwarf sections that should come after the content. 798 void DwarfDebug::endModule() { 799 assert(CurFn == nullptr); 800 assert(CurMI == nullptr); 801 802 // If we aren't actually generating debug info (check beginModule - 803 // conditionalized on !DisableDebugInfoPrinting and the presence of the 804 // llvm.dbg.cu metadata node) 805 if (!MMI->hasDebugInfo()) 806 return; 807 808 // Finalize the debug info for the module. 809 finalizeModuleInfo(); 810 811 emitDebugStr(); 812 813 if (useSplitDwarf()) 814 emitDebugLocDWO(); 815 else 816 // Emit info into a debug loc section. 817 emitDebugLoc(); 818 819 // Corresponding abbreviations into a abbrev section. 820 emitAbbreviations(); 821 822 // Emit all the DIEs into a debug info section. 823 emitDebugInfo(); 824 825 // Emit info into a debug aranges section. 826 if (GenerateARangeSection) 827 emitDebugARanges(); 828 829 // Emit info into a debug ranges section. 830 emitDebugRanges(); 831 832 // Emit info into a debug macinfo section. 833 emitDebugMacinfo(); 834 835 if (useSplitDwarf()) { 836 emitDebugStrDWO(); 837 emitDebugInfoDWO(); 838 emitDebugAbbrevDWO(); 839 emitDebugLineDWO(); 840 // Emit DWO addresses. 841 AddrPool.emit(*Asm, Asm->getObjFileLowering().getDwarfAddrSection()); 842 } 843 844 // Emit info into the dwarf accelerator table sections. 845 switch (getAccelTableKind()) { 846 case AccelTableKind::Apple: 847 emitAccelNames(); 848 emitAccelObjC(); 849 emitAccelNamespaces(); 850 emitAccelTypes(); 851 break; 852 case AccelTableKind::Dwarf: 853 emitAccelDebugNames(); 854 break; 855 case AccelTableKind::None: 856 break; 857 case AccelTableKind::Default: 858 llvm_unreachable("Default should have already been resolved."); 859 } 860 861 // Emit the pubnames and pubtypes sections if requested. 862 emitDebugPubSections(); 863 864 // clean up. 865 // FIXME: AbstractVariables.clear(); 866 } 867 868 void DwarfDebug::ensureAbstractVariableIsCreated(DwarfCompileUnit &CU, InlinedVariable IV, 869 const MDNode *ScopeNode) { 870 const DILocalVariable *Cleansed = nullptr; 871 if (CU.getExistingAbstractVariable(IV, Cleansed)) 872 return; 873 874 CU.createAbstractVariable(Cleansed, LScopes.getOrCreateAbstractScope( 875 cast<DILocalScope>(ScopeNode))); 876 } 877 878 void DwarfDebug::ensureAbstractVariableIsCreatedIfScoped(DwarfCompileUnit &CU, 879 InlinedVariable IV, const MDNode *ScopeNode) { 880 const DILocalVariable *Cleansed = nullptr; 881 if (CU.getExistingAbstractVariable(IV, Cleansed)) 882 return; 883 884 if (LexicalScope *Scope = 885 LScopes.findAbstractScope(cast_or_null<DILocalScope>(ScopeNode))) 886 CU.createAbstractVariable(Cleansed, Scope); 887 } 888 889 // Collect variable information from side table maintained by MF. 890 void DwarfDebug::collectVariableInfoFromMFTable( 891 DwarfCompileUnit &TheCU, DenseSet<InlinedVariable> &Processed) { 892 SmallDenseMap<InlinedVariable, DbgVariable *> MFVars; 893 for (const auto &VI : Asm->MF->getVariableDbgInfo()) { 894 if (!VI.Var) 895 continue; 896 assert(VI.Var->isValidLocationForIntrinsic(VI.Loc) && 897 "Expected inlined-at fields to agree"); 898 899 InlinedVariable Var(VI.Var, VI.Loc->getInlinedAt()); 900 Processed.insert(Var); 901 LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc); 902 903 // If variable scope is not found then skip this variable. 904 if (!Scope) 905 continue; 906 907 ensureAbstractVariableIsCreatedIfScoped(TheCU, Var, Scope->getScopeNode()); 908 auto RegVar = llvm::make_unique<DbgVariable>(Var.first, Var.second); 909 RegVar->initializeMMI(VI.Expr, VI.Slot); 910 if (DbgVariable *DbgVar = MFVars.lookup(Var)) 911 DbgVar->addMMIEntry(*RegVar); 912 else if (InfoHolder.addScopeVariable(Scope, RegVar.get())) { 913 MFVars.insert({Var, RegVar.get()}); 914 ConcreteVariables.push_back(std::move(RegVar)); 915 } 916 } 917 } 918 919 // Get .debug_loc entry for the instruction range starting at MI. 920 static DebugLocEntry::Value getDebugLocValue(const MachineInstr *MI) { 921 const DIExpression *Expr = MI->getDebugExpression(); 922 assert(MI->getNumOperands() == 4); 923 if (MI->getOperand(0).isReg()) { 924 auto RegOp = MI->getOperand(0); 925 auto Op1 = MI->getOperand(1); 926 // If the second operand is an immediate, this is a 927 // register-indirect address. 928 assert((!Op1.isImm() || (Op1.getImm() == 0)) && "unexpected offset"); 929 MachineLocation MLoc(RegOp.getReg(), Op1.isImm()); 930 return DebugLocEntry::Value(Expr, MLoc); 931 } 932 if (MI->getOperand(0).isImm()) 933 return DebugLocEntry::Value(Expr, MI->getOperand(0).getImm()); 934 if (MI->getOperand(0).isFPImm()) 935 return DebugLocEntry::Value(Expr, MI->getOperand(0).getFPImm()); 936 if (MI->getOperand(0).isCImm()) 937 return DebugLocEntry::Value(Expr, MI->getOperand(0).getCImm()); 938 939 llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!"); 940 } 941 942 /// \brief If this and Next are describing different fragments of the same 943 /// variable, merge them by appending Next's values to the current 944 /// list of values. 945 /// Return true if the merge was successful. 946 bool DebugLocEntry::MergeValues(const DebugLocEntry &Next) { 947 if (Begin == Next.Begin) { 948 auto *FirstExpr = cast<DIExpression>(Values[0].Expression); 949 auto *FirstNextExpr = cast<DIExpression>(Next.Values[0].Expression); 950 if (!FirstExpr->isFragment() || !FirstNextExpr->isFragment()) 951 return false; 952 953 // We can only merge entries if none of the fragments overlap any others. 954 // In doing so, we can take advantage of the fact that both lists are 955 // sorted. 956 for (unsigned i = 0, j = 0; i < Values.size(); ++i) { 957 for (; j < Next.Values.size(); ++j) { 958 int res = cast<DIExpression>(Values[i].Expression)->fragmentCmp( 959 cast<DIExpression>(Next.Values[j].Expression)); 960 if (res == 0) // The two expressions overlap, we can't merge. 961 return false; 962 // Values[i] is entirely before Next.Values[j], 963 // so go back to the next entry of Values. 964 else if (res == -1) 965 break; 966 // Next.Values[j] is entirely before Values[i], so go on to the 967 // next entry of Next.Values. 968 } 969 } 970 971 addValues(Next.Values); 972 End = Next.End; 973 return true; 974 } 975 return false; 976 } 977 978 /// Build the location list for all DBG_VALUEs in the function that 979 /// describe the same variable. If the ranges of several independent 980 /// fragments of the same variable overlap partially, split them up and 981 /// combine the ranges. The resulting DebugLocEntries are will have 982 /// strict monotonically increasing begin addresses and will never 983 /// overlap. 984 // 985 // Input: 986 // 987 // Ranges History [var, loc, fragment ofs size] 988 // 0 | [x, (reg0, fragment 0, 32)] 989 // 1 | | [x, (reg1, fragment 32, 32)] <- IsFragmentOfPrevEntry 990 // 2 | | ... 991 // 3 | [clobber reg0] 992 // 4 [x, (mem, fragment 0, 64)] <- overlapping with both previous fragments of 993 // x. 994 // 995 // Output: 996 // 997 // [0-1] [x, (reg0, fragment 0, 32)] 998 // [1-3] [x, (reg0, fragment 0, 32), (reg1, fragment 32, 32)] 999 // [3-4] [x, (reg1, fragment 32, 32)] 1000 // [4- ] [x, (mem, fragment 0, 64)] 1001 void 1002 DwarfDebug::buildLocationList(SmallVectorImpl<DebugLocEntry> &DebugLoc, 1003 const DbgValueHistoryMap::InstrRanges &Ranges) { 1004 SmallVector<DebugLocEntry::Value, 4> OpenRanges; 1005 1006 for (auto I = Ranges.begin(), E = Ranges.end(); I != E; ++I) { 1007 const MachineInstr *Begin = I->first; 1008 const MachineInstr *End = I->second; 1009 assert(Begin->isDebugValue() && "Invalid History entry"); 1010 1011 // Check if a variable is inaccessible in this range. 1012 if (Begin->getNumOperands() > 1 && 1013 Begin->getOperand(0).isReg() && !Begin->getOperand(0).getReg()) { 1014 OpenRanges.clear(); 1015 continue; 1016 } 1017 1018 // If this fragment overlaps with any open ranges, truncate them. 1019 const DIExpression *DIExpr = Begin->getDebugExpression(); 1020 auto Last = remove_if(OpenRanges, [&](DebugLocEntry::Value R) { 1021 return DIExpr->fragmentsOverlap(R.getExpression()); 1022 }); 1023 OpenRanges.erase(Last, OpenRanges.end()); 1024 1025 const MCSymbol *StartLabel = getLabelBeforeInsn(Begin); 1026 assert(StartLabel && "Forgot label before DBG_VALUE starting a range!"); 1027 1028 const MCSymbol *EndLabel; 1029 if (End != nullptr) 1030 EndLabel = getLabelAfterInsn(End); 1031 else if (std::next(I) == Ranges.end()) 1032 EndLabel = Asm->getFunctionEnd(); 1033 else 1034 EndLabel = getLabelBeforeInsn(std::next(I)->first); 1035 assert(EndLabel && "Forgot label after instruction ending a range!"); 1036 1037 DEBUG(dbgs() << "DotDebugLoc: " << *Begin << "\n"); 1038 1039 auto Value = getDebugLocValue(Begin); 1040 DebugLocEntry Loc(StartLabel, EndLabel, Value); 1041 bool couldMerge = false; 1042 1043 // If this is a fragment, it may belong to the current DebugLocEntry. 1044 if (DIExpr->isFragment()) { 1045 // Add this value to the list of open ranges. 1046 OpenRanges.push_back(Value); 1047 1048 // Attempt to add the fragment to the last entry. 1049 if (!DebugLoc.empty()) 1050 if (DebugLoc.back().MergeValues(Loc)) 1051 couldMerge = true; 1052 } 1053 1054 if (!couldMerge) { 1055 // Need to add a new DebugLocEntry. Add all values from still 1056 // valid non-overlapping fragments. 1057 if (OpenRanges.size()) 1058 Loc.addValues(OpenRanges); 1059 1060 DebugLoc.push_back(std::move(Loc)); 1061 } 1062 1063 // Attempt to coalesce the ranges of two otherwise identical 1064 // DebugLocEntries. 1065 auto CurEntry = DebugLoc.rbegin(); 1066 DEBUG({ 1067 dbgs() << CurEntry->getValues().size() << " Values:\n"; 1068 for (auto &Value : CurEntry->getValues()) 1069 Value.dump(); 1070 dbgs() << "-----\n"; 1071 }); 1072 1073 auto PrevEntry = std::next(CurEntry); 1074 if (PrevEntry != DebugLoc.rend() && PrevEntry->MergeRanges(*CurEntry)) 1075 DebugLoc.pop_back(); 1076 } 1077 } 1078 1079 DbgVariable *DwarfDebug::createConcreteVariable(DwarfCompileUnit &TheCU, 1080 LexicalScope &Scope, 1081 InlinedVariable IV) { 1082 ensureAbstractVariableIsCreatedIfScoped(TheCU, IV, Scope.getScopeNode()); 1083 ConcreteVariables.push_back( 1084 llvm::make_unique<DbgVariable>(IV.first, IV.second)); 1085 InfoHolder.addScopeVariable(&Scope, ConcreteVariables.back().get()); 1086 return ConcreteVariables.back().get(); 1087 } 1088 1089 /// Determine whether a *singular* DBG_VALUE is valid for the entirety of its 1090 /// enclosing lexical scope. The check ensures there are no other instructions 1091 /// in the same lexical scope preceding the DBG_VALUE and that its range is 1092 /// either open or otherwise rolls off the end of the scope. 1093 static bool validThroughout(LexicalScopes &LScopes, 1094 const MachineInstr *DbgValue, 1095 const MachineInstr *RangeEnd) { 1096 assert(DbgValue->getDebugLoc() && "DBG_VALUE without a debug location"); 1097 auto MBB = DbgValue->getParent(); 1098 auto DL = DbgValue->getDebugLoc(); 1099 auto *LScope = LScopes.findLexicalScope(DL); 1100 // Scope doesn't exist; this is a dead DBG_VALUE. 1101 if (!LScope) 1102 return false; 1103 auto &LSRange = LScope->getRanges(); 1104 if (LSRange.size() == 0) 1105 return false; 1106 1107 // Determine if the DBG_VALUE is valid at the beginning of its lexical block. 1108 const MachineInstr *LScopeBegin = LSRange.front().first; 1109 // Early exit if the lexical scope begins outside of the current block. 1110 if (LScopeBegin->getParent() != MBB) 1111 return false; 1112 MachineBasicBlock::const_reverse_iterator Pred(DbgValue); 1113 for (++Pred; Pred != MBB->rend(); ++Pred) { 1114 if (Pred->getFlag(MachineInstr::FrameSetup)) 1115 break; 1116 auto PredDL = Pred->getDebugLoc(); 1117 if (!PredDL || Pred->isMetaInstruction()) 1118 continue; 1119 // Check whether the instruction preceding the DBG_VALUE is in the same 1120 // (sub)scope as the DBG_VALUE. 1121 if (DL->getScope() == PredDL->getScope()) 1122 return false; 1123 auto *PredScope = LScopes.findLexicalScope(PredDL); 1124 if (!PredScope || LScope->dominates(PredScope)) 1125 return false; 1126 } 1127 1128 // If the range of the DBG_VALUE is open-ended, report success. 1129 if (!RangeEnd) 1130 return true; 1131 1132 // Fail if there are instructions belonging to our scope in another block. 1133 const MachineInstr *LScopeEnd = LSRange.back().second; 1134 if (LScopeEnd->getParent() != MBB) 1135 return false; 1136 1137 // Single, constant DBG_VALUEs in the prologue are promoted to be live 1138 // throughout the function. This is a hack, presumably for DWARF v2 and not 1139 // necessarily correct. It would be much better to use a dbg.declare instead 1140 // if we know the constant is live throughout the scope. 1141 if (DbgValue->getOperand(0).isImm() && MBB->pred_empty()) 1142 return true; 1143 1144 return false; 1145 } 1146 1147 // Find variables for each lexical scope. 1148 void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU, 1149 const DISubprogram *SP, 1150 DenseSet<InlinedVariable> &Processed) { 1151 // Grab the variable info that was squirreled away in the MMI side-table. 1152 collectVariableInfoFromMFTable(TheCU, Processed); 1153 1154 for (const auto &I : DbgValues) { 1155 InlinedVariable IV = I.first; 1156 if (Processed.count(IV)) 1157 continue; 1158 1159 // Instruction ranges, specifying where IV is accessible. 1160 const auto &Ranges = I.second; 1161 if (Ranges.empty()) 1162 continue; 1163 1164 LexicalScope *Scope = nullptr; 1165 if (const DILocation *IA = IV.second) 1166 Scope = LScopes.findInlinedScope(IV.first->getScope(), IA); 1167 else 1168 Scope = LScopes.findLexicalScope(IV.first->getScope()); 1169 // If variable scope is not found then skip this variable. 1170 if (!Scope) 1171 continue; 1172 1173 Processed.insert(IV); 1174 DbgVariable *RegVar = createConcreteVariable(TheCU, *Scope, IV); 1175 1176 const MachineInstr *MInsn = Ranges.front().first; 1177 assert(MInsn->isDebugValue() && "History must begin with debug value"); 1178 1179 // Check if there is a single DBG_VALUE, valid throughout the var's scope. 1180 if (Ranges.size() == 1 && 1181 validThroughout(LScopes, MInsn, Ranges.front().second)) { 1182 RegVar->initializeDbgValue(MInsn); 1183 continue; 1184 } 1185 1186 // Handle multiple DBG_VALUE instructions describing one variable. 1187 DebugLocStream::ListBuilder List(DebugLocs, TheCU, *Asm, *RegVar, *MInsn); 1188 1189 // Build the location list for this variable. 1190 SmallVector<DebugLocEntry, 8> Entries; 1191 buildLocationList(Entries, Ranges); 1192 1193 // If the variable has a DIBasicType, extract it. Basic types cannot have 1194 // unique identifiers, so don't bother resolving the type with the 1195 // identifier map. 1196 const DIBasicType *BT = dyn_cast<DIBasicType>( 1197 static_cast<const Metadata *>(IV.first->getType())); 1198 1199 // Finalize the entry by lowering it into a DWARF bytestream. 1200 for (auto &Entry : Entries) 1201 Entry.finalize(*Asm, List, BT); 1202 } 1203 1204 // Collect info for variables that were optimized out. 1205 for (const DILocalVariable *DV : SP->getVariables()) { 1206 if (Processed.insert(InlinedVariable(DV, nullptr)).second) 1207 if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope())) 1208 createConcreteVariable(TheCU, *Scope, InlinedVariable(DV, nullptr)); 1209 } 1210 } 1211 1212 // Process beginning of an instruction. 1213 void DwarfDebug::beginInstruction(const MachineInstr *MI) { 1214 DebugHandlerBase::beginInstruction(MI); 1215 assert(CurMI); 1216 1217 const auto *SP = MI->getMF()->getFunction().getSubprogram(); 1218 if (!SP || SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug) 1219 return; 1220 1221 // Check if source location changes, but ignore DBG_VALUE and CFI locations. 1222 // If the instruction is part of the function frame setup code, do not emit 1223 // any line record, as there is no correspondence with any user code. 1224 if (MI->isMetaInstruction() || MI->getFlag(MachineInstr::FrameSetup)) 1225 return; 1226 const DebugLoc &DL = MI->getDebugLoc(); 1227 // When we emit a line-0 record, we don't update PrevInstLoc; so look at 1228 // the last line number actually emitted, to see if it was line 0. 1229 unsigned LastAsmLine = 1230 Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine(); 1231 1232 if (DL == PrevInstLoc) { 1233 // If we have an ongoing unspecified location, nothing to do here. 1234 if (!DL) 1235 return; 1236 // We have an explicit location, same as the previous location. 1237 // But we might be coming back to it after a line 0 record. 1238 if (LastAsmLine == 0 && DL.getLine() != 0) { 1239 // Reinstate the source location but not marked as a statement. 1240 const MDNode *Scope = DL.getScope(); 1241 recordSourceLine(DL.getLine(), DL.getCol(), Scope, /*Flags=*/0); 1242 } 1243 return; 1244 } 1245 1246 if (!DL) { 1247 // We have an unspecified location, which might want to be line 0. 1248 // If we have already emitted a line-0 record, don't repeat it. 1249 if (LastAsmLine == 0) 1250 return; 1251 // If user said Don't Do That, don't do that. 1252 if (UnknownLocations == Disable) 1253 return; 1254 // See if we have a reason to emit a line-0 record now. 1255 // Reasons to emit a line-0 record include: 1256 // - User asked for it (UnknownLocations). 1257 // - Instruction has a label, so it's referenced from somewhere else, 1258 // possibly debug information; we want it to have a source location. 1259 // - Instruction is at the top of a block; we don't want to inherit the 1260 // location from the physically previous (maybe unrelated) block. 1261 if (UnknownLocations == Enable || PrevLabel || 1262 (PrevInstBB && PrevInstBB != MI->getParent())) { 1263 // Preserve the file and column numbers, if we can, to save space in 1264 // the encoded line table. 1265 // Do not update PrevInstLoc, it remembers the last non-0 line. 1266 const MDNode *Scope = nullptr; 1267 unsigned Column = 0; 1268 if (PrevInstLoc) { 1269 Scope = PrevInstLoc.getScope(); 1270 Column = PrevInstLoc.getCol(); 1271 } 1272 recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0); 1273 } 1274 return; 1275 } 1276 1277 // We have an explicit location, different from the previous location. 1278 // Don't repeat a line-0 record, but otherwise emit the new location. 1279 // (The new location might be an explicit line 0, which we do emit.) 1280 if (PrevInstLoc && DL.getLine() == 0 && LastAsmLine == 0) 1281 return; 1282 unsigned Flags = 0; 1283 if (DL == PrologEndLoc) { 1284 Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT; 1285 PrologEndLoc = DebugLoc(); 1286 } 1287 // If the line changed, we call that a new statement; unless we went to 1288 // line 0 and came back, in which case it is not a new statement. 1289 unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine; 1290 if (DL.getLine() && DL.getLine() != OldLine) 1291 Flags |= DWARF2_FLAG_IS_STMT; 1292 1293 const MDNode *Scope = DL.getScope(); 1294 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags); 1295 1296 // If we're not at line 0, remember this location. 1297 if (DL.getLine()) 1298 PrevInstLoc = DL; 1299 } 1300 1301 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) { 1302 // First known non-DBG_VALUE and non-frame setup location marks 1303 // the beginning of the function body. 1304 for (const auto &MBB : *MF) 1305 for (const auto &MI : MBB) 1306 if (!MI.isMetaInstruction() && !MI.getFlag(MachineInstr::FrameSetup) && 1307 MI.getDebugLoc()) 1308 return MI.getDebugLoc(); 1309 return DebugLoc(); 1310 } 1311 1312 // Gather pre-function debug information. Assumes being called immediately 1313 // after the function entry point has been emitted. 1314 void DwarfDebug::beginFunctionImpl(const MachineFunction *MF) { 1315 CurFn = MF; 1316 1317 auto *SP = MF->getFunction().getSubprogram(); 1318 assert(LScopes.empty() || SP == LScopes.getCurrentFunctionScope()->getScopeNode()); 1319 if (SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug) 1320 return; 1321 1322 DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(SP->getUnit()); 1323 1324 // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function 1325 // belongs to so that we add to the correct per-cu line table in the 1326 // non-asm case. 1327 if (Asm->OutStreamer->hasRawTextSupport()) 1328 // Use a single line table if we are generating assembly. 1329 Asm->OutStreamer->getContext().setDwarfCompileUnitID(0); 1330 else 1331 Asm->OutStreamer->getContext().setDwarfCompileUnitID(CU.getUniqueID()); 1332 1333 // Record beginning of function. 1334 PrologEndLoc = findPrologueEndLoc(MF); 1335 if (PrologEndLoc) { 1336 // We'd like to list the prologue as "not statements" but GDB behaves 1337 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing. 1338 auto *SP = PrologEndLoc->getInlinedAtScope()->getSubprogram(); 1339 recordSourceLine(SP->getScopeLine(), 0, SP, DWARF2_FLAG_IS_STMT); 1340 } 1341 } 1342 1343 void DwarfDebug::skippedNonDebugFunction() { 1344 // If we don't have a subprogram for this function then there will be a hole 1345 // in the range information. Keep note of this by setting the previously used 1346 // section to nullptr. 1347 PrevCU = nullptr; 1348 CurFn = nullptr; 1349 } 1350 1351 // Gather and emit post-function debug information. 1352 void DwarfDebug::endFunctionImpl(const MachineFunction *MF) { 1353 const DISubprogram *SP = MF->getFunction().getSubprogram(); 1354 1355 assert(CurFn == MF && 1356 "endFunction should be called with the same function as beginFunction"); 1357 1358 // Set DwarfDwarfCompileUnitID in MCContext to default value. 1359 Asm->OutStreamer->getContext().setDwarfCompileUnitID(0); 1360 1361 LexicalScope *FnScope = LScopes.getCurrentFunctionScope(); 1362 assert(!FnScope || SP == FnScope->getScopeNode()); 1363 DwarfCompileUnit &TheCU = *CUMap.lookup(SP->getUnit()); 1364 1365 DenseSet<InlinedVariable> ProcessedVars; 1366 collectVariableInfo(TheCU, SP, ProcessedVars); 1367 1368 // Add the range of this function to the list of ranges for the CU. 1369 TheCU.addRange(RangeSpan(Asm->getFunctionBegin(), Asm->getFunctionEnd())); 1370 1371 // Under -gmlt, skip building the subprogram if there are no inlined 1372 // subroutines inside it. But with -fdebug-info-for-profiling, the subprogram 1373 // is still needed as we need its source location. 1374 if (!TheCU.getCUNode()->getDebugInfoForProfiling() && 1375 TheCU.getCUNode()->getEmissionKind() == DICompileUnit::LineTablesOnly && 1376 LScopes.getAbstractScopesList().empty() && !IsDarwin) { 1377 assert(InfoHolder.getScopeVariables().empty()); 1378 PrevLabel = nullptr; 1379 CurFn = nullptr; 1380 return; 1381 } 1382 1383 #ifndef NDEBUG 1384 size_t NumAbstractScopes = LScopes.getAbstractScopesList().size(); 1385 #endif 1386 // Construct abstract scopes. 1387 for (LexicalScope *AScope : LScopes.getAbstractScopesList()) { 1388 auto *SP = cast<DISubprogram>(AScope->getScopeNode()); 1389 // Collect info for variables that were optimized out. 1390 for (const DILocalVariable *DV : SP->getVariables()) { 1391 if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second) 1392 continue; 1393 ensureAbstractVariableIsCreated(TheCU, InlinedVariable(DV, nullptr), 1394 DV->getScope()); 1395 assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes 1396 && "ensureAbstractVariableIsCreated inserted abstract scopes"); 1397 } 1398 constructAbstractSubprogramScopeDIE(TheCU, AScope); 1399 } 1400 1401 ProcessedSPNodes.insert(SP); 1402 TheCU.constructSubprogramScopeDIE(SP, FnScope); 1403 if (auto *SkelCU = TheCU.getSkeleton()) 1404 if (!LScopes.getAbstractScopesList().empty() && 1405 TheCU.getCUNode()->getSplitDebugInlining()) 1406 SkelCU->constructSubprogramScopeDIE(SP, FnScope); 1407 1408 // Clear debug info 1409 // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the 1410 // DbgVariables except those that are also in AbstractVariables (since they 1411 // can be used cross-function) 1412 InfoHolder.getScopeVariables().clear(); 1413 PrevLabel = nullptr; 1414 CurFn = nullptr; 1415 } 1416 1417 // Register a source line with debug info. Returns the unique label that was 1418 // emitted and which provides correspondence to the source line list. 1419 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S, 1420 unsigned Flags) { 1421 StringRef Fn; 1422 unsigned FileNo = 1; 1423 unsigned Discriminator = 0; 1424 if (auto *Scope = cast_or_null<DIScope>(S)) { 1425 Fn = Scope->getFilename(); 1426 if (Line != 0 && getDwarfVersion() >= 4) 1427 if (auto *LBF = dyn_cast<DILexicalBlockFile>(Scope)) 1428 Discriminator = LBF->getDiscriminator(); 1429 1430 unsigned CUID = Asm->OutStreamer->getContext().getDwarfCompileUnitID(); 1431 FileNo = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID]) 1432 .getOrCreateSourceID(Scope->getFile()); 1433 } 1434 Asm->OutStreamer->EmitDwarfLocDirective(FileNo, Line, Col, Flags, 0, 1435 Discriminator, Fn); 1436 } 1437 1438 //===----------------------------------------------------------------------===// 1439 // Emit Methods 1440 //===----------------------------------------------------------------------===// 1441 1442 // Emit the debug info section. 1443 void DwarfDebug::emitDebugInfo() { 1444 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1445 Holder.emitUnits(/* UseOffsets */ false); 1446 } 1447 1448 // Emit the abbreviation section. 1449 void DwarfDebug::emitAbbreviations() { 1450 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1451 1452 Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection()); 1453 } 1454 1455 void DwarfDebug::emitStringOffsetsTableHeader() { 1456 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1457 Holder.emitStringOffsetsTableHeader( 1458 Asm->getObjFileLowering().getDwarfStrOffSection()); 1459 } 1460 1461 template <typename AccelTableT> 1462 void DwarfDebug::emitAccel(AccelTableT &Accel, MCSection *Section, 1463 StringRef TableName) { 1464 Asm->OutStreamer->SwitchSection(Section); 1465 1466 // Emit the full data. 1467 emitAppleAccelTable(Asm, Accel, TableName, Section->getBeginSymbol()); 1468 } 1469 1470 void DwarfDebug::emitAccelDebugNames() { 1471 Asm->OutStreamer->SwitchSection( 1472 Asm->getObjFileLowering().getDwarfDebugNamesSection()); 1473 emitDWARF5AccelTable(Asm, AccelDebugNames, *this, getUnits()); 1474 } 1475 1476 // Emit visible names into a hashed accelerator table section. 1477 void DwarfDebug::emitAccelNames() { 1478 emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(), 1479 "Names"); 1480 } 1481 1482 // Emit objective C classes and categories into a hashed accelerator table 1483 // section. 1484 void DwarfDebug::emitAccelObjC() { 1485 emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(), 1486 "ObjC"); 1487 } 1488 1489 // Emit namespace dies into a hashed accelerator table. 1490 void DwarfDebug::emitAccelNamespaces() { 1491 emitAccel(AccelNamespace, 1492 Asm->getObjFileLowering().getDwarfAccelNamespaceSection(), 1493 "namespac"); 1494 } 1495 1496 // Emit type dies into a hashed accelerator table. 1497 void DwarfDebug::emitAccelTypes() { 1498 emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(), 1499 "types"); 1500 } 1501 1502 // Public name handling. 1503 // The format for the various pubnames: 1504 // 1505 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU 1506 // for the DIE that is named. 1507 // 1508 // gnu pubnames - offset/index value/name tuples where the offset is the offset 1509 // into the CU and the index value is computed according to the type of value 1510 // for the DIE that is named. 1511 // 1512 // For type units the offset is the offset of the skeleton DIE. For split dwarf 1513 // it's the offset within the debug_info/debug_types dwo section, however, the 1514 // reference in the pubname header doesn't change. 1515 1516 /// computeIndexValue - Compute the gdb index value for the DIE and CU. 1517 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU, 1518 const DIE *Die) { 1519 // Entities that ended up only in a Type Unit reference the CU instead (since 1520 // the pub entry has offsets within the CU there's no real offset that can be 1521 // provided anyway). As it happens all such entities (namespaces and types, 1522 // types only in C++ at that) are rendered as TYPE+EXTERNAL. If this turns out 1523 // not to be true it would be necessary to persist this information from the 1524 // point at which the entry is added to the index data structure - since by 1525 // the time the index is built from that, the original type/namespace DIE in a 1526 // type unit has already been destroyed so it can't be queried for properties 1527 // like tag, etc. 1528 if (Die->getTag() == dwarf::DW_TAG_compile_unit) 1529 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, 1530 dwarf::GIEL_EXTERNAL); 1531 dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC; 1532 1533 // We could have a specification DIE that has our most of our knowledge, 1534 // look for that now. 1535 if (DIEValue SpecVal = Die->findAttribute(dwarf::DW_AT_specification)) { 1536 DIE &SpecDIE = SpecVal.getDIEEntry().getEntry(); 1537 if (SpecDIE.findAttribute(dwarf::DW_AT_external)) 1538 Linkage = dwarf::GIEL_EXTERNAL; 1539 } else if (Die->findAttribute(dwarf::DW_AT_external)) 1540 Linkage = dwarf::GIEL_EXTERNAL; 1541 1542 switch (Die->getTag()) { 1543 case dwarf::DW_TAG_class_type: 1544 case dwarf::DW_TAG_structure_type: 1545 case dwarf::DW_TAG_union_type: 1546 case dwarf::DW_TAG_enumeration_type: 1547 return dwarf::PubIndexEntryDescriptor( 1548 dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus 1549 ? dwarf::GIEL_STATIC 1550 : dwarf::GIEL_EXTERNAL); 1551 case dwarf::DW_TAG_typedef: 1552 case dwarf::DW_TAG_base_type: 1553 case dwarf::DW_TAG_subrange_type: 1554 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC); 1555 case dwarf::DW_TAG_namespace: 1556 return dwarf::GIEK_TYPE; 1557 case dwarf::DW_TAG_subprogram: 1558 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage); 1559 case dwarf::DW_TAG_variable: 1560 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage); 1561 case dwarf::DW_TAG_enumerator: 1562 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, 1563 dwarf::GIEL_STATIC); 1564 default: 1565 return dwarf::GIEK_NONE; 1566 } 1567 } 1568 1569 /// emitDebugPubSections - Emit visible names and types into debug pubnames and 1570 /// pubtypes sections. 1571 void DwarfDebug::emitDebugPubSections() { 1572 for (const auto &NU : CUMap) { 1573 DwarfCompileUnit *TheU = NU.second; 1574 if (!TheU->hasDwarfPubSections()) 1575 continue; 1576 1577 bool GnuStyle = TheU->getCUNode()->getGnuPubnames(); 1578 1579 Asm->OutStreamer->SwitchSection( 1580 GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection() 1581 : Asm->getObjFileLowering().getDwarfPubNamesSection()); 1582 emitDebugPubSection(GnuStyle, "Names", TheU, TheU->getGlobalNames()); 1583 1584 Asm->OutStreamer->SwitchSection( 1585 GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection() 1586 : Asm->getObjFileLowering().getDwarfPubTypesSection()); 1587 emitDebugPubSection(GnuStyle, "Types", TheU, TheU->getGlobalTypes()); 1588 } 1589 } 1590 1591 void DwarfDebug::emitSectionReference(const DwarfCompileUnit &CU) { 1592 if (useSectionsAsReferences()) 1593 Asm->EmitDwarfOffset(CU.getSection()->getBeginSymbol(), 1594 CU.getDebugSectionOffset()); 1595 else 1596 Asm->emitDwarfSymbolReference(CU.getLabelBegin()); 1597 } 1598 1599 void DwarfDebug::emitDebugPubSection(bool GnuStyle, StringRef Name, 1600 DwarfCompileUnit *TheU, 1601 const StringMap<const DIE *> &Globals) { 1602 if (auto *Skeleton = TheU->getSkeleton()) 1603 TheU = Skeleton; 1604 1605 // Emit the header. 1606 Asm->OutStreamer->AddComment("Length of Public " + Name + " Info"); 1607 MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin"); 1608 MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end"); 1609 Asm->EmitLabelDifference(EndLabel, BeginLabel, 4); 1610 1611 Asm->OutStreamer->EmitLabel(BeginLabel); 1612 1613 Asm->OutStreamer->AddComment("DWARF Version"); 1614 Asm->emitInt16(dwarf::DW_PUBNAMES_VERSION); 1615 1616 Asm->OutStreamer->AddComment("Offset of Compilation Unit Info"); 1617 emitSectionReference(*TheU); 1618 1619 Asm->OutStreamer->AddComment("Compilation Unit Length"); 1620 Asm->emitInt32(TheU->getLength()); 1621 1622 // Emit the pubnames for this compilation unit. 1623 for (const auto &GI : Globals) { 1624 const char *Name = GI.getKeyData(); 1625 const DIE *Entity = GI.second; 1626 1627 Asm->OutStreamer->AddComment("DIE offset"); 1628 Asm->emitInt32(Entity->getOffset()); 1629 1630 if (GnuStyle) { 1631 dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity); 1632 Asm->OutStreamer->AddComment( 1633 Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " + 1634 dwarf::GDBIndexEntryLinkageString(Desc.Linkage)); 1635 Asm->emitInt8(Desc.toBits()); 1636 } 1637 1638 Asm->OutStreamer->AddComment("External Name"); 1639 Asm->OutStreamer->EmitBytes(StringRef(Name, GI.getKeyLength() + 1)); 1640 } 1641 1642 Asm->OutStreamer->AddComment("End Mark"); 1643 Asm->emitInt32(0); 1644 Asm->OutStreamer->EmitLabel(EndLabel); 1645 } 1646 1647 /// Emit null-terminated strings into a debug str section. 1648 void DwarfDebug::emitDebugStr() { 1649 MCSection *StringOffsetsSection = nullptr; 1650 if (useSegmentedStringOffsetsTable()) { 1651 emitStringOffsetsTableHeader(); 1652 StringOffsetsSection = Asm->getObjFileLowering().getDwarfStrOffSection(); 1653 } 1654 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1655 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection(), 1656 StringOffsetsSection, /* UseRelativeOffsets = */ true); 1657 } 1658 1659 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer, 1660 const DebugLocStream::Entry &Entry) { 1661 auto &&Comments = DebugLocs.getComments(Entry); 1662 auto Comment = Comments.begin(); 1663 auto End = Comments.end(); 1664 for (uint8_t Byte : DebugLocs.getBytes(Entry)) 1665 Streamer.EmitInt8(Byte, Comment != End ? *(Comment++) : ""); 1666 } 1667 1668 static void emitDebugLocValue(const AsmPrinter &AP, const DIBasicType *BT, 1669 ByteStreamer &Streamer, 1670 const DebugLocEntry::Value &Value, 1671 DwarfExpression &DwarfExpr) { 1672 auto *DIExpr = Value.getExpression(); 1673 DIExpressionCursor ExprCursor(DIExpr); 1674 DwarfExpr.addFragmentOffset(DIExpr); 1675 // Regular entry. 1676 if (Value.isInt()) { 1677 if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed || 1678 BT->getEncoding() == dwarf::DW_ATE_signed_char)) 1679 DwarfExpr.addSignedConstant(Value.getInt()); 1680 else 1681 DwarfExpr.addUnsignedConstant(Value.getInt()); 1682 } else if (Value.isLocation()) { 1683 MachineLocation Location = Value.getLoc(); 1684 if (Location.isIndirect()) 1685 DwarfExpr.setMemoryLocationKind(); 1686 DIExpressionCursor Cursor(DIExpr); 1687 const TargetRegisterInfo &TRI = *AP.MF->getSubtarget().getRegisterInfo(); 1688 if (!DwarfExpr.addMachineRegExpression(TRI, Cursor, Location.getReg())) 1689 return; 1690 return DwarfExpr.addExpression(std::move(Cursor)); 1691 } else if (Value.isConstantFP()) { 1692 APInt RawBytes = Value.getConstantFP()->getValueAPF().bitcastToAPInt(); 1693 DwarfExpr.addUnsignedConstant(RawBytes); 1694 } 1695 DwarfExpr.addExpression(std::move(ExprCursor)); 1696 } 1697 1698 void DebugLocEntry::finalize(const AsmPrinter &AP, 1699 DebugLocStream::ListBuilder &List, 1700 const DIBasicType *BT) { 1701 DebugLocStream::EntryBuilder Entry(List, Begin, End); 1702 BufferByteStreamer Streamer = Entry.getStreamer(); 1703 DebugLocDwarfExpression DwarfExpr(AP.getDwarfVersion(), Streamer); 1704 const DebugLocEntry::Value &Value = Values[0]; 1705 if (Value.isFragment()) { 1706 // Emit all fragments that belong to the same variable and range. 1707 assert(llvm::all_of(Values, [](DebugLocEntry::Value P) { 1708 return P.isFragment(); 1709 }) && "all values are expected to be fragments"); 1710 assert(std::is_sorted(Values.begin(), Values.end()) && 1711 "fragments are expected to be sorted"); 1712 1713 for (auto Fragment : Values) 1714 emitDebugLocValue(AP, BT, Streamer, Fragment, DwarfExpr); 1715 1716 } else { 1717 assert(Values.size() == 1 && "only fragments may have >1 value"); 1718 emitDebugLocValue(AP, BT, Streamer, Value, DwarfExpr); 1719 } 1720 DwarfExpr.finalize(); 1721 } 1722 1723 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) { 1724 // Emit the size. 1725 Asm->OutStreamer->AddComment("Loc expr size"); 1726 Asm->emitInt16(DebugLocs.getBytes(Entry).size()); 1727 1728 // Emit the entry. 1729 APByteStreamer Streamer(*Asm); 1730 emitDebugLocEntry(Streamer, Entry); 1731 } 1732 1733 // Emit locations into the debug loc section. 1734 void DwarfDebug::emitDebugLoc() { 1735 if (DebugLocs.getLists().empty()) 1736 return; 1737 1738 // Start the dwarf loc section. 1739 Asm->OutStreamer->SwitchSection( 1740 Asm->getObjFileLowering().getDwarfLocSection()); 1741 unsigned char Size = Asm->MAI->getCodePointerSize(); 1742 for (const auto &List : DebugLocs.getLists()) { 1743 Asm->OutStreamer->EmitLabel(List.Label); 1744 const DwarfCompileUnit *CU = List.CU; 1745 for (const auto &Entry : DebugLocs.getEntries(List)) { 1746 // Set up the range. This range is relative to the entry point of the 1747 // compile unit. This is a hard coded 0 for low_pc when we're emitting 1748 // ranges, or the DW_AT_low_pc on the compile unit otherwise. 1749 if (auto *Base = CU->getBaseAddress()) { 1750 Asm->EmitLabelDifference(Entry.BeginSym, Base, Size); 1751 Asm->EmitLabelDifference(Entry.EndSym, Base, Size); 1752 } else { 1753 Asm->OutStreamer->EmitSymbolValue(Entry.BeginSym, Size); 1754 Asm->OutStreamer->EmitSymbolValue(Entry.EndSym, Size); 1755 } 1756 1757 emitDebugLocEntryLocation(Entry); 1758 } 1759 Asm->OutStreamer->EmitIntValue(0, Size); 1760 Asm->OutStreamer->EmitIntValue(0, Size); 1761 } 1762 } 1763 1764 void DwarfDebug::emitDebugLocDWO() { 1765 Asm->OutStreamer->SwitchSection( 1766 Asm->getObjFileLowering().getDwarfLocDWOSection()); 1767 for (const auto &List : DebugLocs.getLists()) { 1768 Asm->OutStreamer->EmitLabel(List.Label); 1769 for (const auto &Entry : DebugLocs.getEntries(List)) { 1770 // Just always use start_length for now - at least that's one address 1771 // rather than two. We could get fancier and try to, say, reuse an 1772 // address we know we've emitted elsewhere (the start of the function? 1773 // The start of the CU or CU subrange that encloses this range?) 1774 Asm->emitInt8(dwarf::DW_LLE_startx_length); 1775 unsigned idx = AddrPool.getIndex(Entry.BeginSym); 1776 Asm->EmitULEB128(idx); 1777 Asm->EmitLabelDifference(Entry.EndSym, Entry.BeginSym, 4); 1778 1779 emitDebugLocEntryLocation(Entry); 1780 } 1781 Asm->emitInt8(dwarf::DW_LLE_end_of_list); 1782 } 1783 } 1784 1785 struct ArangeSpan { 1786 const MCSymbol *Start, *End; 1787 }; 1788 1789 // Emit a debug aranges section, containing a CU lookup for any 1790 // address we can tie back to a CU. 1791 void DwarfDebug::emitDebugARanges() { 1792 // Provides a unique id per text section. 1793 MapVector<MCSection *, SmallVector<SymbolCU, 8>> SectionMap; 1794 1795 // Filter labels by section. 1796 for (const SymbolCU &SCU : ArangeLabels) { 1797 if (SCU.Sym->isInSection()) { 1798 // Make a note of this symbol and it's section. 1799 MCSection *Section = &SCU.Sym->getSection(); 1800 if (!Section->getKind().isMetadata()) 1801 SectionMap[Section].push_back(SCU); 1802 } else { 1803 // Some symbols (e.g. common/bss on mach-o) can have no section but still 1804 // appear in the output. This sucks as we rely on sections to build 1805 // arange spans. We can do it without, but it's icky. 1806 SectionMap[nullptr].push_back(SCU); 1807 } 1808 } 1809 1810 DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans; 1811 1812 for (auto &I : SectionMap) { 1813 MCSection *Section = I.first; 1814 SmallVector<SymbolCU, 8> &List = I.second; 1815 if (List.size() < 1) 1816 continue; 1817 1818 // If we have no section (e.g. common), just write out 1819 // individual spans for each symbol. 1820 if (!Section) { 1821 for (const SymbolCU &Cur : List) { 1822 ArangeSpan Span; 1823 Span.Start = Cur.Sym; 1824 Span.End = nullptr; 1825 assert(Cur.CU); 1826 Spans[Cur.CU].push_back(Span); 1827 } 1828 continue; 1829 } 1830 1831 // Sort the symbols by offset within the section. 1832 std::stable_sort( 1833 List.begin(), List.end(), [&](const SymbolCU &A, const SymbolCU &B) { 1834 unsigned IA = A.Sym ? Asm->OutStreamer->GetSymbolOrder(A.Sym) : 0; 1835 unsigned IB = B.Sym ? Asm->OutStreamer->GetSymbolOrder(B.Sym) : 0; 1836 1837 // Symbols with no order assigned should be placed at the end. 1838 // (e.g. section end labels) 1839 if (IA == 0) 1840 return false; 1841 if (IB == 0) 1842 return true; 1843 return IA < IB; 1844 }); 1845 1846 // Insert a final terminator. 1847 List.push_back(SymbolCU(nullptr, Asm->OutStreamer->endSection(Section))); 1848 1849 // Build spans between each label. 1850 const MCSymbol *StartSym = List[0].Sym; 1851 for (size_t n = 1, e = List.size(); n < e; n++) { 1852 const SymbolCU &Prev = List[n - 1]; 1853 const SymbolCU &Cur = List[n]; 1854 1855 // Try and build the longest span we can within the same CU. 1856 if (Cur.CU != Prev.CU) { 1857 ArangeSpan Span; 1858 Span.Start = StartSym; 1859 Span.End = Cur.Sym; 1860 assert(Prev.CU); 1861 Spans[Prev.CU].push_back(Span); 1862 StartSym = Cur.Sym; 1863 } 1864 } 1865 } 1866 1867 // Start the dwarf aranges section. 1868 Asm->OutStreamer->SwitchSection( 1869 Asm->getObjFileLowering().getDwarfARangesSection()); 1870 1871 unsigned PtrSize = Asm->MAI->getCodePointerSize(); 1872 1873 // Build a list of CUs used. 1874 std::vector<DwarfCompileUnit *> CUs; 1875 for (const auto &it : Spans) { 1876 DwarfCompileUnit *CU = it.first; 1877 CUs.push_back(CU); 1878 } 1879 1880 // Sort the CU list (again, to ensure consistent output order). 1881 std::sort(CUs.begin(), CUs.end(), 1882 [](const DwarfCompileUnit *A, const DwarfCompileUnit *B) { 1883 return A->getUniqueID() < B->getUniqueID(); 1884 }); 1885 1886 // Emit an arange table for each CU we used. 1887 for (DwarfCompileUnit *CU : CUs) { 1888 std::vector<ArangeSpan> &List = Spans[CU]; 1889 1890 // Describe the skeleton CU's offset and length, not the dwo file's. 1891 if (auto *Skel = CU->getSkeleton()) 1892 CU = Skel; 1893 1894 // Emit size of content not including length itself. 1895 unsigned ContentSize = 1896 sizeof(int16_t) + // DWARF ARange version number 1897 sizeof(int32_t) + // Offset of CU in the .debug_info section 1898 sizeof(int8_t) + // Pointer Size (in bytes) 1899 sizeof(int8_t); // Segment Size (in bytes) 1900 1901 unsigned TupleSize = PtrSize * 2; 1902 1903 // 7.20 in the Dwarf specs requires the table to be aligned to a tuple. 1904 unsigned Padding = 1905 OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize); 1906 1907 ContentSize += Padding; 1908 ContentSize += (List.size() + 1) * TupleSize; 1909 1910 // For each compile unit, write the list of spans it covers. 1911 Asm->OutStreamer->AddComment("Length of ARange Set"); 1912 Asm->emitInt32(ContentSize); 1913 Asm->OutStreamer->AddComment("DWARF Arange version number"); 1914 Asm->emitInt16(dwarf::DW_ARANGES_VERSION); 1915 Asm->OutStreamer->AddComment("Offset Into Debug Info Section"); 1916 emitSectionReference(*CU); 1917 Asm->OutStreamer->AddComment("Address Size (in bytes)"); 1918 Asm->emitInt8(PtrSize); 1919 Asm->OutStreamer->AddComment("Segment Size (in bytes)"); 1920 Asm->emitInt8(0); 1921 1922 Asm->OutStreamer->emitFill(Padding, 0xff); 1923 1924 for (const ArangeSpan &Span : List) { 1925 Asm->EmitLabelReference(Span.Start, PtrSize); 1926 1927 // Calculate the size as being from the span start to it's end. 1928 if (Span.End) { 1929 Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize); 1930 } else { 1931 // For symbols without an end marker (e.g. common), we 1932 // write a single arange entry containing just that one symbol. 1933 uint64_t Size = SymSize[Span.Start]; 1934 if (Size == 0) 1935 Size = 1; 1936 1937 Asm->OutStreamer->EmitIntValue(Size, PtrSize); 1938 } 1939 } 1940 1941 Asm->OutStreamer->AddComment("ARange terminator"); 1942 Asm->OutStreamer->EmitIntValue(0, PtrSize); 1943 Asm->OutStreamer->EmitIntValue(0, PtrSize); 1944 } 1945 } 1946 1947 /// Emit address ranges into a debug ranges section. 1948 void DwarfDebug::emitDebugRanges() { 1949 if (CUMap.empty()) 1950 return; 1951 1952 if (!useRangesSection()) { 1953 assert(llvm::all_of( 1954 CUMap, 1955 [](const decltype(CUMap)::const_iterator::value_type &Pair) { 1956 return Pair.second->getRangeLists().empty(); 1957 }) && 1958 "No debug ranges expected."); 1959 return; 1960 } 1961 1962 // Start the dwarf ranges section. 1963 Asm->OutStreamer->SwitchSection( 1964 Asm->getObjFileLowering().getDwarfRangesSection()); 1965 1966 // Size for our labels. 1967 unsigned char Size = Asm->MAI->getCodePointerSize(); 1968 1969 // Grab the specific ranges for the compile units in the module. 1970 for (const auto &I : CUMap) { 1971 DwarfCompileUnit *TheCU = I.second; 1972 1973 if (auto *Skel = TheCU->getSkeleton()) 1974 TheCU = Skel; 1975 1976 // Iterate over the misc ranges for the compile units in the module. 1977 for (const RangeSpanList &List : TheCU->getRangeLists()) { 1978 // Emit our symbol so we can find the beginning of the range. 1979 Asm->OutStreamer->EmitLabel(List.getSym()); 1980 1981 // Gather all the ranges that apply to the same section so they can share 1982 // a base address entry. 1983 MapVector<const MCSection *, std::vector<const RangeSpan *>> MV; 1984 for (const RangeSpan &Range : List.getRanges()) { 1985 MV[&Range.getStart()->getSection()].push_back(&Range); 1986 } 1987 1988 auto *CUBase = TheCU->getBaseAddress(); 1989 bool BaseIsSet = false; 1990 for (const auto &P : MV) { 1991 // Don't bother with a base address entry if there's only one range in 1992 // this section in this range list - for example ranges for a CU will 1993 // usually consist of single regions from each of many sections 1994 // (-ffunction-sections, or just C++ inline functions) except under LTO 1995 // or optnone where there may be holes in a single CU's section 1996 // contrubutions. 1997 auto *Base = CUBase; 1998 if (!Base && P.second.size() > 1 && 1999 UseDwarfRangesBaseAddressSpecifier) { 2000 BaseIsSet = true; 2001 // FIXME/use care: This may not be a useful base address if it's not 2002 // the lowest address/range in this object. 2003 Base = P.second.front()->getStart(); 2004 Asm->OutStreamer->EmitIntValue(-1, Size); 2005 Asm->OutStreamer->EmitSymbolValue(Base, Size); 2006 } else if (BaseIsSet) { 2007 BaseIsSet = false; 2008 Asm->OutStreamer->EmitIntValue(-1, Size); 2009 Asm->OutStreamer->EmitIntValue(0, Size); 2010 } 2011 2012 for (const auto *RS : P.second) { 2013 const MCSymbol *Begin = RS->getStart(); 2014 const MCSymbol *End = RS->getEnd(); 2015 assert(Begin && "Range without a begin symbol?"); 2016 assert(End && "Range without an end symbol?"); 2017 if (Base) { 2018 Asm->EmitLabelDifference(Begin, Base, Size); 2019 Asm->EmitLabelDifference(End, Base, Size); 2020 } else { 2021 Asm->OutStreamer->EmitSymbolValue(Begin, Size); 2022 Asm->OutStreamer->EmitSymbolValue(End, Size); 2023 } 2024 } 2025 } 2026 2027 // And terminate the list with two 0 values. 2028 Asm->OutStreamer->EmitIntValue(0, Size); 2029 Asm->OutStreamer->EmitIntValue(0, Size); 2030 } 2031 } 2032 } 2033 2034 void DwarfDebug::handleMacroNodes(DIMacroNodeArray Nodes, DwarfCompileUnit &U) { 2035 for (auto *MN : Nodes) { 2036 if (auto *M = dyn_cast<DIMacro>(MN)) 2037 emitMacro(*M); 2038 else if (auto *F = dyn_cast<DIMacroFile>(MN)) 2039 emitMacroFile(*F, U); 2040 else 2041 llvm_unreachable("Unexpected DI type!"); 2042 } 2043 } 2044 2045 void DwarfDebug::emitMacro(DIMacro &M) { 2046 Asm->EmitULEB128(M.getMacinfoType()); 2047 Asm->EmitULEB128(M.getLine()); 2048 StringRef Name = M.getName(); 2049 StringRef Value = M.getValue(); 2050 Asm->OutStreamer->EmitBytes(Name); 2051 if (!Value.empty()) { 2052 // There should be one space between macro name and macro value. 2053 Asm->emitInt8(' '); 2054 Asm->OutStreamer->EmitBytes(Value); 2055 } 2056 Asm->emitInt8('\0'); 2057 } 2058 2059 void DwarfDebug::emitMacroFile(DIMacroFile &F, DwarfCompileUnit &U) { 2060 assert(F.getMacinfoType() == dwarf::DW_MACINFO_start_file); 2061 Asm->EmitULEB128(dwarf::DW_MACINFO_start_file); 2062 Asm->EmitULEB128(F.getLine()); 2063 Asm->EmitULEB128(U.getOrCreateSourceID(F.getFile())); 2064 handleMacroNodes(F.getElements(), U); 2065 Asm->EmitULEB128(dwarf::DW_MACINFO_end_file); 2066 } 2067 2068 /// Emit macros into a debug macinfo section. 2069 void DwarfDebug::emitDebugMacinfo() { 2070 if (CUMap.empty()) 2071 return; 2072 2073 // Start the dwarf macinfo section. 2074 Asm->OutStreamer->SwitchSection( 2075 Asm->getObjFileLowering().getDwarfMacinfoSection()); 2076 2077 for (const auto &P : CUMap) { 2078 auto &TheCU = *P.second; 2079 auto *SkCU = TheCU.getSkeleton(); 2080 DwarfCompileUnit &U = SkCU ? *SkCU : TheCU; 2081 auto *CUNode = cast<DICompileUnit>(P.first); 2082 DIMacroNodeArray Macros = CUNode->getMacros(); 2083 if (!Macros.empty()) { 2084 Asm->OutStreamer->EmitLabel(U.getMacroLabelBegin()); 2085 handleMacroNodes(Macros, U); 2086 } 2087 } 2088 Asm->OutStreamer->AddComment("End Of Macro List Mark"); 2089 Asm->emitInt8(0); 2090 } 2091 2092 // DWARF5 Experimental Separate Dwarf emitters. 2093 2094 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die, 2095 std::unique_ptr<DwarfCompileUnit> NewU) { 2096 NewU->addString(Die, dwarf::DW_AT_GNU_dwo_name, 2097 Asm->TM.Options.MCOptions.SplitDwarfFile); 2098 2099 if (!CompilationDir.empty()) 2100 NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); 2101 2102 addGnuPubAttributes(*NewU, Die); 2103 2104 SkeletonHolder.addUnit(std::move(NewU)); 2105 } 2106 2107 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list, 2108 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id, 2109 // DW_AT_addr_base, DW_AT_ranges_base. 2110 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) { 2111 2112 auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>( 2113 CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder); 2114 DwarfCompileUnit &NewCU = *OwnedUnit; 2115 NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection()); 2116 2117 NewCU.initStmtList(); 2118 2119 if (useSegmentedStringOffsetsTable()) 2120 NewCU.addStringOffsetsStart(); 2121 2122 initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit)); 2123 2124 return NewCU; 2125 } 2126 2127 // Emit the .debug_info.dwo section for separated dwarf. This contains the 2128 // compile units that would normally be in debug_info. 2129 void DwarfDebug::emitDebugInfoDWO() { 2130 assert(useSplitDwarf() && "No split dwarf debug info?"); 2131 // Don't emit relocations into the dwo file. 2132 InfoHolder.emitUnits(/* UseOffsets */ true); 2133 } 2134 2135 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the 2136 // abbreviations for the .debug_info.dwo section. 2137 void DwarfDebug::emitDebugAbbrevDWO() { 2138 assert(useSplitDwarf() && "No split dwarf?"); 2139 InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection()); 2140 } 2141 2142 void DwarfDebug::emitDebugLineDWO() { 2143 assert(useSplitDwarf() && "No split dwarf?"); 2144 SplitTypeUnitFileTable.Emit( 2145 *Asm->OutStreamer, MCDwarfLineTableParams(), 2146 Asm->getObjFileLowering().getDwarfLineDWOSection()); 2147 } 2148 2149 void DwarfDebug::emitStringOffsetsTableHeaderDWO() { 2150 assert(useSplitDwarf() && "No split dwarf?"); 2151 InfoHolder.emitStringOffsetsTableHeader( 2152 Asm->getObjFileLowering().getDwarfStrOffDWOSection()); 2153 } 2154 2155 // Emit the .debug_str.dwo section for separated dwarf. This contains the 2156 // string section and is identical in format to traditional .debug_str 2157 // sections. 2158 void DwarfDebug::emitDebugStrDWO() { 2159 if (useSegmentedStringOffsetsTable()) 2160 emitStringOffsetsTableHeaderDWO(); 2161 assert(useSplitDwarf() && "No split dwarf?"); 2162 MCSection *OffSec = Asm->getObjFileLowering().getDwarfStrOffDWOSection(); 2163 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(), 2164 OffSec, /* UseRelativeOffsets = */ false); 2165 } 2166 2167 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) { 2168 if (!useSplitDwarf()) 2169 return nullptr; 2170 const DICompileUnit *DIUnit = CU.getCUNode(); 2171 SplitTypeUnitFileTable.maybeSetRootFile( 2172 DIUnit->getDirectory(), DIUnit->getFilename(), 2173 CU.getMD5AsBytes(DIUnit->getFile()), DIUnit->getSource()); 2174 return &SplitTypeUnitFileTable; 2175 } 2176 2177 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier) { 2178 MD5 Hash; 2179 Hash.update(Identifier); 2180 // ... take the least significant 8 bytes and return those. Our MD5 2181 // implementation always returns its results in little endian, so we actually 2182 // need the "high" word. 2183 MD5::MD5Result Result; 2184 Hash.final(Result); 2185 return Result.high(); 2186 } 2187 2188 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU, 2189 StringRef Identifier, DIE &RefDie, 2190 const DICompositeType *CTy) { 2191 // Fast path if we're building some type units and one has already used the 2192 // address pool we know we're going to throw away all this work anyway, so 2193 // don't bother building dependent types. 2194 if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed()) 2195 return; 2196 2197 auto Ins = TypeSignatures.insert(std::make_pair(CTy, 0)); 2198 if (!Ins.second) { 2199 CU.addDIETypeSignature(RefDie, Ins.first->second); 2200 return; 2201 } 2202 2203 bool TopLevelType = TypeUnitsUnderConstruction.empty(); 2204 AddrPool.resetUsedFlag(); 2205 2206 auto OwnedUnit = llvm::make_unique<DwarfTypeUnit>(CU, Asm, this, &InfoHolder, 2207 getDwoLineTable(CU)); 2208 DwarfTypeUnit &NewTU = *OwnedUnit; 2209 DIE &UnitDie = NewTU.getUnitDie(); 2210 TypeUnitsUnderConstruction.emplace_back(std::move(OwnedUnit), CTy); 2211 2212 NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2, 2213 CU.getLanguage()); 2214 2215 uint64_t Signature = makeTypeSignature(Identifier); 2216 NewTU.setTypeSignature(Signature); 2217 Ins.first->second = Signature; 2218 2219 if (useSplitDwarf()) 2220 NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesDWOSection()); 2221 else { 2222 NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesSection(Signature)); 2223 // Non-split type units reuse the compile unit's line table. 2224 CU.applyStmtList(UnitDie); 2225 } 2226 2227 // Add DW_AT_str_offsets_base to the type unit DIE, but not for split type 2228 // units. 2229 if (useSegmentedStringOffsetsTable() && !useSplitDwarf()) 2230 NewTU.addStringOffsetsStart(); 2231 2232 NewTU.setType(NewTU.createTypeDIE(CTy)); 2233 2234 if (TopLevelType) { 2235 auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction); 2236 TypeUnitsUnderConstruction.clear(); 2237 2238 // Types referencing entries in the address table cannot be placed in type 2239 // units. 2240 if (AddrPool.hasBeenUsed()) { 2241 2242 // Remove all the types built while building this type. 2243 // This is pessimistic as some of these types might not be dependent on 2244 // the type that used an address. 2245 for (const auto &TU : TypeUnitsToAdd) 2246 TypeSignatures.erase(TU.second); 2247 2248 // Construct this type in the CU directly. 2249 // This is inefficient because all the dependent types will be rebuilt 2250 // from scratch, including building them in type units, discovering that 2251 // they depend on addresses, throwing them out and rebuilding them. 2252 CU.constructTypeDIE(RefDie, cast<DICompositeType>(CTy)); 2253 return; 2254 } 2255 2256 // If the type wasn't dependent on fission addresses, finish adding the type 2257 // and all its dependent types. 2258 for (auto &TU : TypeUnitsToAdd) { 2259 InfoHolder.computeSizeAndOffsetsForUnit(TU.first.get()); 2260 InfoHolder.emitUnit(TU.first.get(), useSplitDwarf()); 2261 } 2262 } 2263 CU.addDIETypeSignature(RefDie, Signature); 2264 } 2265 2266 // Accelerator table mutators - add each name along with its companion 2267 // DIE to the proper table while ensuring that the name that we're going 2268 // to reference is in the string table. We do this since the names we 2269 // add may not only be identical to the names in the DIE. 2270 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) { 2271 switch (getAccelTableKind()) { 2272 case AccelTableKind::Apple: 2273 AccelNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2274 break; 2275 case AccelTableKind::Dwarf: 2276 AccelDebugNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), 2277 Die); 2278 break; 2279 case AccelTableKind::None: 2280 return; 2281 case AccelTableKind::Default: 2282 llvm_unreachable("Default should have already been resolved."); 2283 } 2284 } 2285 2286 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) { 2287 if (getAccelTableKind() != AccelTableKind::Apple) 2288 return; 2289 AccelObjC.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2290 } 2291 2292 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) { 2293 switch (getAccelTableKind()) { 2294 case AccelTableKind::Apple: 2295 AccelNamespace.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), 2296 &Die); 2297 break; 2298 case AccelTableKind::Dwarf: 2299 AccelDebugNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), 2300 Die); 2301 break; 2302 case AccelTableKind::None: 2303 return; 2304 case AccelTableKind::Default: 2305 llvm_unreachable("Default should have already been resolved."); 2306 } 2307 } 2308 2309 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) { 2310 switch (getAccelTableKind()) { 2311 case AccelTableKind::Apple: 2312 AccelTypes.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2313 break; 2314 case AccelTableKind::Dwarf: 2315 AccelDebugNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), 2316 Die); 2317 break; 2318 case AccelTableKind::None: 2319 return; 2320 case AccelTableKind::Default: 2321 llvm_unreachable("Default should have already been resolved."); 2322 } 2323 } 2324 2325 uint16_t DwarfDebug::getDwarfVersion() const { 2326 return Asm->OutStreamer->getContext().getDwarfVersion(); 2327 } 2328