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 llvm::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 void DwarfDebug::addSubprogramNames(const DISubprogram *SP, DIE &Die) { 390 if (!SP->isDefinition()) 391 return; 392 393 if (SP->getName() != "") 394 addAccelName(SP->getName(), Die); 395 396 // If the linkage name is different than the name, go ahead and output 397 // that as well into the name table. 398 if (SP->getLinkageName() != "" && SP->getName() != SP->getLinkageName()) 399 addAccelName(SP->getLinkageName(), Die); 400 401 // If this is an Objective-C selector name add it to the ObjC accelerator 402 // too. 403 if (isObjCClass(SP->getName())) { 404 StringRef Class, Category; 405 getObjCClassCategory(SP->getName(), Class, Category); 406 addAccelObjC(Class, Die); 407 if (Category != "") 408 addAccelObjC(Category, Die); 409 // Also add the base method name to the name table. 410 addAccelName(getObjCMethodName(SP->getName()), Die); 411 } 412 } 413 414 /// Check whether we should create a DIE for the given Scope, return true 415 /// if we don't create a DIE (the corresponding DIE is null). 416 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) { 417 if (Scope->isAbstractScope()) 418 return false; 419 420 // We don't create a DIE if there is no Range. 421 const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges(); 422 if (Ranges.empty()) 423 return true; 424 425 if (Ranges.size() > 1) 426 return false; 427 428 // We don't create a DIE if we have a single Range and the end label 429 // is null. 430 return !getLabelAfterInsn(Ranges.front().second); 431 } 432 433 template <typename Func> static void forBothCUs(DwarfCompileUnit &CU, Func F) { 434 F(CU); 435 if (auto *SkelCU = CU.getSkeleton()) 436 if (CU.getCUNode()->getSplitDebugInlining()) 437 F(*SkelCU); 438 } 439 440 bool DwarfDebug::shareAcrossDWOCUs() const { 441 return SplitDwarfCrossCuReferences; 442 } 443 444 void DwarfDebug::constructAbstractSubprogramScopeDIE(DwarfCompileUnit &SrcCU, 445 LexicalScope *Scope) { 446 assert(Scope && Scope->getScopeNode()); 447 assert(Scope->isAbstractScope()); 448 assert(!Scope->getInlinedAt()); 449 450 auto *SP = cast<DISubprogram>(Scope->getScopeNode()); 451 452 // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram 453 // was inlined from another compile unit. 454 if (useSplitDwarf() && !shareAcrossDWOCUs() && !SP->getUnit()->getSplitDebugInlining()) 455 // Avoid building the original CU if it won't be used 456 SrcCU.constructAbstractSubprogramScopeDIE(Scope); 457 else { 458 auto &CU = getOrCreateDwarfCompileUnit(SP->getUnit()); 459 if (auto *SkelCU = CU.getSkeleton()) { 460 (shareAcrossDWOCUs() ? CU : SrcCU) 461 .constructAbstractSubprogramScopeDIE(Scope); 462 if (CU.getCUNode()->getSplitDebugInlining()) 463 SkelCU->constructAbstractSubprogramScopeDIE(Scope); 464 } else 465 CU.constructAbstractSubprogramScopeDIE(Scope); 466 } 467 } 468 469 void DwarfDebug::addGnuPubAttributes(DwarfCompileUnit &U, DIE &D) const { 470 if (!U.hasDwarfPubSections()) 471 return; 472 473 U.addFlag(D, dwarf::DW_AT_GNU_pubnames); 474 } 475 476 // Create new DwarfCompileUnit for the given metadata node with tag 477 // DW_TAG_compile_unit. 478 DwarfCompileUnit & 479 DwarfDebug::getOrCreateDwarfCompileUnit(const DICompileUnit *DIUnit) { 480 if (auto *CU = CUMap.lookup(DIUnit)) 481 return *CU; 482 StringRef FN = DIUnit->getFilename(); 483 CompilationDir = DIUnit->getDirectory(); 484 485 auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>( 486 InfoHolder.getUnits().size(), DIUnit, Asm, this, &InfoHolder); 487 DwarfCompileUnit &NewCU = *OwnedUnit; 488 DIE &Die = NewCU.getUnitDie(); 489 InfoHolder.addUnit(std::move(OwnedUnit)); 490 if (useSplitDwarf()) { 491 NewCU.setSkeleton(constructSkeletonCU(NewCU)); 492 NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name, 493 Asm->TM.Options.MCOptions.SplitDwarfFile); 494 } 495 496 for (auto *IE : DIUnit->getImportedEntities()) 497 NewCU.addImportedEntity(IE); 498 499 // LTO with assembly output shares a single line table amongst multiple CUs. 500 // To avoid the compilation directory being ambiguous, let the line table 501 // explicitly describe the directory of all files, never relying on the 502 // compilation directory. 503 if (!Asm->OutStreamer->hasRawTextSupport() || SingleCU) 504 Asm->OutStreamer->emitDwarfFile0Directive( 505 CompilationDir, FN, NewCU.getMD5AsBytes(DIUnit->getFile()), 506 DIUnit->getSource(), NewCU.getUniqueID()); 507 508 StringRef Producer = DIUnit->getProducer(); 509 StringRef Flags = DIUnit->getFlags(); 510 if (!Flags.empty()) { 511 std::string ProducerWithFlags = Producer.str() + " " + Flags.str(); 512 NewCU.addString(Die, dwarf::DW_AT_producer, ProducerWithFlags); 513 } else 514 NewCU.addString(Die, dwarf::DW_AT_producer, Producer); 515 516 NewCU.addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2, 517 DIUnit->getSourceLanguage()); 518 NewCU.addString(Die, dwarf::DW_AT_name, FN); 519 520 // Add DW_str_offsets_base to the unit DIE, except for split units. 521 if (useSegmentedStringOffsetsTable() && !useSplitDwarf()) 522 NewCU.addStringOffsetsStart(); 523 524 if (!useSplitDwarf()) { 525 NewCU.initStmtList(); 526 527 // If we're using split dwarf the compilation dir is going to be in the 528 // skeleton CU and so we don't need to duplicate it here. 529 if (!CompilationDir.empty()) 530 NewCU.addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); 531 532 addGnuPubAttributes(NewCU, Die); 533 } 534 535 if (useAppleExtensionAttributes()) { 536 if (DIUnit->isOptimized()) 537 NewCU.addFlag(Die, dwarf::DW_AT_APPLE_optimized); 538 539 StringRef Flags = DIUnit->getFlags(); 540 if (!Flags.empty()) 541 NewCU.addString(Die, dwarf::DW_AT_APPLE_flags, Flags); 542 543 if (unsigned RVer = DIUnit->getRuntimeVersion()) 544 NewCU.addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers, 545 dwarf::DW_FORM_data1, RVer); 546 } 547 548 if (useSplitDwarf()) 549 NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoDWOSection()); 550 else 551 NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection()); 552 553 if (DIUnit->getDWOId()) { 554 // This CU is either a clang module DWO or a skeleton CU. 555 NewCU.addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 556 DIUnit->getDWOId()); 557 if (!DIUnit->getSplitDebugFilename().empty()) 558 // This is a prefabricated skeleton CU. 559 NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name, 560 DIUnit->getSplitDebugFilename()); 561 } 562 563 CUMap.insert({DIUnit, &NewCU}); 564 CUDieMap.insert({&Die, &NewCU}); 565 return NewCU; 566 } 567 568 void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU, 569 const DIImportedEntity *N) { 570 if (isa<DILocalScope>(N->getScope())) 571 return; 572 if (DIE *D = TheCU.getOrCreateContextDIE(N->getScope())) 573 D->addChild(TheCU.constructImportedEntityDIE(N)); 574 } 575 576 /// Sort and unique GVEs by comparing their fragment offset. 577 static SmallVectorImpl<DwarfCompileUnit::GlobalExpr> & 578 sortGlobalExprs(SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &GVEs) { 579 llvm::sort(GVEs.begin(), GVEs.end(), 580 [](DwarfCompileUnit::GlobalExpr A, 581 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 // Don't emit anything if we have no compilation units to index. 1472 if (getUnits().empty()) 1473 return; 1474 1475 Asm->OutStreamer->SwitchSection( 1476 Asm->getObjFileLowering().getDwarfDebugNamesSection()); 1477 emitDWARF5AccelTable(Asm, AccelDebugNames, *this, getUnits()); 1478 } 1479 1480 // Emit visible names into a hashed accelerator table section. 1481 void DwarfDebug::emitAccelNames() { 1482 emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(), 1483 "Names"); 1484 } 1485 1486 // Emit objective C classes and categories into a hashed accelerator table 1487 // section. 1488 void DwarfDebug::emitAccelObjC() { 1489 emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(), 1490 "ObjC"); 1491 } 1492 1493 // Emit namespace dies into a hashed accelerator table. 1494 void DwarfDebug::emitAccelNamespaces() { 1495 emitAccel(AccelNamespace, 1496 Asm->getObjFileLowering().getDwarfAccelNamespaceSection(), 1497 "namespac"); 1498 } 1499 1500 // Emit type dies into a hashed accelerator table. 1501 void DwarfDebug::emitAccelTypes() { 1502 emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(), 1503 "types"); 1504 } 1505 1506 // Public name handling. 1507 // The format for the various pubnames: 1508 // 1509 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU 1510 // for the DIE that is named. 1511 // 1512 // gnu pubnames - offset/index value/name tuples where the offset is the offset 1513 // into the CU and the index value is computed according to the type of value 1514 // for the DIE that is named. 1515 // 1516 // For type units the offset is the offset of the skeleton DIE. For split dwarf 1517 // it's the offset within the debug_info/debug_types dwo section, however, the 1518 // reference in the pubname header doesn't change. 1519 1520 /// computeIndexValue - Compute the gdb index value for the DIE and CU. 1521 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU, 1522 const DIE *Die) { 1523 // Entities that ended up only in a Type Unit reference the CU instead (since 1524 // the pub entry has offsets within the CU there's no real offset that can be 1525 // provided anyway). As it happens all such entities (namespaces and types, 1526 // types only in C++ at that) are rendered as TYPE+EXTERNAL. If this turns out 1527 // not to be true it would be necessary to persist this information from the 1528 // point at which the entry is added to the index data structure - since by 1529 // the time the index is built from that, the original type/namespace DIE in a 1530 // type unit has already been destroyed so it can't be queried for properties 1531 // like tag, etc. 1532 if (Die->getTag() == dwarf::DW_TAG_compile_unit) 1533 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, 1534 dwarf::GIEL_EXTERNAL); 1535 dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC; 1536 1537 // We could have a specification DIE that has our most of our knowledge, 1538 // look for that now. 1539 if (DIEValue SpecVal = Die->findAttribute(dwarf::DW_AT_specification)) { 1540 DIE &SpecDIE = SpecVal.getDIEEntry().getEntry(); 1541 if (SpecDIE.findAttribute(dwarf::DW_AT_external)) 1542 Linkage = dwarf::GIEL_EXTERNAL; 1543 } else if (Die->findAttribute(dwarf::DW_AT_external)) 1544 Linkage = dwarf::GIEL_EXTERNAL; 1545 1546 switch (Die->getTag()) { 1547 case dwarf::DW_TAG_class_type: 1548 case dwarf::DW_TAG_structure_type: 1549 case dwarf::DW_TAG_union_type: 1550 case dwarf::DW_TAG_enumeration_type: 1551 return dwarf::PubIndexEntryDescriptor( 1552 dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus 1553 ? dwarf::GIEL_STATIC 1554 : dwarf::GIEL_EXTERNAL); 1555 case dwarf::DW_TAG_typedef: 1556 case dwarf::DW_TAG_base_type: 1557 case dwarf::DW_TAG_subrange_type: 1558 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC); 1559 case dwarf::DW_TAG_namespace: 1560 return dwarf::GIEK_TYPE; 1561 case dwarf::DW_TAG_subprogram: 1562 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage); 1563 case dwarf::DW_TAG_variable: 1564 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage); 1565 case dwarf::DW_TAG_enumerator: 1566 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, 1567 dwarf::GIEL_STATIC); 1568 default: 1569 return dwarf::GIEK_NONE; 1570 } 1571 } 1572 1573 /// emitDebugPubSections - Emit visible names and types into debug pubnames and 1574 /// pubtypes sections. 1575 void DwarfDebug::emitDebugPubSections() { 1576 for (const auto &NU : CUMap) { 1577 DwarfCompileUnit *TheU = NU.second; 1578 if (!TheU->hasDwarfPubSections()) 1579 continue; 1580 1581 bool GnuStyle = TheU->getCUNode()->getGnuPubnames(); 1582 1583 Asm->OutStreamer->SwitchSection( 1584 GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection() 1585 : Asm->getObjFileLowering().getDwarfPubNamesSection()); 1586 emitDebugPubSection(GnuStyle, "Names", TheU, TheU->getGlobalNames()); 1587 1588 Asm->OutStreamer->SwitchSection( 1589 GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection() 1590 : Asm->getObjFileLowering().getDwarfPubTypesSection()); 1591 emitDebugPubSection(GnuStyle, "Types", TheU, TheU->getGlobalTypes()); 1592 } 1593 } 1594 1595 void DwarfDebug::emitSectionReference(const DwarfCompileUnit &CU) { 1596 if (useSectionsAsReferences()) 1597 Asm->EmitDwarfOffset(CU.getSection()->getBeginSymbol(), 1598 CU.getDebugSectionOffset()); 1599 else 1600 Asm->emitDwarfSymbolReference(CU.getLabelBegin()); 1601 } 1602 1603 void DwarfDebug::emitDebugPubSection(bool GnuStyle, StringRef Name, 1604 DwarfCompileUnit *TheU, 1605 const StringMap<const DIE *> &Globals) { 1606 if (auto *Skeleton = TheU->getSkeleton()) 1607 TheU = Skeleton; 1608 1609 // Emit the header. 1610 Asm->OutStreamer->AddComment("Length of Public " + Name + " Info"); 1611 MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin"); 1612 MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end"); 1613 Asm->EmitLabelDifference(EndLabel, BeginLabel, 4); 1614 1615 Asm->OutStreamer->EmitLabel(BeginLabel); 1616 1617 Asm->OutStreamer->AddComment("DWARF Version"); 1618 Asm->emitInt16(dwarf::DW_PUBNAMES_VERSION); 1619 1620 Asm->OutStreamer->AddComment("Offset of Compilation Unit Info"); 1621 emitSectionReference(*TheU); 1622 1623 Asm->OutStreamer->AddComment("Compilation Unit Length"); 1624 Asm->emitInt32(TheU->getLength()); 1625 1626 // Emit the pubnames for this compilation unit. 1627 for (const auto &GI : Globals) { 1628 const char *Name = GI.getKeyData(); 1629 const DIE *Entity = GI.second; 1630 1631 Asm->OutStreamer->AddComment("DIE offset"); 1632 Asm->emitInt32(Entity->getOffset()); 1633 1634 if (GnuStyle) { 1635 dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity); 1636 Asm->OutStreamer->AddComment( 1637 Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " + 1638 dwarf::GDBIndexEntryLinkageString(Desc.Linkage)); 1639 Asm->emitInt8(Desc.toBits()); 1640 } 1641 1642 Asm->OutStreamer->AddComment("External Name"); 1643 Asm->OutStreamer->EmitBytes(StringRef(Name, GI.getKeyLength() + 1)); 1644 } 1645 1646 Asm->OutStreamer->AddComment("End Mark"); 1647 Asm->emitInt32(0); 1648 Asm->OutStreamer->EmitLabel(EndLabel); 1649 } 1650 1651 /// Emit null-terminated strings into a debug str section. 1652 void DwarfDebug::emitDebugStr() { 1653 MCSection *StringOffsetsSection = nullptr; 1654 if (useSegmentedStringOffsetsTable()) { 1655 emitStringOffsetsTableHeader(); 1656 StringOffsetsSection = Asm->getObjFileLowering().getDwarfStrOffSection(); 1657 } 1658 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1659 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection(), 1660 StringOffsetsSection, /* UseRelativeOffsets = */ true); 1661 } 1662 1663 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer, 1664 const DebugLocStream::Entry &Entry) { 1665 auto &&Comments = DebugLocs.getComments(Entry); 1666 auto Comment = Comments.begin(); 1667 auto End = Comments.end(); 1668 for (uint8_t Byte : DebugLocs.getBytes(Entry)) 1669 Streamer.EmitInt8(Byte, Comment != End ? *(Comment++) : ""); 1670 } 1671 1672 static void emitDebugLocValue(const AsmPrinter &AP, const DIBasicType *BT, 1673 ByteStreamer &Streamer, 1674 const DebugLocEntry::Value &Value, 1675 DwarfExpression &DwarfExpr) { 1676 auto *DIExpr = Value.getExpression(); 1677 DIExpressionCursor ExprCursor(DIExpr); 1678 DwarfExpr.addFragmentOffset(DIExpr); 1679 // Regular entry. 1680 if (Value.isInt()) { 1681 if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed || 1682 BT->getEncoding() == dwarf::DW_ATE_signed_char)) 1683 DwarfExpr.addSignedConstant(Value.getInt()); 1684 else 1685 DwarfExpr.addUnsignedConstant(Value.getInt()); 1686 } else if (Value.isLocation()) { 1687 MachineLocation Location = Value.getLoc(); 1688 if (Location.isIndirect()) 1689 DwarfExpr.setMemoryLocationKind(); 1690 DIExpressionCursor Cursor(DIExpr); 1691 const TargetRegisterInfo &TRI = *AP.MF->getSubtarget().getRegisterInfo(); 1692 if (!DwarfExpr.addMachineRegExpression(TRI, Cursor, Location.getReg())) 1693 return; 1694 return DwarfExpr.addExpression(std::move(Cursor)); 1695 } else if (Value.isConstantFP()) { 1696 APInt RawBytes = Value.getConstantFP()->getValueAPF().bitcastToAPInt(); 1697 DwarfExpr.addUnsignedConstant(RawBytes); 1698 } 1699 DwarfExpr.addExpression(std::move(ExprCursor)); 1700 } 1701 1702 void DebugLocEntry::finalize(const AsmPrinter &AP, 1703 DebugLocStream::ListBuilder &List, 1704 const DIBasicType *BT) { 1705 DebugLocStream::EntryBuilder Entry(List, Begin, End); 1706 BufferByteStreamer Streamer = Entry.getStreamer(); 1707 DebugLocDwarfExpression DwarfExpr(AP.getDwarfVersion(), Streamer); 1708 const DebugLocEntry::Value &Value = Values[0]; 1709 if (Value.isFragment()) { 1710 // Emit all fragments that belong to the same variable and range. 1711 assert(llvm::all_of(Values, [](DebugLocEntry::Value P) { 1712 return P.isFragment(); 1713 }) && "all values are expected to be fragments"); 1714 assert(std::is_sorted(Values.begin(), Values.end()) && 1715 "fragments are expected to be sorted"); 1716 1717 for (auto Fragment : Values) 1718 emitDebugLocValue(AP, BT, Streamer, Fragment, DwarfExpr); 1719 1720 } else { 1721 assert(Values.size() == 1 && "only fragments may have >1 value"); 1722 emitDebugLocValue(AP, BT, Streamer, Value, DwarfExpr); 1723 } 1724 DwarfExpr.finalize(); 1725 } 1726 1727 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) { 1728 // Emit the size. 1729 Asm->OutStreamer->AddComment("Loc expr size"); 1730 Asm->emitInt16(DebugLocs.getBytes(Entry).size()); 1731 1732 // Emit the entry. 1733 APByteStreamer Streamer(*Asm); 1734 emitDebugLocEntry(Streamer, Entry); 1735 } 1736 1737 // Emit locations into the debug loc section. 1738 void DwarfDebug::emitDebugLoc() { 1739 if (DebugLocs.getLists().empty()) 1740 return; 1741 1742 // Start the dwarf loc section. 1743 Asm->OutStreamer->SwitchSection( 1744 Asm->getObjFileLowering().getDwarfLocSection()); 1745 unsigned char Size = Asm->MAI->getCodePointerSize(); 1746 for (const auto &List : DebugLocs.getLists()) { 1747 Asm->OutStreamer->EmitLabel(List.Label); 1748 const DwarfCompileUnit *CU = List.CU; 1749 for (const auto &Entry : DebugLocs.getEntries(List)) { 1750 // Set up the range. This range is relative to the entry point of the 1751 // compile unit. This is a hard coded 0 for low_pc when we're emitting 1752 // ranges, or the DW_AT_low_pc on the compile unit otherwise. 1753 if (auto *Base = CU->getBaseAddress()) { 1754 Asm->EmitLabelDifference(Entry.BeginSym, Base, Size); 1755 Asm->EmitLabelDifference(Entry.EndSym, Base, Size); 1756 } else { 1757 Asm->OutStreamer->EmitSymbolValue(Entry.BeginSym, Size); 1758 Asm->OutStreamer->EmitSymbolValue(Entry.EndSym, Size); 1759 } 1760 1761 emitDebugLocEntryLocation(Entry); 1762 } 1763 Asm->OutStreamer->EmitIntValue(0, Size); 1764 Asm->OutStreamer->EmitIntValue(0, Size); 1765 } 1766 } 1767 1768 void DwarfDebug::emitDebugLocDWO() { 1769 Asm->OutStreamer->SwitchSection( 1770 Asm->getObjFileLowering().getDwarfLocDWOSection()); 1771 for (const auto &List : DebugLocs.getLists()) { 1772 Asm->OutStreamer->EmitLabel(List.Label); 1773 for (const auto &Entry : DebugLocs.getEntries(List)) { 1774 // Just always use start_length for now - at least that's one address 1775 // rather than two. We could get fancier and try to, say, reuse an 1776 // address we know we've emitted elsewhere (the start of the function? 1777 // The start of the CU or CU subrange that encloses this range?) 1778 Asm->emitInt8(dwarf::DW_LLE_startx_length); 1779 unsigned idx = AddrPool.getIndex(Entry.BeginSym); 1780 Asm->EmitULEB128(idx); 1781 Asm->EmitLabelDifference(Entry.EndSym, Entry.BeginSym, 4); 1782 1783 emitDebugLocEntryLocation(Entry); 1784 } 1785 Asm->emitInt8(dwarf::DW_LLE_end_of_list); 1786 } 1787 } 1788 1789 struct ArangeSpan { 1790 const MCSymbol *Start, *End; 1791 }; 1792 1793 // Emit a debug aranges section, containing a CU lookup for any 1794 // address we can tie back to a CU. 1795 void DwarfDebug::emitDebugARanges() { 1796 // Provides a unique id per text section. 1797 MapVector<MCSection *, SmallVector<SymbolCU, 8>> SectionMap; 1798 1799 // Filter labels by section. 1800 for (const SymbolCU &SCU : ArangeLabels) { 1801 if (SCU.Sym->isInSection()) { 1802 // Make a note of this symbol and it's section. 1803 MCSection *Section = &SCU.Sym->getSection(); 1804 if (!Section->getKind().isMetadata()) 1805 SectionMap[Section].push_back(SCU); 1806 } else { 1807 // Some symbols (e.g. common/bss on mach-o) can have no section but still 1808 // appear in the output. This sucks as we rely on sections to build 1809 // arange spans. We can do it without, but it's icky. 1810 SectionMap[nullptr].push_back(SCU); 1811 } 1812 } 1813 1814 DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans; 1815 1816 for (auto &I : SectionMap) { 1817 MCSection *Section = I.first; 1818 SmallVector<SymbolCU, 8> &List = I.second; 1819 if (List.size() < 1) 1820 continue; 1821 1822 // If we have no section (e.g. common), just write out 1823 // individual spans for each symbol. 1824 if (!Section) { 1825 for (const SymbolCU &Cur : List) { 1826 ArangeSpan Span; 1827 Span.Start = Cur.Sym; 1828 Span.End = nullptr; 1829 assert(Cur.CU); 1830 Spans[Cur.CU].push_back(Span); 1831 } 1832 continue; 1833 } 1834 1835 // Sort the symbols by offset within the section. 1836 std::stable_sort( 1837 List.begin(), List.end(), [&](const SymbolCU &A, const SymbolCU &B) { 1838 unsigned IA = A.Sym ? Asm->OutStreamer->GetSymbolOrder(A.Sym) : 0; 1839 unsigned IB = B.Sym ? Asm->OutStreamer->GetSymbolOrder(B.Sym) : 0; 1840 1841 // Symbols with no order assigned should be placed at the end. 1842 // (e.g. section end labels) 1843 if (IA == 0) 1844 return false; 1845 if (IB == 0) 1846 return true; 1847 return IA < IB; 1848 }); 1849 1850 // Insert a final terminator. 1851 List.push_back(SymbolCU(nullptr, Asm->OutStreamer->endSection(Section))); 1852 1853 // Build spans between each label. 1854 const MCSymbol *StartSym = List[0].Sym; 1855 for (size_t n = 1, e = List.size(); n < e; n++) { 1856 const SymbolCU &Prev = List[n - 1]; 1857 const SymbolCU &Cur = List[n]; 1858 1859 // Try and build the longest span we can within the same CU. 1860 if (Cur.CU != Prev.CU) { 1861 ArangeSpan Span; 1862 Span.Start = StartSym; 1863 Span.End = Cur.Sym; 1864 assert(Prev.CU); 1865 Spans[Prev.CU].push_back(Span); 1866 StartSym = Cur.Sym; 1867 } 1868 } 1869 } 1870 1871 // Start the dwarf aranges section. 1872 Asm->OutStreamer->SwitchSection( 1873 Asm->getObjFileLowering().getDwarfARangesSection()); 1874 1875 unsigned PtrSize = Asm->MAI->getCodePointerSize(); 1876 1877 // Build a list of CUs used. 1878 std::vector<DwarfCompileUnit *> CUs; 1879 for (const auto &it : Spans) { 1880 DwarfCompileUnit *CU = it.first; 1881 CUs.push_back(CU); 1882 } 1883 1884 // Sort the CU list (again, to ensure consistent output order). 1885 llvm::sort(CUs.begin(), CUs.end(), 1886 [](const DwarfCompileUnit *A, const DwarfCompileUnit *B) { 1887 return A->getUniqueID() < B->getUniqueID(); 1888 }); 1889 1890 // Emit an arange table for each CU we used. 1891 for (DwarfCompileUnit *CU : CUs) { 1892 std::vector<ArangeSpan> &List = Spans[CU]; 1893 1894 // Describe the skeleton CU's offset and length, not the dwo file's. 1895 if (auto *Skel = CU->getSkeleton()) 1896 CU = Skel; 1897 1898 // Emit size of content not including length itself. 1899 unsigned ContentSize = 1900 sizeof(int16_t) + // DWARF ARange version number 1901 sizeof(int32_t) + // Offset of CU in the .debug_info section 1902 sizeof(int8_t) + // Pointer Size (in bytes) 1903 sizeof(int8_t); // Segment Size (in bytes) 1904 1905 unsigned TupleSize = PtrSize * 2; 1906 1907 // 7.20 in the Dwarf specs requires the table to be aligned to a tuple. 1908 unsigned Padding = 1909 OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize); 1910 1911 ContentSize += Padding; 1912 ContentSize += (List.size() + 1) * TupleSize; 1913 1914 // For each compile unit, write the list of spans it covers. 1915 Asm->OutStreamer->AddComment("Length of ARange Set"); 1916 Asm->emitInt32(ContentSize); 1917 Asm->OutStreamer->AddComment("DWARF Arange version number"); 1918 Asm->emitInt16(dwarf::DW_ARANGES_VERSION); 1919 Asm->OutStreamer->AddComment("Offset Into Debug Info Section"); 1920 emitSectionReference(*CU); 1921 Asm->OutStreamer->AddComment("Address Size (in bytes)"); 1922 Asm->emitInt8(PtrSize); 1923 Asm->OutStreamer->AddComment("Segment Size (in bytes)"); 1924 Asm->emitInt8(0); 1925 1926 Asm->OutStreamer->emitFill(Padding, 0xff); 1927 1928 for (const ArangeSpan &Span : List) { 1929 Asm->EmitLabelReference(Span.Start, PtrSize); 1930 1931 // Calculate the size as being from the span start to it's end. 1932 if (Span.End) { 1933 Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize); 1934 } else { 1935 // For symbols without an end marker (e.g. common), we 1936 // write a single arange entry containing just that one symbol. 1937 uint64_t Size = SymSize[Span.Start]; 1938 if (Size == 0) 1939 Size = 1; 1940 1941 Asm->OutStreamer->EmitIntValue(Size, PtrSize); 1942 } 1943 } 1944 1945 Asm->OutStreamer->AddComment("ARange terminator"); 1946 Asm->OutStreamer->EmitIntValue(0, PtrSize); 1947 Asm->OutStreamer->EmitIntValue(0, PtrSize); 1948 } 1949 } 1950 1951 /// Emit address ranges into a debug ranges section. 1952 void DwarfDebug::emitDebugRanges() { 1953 if (CUMap.empty()) 1954 return; 1955 1956 if (!useRangesSection()) { 1957 assert(llvm::all_of( 1958 CUMap, 1959 [](const decltype(CUMap)::const_iterator::value_type &Pair) { 1960 return Pair.second->getRangeLists().empty(); 1961 }) && 1962 "No debug ranges expected."); 1963 return; 1964 } 1965 1966 // Start the dwarf ranges section. 1967 Asm->OutStreamer->SwitchSection( 1968 Asm->getObjFileLowering().getDwarfRangesSection()); 1969 1970 // Size for our labels. 1971 unsigned char Size = Asm->MAI->getCodePointerSize(); 1972 1973 // Grab the specific ranges for the compile units in the module. 1974 for (const auto &I : CUMap) { 1975 DwarfCompileUnit *TheCU = I.second; 1976 1977 if (auto *Skel = TheCU->getSkeleton()) 1978 TheCU = Skel; 1979 1980 // Iterate over the misc ranges for the compile units in the module. 1981 for (const RangeSpanList &List : TheCU->getRangeLists()) { 1982 // Emit our symbol so we can find the beginning of the range. 1983 Asm->OutStreamer->EmitLabel(List.getSym()); 1984 1985 // Gather all the ranges that apply to the same section so they can share 1986 // a base address entry. 1987 MapVector<const MCSection *, std::vector<const RangeSpan *>> MV; 1988 for (const RangeSpan &Range : List.getRanges()) { 1989 MV[&Range.getStart()->getSection()].push_back(&Range); 1990 } 1991 1992 auto *CUBase = TheCU->getBaseAddress(); 1993 bool BaseIsSet = false; 1994 for (const auto &P : MV) { 1995 // Don't bother with a base address entry if there's only one range in 1996 // this section in this range list - for example ranges for a CU will 1997 // usually consist of single regions from each of many sections 1998 // (-ffunction-sections, or just C++ inline functions) except under LTO 1999 // or optnone where there may be holes in a single CU's section 2000 // contrubutions. 2001 auto *Base = CUBase; 2002 if (!Base && P.second.size() > 1 && 2003 UseDwarfRangesBaseAddressSpecifier) { 2004 BaseIsSet = true; 2005 // FIXME/use care: This may not be a useful base address if it's not 2006 // the lowest address/range in this object. 2007 Base = P.second.front()->getStart(); 2008 Asm->OutStreamer->EmitIntValue(-1, Size); 2009 Asm->OutStreamer->EmitSymbolValue(Base, Size); 2010 } else if (BaseIsSet) { 2011 BaseIsSet = false; 2012 Asm->OutStreamer->EmitIntValue(-1, Size); 2013 Asm->OutStreamer->EmitIntValue(0, Size); 2014 } 2015 2016 for (const auto *RS : P.second) { 2017 const MCSymbol *Begin = RS->getStart(); 2018 const MCSymbol *End = RS->getEnd(); 2019 assert(Begin && "Range without a begin symbol?"); 2020 assert(End && "Range without an end symbol?"); 2021 if (Base) { 2022 Asm->EmitLabelDifference(Begin, Base, Size); 2023 Asm->EmitLabelDifference(End, Base, Size); 2024 } else { 2025 Asm->OutStreamer->EmitSymbolValue(Begin, Size); 2026 Asm->OutStreamer->EmitSymbolValue(End, Size); 2027 } 2028 } 2029 } 2030 2031 // And terminate the list with two 0 values. 2032 Asm->OutStreamer->EmitIntValue(0, Size); 2033 Asm->OutStreamer->EmitIntValue(0, Size); 2034 } 2035 } 2036 } 2037 2038 void DwarfDebug::handleMacroNodes(DIMacroNodeArray Nodes, DwarfCompileUnit &U) { 2039 for (auto *MN : Nodes) { 2040 if (auto *M = dyn_cast<DIMacro>(MN)) 2041 emitMacro(*M); 2042 else if (auto *F = dyn_cast<DIMacroFile>(MN)) 2043 emitMacroFile(*F, U); 2044 else 2045 llvm_unreachable("Unexpected DI type!"); 2046 } 2047 } 2048 2049 void DwarfDebug::emitMacro(DIMacro &M) { 2050 Asm->EmitULEB128(M.getMacinfoType()); 2051 Asm->EmitULEB128(M.getLine()); 2052 StringRef Name = M.getName(); 2053 StringRef Value = M.getValue(); 2054 Asm->OutStreamer->EmitBytes(Name); 2055 if (!Value.empty()) { 2056 // There should be one space between macro name and macro value. 2057 Asm->emitInt8(' '); 2058 Asm->OutStreamer->EmitBytes(Value); 2059 } 2060 Asm->emitInt8('\0'); 2061 } 2062 2063 void DwarfDebug::emitMacroFile(DIMacroFile &F, DwarfCompileUnit &U) { 2064 assert(F.getMacinfoType() == dwarf::DW_MACINFO_start_file); 2065 Asm->EmitULEB128(dwarf::DW_MACINFO_start_file); 2066 Asm->EmitULEB128(F.getLine()); 2067 Asm->EmitULEB128(U.getOrCreateSourceID(F.getFile())); 2068 handleMacroNodes(F.getElements(), U); 2069 Asm->EmitULEB128(dwarf::DW_MACINFO_end_file); 2070 } 2071 2072 /// Emit macros into a debug macinfo section. 2073 void DwarfDebug::emitDebugMacinfo() { 2074 if (CUMap.empty()) 2075 return; 2076 2077 // Start the dwarf macinfo section. 2078 Asm->OutStreamer->SwitchSection( 2079 Asm->getObjFileLowering().getDwarfMacinfoSection()); 2080 2081 for (const auto &P : CUMap) { 2082 auto &TheCU = *P.second; 2083 auto *SkCU = TheCU.getSkeleton(); 2084 DwarfCompileUnit &U = SkCU ? *SkCU : TheCU; 2085 auto *CUNode = cast<DICompileUnit>(P.first); 2086 DIMacroNodeArray Macros = CUNode->getMacros(); 2087 if (!Macros.empty()) { 2088 Asm->OutStreamer->EmitLabel(U.getMacroLabelBegin()); 2089 handleMacroNodes(Macros, U); 2090 } 2091 } 2092 Asm->OutStreamer->AddComment("End Of Macro List Mark"); 2093 Asm->emitInt8(0); 2094 } 2095 2096 // DWARF5 Experimental Separate Dwarf emitters. 2097 2098 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die, 2099 std::unique_ptr<DwarfCompileUnit> NewU) { 2100 NewU->addString(Die, dwarf::DW_AT_GNU_dwo_name, 2101 Asm->TM.Options.MCOptions.SplitDwarfFile); 2102 2103 if (!CompilationDir.empty()) 2104 NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); 2105 2106 addGnuPubAttributes(*NewU, Die); 2107 2108 SkeletonHolder.addUnit(std::move(NewU)); 2109 } 2110 2111 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list, 2112 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id, 2113 // DW_AT_addr_base, DW_AT_ranges_base. 2114 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) { 2115 2116 auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>( 2117 CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder); 2118 DwarfCompileUnit &NewCU = *OwnedUnit; 2119 NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection()); 2120 2121 NewCU.initStmtList(); 2122 2123 if (useSegmentedStringOffsetsTable()) 2124 NewCU.addStringOffsetsStart(); 2125 2126 initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit)); 2127 2128 return NewCU; 2129 } 2130 2131 // Emit the .debug_info.dwo section for separated dwarf. This contains the 2132 // compile units that would normally be in debug_info. 2133 void DwarfDebug::emitDebugInfoDWO() { 2134 assert(useSplitDwarf() && "No split dwarf debug info?"); 2135 // Don't emit relocations into the dwo file. 2136 InfoHolder.emitUnits(/* UseOffsets */ true); 2137 } 2138 2139 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the 2140 // abbreviations for the .debug_info.dwo section. 2141 void DwarfDebug::emitDebugAbbrevDWO() { 2142 assert(useSplitDwarf() && "No split dwarf?"); 2143 InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection()); 2144 } 2145 2146 void DwarfDebug::emitDebugLineDWO() { 2147 assert(useSplitDwarf() && "No split dwarf?"); 2148 SplitTypeUnitFileTable.Emit( 2149 *Asm->OutStreamer, MCDwarfLineTableParams(), 2150 Asm->getObjFileLowering().getDwarfLineDWOSection()); 2151 } 2152 2153 void DwarfDebug::emitStringOffsetsTableHeaderDWO() { 2154 assert(useSplitDwarf() && "No split dwarf?"); 2155 InfoHolder.emitStringOffsetsTableHeader( 2156 Asm->getObjFileLowering().getDwarfStrOffDWOSection()); 2157 } 2158 2159 // Emit the .debug_str.dwo section for separated dwarf. This contains the 2160 // string section and is identical in format to traditional .debug_str 2161 // sections. 2162 void DwarfDebug::emitDebugStrDWO() { 2163 if (useSegmentedStringOffsetsTable()) 2164 emitStringOffsetsTableHeaderDWO(); 2165 assert(useSplitDwarf() && "No split dwarf?"); 2166 MCSection *OffSec = Asm->getObjFileLowering().getDwarfStrOffDWOSection(); 2167 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(), 2168 OffSec, /* UseRelativeOffsets = */ false); 2169 } 2170 2171 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) { 2172 if (!useSplitDwarf()) 2173 return nullptr; 2174 const DICompileUnit *DIUnit = CU.getCUNode(); 2175 SplitTypeUnitFileTable.maybeSetRootFile( 2176 DIUnit->getDirectory(), DIUnit->getFilename(), 2177 CU.getMD5AsBytes(DIUnit->getFile()), DIUnit->getSource()); 2178 return &SplitTypeUnitFileTable; 2179 } 2180 2181 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier) { 2182 MD5 Hash; 2183 Hash.update(Identifier); 2184 // ... take the least significant 8 bytes and return those. Our MD5 2185 // implementation always returns its results in little endian, so we actually 2186 // need the "high" word. 2187 MD5::MD5Result Result; 2188 Hash.final(Result); 2189 return Result.high(); 2190 } 2191 2192 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU, 2193 StringRef Identifier, DIE &RefDie, 2194 const DICompositeType *CTy) { 2195 // Fast path if we're building some type units and one has already used the 2196 // address pool we know we're going to throw away all this work anyway, so 2197 // don't bother building dependent types. 2198 if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed()) 2199 return; 2200 2201 auto Ins = TypeSignatures.insert(std::make_pair(CTy, 0)); 2202 if (!Ins.second) { 2203 CU.addDIETypeSignature(RefDie, Ins.first->second); 2204 return; 2205 } 2206 2207 bool TopLevelType = TypeUnitsUnderConstruction.empty(); 2208 AddrPool.resetUsedFlag(); 2209 2210 auto OwnedUnit = llvm::make_unique<DwarfTypeUnit>(CU, Asm, this, &InfoHolder, 2211 getDwoLineTable(CU)); 2212 DwarfTypeUnit &NewTU = *OwnedUnit; 2213 DIE &UnitDie = NewTU.getUnitDie(); 2214 TypeUnitsUnderConstruction.emplace_back(std::move(OwnedUnit), CTy); 2215 2216 NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2, 2217 CU.getLanguage()); 2218 2219 uint64_t Signature = makeTypeSignature(Identifier); 2220 NewTU.setTypeSignature(Signature); 2221 Ins.first->second = Signature; 2222 2223 if (useSplitDwarf()) 2224 NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesDWOSection()); 2225 else { 2226 NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesSection(Signature)); 2227 // Non-split type units reuse the compile unit's line table. 2228 CU.applyStmtList(UnitDie); 2229 } 2230 2231 // Add DW_AT_str_offsets_base to the type unit DIE, but not for split type 2232 // units. 2233 if (useSegmentedStringOffsetsTable() && !useSplitDwarf()) 2234 NewTU.addStringOffsetsStart(); 2235 2236 NewTU.setType(NewTU.createTypeDIE(CTy)); 2237 2238 if (TopLevelType) { 2239 auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction); 2240 TypeUnitsUnderConstruction.clear(); 2241 2242 // Types referencing entries in the address table cannot be placed in type 2243 // units. 2244 if (AddrPool.hasBeenUsed()) { 2245 2246 // Remove all the types built while building this type. 2247 // This is pessimistic as some of these types might not be dependent on 2248 // the type that used an address. 2249 for (const auto &TU : TypeUnitsToAdd) 2250 TypeSignatures.erase(TU.second); 2251 2252 // Construct this type in the CU directly. 2253 // This is inefficient because all the dependent types will be rebuilt 2254 // from scratch, including building them in type units, discovering that 2255 // they depend on addresses, throwing them out and rebuilding them. 2256 CU.constructTypeDIE(RefDie, cast<DICompositeType>(CTy)); 2257 return; 2258 } 2259 2260 // If the type wasn't dependent on fission addresses, finish adding the type 2261 // and all its dependent types. 2262 for (auto &TU : TypeUnitsToAdd) { 2263 InfoHolder.computeSizeAndOffsetsForUnit(TU.first.get()); 2264 InfoHolder.emitUnit(TU.first.get(), useSplitDwarf()); 2265 } 2266 } 2267 CU.addDIETypeSignature(RefDie, Signature); 2268 } 2269 2270 // Accelerator table mutators - add each name along with its companion 2271 // DIE to the proper table while ensuring that the name that we're going 2272 // to reference is in the string table. We do this since the names we 2273 // add may not only be identical to the names in the DIE. 2274 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) { 2275 switch (getAccelTableKind()) { 2276 case AccelTableKind::Apple: 2277 AccelNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2278 break; 2279 case AccelTableKind::Dwarf: 2280 AccelDebugNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), 2281 Die); 2282 break; 2283 case AccelTableKind::None: 2284 return; 2285 case AccelTableKind::Default: 2286 llvm_unreachable("Default should have already been resolved."); 2287 } 2288 } 2289 2290 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) { 2291 if (getAccelTableKind() != AccelTableKind::Apple) 2292 return; 2293 AccelObjC.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2294 } 2295 2296 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) { 2297 switch (getAccelTableKind()) { 2298 case AccelTableKind::Apple: 2299 AccelNamespace.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), 2300 &Die); 2301 break; 2302 case AccelTableKind::Dwarf: 2303 AccelDebugNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), 2304 Die); 2305 break; 2306 case AccelTableKind::None: 2307 return; 2308 case AccelTableKind::Default: 2309 llvm_unreachable("Default should have already been resolved."); 2310 } 2311 } 2312 2313 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) { 2314 switch (getAccelTableKind()) { 2315 case AccelTableKind::Apple: 2316 AccelTypes.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2317 break; 2318 case AccelTableKind::Dwarf: 2319 AccelDebugNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), 2320 Die); 2321 break; 2322 case AccelTableKind::None: 2323 return; 2324 case AccelTableKind::Default: 2325 llvm_unreachable("Default should have already been resolved."); 2326 } 2327 } 2328 2329 uint16_t DwarfDebug::getDwarfVersion() const { 2330 return Asm->OutStreamer->getContext().getDwarfVersion(); 2331 } 2332