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 auto *CUNode = cast<DICompileUnit>(P.first); 824 // If compile Unit has macros, emit "DW_AT_macro_info" attribute. 825 if (CUNode->getMacros()) 826 U.addSectionLabel(U.getUnitDie(), dwarf::DW_AT_macro_info, 827 U.getMacroLabelBegin(), 828 TLOF.getDwarfMacinfoSection()->getBeginSymbol()); 829 } 830 831 // Emit all frontend-produced Skeleton CUs, i.e., Clang modules. 832 for (auto *CUNode : MMI->getModule()->debug_compile_units()) 833 if (CUNode->getDWOId()) 834 getOrCreateDwarfCompileUnit(CUNode); 835 836 // Compute DIE offsets and sizes. 837 InfoHolder.computeSizeAndOffsets(); 838 if (useSplitDwarf()) 839 SkeletonHolder.computeSizeAndOffsets(); 840 } 841 842 // Emit all Dwarf sections that should come after the content. 843 void DwarfDebug::endModule() { 844 assert(CurFn == nullptr); 845 assert(CurMI == nullptr); 846 847 // If we aren't actually generating debug info (check beginModule - 848 // conditionalized on !DisableDebugInfoPrinting and the presence of the 849 // llvm.dbg.cu metadata node) 850 if (!MMI->hasDebugInfo()) 851 return; 852 853 // Finalize the debug info for the module. 854 finalizeModuleInfo(); 855 856 emitDebugStr(); 857 858 if (useSplitDwarf()) 859 emitDebugLocDWO(); 860 else 861 // Emit info into a debug loc section. 862 emitDebugLoc(); 863 864 // Corresponding abbreviations into a abbrev section. 865 emitAbbreviations(); 866 867 // Emit all the DIEs into a debug info section. 868 emitDebugInfo(); 869 870 // Emit info into a debug aranges section. 871 if (GenerateARangeSection) 872 emitDebugARanges(); 873 874 // Emit info into a debug ranges section. 875 emitDebugRanges(); 876 877 // Emit info into a debug macinfo section. 878 emitDebugMacinfo(); 879 880 if (useSplitDwarf()) { 881 emitDebugStrDWO(); 882 emitDebugInfoDWO(); 883 emitDebugAbbrevDWO(); 884 emitDebugLineDWO(); 885 // Emit DWO addresses. 886 AddrPool.emit(*Asm, Asm->getObjFileLowering().getDwarfAddrSection()); 887 } 888 889 // Emit info into the dwarf accelerator table sections. 890 switch (getAccelTableKind()) { 891 case AccelTableKind::Apple: 892 emitAccelNames(); 893 emitAccelObjC(); 894 emitAccelNamespaces(); 895 emitAccelTypes(); 896 break; 897 case AccelTableKind::Dwarf: 898 emitAccelDebugNames(); 899 break; 900 case AccelTableKind::None: 901 break; 902 case AccelTableKind::Default: 903 llvm_unreachable("Default should have already been resolved."); 904 } 905 906 // Emit the pubnames and pubtypes sections if requested. 907 emitDebugPubSections(); 908 909 // clean up. 910 // FIXME: AbstractVariables.clear(); 911 } 912 913 void DwarfDebug::ensureAbstractVariableIsCreated(DwarfCompileUnit &CU, InlinedVariable IV, 914 const MDNode *ScopeNode) { 915 const DILocalVariable *Cleansed = nullptr; 916 if (CU.getExistingAbstractVariable(IV, Cleansed)) 917 return; 918 919 CU.createAbstractVariable(Cleansed, LScopes.getOrCreateAbstractScope( 920 cast<DILocalScope>(ScopeNode))); 921 } 922 923 void DwarfDebug::ensureAbstractVariableIsCreatedIfScoped(DwarfCompileUnit &CU, 924 InlinedVariable IV, const MDNode *ScopeNode) { 925 const DILocalVariable *Cleansed = nullptr; 926 if (CU.getExistingAbstractVariable(IV, Cleansed)) 927 return; 928 929 if (LexicalScope *Scope = 930 LScopes.findAbstractScope(cast_or_null<DILocalScope>(ScopeNode))) 931 CU.createAbstractVariable(Cleansed, Scope); 932 } 933 934 // Collect variable information from side table maintained by MF. 935 void DwarfDebug::collectVariableInfoFromMFTable( 936 DwarfCompileUnit &TheCU, DenseSet<InlinedVariable> &Processed) { 937 SmallDenseMap<InlinedVariable, DbgVariable *> MFVars; 938 for (const auto &VI : Asm->MF->getVariableDbgInfo()) { 939 if (!VI.Var) 940 continue; 941 assert(VI.Var->isValidLocationForIntrinsic(VI.Loc) && 942 "Expected inlined-at fields to agree"); 943 944 InlinedVariable Var(VI.Var, VI.Loc->getInlinedAt()); 945 Processed.insert(Var); 946 LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc); 947 948 // If variable scope is not found then skip this variable. 949 if (!Scope) 950 continue; 951 952 ensureAbstractVariableIsCreatedIfScoped(TheCU, Var, Scope->getScopeNode()); 953 auto RegVar = llvm::make_unique<DbgVariable>(Var.first, Var.second); 954 RegVar->initializeMMI(VI.Expr, VI.Slot); 955 if (DbgVariable *DbgVar = MFVars.lookup(Var)) 956 DbgVar->addMMIEntry(*RegVar); 957 else if (InfoHolder.addScopeVariable(Scope, RegVar.get())) { 958 MFVars.insert({Var, RegVar.get()}); 959 ConcreteVariables.push_back(std::move(RegVar)); 960 } 961 } 962 } 963 964 // Get .debug_loc entry for the instruction range starting at MI. 965 static DebugLocEntry::Value getDebugLocValue(const MachineInstr *MI) { 966 const DIExpression *Expr = MI->getDebugExpression(); 967 assert(MI->getNumOperands() == 4); 968 if (MI->getOperand(0).isReg()) { 969 auto RegOp = MI->getOperand(0); 970 auto Op1 = MI->getOperand(1); 971 // If the second operand is an immediate, this is a 972 // register-indirect address. 973 assert((!Op1.isImm() || (Op1.getImm() == 0)) && "unexpected offset"); 974 MachineLocation MLoc(RegOp.getReg(), Op1.isImm()); 975 return DebugLocEntry::Value(Expr, MLoc); 976 } 977 if (MI->getOperand(0).isImm()) 978 return DebugLocEntry::Value(Expr, MI->getOperand(0).getImm()); 979 if (MI->getOperand(0).isFPImm()) 980 return DebugLocEntry::Value(Expr, MI->getOperand(0).getFPImm()); 981 if (MI->getOperand(0).isCImm()) 982 return DebugLocEntry::Value(Expr, MI->getOperand(0).getCImm()); 983 984 llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!"); 985 } 986 987 /// If this and Next are describing different fragments of the same 988 /// variable, merge them by appending Next's values to the current 989 /// list of values. 990 /// Return true if the merge was successful. 991 bool DebugLocEntry::MergeValues(const DebugLocEntry &Next) { 992 if (Begin == Next.Begin) { 993 auto *FirstExpr = cast<DIExpression>(Values[0].Expression); 994 auto *FirstNextExpr = cast<DIExpression>(Next.Values[0].Expression); 995 if (!FirstExpr->isFragment() || !FirstNextExpr->isFragment()) 996 return false; 997 998 // We can only merge entries if none of the fragments overlap any others. 999 // In doing so, we can take advantage of the fact that both lists are 1000 // sorted. 1001 for (unsigned i = 0, j = 0; i < Values.size(); ++i) { 1002 for (; j < Next.Values.size(); ++j) { 1003 int res = cast<DIExpression>(Values[i].Expression)->fragmentCmp( 1004 cast<DIExpression>(Next.Values[j].Expression)); 1005 if (res == 0) // The two expressions overlap, we can't merge. 1006 return false; 1007 // Values[i] is entirely before Next.Values[j], 1008 // so go back to the next entry of Values. 1009 else if (res == -1) 1010 break; 1011 // Next.Values[j] is entirely before Values[i], so go on to the 1012 // next entry of Next.Values. 1013 } 1014 } 1015 1016 addValues(Next.Values); 1017 End = Next.End; 1018 return true; 1019 } 1020 return false; 1021 } 1022 1023 /// Build the location list for all DBG_VALUEs in the function that 1024 /// describe the same variable. If the ranges of several independent 1025 /// fragments of the same variable overlap partially, split them up and 1026 /// combine the ranges. The resulting DebugLocEntries are will have 1027 /// strict monotonically increasing begin addresses and will never 1028 /// overlap. 1029 // 1030 // Input: 1031 // 1032 // Ranges History [var, loc, fragment ofs size] 1033 // 0 | [x, (reg0, fragment 0, 32)] 1034 // 1 | | [x, (reg1, fragment 32, 32)] <- IsFragmentOfPrevEntry 1035 // 2 | | ... 1036 // 3 | [clobber reg0] 1037 // 4 [x, (mem, fragment 0, 64)] <- overlapping with both previous fragments of 1038 // x. 1039 // 1040 // Output: 1041 // 1042 // [0-1] [x, (reg0, fragment 0, 32)] 1043 // [1-3] [x, (reg0, fragment 0, 32), (reg1, fragment 32, 32)] 1044 // [3-4] [x, (reg1, fragment 32, 32)] 1045 // [4- ] [x, (mem, fragment 0, 64)] 1046 void 1047 DwarfDebug::buildLocationList(SmallVectorImpl<DebugLocEntry> &DebugLoc, 1048 const DbgValueHistoryMap::InstrRanges &Ranges) { 1049 SmallVector<DebugLocEntry::Value, 4> OpenRanges; 1050 1051 for (auto I = Ranges.begin(), E = Ranges.end(); I != E; ++I) { 1052 const MachineInstr *Begin = I->first; 1053 const MachineInstr *End = I->second; 1054 assert(Begin->isDebugValue() && "Invalid History entry"); 1055 1056 // Check if a variable is inaccessible in this range. 1057 if (Begin->getNumOperands() > 1 && 1058 Begin->getOperand(0).isReg() && !Begin->getOperand(0).getReg()) { 1059 OpenRanges.clear(); 1060 continue; 1061 } 1062 1063 // If this fragment overlaps with any open ranges, truncate them. 1064 const DIExpression *DIExpr = Begin->getDebugExpression(); 1065 auto Last = remove_if(OpenRanges, [&](DebugLocEntry::Value R) { 1066 return DIExpr->fragmentsOverlap(R.getExpression()); 1067 }); 1068 OpenRanges.erase(Last, OpenRanges.end()); 1069 1070 const MCSymbol *StartLabel = getLabelBeforeInsn(Begin); 1071 assert(StartLabel && "Forgot label before DBG_VALUE starting a range!"); 1072 1073 const MCSymbol *EndLabel; 1074 if (End != nullptr) 1075 EndLabel = getLabelAfterInsn(End); 1076 else if (std::next(I) == Ranges.end()) 1077 EndLabel = Asm->getFunctionEnd(); 1078 else 1079 EndLabel = getLabelBeforeInsn(std::next(I)->first); 1080 assert(EndLabel && "Forgot label after instruction ending a range!"); 1081 1082 LLVM_DEBUG(dbgs() << "DotDebugLoc: " << *Begin << "\n"); 1083 1084 auto Value = getDebugLocValue(Begin); 1085 DebugLocEntry Loc(StartLabel, EndLabel, Value); 1086 bool couldMerge = false; 1087 1088 // If this is a fragment, it may belong to the current DebugLocEntry. 1089 if (DIExpr->isFragment()) { 1090 // Add this value to the list of open ranges. 1091 OpenRanges.push_back(Value); 1092 1093 // Attempt to add the fragment to the last entry. 1094 if (!DebugLoc.empty()) 1095 if (DebugLoc.back().MergeValues(Loc)) 1096 couldMerge = true; 1097 } 1098 1099 if (!couldMerge) { 1100 // Need to add a new DebugLocEntry. Add all values from still 1101 // valid non-overlapping fragments. 1102 if (OpenRanges.size()) 1103 Loc.addValues(OpenRanges); 1104 1105 DebugLoc.push_back(std::move(Loc)); 1106 } 1107 1108 // Attempt to coalesce the ranges of two otherwise identical 1109 // DebugLocEntries. 1110 auto CurEntry = DebugLoc.rbegin(); 1111 LLVM_DEBUG({ 1112 dbgs() << CurEntry->getValues().size() << " Values:\n"; 1113 for (auto &Value : CurEntry->getValues()) 1114 Value.dump(); 1115 dbgs() << "-----\n"; 1116 }); 1117 1118 auto PrevEntry = std::next(CurEntry); 1119 if (PrevEntry != DebugLoc.rend() && PrevEntry->MergeRanges(*CurEntry)) 1120 DebugLoc.pop_back(); 1121 } 1122 } 1123 1124 DbgVariable *DwarfDebug::createConcreteVariable(DwarfCompileUnit &TheCU, 1125 LexicalScope &Scope, 1126 InlinedVariable IV) { 1127 ensureAbstractVariableIsCreatedIfScoped(TheCU, IV, Scope.getScopeNode()); 1128 ConcreteVariables.push_back( 1129 llvm::make_unique<DbgVariable>(IV.first, IV.second)); 1130 InfoHolder.addScopeVariable(&Scope, ConcreteVariables.back().get()); 1131 return ConcreteVariables.back().get(); 1132 } 1133 1134 /// Determine whether a *singular* DBG_VALUE is valid for the entirety of its 1135 /// enclosing lexical scope. The check ensures there are no other instructions 1136 /// in the same lexical scope preceding the DBG_VALUE and that its range is 1137 /// either open or otherwise rolls off the end of the scope. 1138 static bool validThroughout(LexicalScopes &LScopes, 1139 const MachineInstr *DbgValue, 1140 const MachineInstr *RangeEnd) { 1141 assert(DbgValue->getDebugLoc() && "DBG_VALUE without a debug location"); 1142 auto MBB = DbgValue->getParent(); 1143 auto DL = DbgValue->getDebugLoc(); 1144 auto *LScope = LScopes.findLexicalScope(DL); 1145 // Scope doesn't exist; this is a dead DBG_VALUE. 1146 if (!LScope) 1147 return false; 1148 auto &LSRange = LScope->getRanges(); 1149 if (LSRange.size() == 0) 1150 return false; 1151 1152 // Determine if the DBG_VALUE is valid at the beginning of its lexical block. 1153 const MachineInstr *LScopeBegin = LSRange.front().first; 1154 // Early exit if the lexical scope begins outside of the current block. 1155 if (LScopeBegin->getParent() != MBB) 1156 return false; 1157 MachineBasicBlock::const_reverse_iterator Pred(DbgValue); 1158 for (++Pred; Pred != MBB->rend(); ++Pred) { 1159 if (Pred->getFlag(MachineInstr::FrameSetup)) 1160 break; 1161 auto PredDL = Pred->getDebugLoc(); 1162 if (!PredDL || Pred->isMetaInstruction()) 1163 continue; 1164 // Check whether the instruction preceding the DBG_VALUE is in the same 1165 // (sub)scope as the DBG_VALUE. 1166 if (DL->getScope() == PredDL->getScope()) 1167 return false; 1168 auto *PredScope = LScopes.findLexicalScope(PredDL); 1169 if (!PredScope || LScope->dominates(PredScope)) 1170 return false; 1171 } 1172 1173 // If the range of the DBG_VALUE is open-ended, report success. 1174 if (!RangeEnd) 1175 return true; 1176 1177 // Fail if there are instructions belonging to our scope in another block. 1178 const MachineInstr *LScopeEnd = LSRange.back().second; 1179 if (LScopeEnd->getParent() != MBB) 1180 return false; 1181 1182 // Single, constant DBG_VALUEs in the prologue are promoted to be live 1183 // throughout the function. This is a hack, presumably for DWARF v2 and not 1184 // necessarily correct. It would be much better to use a dbg.declare instead 1185 // if we know the constant is live throughout the scope. 1186 if (DbgValue->getOperand(0).isImm() && MBB->pred_empty()) 1187 return true; 1188 1189 return false; 1190 } 1191 1192 // Find variables for each lexical scope. 1193 void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU, 1194 const DISubprogram *SP, 1195 DenseSet<InlinedVariable> &Processed) { 1196 // Grab the variable info that was squirreled away in the MMI side-table. 1197 collectVariableInfoFromMFTable(TheCU, Processed); 1198 1199 for (const auto &I : DbgValues) { 1200 InlinedVariable IV = I.first; 1201 if (Processed.count(IV)) 1202 continue; 1203 1204 // Instruction ranges, specifying where IV is accessible. 1205 const auto &Ranges = I.second; 1206 if (Ranges.empty()) 1207 continue; 1208 1209 LexicalScope *Scope = nullptr; 1210 if (const DILocation *IA = IV.second) 1211 Scope = LScopes.findInlinedScope(IV.first->getScope(), IA); 1212 else 1213 Scope = LScopes.findLexicalScope(IV.first->getScope()); 1214 // If variable scope is not found then skip this variable. 1215 if (!Scope) 1216 continue; 1217 1218 Processed.insert(IV); 1219 DbgVariable *RegVar = createConcreteVariable(TheCU, *Scope, IV); 1220 1221 const MachineInstr *MInsn = Ranges.front().first; 1222 assert(MInsn->isDebugValue() && "History must begin with debug value"); 1223 1224 // Check if there is a single DBG_VALUE, valid throughout the var's scope. 1225 if (Ranges.size() == 1 && 1226 validThroughout(LScopes, MInsn, Ranges.front().second)) { 1227 RegVar->initializeDbgValue(MInsn); 1228 continue; 1229 } 1230 // Do not emit location lists if .debug_loc secton is disabled. 1231 if (!useLocSection()) 1232 continue; 1233 1234 // Handle multiple DBG_VALUE instructions describing one variable. 1235 DebugLocStream::ListBuilder List(DebugLocs, TheCU, *Asm, *RegVar, *MInsn); 1236 1237 // Build the location list for this variable. 1238 SmallVector<DebugLocEntry, 8> Entries; 1239 buildLocationList(Entries, Ranges); 1240 1241 // If the variable has a DIBasicType, extract it. Basic types cannot have 1242 // unique identifiers, so don't bother resolving the type with the 1243 // identifier map. 1244 const DIBasicType *BT = dyn_cast<DIBasicType>( 1245 static_cast<const Metadata *>(IV.first->getType())); 1246 1247 // Finalize the entry by lowering it into a DWARF bytestream. 1248 for (auto &Entry : Entries) 1249 Entry.finalize(*Asm, List, BT); 1250 } 1251 1252 // Collect info for variables that were optimized out. 1253 for (const DINode *DN : SP->getRetainedNodes()) { 1254 if (auto *DV = dyn_cast<DILocalVariable>(DN)) { 1255 if (Processed.insert(InlinedVariable(DV, nullptr)).second) 1256 if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope())) 1257 createConcreteVariable(TheCU, *Scope, InlinedVariable(DV, nullptr)); 1258 } 1259 } 1260 } 1261 1262 // Process beginning of an instruction. 1263 void DwarfDebug::beginInstruction(const MachineInstr *MI) { 1264 DebugHandlerBase::beginInstruction(MI); 1265 assert(CurMI); 1266 1267 const auto *SP = MI->getMF()->getFunction().getSubprogram(); 1268 if (!SP || SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug) 1269 return; 1270 1271 // Check if source location changes, but ignore DBG_VALUE and CFI locations. 1272 // If the instruction is part of the function frame setup code, do not emit 1273 // any line record, as there is no correspondence with any user code. 1274 if (MI->isMetaInstruction() || MI->getFlag(MachineInstr::FrameSetup)) 1275 return; 1276 const DebugLoc &DL = MI->getDebugLoc(); 1277 // When we emit a line-0 record, we don't update PrevInstLoc; so look at 1278 // the last line number actually emitted, to see if it was line 0. 1279 unsigned LastAsmLine = 1280 Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine(); 1281 1282 if (DL == PrevInstLoc) { 1283 // If we have an ongoing unspecified location, nothing to do here. 1284 if (!DL) 1285 return; 1286 // We have an explicit location, same as the previous location. 1287 // But we might be coming back to it after a line 0 record. 1288 if (LastAsmLine == 0 && DL.getLine() != 0) { 1289 // Reinstate the source location but not marked as a statement. 1290 const MDNode *Scope = DL.getScope(); 1291 recordSourceLine(DL.getLine(), DL.getCol(), Scope, /*Flags=*/0); 1292 } 1293 return; 1294 } 1295 1296 if (!DL) { 1297 // We have an unspecified location, which might want to be line 0. 1298 // If we have already emitted a line-0 record, don't repeat it. 1299 if (LastAsmLine == 0) 1300 return; 1301 // If user said Don't Do That, don't do that. 1302 if (UnknownLocations == Disable) 1303 return; 1304 // See if we have a reason to emit a line-0 record now. 1305 // Reasons to emit a line-0 record include: 1306 // - User asked for it (UnknownLocations). 1307 // - Instruction has a label, so it's referenced from somewhere else, 1308 // possibly debug information; we want it to have a source location. 1309 // - Instruction is at the top of a block; we don't want to inherit the 1310 // location from the physically previous (maybe unrelated) block. 1311 if (UnknownLocations == Enable || PrevLabel || 1312 (PrevInstBB && PrevInstBB != MI->getParent())) { 1313 // Preserve the file and column numbers, if we can, to save space in 1314 // the encoded line table. 1315 // Do not update PrevInstLoc, it remembers the last non-0 line. 1316 const MDNode *Scope = nullptr; 1317 unsigned Column = 0; 1318 if (PrevInstLoc) { 1319 Scope = PrevInstLoc.getScope(); 1320 Column = PrevInstLoc.getCol(); 1321 } 1322 recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0); 1323 } 1324 return; 1325 } 1326 1327 // We have an explicit location, different from the previous location. 1328 // Don't repeat a line-0 record, but otherwise emit the new location. 1329 // (The new location might be an explicit line 0, which we do emit.) 1330 if (PrevInstLoc && DL.getLine() == 0 && LastAsmLine == 0) 1331 return; 1332 unsigned Flags = 0; 1333 if (DL == PrologEndLoc) { 1334 Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT; 1335 PrologEndLoc = DebugLoc(); 1336 } 1337 // If the line changed, we call that a new statement; unless we went to 1338 // line 0 and came back, in which case it is not a new statement. 1339 unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine; 1340 if (DL.getLine() && DL.getLine() != OldLine) 1341 Flags |= DWARF2_FLAG_IS_STMT; 1342 1343 const MDNode *Scope = DL.getScope(); 1344 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags); 1345 1346 // If we're not at line 0, remember this location. 1347 if (DL.getLine()) 1348 PrevInstLoc = DL; 1349 } 1350 1351 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) { 1352 // First known non-DBG_VALUE and non-frame setup location marks 1353 // the beginning of the function body. 1354 for (const auto &MBB : *MF) 1355 for (const auto &MI : MBB) 1356 if (!MI.isMetaInstruction() && !MI.getFlag(MachineInstr::FrameSetup) && 1357 MI.getDebugLoc()) 1358 return MI.getDebugLoc(); 1359 return DebugLoc(); 1360 } 1361 1362 // Gather pre-function debug information. Assumes being called immediately 1363 // after the function entry point has been emitted. 1364 void DwarfDebug::beginFunctionImpl(const MachineFunction *MF) { 1365 CurFn = MF; 1366 1367 auto *SP = MF->getFunction().getSubprogram(); 1368 assert(LScopes.empty() || SP == LScopes.getCurrentFunctionScope()->getScopeNode()); 1369 if (SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug) 1370 return; 1371 1372 DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(SP->getUnit()); 1373 1374 // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function 1375 // belongs to so that we add to the correct per-cu line table in the 1376 // non-asm case. 1377 if (Asm->OutStreamer->hasRawTextSupport()) 1378 // Use a single line table if we are generating assembly. 1379 Asm->OutStreamer->getContext().setDwarfCompileUnitID(0); 1380 else 1381 Asm->OutStreamer->getContext().setDwarfCompileUnitID(CU.getUniqueID()); 1382 1383 // Record beginning of function. 1384 PrologEndLoc = findPrologueEndLoc(MF); 1385 if (PrologEndLoc) { 1386 // We'd like to list the prologue as "not statements" but GDB behaves 1387 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing. 1388 auto *SP = PrologEndLoc->getInlinedAtScope()->getSubprogram(); 1389 recordSourceLine(SP->getScopeLine(), 0, SP, DWARF2_FLAG_IS_STMT); 1390 } 1391 } 1392 1393 void DwarfDebug::skippedNonDebugFunction() { 1394 // If we don't have a subprogram for this function then there will be a hole 1395 // in the range information. Keep note of this by setting the previously used 1396 // section to nullptr. 1397 PrevCU = nullptr; 1398 CurFn = nullptr; 1399 } 1400 1401 // Gather and emit post-function debug information. 1402 void DwarfDebug::endFunctionImpl(const MachineFunction *MF) { 1403 const DISubprogram *SP = MF->getFunction().getSubprogram(); 1404 1405 assert(CurFn == MF && 1406 "endFunction should be called with the same function as beginFunction"); 1407 1408 // Set DwarfDwarfCompileUnitID in MCContext to default value. 1409 Asm->OutStreamer->getContext().setDwarfCompileUnitID(0); 1410 1411 LexicalScope *FnScope = LScopes.getCurrentFunctionScope(); 1412 assert(!FnScope || SP == FnScope->getScopeNode()); 1413 DwarfCompileUnit &TheCU = *CUMap.lookup(SP->getUnit()); 1414 1415 DenseSet<InlinedVariable> ProcessedVars; 1416 collectVariableInfo(TheCU, SP, ProcessedVars); 1417 1418 // Add the range of this function to the list of ranges for the CU. 1419 TheCU.addRange(RangeSpan(Asm->getFunctionBegin(), Asm->getFunctionEnd())); 1420 1421 // Under -gmlt, skip building the subprogram if there are no inlined 1422 // subroutines inside it. But with -fdebug-info-for-profiling, the subprogram 1423 // is still needed as we need its source location. 1424 if (!TheCU.getCUNode()->getDebugInfoForProfiling() && 1425 TheCU.getCUNode()->getEmissionKind() == DICompileUnit::LineTablesOnly && 1426 LScopes.getAbstractScopesList().empty() && !IsDarwin) { 1427 assert(InfoHolder.getScopeVariables().empty()); 1428 PrevLabel = nullptr; 1429 CurFn = nullptr; 1430 return; 1431 } 1432 1433 #ifndef NDEBUG 1434 size_t NumAbstractScopes = LScopes.getAbstractScopesList().size(); 1435 #endif 1436 // Construct abstract scopes. 1437 for (LexicalScope *AScope : LScopes.getAbstractScopesList()) { 1438 auto *SP = cast<DISubprogram>(AScope->getScopeNode()); 1439 for (const DINode *DN : SP->getRetainedNodes()) { 1440 if (auto *DV = dyn_cast<DILocalVariable>(DN)) { 1441 // Collect info for variables that were optimized out. 1442 if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second) 1443 continue; 1444 ensureAbstractVariableIsCreated(TheCU, InlinedVariable(DV, nullptr), 1445 DV->getScope()); 1446 assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes 1447 && "ensureAbstractVariableIsCreated inserted abstract scopes"); 1448 } 1449 } 1450 constructAbstractSubprogramScopeDIE(TheCU, AScope); 1451 } 1452 1453 ProcessedSPNodes.insert(SP); 1454 TheCU.constructSubprogramScopeDIE(SP, FnScope); 1455 if (auto *SkelCU = TheCU.getSkeleton()) 1456 if (!LScopes.getAbstractScopesList().empty() && 1457 TheCU.getCUNode()->getSplitDebugInlining()) 1458 SkelCU->constructSubprogramScopeDIE(SP, FnScope); 1459 1460 // Clear debug info 1461 // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the 1462 // DbgVariables except those that are also in AbstractVariables (since they 1463 // can be used cross-function) 1464 InfoHolder.getScopeVariables().clear(); 1465 PrevLabel = nullptr; 1466 CurFn = nullptr; 1467 } 1468 1469 // Register a source line with debug info. Returns the unique label that was 1470 // emitted and which provides correspondence to the source line list. 1471 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S, 1472 unsigned Flags) { 1473 StringRef Fn; 1474 unsigned FileNo = 1; 1475 unsigned Discriminator = 0; 1476 if (auto *Scope = cast_or_null<DIScope>(S)) { 1477 Fn = Scope->getFilename(); 1478 if (Line != 0 && getDwarfVersion() >= 4) 1479 if (auto *LBF = dyn_cast<DILexicalBlockFile>(Scope)) 1480 Discriminator = LBF->getDiscriminator(); 1481 1482 unsigned CUID = Asm->OutStreamer->getContext().getDwarfCompileUnitID(); 1483 FileNo = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID]) 1484 .getOrCreateSourceID(Scope->getFile()); 1485 } 1486 Asm->OutStreamer->EmitDwarfLocDirective(FileNo, Line, Col, Flags, 0, 1487 Discriminator, Fn); 1488 } 1489 1490 //===----------------------------------------------------------------------===// 1491 // Emit Methods 1492 //===----------------------------------------------------------------------===// 1493 1494 // Emit the debug info section. 1495 void DwarfDebug::emitDebugInfo() { 1496 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1497 Holder.emitUnits(/* UseOffsets */ false); 1498 } 1499 1500 // Emit the abbreviation section. 1501 void DwarfDebug::emitAbbreviations() { 1502 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1503 1504 Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection()); 1505 } 1506 1507 void DwarfDebug::emitStringOffsetsTableHeader() { 1508 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1509 Holder.emitStringOffsetsTableHeader( 1510 Asm->getObjFileLowering().getDwarfStrOffSection()); 1511 } 1512 1513 template <typename AccelTableT> 1514 void DwarfDebug::emitAccel(AccelTableT &Accel, MCSection *Section, 1515 StringRef TableName) { 1516 Asm->OutStreamer->SwitchSection(Section); 1517 1518 // Emit the full data. 1519 emitAppleAccelTable(Asm, Accel, TableName, Section->getBeginSymbol()); 1520 } 1521 1522 void DwarfDebug::emitAccelDebugNames() { 1523 // Don't emit anything if we have no compilation units to index. 1524 if (getUnits().empty()) 1525 return; 1526 1527 Asm->OutStreamer->SwitchSection( 1528 Asm->getObjFileLowering().getDwarfDebugNamesSection()); 1529 emitDWARF5AccelTable(Asm, AccelDebugNames, *this, getUnits()); 1530 } 1531 1532 // Emit visible names into a hashed accelerator table section. 1533 void DwarfDebug::emitAccelNames() { 1534 emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(), 1535 "Names"); 1536 } 1537 1538 // Emit objective C classes and categories into a hashed accelerator table 1539 // section. 1540 void DwarfDebug::emitAccelObjC() { 1541 emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(), 1542 "ObjC"); 1543 } 1544 1545 // Emit namespace dies into a hashed accelerator table. 1546 void DwarfDebug::emitAccelNamespaces() { 1547 emitAccel(AccelNamespace, 1548 Asm->getObjFileLowering().getDwarfAccelNamespaceSection(), 1549 "namespac"); 1550 } 1551 1552 // Emit type dies into a hashed accelerator table. 1553 void DwarfDebug::emitAccelTypes() { 1554 emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(), 1555 "types"); 1556 } 1557 1558 // Public name handling. 1559 // The format for the various pubnames: 1560 // 1561 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU 1562 // for the DIE that is named. 1563 // 1564 // gnu pubnames - offset/index value/name tuples where the offset is the offset 1565 // into the CU and the index value is computed according to the type of value 1566 // for the DIE that is named. 1567 // 1568 // For type units the offset is the offset of the skeleton DIE. For split dwarf 1569 // it's the offset within the debug_info/debug_types dwo section, however, the 1570 // reference in the pubname header doesn't change. 1571 1572 /// computeIndexValue - Compute the gdb index value for the DIE and CU. 1573 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU, 1574 const DIE *Die) { 1575 // Entities that ended up only in a Type Unit reference the CU instead (since 1576 // the pub entry has offsets within the CU there's no real offset that can be 1577 // provided anyway). As it happens all such entities (namespaces and types, 1578 // types only in C++ at that) are rendered as TYPE+EXTERNAL. If this turns out 1579 // not to be true it would be necessary to persist this information from the 1580 // point at which the entry is added to the index data structure - since by 1581 // the time the index is built from that, the original type/namespace DIE in a 1582 // type unit has already been destroyed so it can't be queried for properties 1583 // like tag, etc. 1584 if (Die->getTag() == dwarf::DW_TAG_compile_unit) 1585 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, 1586 dwarf::GIEL_EXTERNAL); 1587 dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC; 1588 1589 // We could have a specification DIE that has our most of our knowledge, 1590 // look for that now. 1591 if (DIEValue SpecVal = Die->findAttribute(dwarf::DW_AT_specification)) { 1592 DIE &SpecDIE = SpecVal.getDIEEntry().getEntry(); 1593 if (SpecDIE.findAttribute(dwarf::DW_AT_external)) 1594 Linkage = dwarf::GIEL_EXTERNAL; 1595 } else if (Die->findAttribute(dwarf::DW_AT_external)) 1596 Linkage = dwarf::GIEL_EXTERNAL; 1597 1598 switch (Die->getTag()) { 1599 case dwarf::DW_TAG_class_type: 1600 case dwarf::DW_TAG_structure_type: 1601 case dwarf::DW_TAG_union_type: 1602 case dwarf::DW_TAG_enumeration_type: 1603 return dwarf::PubIndexEntryDescriptor( 1604 dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus 1605 ? dwarf::GIEL_STATIC 1606 : dwarf::GIEL_EXTERNAL); 1607 case dwarf::DW_TAG_typedef: 1608 case dwarf::DW_TAG_base_type: 1609 case dwarf::DW_TAG_subrange_type: 1610 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC); 1611 case dwarf::DW_TAG_namespace: 1612 return dwarf::GIEK_TYPE; 1613 case dwarf::DW_TAG_subprogram: 1614 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage); 1615 case dwarf::DW_TAG_variable: 1616 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage); 1617 case dwarf::DW_TAG_enumerator: 1618 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, 1619 dwarf::GIEL_STATIC); 1620 default: 1621 return dwarf::GIEK_NONE; 1622 } 1623 } 1624 1625 /// emitDebugPubSections - Emit visible names and types into debug pubnames and 1626 /// pubtypes sections. 1627 void DwarfDebug::emitDebugPubSections() { 1628 for (const auto &NU : CUMap) { 1629 DwarfCompileUnit *TheU = NU.second; 1630 if (!TheU->hasDwarfPubSections()) 1631 continue; 1632 1633 bool GnuStyle = TheU->getCUNode()->getGnuPubnames(); 1634 1635 Asm->OutStreamer->SwitchSection( 1636 GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection() 1637 : Asm->getObjFileLowering().getDwarfPubNamesSection()); 1638 emitDebugPubSection(GnuStyle, "Names", TheU, TheU->getGlobalNames()); 1639 1640 Asm->OutStreamer->SwitchSection( 1641 GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection() 1642 : Asm->getObjFileLowering().getDwarfPubTypesSection()); 1643 emitDebugPubSection(GnuStyle, "Types", TheU, TheU->getGlobalTypes()); 1644 } 1645 } 1646 1647 void DwarfDebug::emitSectionReference(const DwarfCompileUnit &CU) { 1648 if (useSectionsAsReferences()) 1649 Asm->EmitDwarfOffset(CU.getSection()->getBeginSymbol(), 1650 CU.getDebugSectionOffset()); 1651 else 1652 Asm->emitDwarfSymbolReference(CU.getLabelBegin()); 1653 } 1654 1655 void DwarfDebug::emitDebugPubSection(bool GnuStyle, StringRef Name, 1656 DwarfCompileUnit *TheU, 1657 const StringMap<const DIE *> &Globals) { 1658 if (auto *Skeleton = TheU->getSkeleton()) 1659 TheU = Skeleton; 1660 1661 // Emit the header. 1662 Asm->OutStreamer->AddComment("Length of Public " + Name + " Info"); 1663 MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin"); 1664 MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end"); 1665 Asm->EmitLabelDifference(EndLabel, BeginLabel, 4); 1666 1667 Asm->OutStreamer->EmitLabel(BeginLabel); 1668 1669 Asm->OutStreamer->AddComment("DWARF Version"); 1670 Asm->emitInt16(dwarf::DW_PUBNAMES_VERSION); 1671 1672 Asm->OutStreamer->AddComment("Offset of Compilation Unit Info"); 1673 emitSectionReference(*TheU); 1674 1675 Asm->OutStreamer->AddComment("Compilation Unit Length"); 1676 Asm->emitInt32(TheU->getLength()); 1677 1678 // Emit the pubnames for this compilation unit. 1679 for (const auto &GI : Globals) { 1680 const char *Name = GI.getKeyData(); 1681 const DIE *Entity = GI.second; 1682 1683 Asm->OutStreamer->AddComment("DIE offset"); 1684 Asm->emitInt32(Entity->getOffset()); 1685 1686 if (GnuStyle) { 1687 dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity); 1688 Asm->OutStreamer->AddComment( 1689 Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " + 1690 dwarf::GDBIndexEntryLinkageString(Desc.Linkage)); 1691 Asm->emitInt8(Desc.toBits()); 1692 } 1693 1694 Asm->OutStreamer->AddComment("External Name"); 1695 Asm->OutStreamer->EmitBytes(StringRef(Name, GI.getKeyLength() + 1)); 1696 } 1697 1698 Asm->OutStreamer->AddComment("End Mark"); 1699 Asm->emitInt32(0); 1700 Asm->OutStreamer->EmitLabel(EndLabel); 1701 } 1702 1703 /// Emit null-terminated strings into a debug str section. 1704 void DwarfDebug::emitDebugStr() { 1705 MCSection *StringOffsetsSection = nullptr; 1706 if (useSegmentedStringOffsetsTable()) { 1707 emitStringOffsetsTableHeader(); 1708 StringOffsetsSection = Asm->getObjFileLowering().getDwarfStrOffSection(); 1709 } 1710 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1711 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection(), 1712 StringOffsetsSection, /* UseRelativeOffsets = */ true); 1713 } 1714 1715 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer, 1716 const DebugLocStream::Entry &Entry) { 1717 auto &&Comments = DebugLocs.getComments(Entry); 1718 auto Comment = Comments.begin(); 1719 auto End = Comments.end(); 1720 for (uint8_t Byte : DebugLocs.getBytes(Entry)) 1721 Streamer.EmitInt8(Byte, Comment != End ? *(Comment++) : ""); 1722 } 1723 1724 static void emitDebugLocValue(const AsmPrinter &AP, const DIBasicType *BT, 1725 const DebugLocEntry::Value &Value, 1726 DwarfExpression &DwarfExpr) { 1727 auto *DIExpr = Value.getExpression(); 1728 DIExpressionCursor ExprCursor(DIExpr); 1729 DwarfExpr.addFragmentOffset(DIExpr); 1730 // Regular entry. 1731 if (Value.isInt()) { 1732 if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed || 1733 BT->getEncoding() == dwarf::DW_ATE_signed_char)) 1734 DwarfExpr.addSignedConstant(Value.getInt()); 1735 else 1736 DwarfExpr.addUnsignedConstant(Value.getInt()); 1737 } else if (Value.isLocation()) { 1738 MachineLocation Location = Value.getLoc(); 1739 if (Location.isIndirect()) 1740 DwarfExpr.setMemoryLocationKind(); 1741 DIExpressionCursor Cursor(DIExpr); 1742 const TargetRegisterInfo &TRI = *AP.MF->getSubtarget().getRegisterInfo(); 1743 if (!DwarfExpr.addMachineRegExpression(TRI, Cursor, Location.getReg())) 1744 return; 1745 return DwarfExpr.addExpression(std::move(Cursor)); 1746 } else if (Value.isConstantFP()) { 1747 APInt RawBytes = Value.getConstantFP()->getValueAPF().bitcastToAPInt(); 1748 DwarfExpr.addUnsignedConstant(RawBytes); 1749 } 1750 DwarfExpr.addExpression(std::move(ExprCursor)); 1751 } 1752 1753 void DebugLocEntry::finalize(const AsmPrinter &AP, 1754 DebugLocStream::ListBuilder &List, 1755 const DIBasicType *BT) { 1756 DebugLocStream::EntryBuilder Entry(List, Begin, End); 1757 BufferByteStreamer Streamer = Entry.getStreamer(); 1758 DebugLocDwarfExpression DwarfExpr(AP.getDwarfVersion(), Streamer); 1759 const DebugLocEntry::Value &Value = Values[0]; 1760 if (Value.isFragment()) { 1761 // Emit all fragments that belong to the same variable and range. 1762 assert(llvm::all_of(Values, [](DebugLocEntry::Value P) { 1763 return P.isFragment(); 1764 }) && "all values are expected to be fragments"); 1765 assert(std::is_sorted(Values.begin(), Values.end()) && 1766 "fragments are expected to be sorted"); 1767 1768 for (auto Fragment : Values) 1769 emitDebugLocValue(AP, BT, Fragment, DwarfExpr); 1770 1771 } else { 1772 assert(Values.size() == 1 && "only fragments may have >1 value"); 1773 emitDebugLocValue(AP, BT, Value, DwarfExpr); 1774 } 1775 DwarfExpr.finalize(); 1776 } 1777 1778 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) { 1779 // Emit the size. 1780 Asm->OutStreamer->AddComment("Loc expr size"); 1781 Asm->emitInt16(DebugLocs.getBytes(Entry).size()); 1782 1783 // Emit the entry. 1784 APByteStreamer Streamer(*Asm); 1785 emitDebugLocEntry(Streamer, Entry); 1786 } 1787 1788 // Emit locations into the debug loc section. 1789 void DwarfDebug::emitDebugLoc() { 1790 if (DebugLocs.getLists().empty()) 1791 return; 1792 1793 // Start the dwarf loc section. 1794 Asm->OutStreamer->SwitchSection( 1795 Asm->getObjFileLowering().getDwarfLocSection()); 1796 unsigned char Size = Asm->MAI->getCodePointerSize(); 1797 for (const auto &List : DebugLocs.getLists()) { 1798 Asm->OutStreamer->EmitLabel(List.Label); 1799 const DwarfCompileUnit *CU = List.CU; 1800 for (const auto &Entry : DebugLocs.getEntries(List)) { 1801 // Set up the range. This range is relative to the entry point of the 1802 // compile unit. This is a hard coded 0 for low_pc when we're emitting 1803 // ranges, or the DW_AT_low_pc on the compile unit otherwise. 1804 if (auto *Base = CU->getBaseAddress()) { 1805 Asm->EmitLabelDifference(Entry.BeginSym, Base, Size); 1806 Asm->EmitLabelDifference(Entry.EndSym, Base, Size); 1807 } else { 1808 Asm->OutStreamer->EmitSymbolValue(Entry.BeginSym, Size); 1809 Asm->OutStreamer->EmitSymbolValue(Entry.EndSym, Size); 1810 } 1811 1812 emitDebugLocEntryLocation(Entry); 1813 } 1814 Asm->OutStreamer->EmitIntValue(0, Size); 1815 Asm->OutStreamer->EmitIntValue(0, Size); 1816 } 1817 } 1818 1819 void DwarfDebug::emitDebugLocDWO() { 1820 Asm->OutStreamer->SwitchSection( 1821 Asm->getObjFileLowering().getDwarfLocDWOSection()); 1822 for (const auto &List : DebugLocs.getLists()) { 1823 Asm->OutStreamer->EmitLabel(List.Label); 1824 for (const auto &Entry : DebugLocs.getEntries(List)) { 1825 // Just always use start_length for now - at least that's one address 1826 // rather than two. We could get fancier and try to, say, reuse an 1827 // address we know we've emitted elsewhere (the start of the function? 1828 // The start of the CU or CU subrange that encloses this range?) 1829 Asm->emitInt8(dwarf::DW_LLE_startx_length); 1830 unsigned idx = AddrPool.getIndex(Entry.BeginSym); 1831 Asm->EmitULEB128(idx); 1832 Asm->EmitLabelDifference(Entry.EndSym, Entry.BeginSym, 4); 1833 1834 emitDebugLocEntryLocation(Entry); 1835 } 1836 Asm->emitInt8(dwarf::DW_LLE_end_of_list); 1837 } 1838 } 1839 1840 struct ArangeSpan { 1841 const MCSymbol *Start, *End; 1842 }; 1843 1844 // Emit a debug aranges section, containing a CU lookup for any 1845 // address we can tie back to a CU. 1846 void DwarfDebug::emitDebugARanges() { 1847 // Provides a unique id per text section. 1848 MapVector<MCSection *, SmallVector<SymbolCU, 8>> SectionMap; 1849 1850 // Filter labels by section. 1851 for (const SymbolCU &SCU : ArangeLabels) { 1852 if (SCU.Sym->isInSection()) { 1853 // Make a note of this symbol and it's section. 1854 MCSection *Section = &SCU.Sym->getSection(); 1855 if (!Section->getKind().isMetadata()) 1856 SectionMap[Section].push_back(SCU); 1857 } else { 1858 // Some symbols (e.g. common/bss on mach-o) can have no section but still 1859 // appear in the output. This sucks as we rely on sections to build 1860 // arange spans. We can do it without, but it's icky. 1861 SectionMap[nullptr].push_back(SCU); 1862 } 1863 } 1864 1865 DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans; 1866 1867 for (auto &I : SectionMap) { 1868 MCSection *Section = I.first; 1869 SmallVector<SymbolCU, 8> &List = I.second; 1870 if (List.size() < 1) 1871 continue; 1872 1873 // If we have no section (e.g. common), just write out 1874 // individual spans for each symbol. 1875 if (!Section) { 1876 for (const SymbolCU &Cur : List) { 1877 ArangeSpan Span; 1878 Span.Start = Cur.Sym; 1879 Span.End = nullptr; 1880 assert(Cur.CU); 1881 Spans[Cur.CU].push_back(Span); 1882 } 1883 continue; 1884 } 1885 1886 // Sort the symbols by offset within the section. 1887 std::stable_sort( 1888 List.begin(), List.end(), [&](const SymbolCU &A, const SymbolCU &B) { 1889 unsigned IA = A.Sym ? Asm->OutStreamer->GetSymbolOrder(A.Sym) : 0; 1890 unsigned IB = B.Sym ? Asm->OutStreamer->GetSymbolOrder(B.Sym) : 0; 1891 1892 // Symbols with no order assigned should be placed at the end. 1893 // (e.g. section end labels) 1894 if (IA == 0) 1895 return false; 1896 if (IB == 0) 1897 return true; 1898 return IA < IB; 1899 }); 1900 1901 // Insert a final terminator. 1902 List.push_back(SymbolCU(nullptr, Asm->OutStreamer->endSection(Section))); 1903 1904 // Build spans between each label. 1905 const MCSymbol *StartSym = List[0].Sym; 1906 for (size_t n = 1, e = List.size(); n < e; n++) { 1907 const SymbolCU &Prev = List[n - 1]; 1908 const SymbolCU &Cur = List[n]; 1909 1910 // Try and build the longest span we can within the same CU. 1911 if (Cur.CU != Prev.CU) { 1912 ArangeSpan Span; 1913 Span.Start = StartSym; 1914 Span.End = Cur.Sym; 1915 assert(Prev.CU); 1916 Spans[Prev.CU].push_back(Span); 1917 StartSym = Cur.Sym; 1918 } 1919 } 1920 } 1921 1922 // Start the dwarf aranges section. 1923 Asm->OutStreamer->SwitchSection( 1924 Asm->getObjFileLowering().getDwarfARangesSection()); 1925 1926 unsigned PtrSize = Asm->MAI->getCodePointerSize(); 1927 1928 // Build a list of CUs used. 1929 std::vector<DwarfCompileUnit *> CUs; 1930 for (const auto &it : Spans) { 1931 DwarfCompileUnit *CU = it.first; 1932 CUs.push_back(CU); 1933 } 1934 1935 // Sort the CU list (again, to ensure consistent output order). 1936 llvm::sort(CUs.begin(), CUs.end(), 1937 [](const DwarfCompileUnit *A, const DwarfCompileUnit *B) { 1938 return A->getUniqueID() < B->getUniqueID(); 1939 }); 1940 1941 // Emit an arange table for each CU we used. 1942 for (DwarfCompileUnit *CU : CUs) { 1943 std::vector<ArangeSpan> &List = Spans[CU]; 1944 1945 // Describe the skeleton CU's offset and length, not the dwo file's. 1946 if (auto *Skel = CU->getSkeleton()) 1947 CU = Skel; 1948 1949 // Emit size of content not including length itself. 1950 unsigned ContentSize = 1951 sizeof(int16_t) + // DWARF ARange version number 1952 sizeof(int32_t) + // Offset of CU in the .debug_info section 1953 sizeof(int8_t) + // Pointer Size (in bytes) 1954 sizeof(int8_t); // Segment Size (in bytes) 1955 1956 unsigned TupleSize = PtrSize * 2; 1957 1958 // 7.20 in the Dwarf specs requires the table to be aligned to a tuple. 1959 unsigned Padding = 1960 OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize); 1961 1962 ContentSize += Padding; 1963 ContentSize += (List.size() + 1) * TupleSize; 1964 1965 // For each compile unit, write the list of spans it covers. 1966 Asm->OutStreamer->AddComment("Length of ARange Set"); 1967 Asm->emitInt32(ContentSize); 1968 Asm->OutStreamer->AddComment("DWARF Arange version number"); 1969 Asm->emitInt16(dwarf::DW_ARANGES_VERSION); 1970 Asm->OutStreamer->AddComment("Offset Into Debug Info Section"); 1971 emitSectionReference(*CU); 1972 Asm->OutStreamer->AddComment("Address Size (in bytes)"); 1973 Asm->emitInt8(PtrSize); 1974 Asm->OutStreamer->AddComment("Segment Size (in bytes)"); 1975 Asm->emitInt8(0); 1976 1977 Asm->OutStreamer->emitFill(Padding, 0xff); 1978 1979 for (const ArangeSpan &Span : List) { 1980 Asm->EmitLabelReference(Span.Start, PtrSize); 1981 1982 // Calculate the size as being from the span start to it's end. 1983 if (Span.End) { 1984 Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize); 1985 } else { 1986 // For symbols without an end marker (e.g. common), we 1987 // write a single arange entry containing just that one symbol. 1988 uint64_t Size = SymSize[Span.Start]; 1989 if (Size == 0) 1990 Size = 1; 1991 1992 Asm->OutStreamer->EmitIntValue(Size, PtrSize); 1993 } 1994 } 1995 1996 Asm->OutStreamer->AddComment("ARange terminator"); 1997 Asm->OutStreamer->EmitIntValue(0, PtrSize); 1998 Asm->OutStreamer->EmitIntValue(0, PtrSize); 1999 } 2000 } 2001 2002 /// Emit a single range list. We handle both DWARF v5 and earlier. 2003 static void emitRangeList(AsmPrinter *Asm, DwarfCompileUnit *CU, 2004 const RangeSpanList &List) { 2005 2006 auto DwarfVersion = CU->getDwarfVersion(); 2007 // Emit our symbol so we can find the beginning of the range. 2008 Asm->OutStreamer->EmitLabel(List.getSym()); 2009 // Gather all the ranges that apply to the same section so they can share 2010 // a base address entry. 2011 MapVector<const MCSection *, std::vector<const RangeSpan *>> SectionRanges; 2012 // Size for our labels. 2013 auto Size = Asm->MAI->getCodePointerSize(); 2014 2015 for (const RangeSpan &Range : List.getRanges()) 2016 SectionRanges[&Range.getStart()->getSection()].push_back(&Range); 2017 2018 auto *CUBase = CU->getBaseAddress(); 2019 bool BaseIsSet = false; 2020 for (const auto &P : SectionRanges) { 2021 // Don't bother with a base address entry if there's only one range in 2022 // this section in this range list - for example ranges for a CU will 2023 // usually consist of single regions from each of many sections 2024 // (-ffunction-sections, or just C++ inline functions) except under LTO 2025 // or optnone where there may be holes in a single CU's section 2026 // contributions. 2027 auto *Base = CUBase; 2028 if (!Base && P.second.size() > 1 && 2029 (UseDwarfRangesBaseAddressSpecifier || DwarfVersion >= 5)) { 2030 BaseIsSet = true; 2031 // FIXME/use care: This may not be a useful base address if it's not 2032 // the lowest address/range in this object. 2033 Base = P.second.front()->getStart(); 2034 if (DwarfVersion >= 5) { 2035 Asm->OutStreamer->AddComment("DW_RLE_base_address"); 2036 Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_base_address, 1); 2037 } else 2038 Asm->OutStreamer->EmitIntValue(-1, Size); 2039 Asm->OutStreamer->AddComment(" base address"); 2040 Asm->OutStreamer->EmitSymbolValue(Base, Size); 2041 } else if (BaseIsSet && DwarfVersion < 5) { 2042 BaseIsSet = false; 2043 assert(!Base); 2044 Asm->OutStreamer->EmitIntValue(-1, Size); 2045 Asm->OutStreamer->EmitIntValue(0, Size); 2046 } 2047 2048 for (const auto *RS : P.second) { 2049 const MCSymbol *Begin = RS->getStart(); 2050 const MCSymbol *End = RS->getEnd(); 2051 assert(Begin && "Range without a begin symbol?"); 2052 assert(End && "Range without an end symbol?"); 2053 if (Base) { 2054 if (DwarfVersion >= 5) { 2055 // Emit DW_RLE_offset_pair when we have a base. 2056 Asm->OutStreamer->AddComment("DW_RLE_offset_pair"); 2057 Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_offset_pair, 1); 2058 Asm->OutStreamer->AddComment(" starting offset"); 2059 Asm->EmitLabelDifferenceAsULEB128(Begin, Base); 2060 Asm->OutStreamer->AddComment(" ending offset"); 2061 Asm->EmitLabelDifferenceAsULEB128(End, Base); 2062 } else { 2063 Asm->EmitLabelDifference(Begin, Base, Size); 2064 Asm->EmitLabelDifference(End, Base, Size); 2065 } 2066 } else if (DwarfVersion >= 5) { 2067 Asm->OutStreamer->AddComment("DW_RLE_start_length"); 2068 Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_start_length, 1); 2069 Asm->OutStreamer->AddComment(" start"); 2070 Asm->OutStreamer->EmitSymbolValue(Begin, Size); 2071 Asm->OutStreamer->AddComment(" length"); 2072 Asm->EmitLabelDifferenceAsULEB128(End, Begin); 2073 } else { 2074 Asm->OutStreamer->EmitSymbolValue(Begin, Size); 2075 Asm->OutStreamer->EmitSymbolValue(End, Size); 2076 } 2077 } 2078 } 2079 if (DwarfVersion >= 5) { 2080 Asm->OutStreamer->AddComment("DW_RLE_end_of_list"); 2081 Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_end_of_list, 1); 2082 } else { 2083 // Terminate the list with two 0 values. 2084 Asm->OutStreamer->EmitIntValue(0, Size); 2085 Asm->OutStreamer->EmitIntValue(0, Size); 2086 } 2087 } 2088 2089 void DwarfDebug::emitDebugRnglists() { 2090 2091 // Don't emit a rangelist table if there are no ranges. 2092 if (llvm::all_of(CUMap, 2093 [](const decltype(CUMap)::const_iterator::value_type &Pair) { 2094 DwarfCompileUnit *TheCU = Pair.second; 2095 if (auto *Skel = TheCU->getSkeleton()) 2096 TheCU = Skel; 2097 return TheCU->getRangeLists().empty(); 2098 })) 2099 return; 2100 2101 assert(getDwarfVersion() >= 5 && "Dwarf version must be 5 or greater"); 2102 // FIXME: As long as we don't support DW_RLE_base_addrx, we cannot generate 2103 // any tables in the .debug_rnglists.dwo section. 2104 Asm->OutStreamer->SwitchSection( 2105 Asm->getObjFileLowering().getDwarfRnglistsSection()); 2106 // The length is described by a starting label right after the length field 2107 // and an end label. 2108 MCSymbol *TableStart = Asm->createTempSymbol("debug_rnglist_table_start"); 2109 MCSymbol *TableEnd = Asm->createTempSymbol("debug_rnglist_table_end"); 2110 // Build the range table header, which starts with the length field. 2111 Asm->EmitLabelDifference(TableEnd, TableStart, 4); 2112 Asm->OutStreamer->EmitLabel(TableStart); 2113 // Version number (DWARF v5 and later). 2114 Asm->emitInt16(getDwarfVersion()); 2115 // Address size. 2116 Asm->emitInt8(Asm->MAI->getCodePointerSize()); 2117 // Segment selector size. 2118 Asm->emitInt8(0); 2119 2120 MCSymbol *RnglistTableBaseSym = 2121 (useSplitDwarf() ? SkeletonHolder : InfoHolder).getRnglistsTableBaseSym(); 2122 2123 // FIXME: Generate the offsets table and use DW_FORM_rnglistx with the 2124 // DW_AT_ranges attribute. Until then set the number of offsets to 0. 2125 Asm->emitInt32(0); 2126 Asm->OutStreamer->EmitLabel(RnglistTableBaseSym); 2127 2128 // Emit the individual range lists. 2129 for (const auto &I : CUMap) { 2130 DwarfCompileUnit *TheCU = I.second; 2131 if (auto *Skel = TheCU->getSkeleton()) 2132 TheCU = Skel; 2133 for (const RangeSpanList &List : TheCU->getRangeLists()) 2134 emitRangeList(Asm, TheCU, List); 2135 } 2136 2137 Asm->OutStreamer->EmitLabel(TableEnd); 2138 } 2139 2140 /// Emit address ranges into the .debug_ranges section or DWARF v5 rangelists 2141 /// into the .debug_rnglists section. 2142 void DwarfDebug::emitDebugRanges() { 2143 if (CUMap.empty()) 2144 return; 2145 2146 if (!useRangesSection()) { 2147 assert(llvm::all_of( 2148 CUMap, 2149 [](const decltype(CUMap)::const_iterator::value_type &Pair) { 2150 return Pair.second->getRangeLists().empty(); 2151 }) && 2152 "No debug ranges expected."); 2153 return; 2154 } 2155 2156 if (getDwarfVersion() >= 5) { 2157 emitDebugRnglists(); 2158 return; 2159 } 2160 2161 // Start the dwarf ranges section. 2162 Asm->OutStreamer->SwitchSection( 2163 Asm->getObjFileLowering().getDwarfRangesSection()); 2164 2165 // Grab the specific ranges for the compile units in the module. 2166 for (const auto &I : CUMap) { 2167 DwarfCompileUnit *TheCU = I.second; 2168 2169 if (auto *Skel = TheCU->getSkeleton()) 2170 TheCU = Skel; 2171 2172 // Iterate over the misc ranges for the compile units in the module. 2173 for (const RangeSpanList &List : TheCU->getRangeLists()) 2174 emitRangeList(Asm, TheCU, List); 2175 } 2176 } 2177 2178 void DwarfDebug::handleMacroNodes(DIMacroNodeArray Nodes, DwarfCompileUnit &U) { 2179 for (auto *MN : Nodes) { 2180 if (auto *M = dyn_cast<DIMacro>(MN)) 2181 emitMacro(*M); 2182 else if (auto *F = dyn_cast<DIMacroFile>(MN)) 2183 emitMacroFile(*F, U); 2184 else 2185 llvm_unreachable("Unexpected DI type!"); 2186 } 2187 } 2188 2189 void DwarfDebug::emitMacro(DIMacro &M) { 2190 Asm->EmitULEB128(M.getMacinfoType()); 2191 Asm->EmitULEB128(M.getLine()); 2192 StringRef Name = M.getName(); 2193 StringRef Value = M.getValue(); 2194 Asm->OutStreamer->EmitBytes(Name); 2195 if (!Value.empty()) { 2196 // There should be one space between macro name and macro value. 2197 Asm->emitInt8(' '); 2198 Asm->OutStreamer->EmitBytes(Value); 2199 } 2200 Asm->emitInt8('\0'); 2201 } 2202 2203 void DwarfDebug::emitMacroFile(DIMacroFile &F, DwarfCompileUnit &U) { 2204 assert(F.getMacinfoType() == dwarf::DW_MACINFO_start_file); 2205 Asm->EmitULEB128(dwarf::DW_MACINFO_start_file); 2206 Asm->EmitULEB128(F.getLine()); 2207 Asm->EmitULEB128(U.getOrCreateSourceID(F.getFile())); 2208 handleMacroNodes(F.getElements(), U); 2209 Asm->EmitULEB128(dwarf::DW_MACINFO_end_file); 2210 } 2211 2212 /// Emit macros into a debug macinfo section. 2213 void DwarfDebug::emitDebugMacinfo() { 2214 if (CUMap.empty()) 2215 return; 2216 2217 // Start the dwarf macinfo section. 2218 Asm->OutStreamer->SwitchSection( 2219 Asm->getObjFileLowering().getDwarfMacinfoSection()); 2220 2221 for (const auto &P : CUMap) { 2222 auto &TheCU = *P.second; 2223 auto *SkCU = TheCU.getSkeleton(); 2224 DwarfCompileUnit &U = SkCU ? *SkCU : TheCU; 2225 auto *CUNode = cast<DICompileUnit>(P.first); 2226 DIMacroNodeArray Macros = CUNode->getMacros(); 2227 if (!Macros.empty()) { 2228 Asm->OutStreamer->EmitLabel(U.getMacroLabelBegin()); 2229 handleMacroNodes(Macros, U); 2230 } 2231 } 2232 Asm->OutStreamer->AddComment("End Of Macro List Mark"); 2233 Asm->emitInt8(0); 2234 } 2235 2236 // DWARF5 Experimental Separate Dwarf emitters. 2237 2238 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die, 2239 std::unique_ptr<DwarfCompileUnit> NewU) { 2240 NewU->addString(Die, dwarf::DW_AT_GNU_dwo_name, 2241 Asm->TM.Options.MCOptions.SplitDwarfFile); 2242 2243 if (!CompilationDir.empty()) 2244 NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); 2245 2246 addGnuPubAttributes(*NewU, Die); 2247 2248 SkeletonHolder.addUnit(std::move(NewU)); 2249 } 2250 2251 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list, 2252 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id, 2253 // DW_AT_addr_base, DW_AT_ranges_base or DW_AT_rnglists_base. 2254 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) { 2255 2256 auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>( 2257 CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder); 2258 DwarfCompileUnit &NewCU = *OwnedUnit; 2259 NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection()); 2260 2261 NewCU.initStmtList(); 2262 2263 if (useSegmentedStringOffsetsTable()) 2264 NewCU.addStringOffsetsStart(); 2265 2266 initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit)); 2267 2268 return NewCU; 2269 } 2270 2271 // Emit the .debug_info.dwo section for separated dwarf. This contains the 2272 // compile units that would normally be in debug_info. 2273 void DwarfDebug::emitDebugInfoDWO() { 2274 assert(useSplitDwarf() && "No split dwarf debug info?"); 2275 // Don't emit relocations into the dwo file. 2276 InfoHolder.emitUnits(/* UseOffsets */ true); 2277 } 2278 2279 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the 2280 // abbreviations for the .debug_info.dwo section. 2281 void DwarfDebug::emitDebugAbbrevDWO() { 2282 assert(useSplitDwarf() && "No split dwarf?"); 2283 InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection()); 2284 } 2285 2286 void DwarfDebug::emitDebugLineDWO() { 2287 assert(useSplitDwarf() && "No split dwarf?"); 2288 SplitTypeUnitFileTable.Emit( 2289 *Asm->OutStreamer, MCDwarfLineTableParams(), 2290 Asm->getObjFileLowering().getDwarfLineDWOSection()); 2291 } 2292 2293 void DwarfDebug::emitStringOffsetsTableHeaderDWO() { 2294 assert(useSplitDwarf() && "No split dwarf?"); 2295 InfoHolder.emitStringOffsetsTableHeader( 2296 Asm->getObjFileLowering().getDwarfStrOffDWOSection()); 2297 } 2298 2299 // Emit the .debug_str.dwo section for separated dwarf. This contains the 2300 // string section and is identical in format to traditional .debug_str 2301 // sections. 2302 void DwarfDebug::emitDebugStrDWO() { 2303 if (useSegmentedStringOffsetsTable()) 2304 emitStringOffsetsTableHeaderDWO(); 2305 assert(useSplitDwarf() && "No split dwarf?"); 2306 MCSection *OffSec = Asm->getObjFileLowering().getDwarfStrOffDWOSection(); 2307 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(), 2308 OffSec, /* UseRelativeOffsets = */ false); 2309 } 2310 2311 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) { 2312 if (!useSplitDwarf()) 2313 return nullptr; 2314 const DICompileUnit *DIUnit = CU.getCUNode(); 2315 SplitTypeUnitFileTable.maybeSetRootFile( 2316 DIUnit->getDirectory(), DIUnit->getFilename(), 2317 CU.getMD5AsBytes(DIUnit->getFile()), DIUnit->getSource()); 2318 return &SplitTypeUnitFileTable; 2319 } 2320 2321 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier) { 2322 MD5 Hash; 2323 Hash.update(Identifier); 2324 // ... take the least significant 8 bytes and return those. Our MD5 2325 // implementation always returns its results in little endian, so we actually 2326 // need the "high" word. 2327 MD5::MD5Result Result; 2328 Hash.final(Result); 2329 return Result.high(); 2330 } 2331 2332 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU, 2333 StringRef Identifier, DIE &RefDie, 2334 const DICompositeType *CTy) { 2335 // Fast path if we're building some type units and one has already used the 2336 // address pool we know we're going to throw away all this work anyway, so 2337 // don't bother building dependent types. 2338 if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed()) 2339 return; 2340 2341 auto Ins = TypeSignatures.insert(std::make_pair(CTy, 0)); 2342 if (!Ins.second) { 2343 CU.addDIETypeSignature(RefDie, Ins.first->second); 2344 return; 2345 } 2346 2347 bool TopLevelType = TypeUnitsUnderConstruction.empty(); 2348 AddrPool.resetUsedFlag(); 2349 2350 auto OwnedUnit = llvm::make_unique<DwarfTypeUnit>(CU, Asm, this, &InfoHolder, 2351 getDwoLineTable(CU)); 2352 DwarfTypeUnit &NewTU = *OwnedUnit; 2353 DIE &UnitDie = NewTU.getUnitDie(); 2354 TypeUnitsUnderConstruction.emplace_back(std::move(OwnedUnit), CTy); 2355 2356 NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2, 2357 CU.getLanguage()); 2358 2359 uint64_t Signature = makeTypeSignature(Identifier); 2360 NewTU.setTypeSignature(Signature); 2361 Ins.first->second = Signature; 2362 2363 if (useSplitDwarf()) 2364 NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesDWOSection()); 2365 else { 2366 NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesSection(Signature)); 2367 // Non-split type units reuse the compile unit's line table. 2368 CU.applyStmtList(UnitDie); 2369 } 2370 2371 // Add DW_AT_str_offsets_base to the type unit DIE, but not for split type 2372 // units. 2373 if (useSegmentedStringOffsetsTable() && !useSplitDwarf()) 2374 NewTU.addStringOffsetsStart(); 2375 2376 NewTU.setType(NewTU.createTypeDIE(CTy)); 2377 2378 if (TopLevelType) { 2379 auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction); 2380 TypeUnitsUnderConstruction.clear(); 2381 2382 // Types referencing entries in the address table cannot be placed in type 2383 // units. 2384 if (AddrPool.hasBeenUsed()) { 2385 2386 // Remove all the types built while building this type. 2387 // This is pessimistic as some of these types might not be dependent on 2388 // the type that used an address. 2389 for (const auto &TU : TypeUnitsToAdd) 2390 TypeSignatures.erase(TU.second); 2391 2392 // Construct this type in the CU directly. 2393 // This is inefficient because all the dependent types will be rebuilt 2394 // from scratch, including building them in type units, discovering that 2395 // they depend on addresses, throwing them out and rebuilding them. 2396 CU.constructTypeDIE(RefDie, cast<DICompositeType>(CTy)); 2397 return; 2398 } 2399 2400 // If the type wasn't dependent on fission addresses, finish adding the type 2401 // and all its dependent types. 2402 for (auto &TU : TypeUnitsToAdd) { 2403 InfoHolder.computeSizeAndOffsetsForUnit(TU.first.get()); 2404 InfoHolder.emitUnit(TU.first.get(), useSplitDwarf()); 2405 } 2406 } 2407 CU.addDIETypeSignature(RefDie, Signature); 2408 } 2409 2410 // Add the Name along with its companion DIE to the appropriate accelerator 2411 // table (for AccelTableKind::Dwarf it's always AccelDebugNames, for 2412 // AccelTableKind::Apple, we use the table we got as an argument). If 2413 // accelerator tables are disabled, this function does nothing. 2414 template <typename DataT> 2415 void DwarfDebug::addAccelNameImpl(AccelTable<DataT> &AppleAccel, StringRef Name, 2416 const DIE &Die) { 2417 if (getAccelTableKind() == AccelTableKind::None) 2418 return; 2419 2420 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 2421 DwarfStringPoolEntryRef Ref = 2422 Holder.getStringPool().getEntry(*Asm, Name); 2423 2424 switch (getAccelTableKind()) { 2425 case AccelTableKind::Apple: 2426 AppleAccel.addName(Ref, Die); 2427 break; 2428 case AccelTableKind::Dwarf: 2429 AccelDebugNames.addName(Ref, Die); 2430 break; 2431 case AccelTableKind::Default: 2432 llvm_unreachable("Default should have already been resolved."); 2433 case AccelTableKind::None: 2434 llvm_unreachable("None handled above"); 2435 } 2436 } 2437 2438 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) { 2439 addAccelNameImpl(AccelNames, Name, Die); 2440 } 2441 2442 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) { 2443 // ObjC names go only into the Apple accelerator tables. 2444 if (getAccelTableKind() == AccelTableKind::Apple) 2445 addAccelNameImpl(AccelObjC, Name, Die); 2446 } 2447 2448 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) { 2449 addAccelNameImpl(AccelNamespace, Name, Die); 2450 } 2451 2452 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) { 2453 addAccelNameImpl(AccelTypes, Name, Die); 2454 } 2455 2456 uint16_t DwarfDebug::getDwarfVersion() const { 2457 return Asm->OutStreamer->getContext().getDwarfVersion(); 2458 } 2459