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