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