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 "DwarfCompileUnit.h" 19 #include "DwarfExpression.h" 20 #include "DwarfUnit.h" 21 #include "llvm/ADT/STLExtras.h" 22 #include "llvm/ADT/Statistic.h" 23 #include "llvm/ADT/StringExtras.h" 24 #include "llvm/ADT/Triple.h" 25 #include "llvm/CodeGen/DIE.h" 26 #include "llvm/CodeGen/MachineFunction.h" 27 #include "llvm/CodeGen/MachineModuleInfo.h" 28 #include "llvm/IR/Constants.h" 29 #include "llvm/IR/DIBuilder.h" 30 #include "llvm/IR/DataLayout.h" 31 #include "llvm/IR/DebugInfo.h" 32 #include "llvm/IR/Instructions.h" 33 #include "llvm/IR/Module.h" 34 #include "llvm/IR/ValueHandle.h" 35 #include "llvm/MC/MCAsmInfo.h" 36 #include "llvm/MC/MCDwarf.h" 37 #include "llvm/MC/MCSection.h" 38 #include "llvm/MC/MCStreamer.h" 39 #include "llvm/MC/MCSymbol.h" 40 #include "llvm/Support/CommandLine.h" 41 #include "llvm/Support/Debug.h" 42 #include "llvm/Support/Dwarf.h" 43 #include "llvm/Support/Endian.h" 44 #include "llvm/Support/ErrorHandling.h" 45 #include "llvm/Support/FormattedStream.h" 46 #include "llvm/Support/LEB128.h" 47 #include "llvm/Support/MD5.h" 48 #include "llvm/Support/Path.h" 49 #include "llvm/Support/Timer.h" 50 #include "llvm/Support/raw_ostream.h" 51 #include "llvm/Target/TargetFrameLowering.h" 52 #include "llvm/Target/TargetLoweringObjectFile.h" 53 #include "llvm/Target/TargetMachine.h" 54 #include "llvm/Target/TargetOptions.h" 55 #include "llvm/Target/TargetRegisterInfo.h" 56 #include "llvm/Target/TargetSubtargetInfo.h" 57 using namespace llvm; 58 59 #define DEBUG_TYPE "dwarfdebug" 60 61 static cl::opt<bool> 62 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden, 63 cl::desc("Disable debug info printing")); 64 65 static cl::opt<bool> UnknownLocations( 66 "use-unknown-locations", cl::Hidden, 67 cl::desc("Make an absence of debug location information explicit."), 68 cl::init(false)); 69 70 static cl::opt<bool> 71 GenerateGnuPubSections("generate-gnu-dwarf-pub-sections", cl::Hidden, 72 cl::desc("Generate GNU-style pubnames and pubtypes"), 73 cl::init(false)); 74 75 static cl::opt<bool> GenerateARangeSection("generate-arange-section", 76 cl::Hidden, 77 cl::desc("Generate dwarf aranges"), 78 cl::init(false)); 79 80 static cl::opt<DebuggerKind> 81 DebuggerTuningOpt("debugger-tune", 82 cl::desc("Tune debug info for a particular debugger"), 83 cl::init(DebuggerKind::Default), 84 cl::values( 85 clEnumValN(DebuggerKind::GDB, "gdb", "gdb"), 86 clEnumValN(DebuggerKind::LLDB, "lldb", "lldb"), 87 clEnumValN(DebuggerKind::SCE, "sce", 88 "SCE targets (e.g. PS4)"), 89 clEnumValEnd)); 90 91 namespace { 92 enum DefaultOnOff { Default, Enable, Disable }; 93 } 94 95 static cl::opt<DefaultOnOff> 96 DwarfAccelTables("dwarf-accel-tables", cl::Hidden, 97 cl::desc("Output prototype dwarf accelerator tables."), 98 cl::values(clEnumVal(Default, "Default for platform"), 99 clEnumVal(Enable, "Enabled"), 100 clEnumVal(Disable, "Disabled"), clEnumValEnd), 101 cl::init(Default)); 102 103 static cl::opt<DefaultOnOff> 104 SplitDwarf("split-dwarf", cl::Hidden, 105 cl::desc("Output DWARF5 split debug info."), 106 cl::values(clEnumVal(Default, "Default for platform"), 107 clEnumVal(Enable, "Enabled"), 108 clEnumVal(Disable, "Disabled"), clEnumValEnd), 109 cl::init(Default)); 110 111 static cl::opt<DefaultOnOff> 112 DwarfPubSections("generate-dwarf-pub-sections", cl::Hidden, 113 cl::desc("Generate DWARF pubnames and pubtypes sections"), 114 cl::values(clEnumVal(Default, "Default for platform"), 115 clEnumVal(Enable, "Enabled"), 116 clEnumVal(Disable, "Disabled"), clEnumValEnd), 117 cl::init(Default)); 118 119 static cl::opt<DefaultOnOff> 120 DwarfLinkageNames("dwarf-linkage-names", cl::Hidden, 121 cl::desc("Emit DWARF linkage-name attributes."), 122 cl::values(clEnumVal(Default, "Default for platform"), 123 clEnumVal(Enable, "Enabled"), 124 clEnumVal(Disable, "Disabled"), clEnumValEnd), 125 cl::init(Default)); 126 127 static const char *const DWARFGroupName = "DWARF Emission"; 128 static const char *const DbgTimerName = "DWARF Debug Writer"; 129 130 void DebugLocDwarfExpression::EmitOp(uint8_t Op, const char *Comment) { 131 BS.EmitInt8( 132 Op, Comment ? Twine(Comment) + " " + dwarf::OperationEncodingString(Op) 133 : dwarf::OperationEncodingString(Op)); 134 } 135 136 void DebugLocDwarfExpression::EmitSigned(int64_t Value) { 137 BS.EmitSLEB128(Value, Twine(Value)); 138 } 139 140 void DebugLocDwarfExpression::EmitUnsigned(uint64_t Value) { 141 BS.EmitULEB128(Value, Twine(Value)); 142 } 143 144 bool DebugLocDwarfExpression::isFrameRegister(unsigned MachineReg) { 145 // This information is not available while emitting .debug_loc entries. 146 return false; 147 } 148 149 //===----------------------------------------------------------------------===// 150 151 /// resolve - Look in the DwarfDebug map for the MDNode that 152 /// corresponds to the reference. 153 template <typename T> T *DbgVariable::resolve(TypedDINodeRef<T> Ref) const { 154 return DD->resolve(Ref); 155 } 156 157 bool DbgVariable::isBlockByrefVariable() const { 158 assert(Var && "Invalid complex DbgVariable!"); 159 return Var->getType() 160 .resolve(DD->getTypeIdentifierMap()) 161 ->isBlockByrefStruct(); 162 } 163 164 const DIType *DbgVariable::getType() const { 165 DIType *Ty = Var->getType().resolve(DD->getTypeIdentifierMap()); 166 // FIXME: isBlockByrefVariable should be reformulated in terms of complex 167 // addresses instead. 168 if (Ty->isBlockByrefStruct()) { 169 /* Byref variables, in Blocks, are declared by the programmer as 170 "SomeType VarName;", but the compiler creates a 171 __Block_byref_x_VarName struct, and gives the variable VarName 172 either the struct, or a pointer to the struct, as its type. This 173 is necessary for various behind-the-scenes things the compiler 174 needs to do with by-reference variables in blocks. 175 176 However, as far as the original *programmer* is concerned, the 177 variable should still have type 'SomeType', as originally declared. 178 179 The following function dives into the __Block_byref_x_VarName 180 struct to find the original type of the variable. This will be 181 passed back to the code generating the type for the Debug 182 Information Entry for the variable 'VarName'. 'VarName' will then 183 have the original type 'SomeType' in its debug information. 184 185 The original type 'SomeType' will be the type of the field named 186 'VarName' inside the __Block_byref_x_VarName struct. 187 188 NOTE: In order for this to not completely fail on the debugger 189 side, the Debug Information Entry for the variable VarName needs to 190 have a DW_AT_location that tells the debugger how to unwind through 191 the pointers and __Block_byref_x_VarName struct to find the actual 192 value of the variable. The function addBlockByrefType does this. */ 193 DIType *subType = Ty; 194 uint16_t tag = Ty->getTag(); 195 196 if (tag == dwarf::DW_TAG_pointer_type) 197 subType = resolve(cast<DIDerivedType>(Ty)->getBaseType()); 198 199 auto Elements = cast<DICompositeType>(subType)->getElements(); 200 for (unsigned i = 0, N = Elements.size(); i < N; ++i) { 201 auto *DT = cast<DIDerivedType>(Elements[i]); 202 if (getName() == DT->getName()) 203 return resolve(DT->getBaseType()); 204 } 205 } 206 return Ty; 207 } 208 209 static LLVM_CONSTEXPR DwarfAccelTable::Atom TypeAtoms[] = { 210 DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4), 211 DwarfAccelTable::Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2), 212 DwarfAccelTable::Atom(dwarf::DW_ATOM_type_flags, dwarf::DW_FORM_data1)}; 213 214 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M) 215 : Asm(A), MMI(Asm->MMI), DebugLocs(A->OutStreamer->isVerboseAsm()), 216 PrevLabel(nullptr), InfoHolder(A, "info_string", DIEValueAllocator), 217 SkeletonHolder(A, "skel_string", DIEValueAllocator), 218 IsDarwin(Triple(A->getTargetTriple()).isOSDarwin()), 219 AccelNames(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, 220 dwarf::DW_FORM_data4)), 221 AccelObjC(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, 222 dwarf::DW_FORM_data4)), 223 AccelNamespace(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, 224 dwarf::DW_FORM_data4)), 225 AccelTypes(TypeAtoms), DebuggerTuning(DebuggerKind::Default) { 226 227 CurFn = nullptr; 228 CurMI = nullptr; 229 Triple TT(Asm->getTargetTriple()); 230 231 // Make sure we know our "debugger tuning." The command-line option takes 232 // precedence; fall back to triple-based defaults. 233 if (DebuggerTuningOpt != DebuggerKind::Default) 234 DebuggerTuning = DebuggerTuningOpt; 235 else if (IsDarwin || TT.isOSFreeBSD()) 236 DebuggerTuning = DebuggerKind::LLDB; 237 else if (TT.isPS4CPU()) 238 DebuggerTuning = DebuggerKind::SCE; 239 else 240 DebuggerTuning = DebuggerKind::GDB; 241 242 // Turn on accelerator tables for LLDB by default. 243 if (DwarfAccelTables == Default) 244 HasDwarfAccelTables = tuneForLLDB(); 245 else 246 HasDwarfAccelTables = DwarfAccelTables == Enable; 247 248 // Handle split DWARF. Off by default for now. 249 if (SplitDwarf == Default) 250 HasSplitDwarf = false; 251 else 252 HasSplitDwarf = SplitDwarf == Enable; 253 254 // Pubnames/pubtypes on by default for GDB. 255 if (DwarfPubSections == Default) 256 HasDwarfPubSections = tuneForGDB(); 257 else 258 HasDwarfPubSections = DwarfPubSections == Enable; 259 260 // SCE does not use linkage names. 261 if (DwarfLinkageNames == Default) 262 UseLinkageNames = !tuneForSCE(); 263 else 264 UseLinkageNames = DwarfLinkageNames == Enable; 265 266 unsigned DwarfVersionNumber = Asm->TM.Options.MCOptions.DwarfVersion; 267 DwarfVersion = DwarfVersionNumber ? DwarfVersionNumber 268 : MMI->getModule()->getDwarfVersion(); 269 // Use dwarf 4 by default if nothing is requested. 270 DwarfVersion = DwarfVersion ? DwarfVersion : dwarf::DWARF_VERSION; 271 272 // Work around a GDB bug. GDB doesn't support the standard opcode; 273 // SCE doesn't support GNU's; LLDB prefers the standard opcode, which 274 // is defined as of DWARF 3. 275 // See GDB bug 11616 - DW_OP_form_tls_address is unimplemented 276 // https://sourceware.org/bugzilla/show_bug.cgi?id=11616 277 UseGNUTLSOpcode = tuneForGDB() || DwarfVersion < 3; 278 279 Asm->OutStreamer->getContext().setDwarfVersion(DwarfVersion); 280 281 { 282 NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled); 283 beginModule(); 284 } 285 } 286 287 // Define out of line so we don't have to include DwarfUnit.h in DwarfDebug.h. 288 DwarfDebug::~DwarfDebug() { } 289 290 static bool isObjCClass(StringRef Name) { 291 return Name.startswith("+") || Name.startswith("-"); 292 } 293 294 static bool hasObjCCategory(StringRef Name) { 295 if (!isObjCClass(Name)) 296 return false; 297 298 return Name.find(") ") != StringRef::npos; 299 } 300 301 static void getObjCClassCategory(StringRef In, StringRef &Class, 302 StringRef &Category) { 303 if (!hasObjCCategory(In)) { 304 Class = In.slice(In.find('[') + 1, In.find(' ')); 305 Category = ""; 306 return; 307 } 308 309 Class = In.slice(In.find('[') + 1, In.find('(')); 310 Category = In.slice(In.find('[') + 1, In.find(' ')); 311 return; 312 } 313 314 static StringRef getObjCMethodName(StringRef In) { 315 return In.slice(In.find(' ') + 1, In.find(']')); 316 } 317 318 // Add the various names to the Dwarf accelerator table names. 319 // TODO: Determine whether or not we should add names for programs 320 // that do not have a DW_AT_name or DW_AT_linkage_name field - this 321 // is only slightly different than the lookup of non-standard ObjC names. 322 void DwarfDebug::addSubprogramNames(const DISubprogram *SP, DIE &Die) { 323 if (!SP->isDefinition()) 324 return; 325 addAccelName(SP->getName(), Die); 326 327 // If the linkage name is different than the name, go ahead and output 328 // that as well into the name table. 329 if (SP->getLinkageName() != "" && SP->getName() != SP->getLinkageName()) 330 addAccelName(SP->getLinkageName(), Die); 331 332 // If this is an Objective-C selector name add it to the ObjC accelerator 333 // too. 334 if (isObjCClass(SP->getName())) { 335 StringRef Class, Category; 336 getObjCClassCategory(SP->getName(), Class, Category); 337 addAccelObjC(Class, Die); 338 if (Category != "") 339 addAccelObjC(Category, Die); 340 // Also add the base method name to the name table. 341 addAccelName(getObjCMethodName(SP->getName()), Die); 342 } 343 } 344 345 /// Check whether we should create a DIE for the given Scope, return true 346 /// if we don't create a DIE (the corresponding DIE is null). 347 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) { 348 if (Scope->isAbstractScope()) 349 return false; 350 351 // We don't create a DIE if there is no Range. 352 const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges(); 353 if (Ranges.empty()) 354 return true; 355 356 if (Ranges.size() > 1) 357 return false; 358 359 // We don't create a DIE if we have a single Range and the end label 360 // is null. 361 return !getLabelAfterInsn(Ranges.front().second); 362 } 363 364 template <typename Func> void forBothCUs(DwarfCompileUnit &CU, Func F) { 365 F(CU); 366 if (auto *SkelCU = CU.getSkeleton()) 367 F(*SkelCU); 368 } 369 370 void DwarfDebug::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) { 371 assert(Scope && Scope->getScopeNode()); 372 assert(Scope->isAbstractScope()); 373 assert(!Scope->getInlinedAt()); 374 375 const MDNode *SP = Scope->getScopeNode(); 376 377 ProcessedSPNodes.insert(SP); 378 379 // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram 380 // was inlined from another compile unit. 381 auto &CU = SPMap[SP]; 382 forBothCUs(*CU, [&](DwarfCompileUnit &CU) { 383 CU.constructAbstractSubprogramScopeDIE(Scope); 384 }); 385 } 386 387 void DwarfDebug::addGnuPubAttributes(DwarfUnit &U, DIE &D) const { 388 if (!GenerateGnuPubSections) 389 return; 390 391 U.addFlag(D, dwarf::DW_AT_GNU_pubnames); 392 } 393 394 // Create new DwarfCompileUnit for the given metadata node with tag 395 // DW_TAG_compile_unit. 396 DwarfCompileUnit & 397 DwarfDebug::constructDwarfCompileUnit(const DICompileUnit *DIUnit) { 398 StringRef FN = DIUnit->getFilename(); 399 CompilationDir = DIUnit->getDirectory(); 400 401 auto OwnedUnit = make_unique<DwarfCompileUnit>( 402 InfoHolder.getUnits().size(), DIUnit, Asm, this, &InfoHolder); 403 DwarfCompileUnit &NewCU = *OwnedUnit; 404 DIE &Die = NewCU.getUnitDie(); 405 InfoHolder.addUnit(std::move(OwnedUnit)); 406 if (useSplitDwarf()) 407 NewCU.setSkeleton(constructSkeletonCU(NewCU)); 408 409 // LTO with assembly output shares a single line table amongst multiple CUs. 410 // To avoid the compilation directory being ambiguous, let the line table 411 // explicitly describe the directory of all files, never relying on the 412 // compilation directory. 413 if (!Asm->OutStreamer->hasRawTextSupport() || SingleCU) 414 Asm->OutStreamer->getContext().setMCLineTableCompilationDir( 415 NewCU.getUniqueID(), CompilationDir); 416 417 NewCU.addString(Die, dwarf::DW_AT_producer, DIUnit->getProducer()); 418 NewCU.addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2, 419 DIUnit->getSourceLanguage()); 420 NewCU.addString(Die, dwarf::DW_AT_name, FN); 421 422 if (!useSplitDwarf()) { 423 NewCU.initStmtList(); 424 425 // If we're using split dwarf the compilation dir is going to be in the 426 // skeleton CU and so we don't need to duplicate it here. 427 if (!CompilationDir.empty()) 428 NewCU.addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); 429 430 addGnuPubAttributes(NewCU, Die); 431 } 432 433 if (DIUnit->isOptimized()) 434 NewCU.addFlag(Die, dwarf::DW_AT_APPLE_optimized); 435 436 StringRef Flags = DIUnit->getFlags(); 437 if (!Flags.empty()) 438 NewCU.addString(Die, dwarf::DW_AT_APPLE_flags, Flags); 439 440 if (unsigned RVer = DIUnit->getRuntimeVersion()) 441 NewCU.addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers, 442 dwarf::DW_FORM_data1, RVer); 443 444 if (useSplitDwarf()) 445 NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoDWOSection()); 446 else 447 NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoSection()); 448 449 if (DIUnit->getDWOId()) { 450 // This CU is either a clang module DWO or a skeleton CU. 451 NewCU.addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 452 DIUnit->getDWOId()); 453 if (!DIUnit->getSplitDebugFilename().empty()) 454 // This is a prefabricated skeleton CU. 455 NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name, 456 DIUnit->getSplitDebugFilename()); 457 } 458 459 CUMap.insert(std::make_pair(DIUnit, &NewCU)); 460 CUDieMap.insert(std::make_pair(&Die, &NewCU)); 461 return NewCU; 462 } 463 464 void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU, 465 const DIImportedEntity *N) { 466 if (DIE *D = TheCU.getOrCreateContextDIE(N->getScope())) 467 D->addChild(TheCU.constructImportedEntityDIE(N)); 468 } 469 470 // Emit all Dwarf sections that should come prior to the content. Create 471 // global DIEs and emit initial debug info sections. This is invoked by 472 // the target AsmPrinter. 473 void DwarfDebug::beginModule() { 474 if (DisableDebugInfoPrinting) 475 return; 476 477 const Module *M = MMI->getModule(); 478 479 FunctionDIs = makeSubprogramMap(*M); 480 481 NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu"); 482 if (!CU_Nodes) 483 return; 484 TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes); 485 486 SingleCU = CU_Nodes->getNumOperands() == 1; 487 488 for (MDNode *N : CU_Nodes->operands()) { 489 auto *CUNode = cast<DICompileUnit>(N); 490 DwarfCompileUnit &CU = constructDwarfCompileUnit(CUNode); 491 for (auto *IE : CUNode->getImportedEntities()) 492 CU.addImportedEntity(IE); 493 for (auto *GV : CUNode->getGlobalVariables()) 494 CU.getOrCreateGlobalVariableDIE(GV); 495 for (auto *SP : CUNode->getSubprograms()) 496 SPMap.insert(std::make_pair(SP, &CU)); 497 for (auto *Ty : CUNode->getEnumTypes()) { 498 // The enum types array by design contains pointers to 499 // MDNodes rather than DIRefs. Unique them here. 500 CU.getOrCreateTypeDIE(cast<DIType>(resolve(Ty->getRef()))); 501 } 502 for (auto *Ty : CUNode->getRetainedTypes()) { 503 // The retained types array by design contains pointers to 504 // MDNodes rather than DIRefs. Unique them here. 505 DIType *RT = cast<DIType>(resolve(Ty->getRef())); 506 if (!RT->isExternalTypeRef()) 507 // There is no point in force-emitting a forward declaration. 508 CU.getOrCreateTypeDIE(RT); 509 } 510 // Emit imported_modules last so that the relevant context is already 511 // available. 512 for (auto *IE : CUNode->getImportedEntities()) 513 constructAndAddImportedEntityDIE(CU, IE); 514 } 515 516 // Tell MMI that we have debug info. 517 MMI->setDebugInfoAvailability(true); 518 } 519 520 void DwarfDebug::finishVariableDefinitions() { 521 for (const auto &Var : ConcreteVariables) { 522 DIE *VariableDie = Var->getDIE(); 523 assert(VariableDie); 524 // FIXME: Consider the time-space tradeoff of just storing the unit pointer 525 // in the ConcreteVariables list, rather than looking it up again here. 526 // DIE::getUnit isn't simple - it walks parent pointers, etc. 527 DwarfCompileUnit *Unit = lookupUnit(VariableDie->getUnit()); 528 assert(Unit); 529 DbgVariable *AbsVar = getExistingAbstractVariable( 530 InlinedVariable(Var->getVariable(), Var->getInlinedAt())); 531 if (AbsVar && AbsVar->getDIE()) { 532 Unit->addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin, 533 *AbsVar->getDIE()); 534 } else 535 Unit->applyVariableAttributes(*Var, *VariableDie); 536 } 537 } 538 539 void DwarfDebug::finishSubprogramDefinitions() { 540 for (const auto &P : SPMap) 541 forBothCUs(*P.second, [&](DwarfCompileUnit &CU) { 542 CU.finishSubprogramDefinition(cast<DISubprogram>(P.first)); 543 }); 544 } 545 546 547 // Collect info for variables that were optimized out. 548 void DwarfDebug::collectDeadVariables() { 549 const Module *M = MMI->getModule(); 550 551 if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) { 552 for (MDNode *N : CU_Nodes->operands()) { 553 auto *TheCU = cast<DICompileUnit>(N); 554 // Construct subprogram DIE and add variables DIEs. 555 DwarfCompileUnit *SPCU = 556 static_cast<DwarfCompileUnit *>(CUMap.lookup(TheCU)); 557 assert(SPCU && "Unable to find Compile Unit!"); 558 for (auto *SP : TheCU->getSubprograms()) { 559 if (ProcessedSPNodes.count(SP) != 0) 560 continue; 561 SPCU->collectDeadVariables(SP); 562 } 563 } 564 } 565 } 566 567 void DwarfDebug::finalizeModuleInfo() { 568 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering(); 569 570 finishSubprogramDefinitions(); 571 572 finishVariableDefinitions(); 573 574 // Collect info for variables that were optimized out. 575 collectDeadVariables(); 576 577 // Handle anything that needs to be done on a per-unit basis after 578 // all other generation. 579 for (const auto &P : CUMap) { 580 auto &TheCU = *P.second; 581 // Emit DW_AT_containing_type attribute to connect types with their 582 // vtable holding type. 583 TheCU.constructContainingTypeDIEs(); 584 585 // Add CU specific attributes if we need to add any. 586 // If we're splitting the dwarf out now that we've got the entire 587 // CU then add the dwo id to it. 588 auto *SkCU = TheCU.getSkeleton(); 589 if (useSplitDwarf()) { 590 // Emit a unique identifier for this CU. 591 uint64_t ID = DIEHash(Asm).computeCUSignature(TheCU.getUnitDie()); 592 TheCU.addUInt(TheCU.getUnitDie(), dwarf::DW_AT_GNU_dwo_id, 593 dwarf::DW_FORM_data8, ID); 594 SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id, 595 dwarf::DW_FORM_data8, ID); 596 597 // We don't keep track of which addresses are used in which CU so this 598 // is a bit pessimistic under LTO. 599 if (!AddrPool.isEmpty()) { 600 const MCSymbol *Sym = TLOF.getDwarfAddrSection()->getBeginSymbol(); 601 SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_addr_base, 602 Sym, Sym); 603 } 604 if (!SkCU->getRangeLists().empty()) { 605 const MCSymbol *Sym = TLOF.getDwarfRangesSection()->getBeginSymbol(); 606 SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_ranges_base, 607 Sym, Sym); 608 } 609 } 610 611 // If we have code split among multiple sections or non-contiguous 612 // ranges of code then emit a DW_AT_ranges attribute on the unit that will 613 // remain in the .o file, otherwise add a DW_AT_low_pc. 614 // FIXME: We should use ranges allow reordering of code ala 615 // .subsections_via_symbols in mach-o. This would mean turning on 616 // ranges for all subprogram DIEs for mach-o. 617 DwarfCompileUnit &U = SkCU ? *SkCU : TheCU; 618 if (unsigned NumRanges = TheCU.getRanges().size()) { 619 if (NumRanges > 1) 620 // A DW_AT_low_pc attribute may also be specified in combination with 621 // DW_AT_ranges to specify the default base address for use in 622 // location lists (see Section 2.6.2) and range lists (see Section 623 // 2.17.3). 624 U.addUInt(U.getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0); 625 else 626 U.setBaseAddress(TheCU.getRanges().front().getStart()); 627 U.attachRangesOrLowHighPC(U.getUnitDie(), TheCU.takeRanges()); 628 } 629 } 630 631 // Compute DIE offsets and sizes. 632 InfoHolder.computeSizeAndOffsets(); 633 if (useSplitDwarf()) 634 SkeletonHolder.computeSizeAndOffsets(); 635 } 636 637 // Emit all Dwarf sections that should come after the content. 638 void DwarfDebug::endModule() { 639 assert(CurFn == nullptr); 640 assert(CurMI == nullptr); 641 642 // If we aren't actually generating debug info (check beginModule - 643 // conditionalized on !DisableDebugInfoPrinting and the presence of the 644 // llvm.dbg.cu metadata node) 645 if (!MMI->hasDebugInfo()) 646 return; 647 648 // Finalize the debug info for the module. 649 finalizeModuleInfo(); 650 651 emitDebugStr(); 652 653 if (useSplitDwarf()) 654 emitDebugLocDWO(); 655 else 656 // Emit info into a debug loc section. 657 emitDebugLoc(); 658 659 // Corresponding abbreviations into a abbrev section. 660 emitAbbreviations(); 661 662 // Emit all the DIEs into a debug info section. 663 emitDebugInfo(); 664 665 // Emit info into a debug aranges section. 666 if (GenerateARangeSection) 667 emitDebugARanges(); 668 669 // Emit info into a debug ranges section. 670 emitDebugRanges(); 671 672 if (useSplitDwarf()) { 673 emitDebugStrDWO(); 674 emitDebugInfoDWO(); 675 emitDebugAbbrevDWO(); 676 emitDebugLineDWO(); 677 // Emit DWO addresses. 678 AddrPool.emit(*Asm, Asm->getObjFileLowering().getDwarfAddrSection()); 679 } 680 681 // Emit info into the dwarf accelerator table sections. 682 if (useDwarfAccelTables()) { 683 emitAccelNames(); 684 emitAccelObjC(); 685 emitAccelNamespaces(); 686 emitAccelTypes(); 687 } 688 689 // Emit the pubnames and pubtypes sections if requested. 690 if (HasDwarfPubSections) { 691 emitDebugPubNames(GenerateGnuPubSections); 692 emitDebugPubTypes(GenerateGnuPubSections); 693 } 694 695 // clean up. 696 SPMap.clear(); 697 AbstractVariables.clear(); 698 } 699 700 // Find abstract variable, if any, associated with Var. 701 DbgVariable * 702 DwarfDebug::getExistingAbstractVariable(InlinedVariable IV, 703 const DILocalVariable *&Cleansed) { 704 // More then one inlined variable corresponds to one abstract variable. 705 Cleansed = IV.first; 706 auto I = AbstractVariables.find(Cleansed); 707 if (I != AbstractVariables.end()) 708 return I->second.get(); 709 return nullptr; 710 } 711 712 DbgVariable *DwarfDebug::getExistingAbstractVariable(InlinedVariable IV) { 713 const DILocalVariable *Cleansed; 714 return getExistingAbstractVariable(IV, Cleansed); 715 } 716 717 void DwarfDebug::createAbstractVariable(const DILocalVariable *Var, 718 LexicalScope *Scope) { 719 auto AbsDbgVariable = make_unique<DbgVariable>(Var, /* IA */ nullptr, this); 720 InfoHolder.addScopeVariable(Scope, AbsDbgVariable.get()); 721 AbstractVariables[Var] = std::move(AbsDbgVariable); 722 } 723 724 void DwarfDebug::ensureAbstractVariableIsCreated(InlinedVariable IV, 725 const MDNode *ScopeNode) { 726 const DILocalVariable *Cleansed = nullptr; 727 if (getExistingAbstractVariable(IV, Cleansed)) 728 return; 729 730 createAbstractVariable(Cleansed, LScopes.getOrCreateAbstractScope( 731 cast<DILocalScope>(ScopeNode))); 732 } 733 734 void DwarfDebug::ensureAbstractVariableIsCreatedIfScoped( 735 InlinedVariable IV, const MDNode *ScopeNode) { 736 const DILocalVariable *Cleansed = nullptr; 737 if (getExistingAbstractVariable(IV, Cleansed)) 738 return; 739 740 if (LexicalScope *Scope = 741 LScopes.findAbstractScope(cast_or_null<DILocalScope>(ScopeNode))) 742 createAbstractVariable(Cleansed, Scope); 743 } 744 745 // Collect variable information from side table maintained by MMI. 746 void DwarfDebug::collectVariableInfoFromMMITable( 747 DenseSet<InlinedVariable> &Processed) { 748 for (const auto &VI : MMI->getVariableDbgInfo()) { 749 if (!VI.Var) 750 continue; 751 assert(VI.Var->isValidLocationForIntrinsic(VI.Loc) && 752 "Expected inlined-at fields to agree"); 753 754 InlinedVariable Var(VI.Var, VI.Loc->getInlinedAt()); 755 Processed.insert(Var); 756 LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc); 757 758 // If variable scope is not found then skip this variable. 759 if (!Scope) 760 continue; 761 762 ensureAbstractVariableIsCreatedIfScoped(Var, Scope->getScopeNode()); 763 auto RegVar = make_unique<DbgVariable>(Var.first, Var.second, this); 764 RegVar->initializeMMI(VI.Expr, VI.Slot); 765 if (InfoHolder.addScopeVariable(Scope, RegVar.get())) 766 ConcreteVariables.push_back(std::move(RegVar)); 767 } 768 } 769 770 // Get .debug_loc entry for the instruction range starting at MI. 771 static DebugLocEntry::Value getDebugLocValue(const MachineInstr *MI) { 772 const DIExpression *Expr = MI->getDebugExpression(); 773 774 assert(MI->getNumOperands() == 4); 775 if (MI->getOperand(0).isReg()) { 776 MachineLocation MLoc; 777 // If the second operand is an immediate, this is a 778 // register-indirect address. 779 if (!MI->getOperand(1).isImm()) 780 MLoc.set(MI->getOperand(0).getReg()); 781 else 782 MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm()); 783 return DebugLocEntry::Value(Expr, MLoc); 784 } 785 if (MI->getOperand(0).isImm()) 786 return DebugLocEntry::Value(Expr, MI->getOperand(0).getImm()); 787 if (MI->getOperand(0).isFPImm()) 788 return DebugLocEntry::Value(Expr, MI->getOperand(0).getFPImm()); 789 if (MI->getOperand(0).isCImm()) 790 return DebugLocEntry::Value(Expr, MI->getOperand(0).getCImm()); 791 792 llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!"); 793 } 794 795 /// Determine whether two variable pieces overlap. 796 static bool piecesOverlap(const DIExpression *P1, const DIExpression *P2) { 797 if (!P1->isBitPiece() || !P2->isBitPiece()) 798 return true; 799 unsigned l1 = P1->getBitPieceOffset(); 800 unsigned l2 = P2->getBitPieceOffset(); 801 unsigned r1 = l1 + P1->getBitPieceSize(); 802 unsigned r2 = l2 + P2->getBitPieceSize(); 803 // True where [l1,r1[ and [r1,r2[ overlap. 804 return (l1 < r2) && (l2 < r1); 805 } 806 807 /// Build the location list for all DBG_VALUEs in the function that 808 /// describe the same variable. If the ranges of several independent 809 /// pieces of the same variable overlap partially, split them up and 810 /// combine the ranges. The resulting DebugLocEntries are will have 811 /// strict monotonically increasing begin addresses and will never 812 /// overlap. 813 // 814 // Input: 815 // 816 // Ranges History [var, loc, piece ofs size] 817 // 0 | [x, (reg0, piece 0, 32)] 818 // 1 | | [x, (reg1, piece 32, 32)] <- IsPieceOfPrevEntry 819 // 2 | | ... 820 // 3 | [clobber reg0] 821 // 4 [x, (mem, piece 0, 64)] <- overlapping with both previous pieces of 822 // x. 823 // 824 // Output: 825 // 826 // [0-1] [x, (reg0, piece 0, 32)] 827 // [1-3] [x, (reg0, piece 0, 32), (reg1, piece 32, 32)] 828 // [3-4] [x, (reg1, piece 32, 32)] 829 // [4- ] [x, (mem, piece 0, 64)] 830 void 831 DwarfDebug::buildLocationList(SmallVectorImpl<DebugLocEntry> &DebugLoc, 832 const DbgValueHistoryMap::InstrRanges &Ranges) { 833 SmallVector<DebugLocEntry::Value, 4> OpenRanges; 834 835 for (auto I = Ranges.begin(), E = Ranges.end(); I != E; ++I) { 836 const MachineInstr *Begin = I->first; 837 const MachineInstr *End = I->second; 838 assert(Begin->isDebugValue() && "Invalid History entry"); 839 840 // Check if a variable is inaccessible in this range. 841 if (Begin->getNumOperands() > 1 && 842 Begin->getOperand(0).isReg() && !Begin->getOperand(0).getReg()) { 843 OpenRanges.clear(); 844 continue; 845 } 846 847 // If this piece overlaps with any open ranges, truncate them. 848 const DIExpression *DIExpr = Begin->getDebugExpression(); 849 auto Last = std::remove_if(OpenRanges.begin(), OpenRanges.end(), 850 [&](DebugLocEntry::Value R) { 851 return piecesOverlap(DIExpr, R.getExpression()); 852 }); 853 OpenRanges.erase(Last, OpenRanges.end()); 854 855 const MCSymbol *StartLabel = getLabelBeforeInsn(Begin); 856 assert(StartLabel && "Forgot label before DBG_VALUE starting a range!"); 857 858 const MCSymbol *EndLabel; 859 if (End != nullptr) 860 EndLabel = getLabelAfterInsn(End); 861 else if (std::next(I) == Ranges.end()) 862 EndLabel = Asm->getFunctionEnd(); 863 else 864 EndLabel = getLabelBeforeInsn(std::next(I)->first); 865 assert(EndLabel && "Forgot label after instruction ending a range!"); 866 867 DEBUG(dbgs() << "DotDebugLoc: " << *Begin << "\n"); 868 869 auto Value = getDebugLocValue(Begin); 870 DebugLocEntry Loc(StartLabel, EndLabel, Value); 871 bool couldMerge = false; 872 873 // If this is a piece, it may belong to the current DebugLocEntry. 874 if (DIExpr->isBitPiece()) { 875 // Add this value to the list of open ranges. 876 OpenRanges.push_back(Value); 877 878 // Attempt to add the piece to the last entry. 879 if (!DebugLoc.empty()) 880 if (DebugLoc.back().MergeValues(Loc)) 881 couldMerge = true; 882 } 883 884 if (!couldMerge) { 885 // Need to add a new DebugLocEntry. Add all values from still 886 // valid non-overlapping pieces. 887 if (OpenRanges.size()) 888 Loc.addValues(OpenRanges); 889 890 DebugLoc.push_back(std::move(Loc)); 891 } 892 893 // Attempt to coalesce the ranges of two otherwise identical 894 // DebugLocEntries. 895 auto CurEntry = DebugLoc.rbegin(); 896 DEBUG({ 897 dbgs() << CurEntry->getValues().size() << " Values:\n"; 898 for (auto &Value : CurEntry->getValues()) 899 Value.getExpression()->dump(); 900 dbgs() << "-----\n"; 901 }); 902 903 auto PrevEntry = std::next(CurEntry); 904 if (PrevEntry != DebugLoc.rend() && PrevEntry->MergeRanges(*CurEntry)) 905 DebugLoc.pop_back(); 906 } 907 } 908 909 DbgVariable *DwarfDebug::createConcreteVariable(LexicalScope &Scope, 910 InlinedVariable IV) { 911 ensureAbstractVariableIsCreatedIfScoped(IV, Scope.getScopeNode()); 912 ConcreteVariables.push_back( 913 make_unique<DbgVariable>(IV.first, IV.second, this)); 914 InfoHolder.addScopeVariable(&Scope, ConcreteVariables.back().get()); 915 return ConcreteVariables.back().get(); 916 } 917 918 // Find variables for each lexical scope. 919 void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU, 920 const DISubprogram *SP, 921 DenseSet<InlinedVariable> &Processed) { 922 // Grab the variable info that was squirreled away in the MMI side-table. 923 collectVariableInfoFromMMITable(Processed); 924 925 for (const auto &I : DbgValues) { 926 InlinedVariable IV = I.first; 927 if (Processed.count(IV)) 928 continue; 929 930 // Instruction ranges, specifying where IV is accessible. 931 const auto &Ranges = I.second; 932 if (Ranges.empty()) 933 continue; 934 935 LexicalScope *Scope = nullptr; 936 if (const DILocation *IA = IV.second) 937 Scope = LScopes.findInlinedScope(IV.first->getScope(), IA); 938 else 939 Scope = LScopes.findLexicalScope(IV.first->getScope()); 940 // If variable scope is not found then skip this variable. 941 if (!Scope) 942 continue; 943 944 Processed.insert(IV); 945 DbgVariable *RegVar = createConcreteVariable(*Scope, IV); 946 947 const MachineInstr *MInsn = Ranges.front().first; 948 assert(MInsn->isDebugValue() && "History must begin with debug value"); 949 950 // Check if the first DBG_VALUE is valid for the rest of the function. 951 if (Ranges.size() == 1 && Ranges.front().second == nullptr) { 952 RegVar->initializeDbgValue(MInsn); 953 continue; 954 } 955 956 // Handle multiple DBG_VALUE instructions describing one variable. 957 DebugLocStream::ListBuilder List(DebugLocs, TheCU, *Asm, *RegVar, *MInsn); 958 959 // Build the location list for this variable. 960 SmallVector<DebugLocEntry, 8> Entries; 961 buildLocationList(Entries, Ranges); 962 963 // If the variable has an DIBasicType, extract it. Basic types cannot have 964 // unique identifiers, so don't bother resolving the type with the 965 // identifier map. 966 const DIBasicType *BT = dyn_cast<DIBasicType>( 967 static_cast<const Metadata *>(IV.first->getType())); 968 969 // Finalize the entry by lowering it into a DWARF bytestream. 970 for (auto &Entry : Entries) 971 Entry.finalize(*Asm, List, BT); 972 } 973 974 // Collect info for variables that were optimized out. 975 for (const DILocalVariable *DV : SP->getVariables()) { 976 if (Processed.insert(InlinedVariable(DV, nullptr)).second) 977 if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope())) 978 createConcreteVariable(*Scope, InlinedVariable(DV, nullptr)); 979 } 980 } 981 982 // Return Label preceding the instruction. 983 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) { 984 MCSymbol *Label = LabelsBeforeInsn.lookup(MI); 985 assert(Label && "Didn't insert label before instruction"); 986 return Label; 987 } 988 989 // Return Label immediately following the instruction. 990 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) { 991 return LabelsAfterInsn.lookup(MI); 992 } 993 994 // Process beginning of an instruction. 995 void DwarfDebug::beginInstruction(const MachineInstr *MI) { 996 assert(CurMI == nullptr); 997 CurMI = MI; 998 // Check if source location changes, but ignore DBG_VALUE locations. 999 if (!MI->isDebugValue()) { 1000 DebugLoc DL = MI->getDebugLoc(); 1001 if (DL != PrevInstLoc) { 1002 if (DL) { 1003 unsigned Flags = 0; 1004 PrevInstLoc = DL; 1005 if (DL == PrologEndLoc) { 1006 Flags |= DWARF2_FLAG_PROLOGUE_END; 1007 PrologEndLoc = DebugLoc(); 1008 Flags |= DWARF2_FLAG_IS_STMT; 1009 } 1010 if (DL.getLine() != 1011 Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine()) 1012 Flags |= DWARF2_FLAG_IS_STMT; 1013 1014 const MDNode *Scope = DL.getScope(); 1015 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags); 1016 } else if (UnknownLocations) { 1017 PrevInstLoc = DL; 1018 recordSourceLine(0, 0, nullptr, 0); 1019 } 1020 } 1021 } 1022 1023 // Insert labels where requested. 1024 DenseMap<const MachineInstr *, MCSymbol *>::iterator I = 1025 LabelsBeforeInsn.find(MI); 1026 1027 // No label needed. 1028 if (I == LabelsBeforeInsn.end()) 1029 return; 1030 1031 // Label already assigned. 1032 if (I->second) 1033 return; 1034 1035 if (!PrevLabel) { 1036 PrevLabel = MMI->getContext().createTempSymbol(); 1037 Asm->OutStreamer->EmitLabel(PrevLabel); 1038 } 1039 I->second = PrevLabel; 1040 } 1041 1042 // Process end of an instruction. 1043 void DwarfDebug::endInstruction() { 1044 assert(CurMI != nullptr); 1045 // Don't create a new label after DBG_VALUE instructions. 1046 // They don't generate code. 1047 if (!CurMI->isDebugValue()) 1048 PrevLabel = nullptr; 1049 1050 DenseMap<const MachineInstr *, MCSymbol *>::iterator I = 1051 LabelsAfterInsn.find(CurMI); 1052 CurMI = nullptr; 1053 1054 // No label needed. 1055 if (I == LabelsAfterInsn.end()) 1056 return; 1057 1058 // Label already assigned. 1059 if (I->second) 1060 return; 1061 1062 // We need a label after this instruction. 1063 if (!PrevLabel) { 1064 PrevLabel = MMI->getContext().createTempSymbol(); 1065 Asm->OutStreamer->EmitLabel(PrevLabel); 1066 } 1067 I->second = PrevLabel; 1068 } 1069 1070 // Each LexicalScope has first instruction and last instruction to mark 1071 // beginning and end of a scope respectively. Create an inverse map that list 1072 // scopes starts (and ends) with an instruction. One instruction may start (or 1073 // end) multiple scopes. Ignore scopes that are not reachable. 1074 void DwarfDebug::identifyScopeMarkers() { 1075 SmallVector<LexicalScope *, 4> WorkList; 1076 WorkList.push_back(LScopes.getCurrentFunctionScope()); 1077 while (!WorkList.empty()) { 1078 LexicalScope *S = WorkList.pop_back_val(); 1079 1080 const SmallVectorImpl<LexicalScope *> &Children = S->getChildren(); 1081 if (!Children.empty()) 1082 WorkList.append(Children.begin(), Children.end()); 1083 1084 if (S->isAbstractScope()) 1085 continue; 1086 1087 for (const InsnRange &R : S->getRanges()) { 1088 assert(R.first && "InsnRange does not have first instruction!"); 1089 assert(R.second && "InsnRange does not have second instruction!"); 1090 requestLabelBeforeInsn(R.first); 1091 requestLabelAfterInsn(R.second); 1092 } 1093 } 1094 } 1095 1096 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) { 1097 // First known non-DBG_VALUE and non-frame setup location marks 1098 // the beginning of the function body. 1099 for (const auto &MBB : *MF) 1100 for (const auto &MI : MBB) 1101 if (!MI.isDebugValue() && !MI.getFlag(MachineInstr::FrameSetup) && 1102 MI.getDebugLoc()) 1103 return MI.getDebugLoc(); 1104 return DebugLoc(); 1105 } 1106 1107 // Gather pre-function debug information. Assumes being called immediately 1108 // after the function entry point has been emitted. 1109 void DwarfDebug::beginFunction(const MachineFunction *MF) { 1110 CurFn = MF; 1111 1112 // If there's no debug info for the function we're not going to do anything. 1113 if (!MMI->hasDebugInfo()) 1114 return; 1115 1116 auto DI = FunctionDIs.find(MF->getFunction()); 1117 if (DI == FunctionDIs.end()) 1118 return; 1119 1120 // Grab the lexical scopes for the function, if we don't have any of those 1121 // then we're not going to be able to do anything. 1122 LScopes.initialize(*MF); 1123 if (LScopes.empty()) 1124 return; 1125 1126 assert(DbgValues.empty() && "DbgValues map wasn't cleaned!"); 1127 1128 // Make sure that each lexical scope will have a begin/end label. 1129 identifyScopeMarkers(); 1130 1131 // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function 1132 // belongs to so that we add to the correct per-cu line table in the 1133 // non-asm case. 1134 LexicalScope *FnScope = LScopes.getCurrentFunctionScope(); 1135 // FnScope->getScopeNode() and DI->second should represent the same function, 1136 // though they may not be the same MDNode due to inline functions merged in 1137 // LTO where the debug info metadata still differs (either due to distinct 1138 // written differences - two versions of a linkonce_odr function 1139 // written/copied into two separate files, or some sub-optimal metadata that 1140 // isn't structurally identical (see: file path/name info from clang, which 1141 // includes the directory of the cpp file being built, even when the file name 1142 // is absolute (such as an <> lookup header))) 1143 DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode()); 1144 assert(TheCU && "Unable to find compile unit!"); 1145 if (Asm->OutStreamer->hasRawTextSupport()) 1146 // Use a single line table if we are generating assembly. 1147 Asm->OutStreamer->getContext().setDwarfCompileUnitID(0); 1148 else 1149 Asm->OutStreamer->getContext().setDwarfCompileUnitID(TheCU->getUniqueID()); 1150 1151 // Calculate history for local variables. 1152 calculateDbgValueHistory(MF, Asm->MF->getSubtarget().getRegisterInfo(), 1153 DbgValues); 1154 1155 // Request labels for the full history. 1156 for (const auto &I : DbgValues) { 1157 const auto &Ranges = I.second; 1158 if (Ranges.empty()) 1159 continue; 1160 1161 // The first mention of a function argument gets the CurrentFnBegin 1162 // label, so arguments are visible when breaking at function entry. 1163 const DILocalVariable *DIVar = Ranges.front().first->getDebugVariable(); 1164 if (DIVar->isParameter() && 1165 getDISubprogram(DIVar->getScope())->describes(MF->getFunction())) { 1166 LabelsBeforeInsn[Ranges.front().first] = Asm->getFunctionBegin(); 1167 if (Ranges.front().first->getDebugExpression()->isBitPiece()) { 1168 // Mark all non-overlapping initial pieces. 1169 for (auto I = Ranges.begin(); I != Ranges.end(); ++I) { 1170 const DIExpression *Piece = I->first->getDebugExpression(); 1171 if (std::all_of(Ranges.begin(), I, 1172 [&](DbgValueHistoryMap::InstrRange Pred) { 1173 return !piecesOverlap(Piece, Pred.first->getDebugExpression()); 1174 })) 1175 LabelsBeforeInsn[I->first] = Asm->getFunctionBegin(); 1176 else 1177 break; 1178 } 1179 } 1180 } 1181 1182 for (const auto &Range : Ranges) { 1183 requestLabelBeforeInsn(Range.first); 1184 if (Range.second) 1185 requestLabelAfterInsn(Range.second); 1186 } 1187 } 1188 1189 PrevInstLoc = DebugLoc(); 1190 PrevLabel = Asm->getFunctionBegin(); 1191 1192 // Record beginning of function. 1193 PrologEndLoc = findPrologueEndLoc(MF); 1194 if (DILocation *L = PrologEndLoc) { 1195 // We'd like to list the prologue as "not statements" but GDB behaves 1196 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing. 1197 auto *SP = L->getInlinedAtScope()->getSubprogram(); 1198 recordSourceLine(SP->getScopeLine(), 0, SP, DWARF2_FLAG_IS_STMT); 1199 } 1200 } 1201 1202 // Gather and emit post-function debug information. 1203 void DwarfDebug::endFunction(const MachineFunction *MF) { 1204 assert(CurFn == MF && 1205 "endFunction should be called with the same function as beginFunction"); 1206 1207 if (!MMI->hasDebugInfo() || LScopes.empty() || 1208 !FunctionDIs.count(MF->getFunction())) { 1209 // If we don't have a lexical scope for this function then there will 1210 // be a hole in the range information. Keep note of this by setting the 1211 // previously used section to nullptr. 1212 PrevCU = nullptr; 1213 CurFn = nullptr; 1214 return; 1215 } 1216 1217 // Set DwarfDwarfCompileUnitID in MCContext to default value. 1218 Asm->OutStreamer->getContext().setDwarfCompileUnitID(0); 1219 1220 LexicalScope *FnScope = LScopes.getCurrentFunctionScope(); 1221 auto *SP = cast<DISubprogram>(FnScope->getScopeNode()); 1222 DwarfCompileUnit &TheCU = *SPMap.lookup(SP); 1223 1224 DenseSet<InlinedVariable> ProcessedVars; 1225 collectVariableInfo(TheCU, SP, ProcessedVars); 1226 1227 // Add the range of this function to the list of ranges for the CU. 1228 TheCU.addRange(RangeSpan(Asm->getFunctionBegin(), Asm->getFunctionEnd())); 1229 1230 // Under -gmlt, skip building the subprogram if there are no inlined 1231 // subroutines inside it. 1232 if (TheCU.getCUNode()->getEmissionKind() == DIBuilder::LineTablesOnly && 1233 LScopes.getAbstractScopesList().empty() && !IsDarwin) { 1234 assert(InfoHolder.getScopeVariables().empty()); 1235 assert(DbgValues.empty()); 1236 // FIXME: This wouldn't be true in LTO with a -g (with inlining) CU followed 1237 // by a -gmlt CU. Add a test and remove this assertion. 1238 assert(AbstractVariables.empty()); 1239 LabelsBeforeInsn.clear(); 1240 LabelsAfterInsn.clear(); 1241 PrevLabel = nullptr; 1242 CurFn = nullptr; 1243 return; 1244 } 1245 1246 #ifndef NDEBUG 1247 size_t NumAbstractScopes = LScopes.getAbstractScopesList().size(); 1248 #endif 1249 // Construct abstract scopes. 1250 for (LexicalScope *AScope : LScopes.getAbstractScopesList()) { 1251 auto *SP = cast<DISubprogram>(AScope->getScopeNode()); 1252 // Collect info for variables that were optimized out. 1253 for (const DILocalVariable *DV : SP->getVariables()) { 1254 if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second) 1255 continue; 1256 ensureAbstractVariableIsCreated(InlinedVariable(DV, nullptr), 1257 DV->getScope()); 1258 assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes 1259 && "ensureAbstractVariableIsCreated inserted abstract scopes"); 1260 } 1261 constructAbstractSubprogramScopeDIE(AScope); 1262 } 1263 1264 TheCU.constructSubprogramScopeDIE(FnScope); 1265 if (auto *SkelCU = TheCU.getSkeleton()) 1266 if (!LScopes.getAbstractScopesList().empty()) 1267 SkelCU->constructSubprogramScopeDIE(FnScope); 1268 1269 // Clear debug info 1270 // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the 1271 // DbgVariables except those that are also in AbstractVariables (since they 1272 // can be used cross-function) 1273 InfoHolder.getScopeVariables().clear(); 1274 DbgValues.clear(); 1275 LabelsBeforeInsn.clear(); 1276 LabelsAfterInsn.clear(); 1277 PrevLabel = nullptr; 1278 CurFn = nullptr; 1279 } 1280 1281 // Register a source line with debug info. Returns the unique label that was 1282 // emitted and which provides correspondence to the source line list. 1283 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S, 1284 unsigned Flags) { 1285 StringRef Fn; 1286 StringRef Dir; 1287 unsigned Src = 1; 1288 unsigned Discriminator = 0; 1289 if (auto *Scope = cast_or_null<DIScope>(S)) { 1290 Fn = Scope->getFilename(); 1291 Dir = Scope->getDirectory(); 1292 if (auto *LBF = dyn_cast<DILexicalBlockFile>(Scope)) 1293 Discriminator = LBF->getDiscriminator(); 1294 1295 unsigned CUID = Asm->OutStreamer->getContext().getDwarfCompileUnitID(); 1296 Src = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID]) 1297 .getOrCreateSourceID(Fn, Dir); 1298 } 1299 Asm->OutStreamer->EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 1300 Discriminator, Fn); 1301 } 1302 1303 //===----------------------------------------------------------------------===// 1304 // Emit Methods 1305 //===----------------------------------------------------------------------===// 1306 1307 // Emit the debug info section. 1308 void DwarfDebug::emitDebugInfo() { 1309 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1310 Holder.emitUnits(/* UseOffsets */ false); 1311 } 1312 1313 // Emit the abbreviation section. 1314 void DwarfDebug::emitAbbreviations() { 1315 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1316 1317 Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection()); 1318 } 1319 1320 void DwarfDebug::emitAccel(DwarfAccelTable &Accel, MCSection *Section, 1321 StringRef TableName) { 1322 Accel.FinalizeTable(Asm, TableName); 1323 Asm->OutStreamer->SwitchSection(Section); 1324 1325 // Emit the full data. 1326 Accel.emit(Asm, Section->getBeginSymbol(), this); 1327 } 1328 1329 // Emit visible names into a hashed accelerator table section. 1330 void DwarfDebug::emitAccelNames() { 1331 emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(), 1332 "Names"); 1333 } 1334 1335 // Emit objective C classes and categories into a hashed accelerator table 1336 // section. 1337 void DwarfDebug::emitAccelObjC() { 1338 emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(), 1339 "ObjC"); 1340 } 1341 1342 // Emit namespace dies into a hashed accelerator table. 1343 void DwarfDebug::emitAccelNamespaces() { 1344 emitAccel(AccelNamespace, 1345 Asm->getObjFileLowering().getDwarfAccelNamespaceSection(), 1346 "namespac"); 1347 } 1348 1349 // Emit type dies into a hashed accelerator table. 1350 void DwarfDebug::emitAccelTypes() { 1351 emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(), 1352 "types"); 1353 } 1354 1355 // Public name handling. 1356 // The format for the various pubnames: 1357 // 1358 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU 1359 // for the DIE that is named. 1360 // 1361 // gnu pubnames - offset/index value/name tuples where the offset is the offset 1362 // into the CU and the index value is computed according to the type of value 1363 // for the DIE that is named. 1364 // 1365 // For type units the offset is the offset of the skeleton DIE. For split dwarf 1366 // it's the offset within the debug_info/debug_types dwo section, however, the 1367 // reference in the pubname header doesn't change. 1368 1369 /// computeIndexValue - Compute the gdb index value for the DIE and CU. 1370 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU, 1371 const DIE *Die) { 1372 dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC; 1373 1374 // We could have a specification DIE that has our most of our knowledge, 1375 // look for that now. 1376 if (DIEValue SpecVal = Die->findAttribute(dwarf::DW_AT_specification)) { 1377 DIE &SpecDIE = SpecVal.getDIEEntry().getEntry(); 1378 if (SpecDIE.findAttribute(dwarf::DW_AT_external)) 1379 Linkage = dwarf::GIEL_EXTERNAL; 1380 } else if (Die->findAttribute(dwarf::DW_AT_external)) 1381 Linkage = dwarf::GIEL_EXTERNAL; 1382 1383 switch (Die->getTag()) { 1384 case dwarf::DW_TAG_class_type: 1385 case dwarf::DW_TAG_structure_type: 1386 case dwarf::DW_TAG_union_type: 1387 case dwarf::DW_TAG_enumeration_type: 1388 return dwarf::PubIndexEntryDescriptor( 1389 dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus 1390 ? dwarf::GIEL_STATIC 1391 : dwarf::GIEL_EXTERNAL); 1392 case dwarf::DW_TAG_typedef: 1393 case dwarf::DW_TAG_base_type: 1394 case dwarf::DW_TAG_subrange_type: 1395 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC); 1396 case dwarf::DW_TAG_namespace: 1397 return dwarf::GIEK_TYPE; 1398 case dwarf::DW_TAG_subprogram: 1399 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage); 1400 case dwarf::DW_TAG_variable: 1401 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage); 1402 case dwarf::DW_TAG_enumerator: 1403 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, 1404 dwarf::GIEL_STATIC); 1405 default: 1406 return dwarf::GIEK_NONE; 1407 } 1408 } 1409 1410 /// emitDebugPubNames - Emit visible names into a debug pubnames section. 1411 /// 1412 void DwarfDebug::emitDebugPubNames(bool GnuStyle) { 1413 MCSection *PSec = GnuStyle 1414 ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection() 1415 : Asm->getObjFileLowering().getDwarfPubNamesSection(); 1416 1417 emitDebugPubSection(GnuStyle, PSec, "Names", 1418 &DwarfCompileUnit::getGlobalNames); 1419 } 1420 1421 void DwarfDebug::emitDebugPubSection( 1422 bool GnuStyle, MCSection *PSec, StringRef Name, 1423 const StringMap<const DIE *> &(DwarfCompileUnit::*Accessor)() const) { 1424 for (const auto &NU : CUMap) { 1425 DwarfCompileUnit *TheU = NU.second; 1426 1427 const auto &Globals = (TheU->*Accessor)(); 1428 1429 if (Globals.empty()) 1430 continue; 1431 1432 if (auto *Skeleton = TheU->getSkeleton()) 1433 TheU = Skeleton; 1434 1435 // Start the dwarf pubnames section. 1436 Asm->OutStreamer->SwitchSection(PSec); 1437 1438 // Emit the header. 1439 Asm->OutStreamer->AddComment("Length of Public " + Name + " Info"); 1440 MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin"); 1441 MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end"); 1442 Asm->EmitLabelDifference(EndLabel, BeginLabel, 4); 1443 1444 Asm->OutStreamer->EmitLabel(BeginLabel); 1445 1446 Asm->OutStreamer->AddComment("DWARF Version"); 1447 Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION); 1448 1449 Asm->OutStreamer->AddComment("Offset of Compilation Unit Info"); 1450 Asm->emitDwarfSymbolReference(TheU->getLabelBegin()); 1451 1452 Asm->OutStreamer->AddComment("Compilation Unit Length"); 1453 Asm->EmitInt32(TheU->getLength()); 1454 1455 // Emit the pubnames for this compilation unit. 1456 for (const auto &GI : Globals) { 1457 const char *Name = GI.getKeyData(); 1458 const DIE *Entity = GI.second; 1459 1460 Asm->OutStreamer->AddComment("DIE offset"); 1461 Asm->EmitInt32(Entity->getOffset()); 1462 1463 if (GnuStyle) { 1464 dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity); 1465 Asm->OutStreamer->AddComment( 1466 Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " + 1467 dwarf::GDBIndexEntryLinkageString(Desc.Linkage)); 1468 Asm->EmitInt8(Desc.toBits()); 1469 } 1470 1471 Asm->OutStreamer->AddComment("External Name"); 1472 Asm->OutStreamer->EmitBytes(StringRef(Name, GI.getKeyLength() + 1)); 1473 } 1474 1475 Asm->OutStreamer->AddComment("End Mark"); 1476 Asm->EmitInt32(0); 1477 Asm->OutStreamer->EmitLabel(EndLabel); 1478 } 1479 } 1480 1481 void DwarfDebug::emitDebugPubTypes(bool GnuStyle) { 1482 MCSection *PSec = GnuStyle 1483 ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection() 1484 : Asm->getObjFileLowering().getDwarfPubTypesSection(); 1485 1486 emitDebugPubSection(GnuStyle, PSec, "Types", 1487 &DwarfCompileUnit::getGlobalTypes); 1488 } 1489 1490 // Emit visible names into a debug str section. 1491 void DwarfDebug::emitDebugStr() { 1492 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 1493 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection()); 1494 } 1495 1496 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer, 1497 const DebugLocStream::Entry &Entry) { 1498 auto &&Comments = DebugLocs.getComments(Entry); 1499 auto Comment = Comments.begin(); 1500 auto End = Comments.end(); 1501 for (uint8_t Byte : DebugLocs.getBytes(Entry)) 1502 Streamer.EmitInt8(Byte, Comment != End ? *(Comment++) : ""); 1503 } 1504 1505 static void emitDebugLocValue(const AsmPrinter &AP, const DIBasicType *BT, 1506 ByteStreamer &Streamer, 1507 const DebugLocEntry::Value &Value, 1508 unsigned PieceOffsetInBits) { 1509 DebugLocDwarfExpression DwarfExpr(*AP.MF->getSubtarget().getRegisterInfo(), 1510 AP.getDwarfDebug()->getDwarfVersion(), 1511 Streamer); 1512 // Regular entry. 1513 if (Value.isInt()) { 1514 if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed || 1515 BT->getEncoding() == dwarf::DW_ATE_signed_char)) 1516 DwarfExpr.AddSignedConstant(Value.getInt()); 1517 else 1518 DwarfExpr.AddUnsignedConstant(Value.getInt()); 1519 } else if (Value.isLocation()) { 1520 MachineLocation Loc = Value.getLoc(); 1521 const DIExpression *Expr = Value.getExpression(); 1522 if (!Expr || !Expr->getNumElements()) 1523 // Regular entry. 1524 AP.EmitDwarfRegOp(Streamer, Loc); 1525 else { 1526 // Complex address entry. 1527 if (Loc.getOffset()) { 1528 DwarfExpr.AddMachineRegIndirect(Loc.getReg(), Loc.getOffset()); 1529 DwarfExpr.AddExpression(Expr->expr_op_begin(), Expr->expr_op_end(), 1530 PieceOffsetInBits); 1531 } else 1532 DwarfExpr.AddMachineRegExpression(Expr, Loc.getReg(), 1533 PieceOffsetInBits); 1534 } 1535 } 1536 // else ... ignore constant fp. There is not any good way to 1537 // to represent them here in dwarf. 1538 // FIXME: ^ 1539 } 1540 1541 void DebugLocEntry::finalize(const AsmPrinter &AP, 1542 DebugLocStream::ListBuilder &List, 1543 const DIBasicType *BT) { 1544 DebugLocStream::EntryBuilder Entry(List, Begin, End); 1545 BufferByteStreamer Streamer = Entry.getStreamer(); 1546 const DebugLocEntry::Value &Value = Values[0]; 1547 if (Value.isBitPiece()) { 1548 // Emit all pieces that belong to the same variable and range. 1549 assert(std::all_of(Values.begin(), Values.end(), [](DebugLocEntry::Value P) { 1550 return P.isBitPiece(); 1551 }) && "all values are expected to be pieces"); 1552 assert(std::is_sorted(Values.begin(), Values.end()) && 1553 "pieces are expected to be sorted"); 1554 1555 unsigned Offset = 0; 1556 for (auto Piece : Values) { 1557 const DIExpression *Expr = Piece.getExpression(); 1558 unsigned PieceOffset = Expr->getBitPieceOffset(); 1559 unsigned PieceSize = Expr->getBitPieceSize(); 1560 assert(Offset <= PieceOffset && "overlapping or duplicate pieces"); 1561 if (Offset < PieceOffset) { 1562 // The DWARF spec seriously mandates pieces with no locations for gaps. 1563 DebugLocDwarfExpression Expr(*AP.MF->getSubtarget().getRegisterInfo(), 1564 AP.getDwarfDebug()->getDwarfVersion(), 1565 Streamer); 1566 Expr.AddOpPiece(PieceOffset-Offset, 0); 1567 Offset += PieceOffset-Offset; 1568 } 1569 Offset += PieceSize; 1570 1571 emitDebugLocValue(AP, BT, Streamer, Piece, PieceOffset); 1572 } 1573 } else { 1574 assert(Values.size() == 1 && "only pieces may have >1 value"); 1575 emitDebugLocValue(AP, BT, Streamer, Value, 0); 1576 } 1577 } 1578 1579 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) { 1580 // Emit the size. 1581 Asm->OutStreamer->AddComment("Loc expr size"); 1582 Asm->EmitInt16(DebugLocs.getBytes(Entry).size()); 1583 1584 // Emit the entry. 1585 APByteStreamer Streamer(*Asm); 1586 emitDebugLocEntry(Streamer, Entry); 1587 } 1588 1589 // Emit locations into the debug loc section. 1590 void DwarfDebug::emitDebugLoc() { 1591 // Start the dwarf loc section. 1592 Asm->OutStreamer->SwitchSection( 1593 Asm->getObjFileLowering().getDwarfLocSection()); 1594 unsigned char Size = Asm->getDataLayout().getPointerSize(); 1595 for (const auto &List : DebugLocs.getLists()) { 1596 Asm->OutStreamer->EmitLabel(List.Label); 1597 const DwarfCompileUnit *CU = List.CU; 1598 for (const auto &Entry : DebugLocs.getEntries(List)) { 1599 // Set up the range. This range is relative to the entry point of the 1600 // compile unit. This is a hard coded 0 for low_pc when we're emitting 1601 // ranges, or the DW_AT_low_pc on the compile unit otherwise. 1602 if (auto *Base = CU->getBaseAddress()) { 1603 Asm->EmitLabelDifference(Entry.BeginSym, Base, Size); 1604 Asm->EmitLabelDifference(Entry.EndSym, Base, Size); 1605 } else { 1606 Asm->OutStreamer->EmitSymbolValue(Entry.BeginSym, Size); 1607 Asm->OutStreamer->EmitSymbolValue(Entry.EndSym, Size); 1608 } 1609 1610 emitDebugLocEntryLocation(Entry); 1611 } 1612 Asm->OutStreamer->EmitIntValue(0, Size); 1613 Asm->OutStreamer->EmitIntValue(0, Size); 1614 } 1615 } 1616 1617 void DwarfDebug::emitDebugLocDWO() { 1618 Asm->OutStreamer->SwitchSection( 1619 Asm->getObjFileLowering().getDwarfLocDWOSection()); 1620 for (const auto &List : DebugLocs.getLists()) { 1621 Asm->OutStreamer->EmitLabel(List.Label); 1622 for (const auto &Entry : DebugLocs.getEntries(List)) { 1623 // Just always use start_length for now - at least that's one address 1624 // rather than two. We could get fancier and try to, say, reuse an 1625 // address we know we've emitted elsewhere (the start of the function? 1626 // The start of the CU or CU subrange that encloses this range?) 1627 Asm->EmitInt8(dwarf::DW_LLE_start_length_entry); 1628 unsigned idx = AddrPool.getIndex(Entry.BeginSym); 1629 Asm->EmitULEB128(idx); 1630 Asm->EmitLabelDifference(Entry.EndSym, Entry.BeginSym, 4); 1631 1632 emitDebugLocEntryLocation(Entry); 1633 } 1634 Asm->EmitInt8(dwarf::DW_LLE_end_of_list_entry); 1635 } 1636 } 1637 1638 struct ArangeSpan { 1639 const MCSymbol *Start, *End; 1640 }; 1641 1642 // Emit a debug aranges section, containing a CU lookup for any 1643 // address we can tie back to a CU. 1644 void DwarfDebug::emitDebugARanges() { 1645 // Provides a unique id per text section. 1646 MapVector<MCSection *, SmallVector<SymbolCU, 8>> SectionMap; 1647 1648 // Filter labels by section. 1649 for (const SymbolCU &SCU : ArangeLabels) { 1650 if (SCU.Sym->isInSection()) { 1651 // Make a note of this symbol and it's section. 1652 MCSection *Section = &SCU.Sym->getSection(); 1653 if (!Section->getKind().isMetadata()) 1654 SectionMap[Section].push_back(SCU); 1655 } else { 1656 // Some symbols (e.g. common/bss on mach-o) can have no section but still 1657 // appear in the output. This sucks as we rely on sections to build 1658 // arange spans. We can do it without, but it's icky. 1659 SectionMap[nullptr].push_back(SCU); 1660 } 1661 } 1662 1663 // Add terminating symbols for each section. 1664 for (const auto &I : SectionMap) { 1665 MCSection *Section = I.first; 1666 MCSymbol *Sym = nullptr; 1667 1668 if (Section) 1669 Sym = Asm->OutStreamer->endSection(Section); 1670 1671 // Insert a final terminator. 1672 SectionMap[Section].push_back(SymbolCU(nullptr, Sym)); 1673 } 1674 1675 DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans; 1676 1677 for (auto &I : SectionMap) { 1678 const MCSection *Section = I.first; 1679 SmallVector<SymbolCU, 8> &List = I.second; 1680 if (List.size() < 2) 1681 continue; 1682 1683 // If we have no section (e.g. common), just write out 1684 // individual spans for each symbol. 1685 if (!Section) { 1686 for (const SymbolCU &Cur : List) { 1687 ArangeSpan Span; 1688 Span.Start = Cur.Sym; 1689 Span.End = nullptr; 1690 if (Cur.CU) 1691 Spans[Cur.CU].push_back(Span); 1692 } 1693 continue; 1694 } 1695 1696 // Sort the symbols by offset within the section. 1697 std::sort(List.begin(), List.end(), 1698 [&](const SymbolCU &A, const SymbolCU &B) { 1699 unsigned IA = A.Sym ? Asm->OutStreamer->GetSymbolOrder(A.Sym) : 0; 1700 unsigned IB = B.Sym ? Asm->OutStreamer->GetSymbolOrder(B.Sym) : 0; 1701 1702 // Symbols with no order assigned should be placed at the end. 1703 // (e.g. section end labels) 1704 if (IA == 0) 1705 return false; 1706 if (IB == 0) 1707 return true; 1708 return IA < IB; 1709 }); 1710 1711 // Build spans between each label. 1712 const MCSymbol *StartSym = List[0].Sym; 1713 for (size_t n = 1, e = List.size(); n < e; n++) { 1714 const SymbolCU &Prev = List[n - 1]; 1715 const SymbolCU &Cur = List[n]; 1716 1717 // Try and build the longest span we can within the same CU. 1718 if (Cur.CU != Prev.CU) { 1719 ArangeSpan Span; 1720 Span.Start = StartSym; 1721 Span.End = Cur.Sym; 1722 Spans[Prev.CU].push_back(Span); 1723 StartSym = Cur.Sym; 1724 } 1725 } 1726 } 1727 1728 // Start the dwarf aranges section. 1729 Asm->OutStreamer->SwitchSection( 1730 Asm->getObjFileLowering().getDwarfARangesSection()); 1731 1732 unsigned PtrSize = Asm->getDataLayout().getPointerSize(); 1733 1734 // Build a list of CUs used. 1735 std::vector<DwarfCompileUnit *> CUs; 1736 for (const auto &it : Spans) { 1737 DwarfCompileUnit *CU = it.first; 1738 CUs.push_back(CU); 1739 } 1740 1741 // Sort the CU list (again, to ensure consistent output order). 1742 std::sort(CUs.begin(), CUs.end(), [](const DwarfUnit *A, const DwarfUnit *B) { 1743 return A->getUniqueID() < B->getUniqueID(); 1744 }); 1745 1746 // Emit an arange table for each CU we used. 1747 for (DwarfCompileUnit *CU : CUs) { 1748 std::vector<ArangeSpan> &List = Spans[CU]; 1749 1750 // Describe the skeleton CU's offset and length, not the dwo file's. 1751 if (auto *Skel = CU->getSkeleton()) 1752 CU = Skel; 1753 1754 // Emit size of content not including length itself. 1755 unsigned ContentSize = 1756 sizeof(int16_t) + // DWARF ARange version number 1757 sizeof(int32_t) + // Offset of CU in the .debug_info section 1758 sizeof(int8_t) + // Pointer Size (in bytes) 1759 sizeof(int8_t); // Segment Size (in bytes) 1760 1761 unsigned TupleSize = PtrSize * 2; 1762 1763 // 7.20 in the Dwarf specs requires the table to be aligned to a tuple. 1764 unsigned Padding = 1765 OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize); 1766 1767 ContentSize += Padding; 1768 ContentSize += (List.size() + 1) * TupleSize; 1769 1770 // For each compile unit, write the list of spans it covers. 1771 Asm->OutStreamer->AddComment("Length of ARange Set"); 1772 Asm->EmitInt32(ContentSize); 1773 Asm->OutStreamer->AddComment("DWARF Arange version number"); 1774 Asm->EmitInt16(dwarf::DW_ARANGES_VERSION); 1775 Asm->OutStreamer->AddComment("Offset Into Debug Info Section"); 1776 Asm->emitDwarfSymbolReference(CU->getLabelBegin()); 1777 Asm->OutStreamer->AddComment("Address Size (in bytes)"); 1778 Asm->EmitInt8(PtrSize); 1779 Asm->OutStreamer->AddComment("Segment Size (in bytes)"); 1780 Asm->EmitInt8(0); 1781 1782 Asm->OutStreamer->EmitFill(Padding, 0xff); 1783 1784 for (const ArangeSpan &Span : List) { 1785 Asm->EmitLabelReference(Span.Start, PtrSize); 1786 1787 // Calculate the size as being from the span start to it's end. 1788 if (Span.End) { 1789 Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize); 1790 } else { 1791 // For symbols without an end marker (e.g. common), we 1792 // write a single arange entry containing just that one symbol. 1793 uint64_t Size = SymSize[Span.Start]; 1794 if (Size == 0) 1795 Size = 1; 1796 1797 Asm->OutStreamer->EmitIntValue(Size, PtrSize); 1798 } 1799 } 1800 1801 Asm->OutStreamer->AddComment("ARange terminator"); 1802 Asm->OutStreamer->EmitIntValue(0, PtrSize); 1803 Asm->OutStreamer->EmitIntValue(0, PtrSize); 1804 } 1805 } 1806 1807 // Emit visible names into a debug ranges section. 1808 void DwarfDebug::emitDebugRanges() { 1809 // Start the dwarf ranges section. 1810 Asm->OutStreamer->SwitchSection( 1811 Asm->getObjFileLowering().getDwarfRangesSection()); 1812 1813 // Size for our labels. 1814 unsigned char Size = Asm->getDataLayout().getPointerSize(); 1815 1816 // Grab the specific ranges for the compile units in the module. 1817 for (const auto &I : CUMap) { 1818 DwarfCompileUnit *TheCU = I.second; 1819 1820 if (auto *Skel = TheCU->getSkeleton()) 1821 TheCU = Skel; 1822 1823 // Iterate over the misc ranges for the compile units in the module. 1824 for (const RangeSpanList &List : TheCU->getRangeLists()) { 1825 // Emit our symbol so we can find the beginning of the range. 1826 Asm->OutStreamer->EmitLabel(List.getSym()); 1827 1828 for (const RangeSpan &Range : List.getRanges()) { 1829 const MCSymbol *Begin = Range.getStart(); 1830 const MCSymbol *End = Range.getEnd(); 1831 assert(Begin && "Range without a begin symbol?"); 1832 assert(End && "Range without an end symbol?"); 1833 if (auto *Base = TheCU->getBaseAddress()) { 1834 Asm->EmitLabelDifference(Begin, Base, Size); 1835 Asm->EmitLabelDifference(End, Base, Size); 1836 } else { 1837 Asm->OutStreamer->EmitSymbolValue(Begin, Size); 1838 Asm->OutStreamer->EmitSymbolValue(End, Size); 1839 } 1840 } 1841 1842 // And terminate the list with two 0 values. 1843 Asm->OutStreamer->EmitIntValue(0, Size); 1844 Asm->OutStreamer->EmitIntValue(0, Size); 1845 } 1846 } 1847 } 1848 1849 // DWARF5 Experimental Separate Dwarf emitters. 1850 1851 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die, 1852 std::unique_ptr<DwarfUnit> NewU) { 1853 NewU->addString(Die, dwarf::DW_AT_GNU_dwo_name, 1854 U.getCUNode()->getSplitDebugFilename()); 1855 1856 if (!CompilationDir.empty()) 1857 NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); 1858 1859 addGnuPubAttributes(*NewU, Die); 1860 1861 SkeletonHolder.addUnit(std::move(NewU)); 1862 } 1863 1864 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list, 1865 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id, 1866 // DW_AT_addr_base, DW_AT_ranges_base. 1867 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) { 1868 1869 auto OwnedUnit = make_unique<DwarfCompileUnit>( 1870 CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder); 1871 DwarfCompileUnit &NewCU = *OwnedUnit; 1872 NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoSection()); 1873 1874 NewCU.initStmtList(); 1875 1876 initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit)); 1877 1878 return NewCU; 1879 } 1880 1881 // Emit the .debug_info.dwo section for separated dwarf. This contains the 1882 // compile units that would normally be in debug_info. 1883 void DwarfDebug::emitDebugInfoDWO() { 1884 assert(useSplitDwarf() && "No split dwarf debug info?"); 1885 // Don't emit relocations into the dwo file. 1886 InfoHolder.emitUnits(/* UseOffsets */ true); 1887 } 1888 1889 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the 1890 // abbreviations for the .debug_info.dwo section. 1891 void DwarfDebug::emitDebugAbbrevDWO() { 1892 assert(useSplitDwarf() && "No split dwarf?"); 1893 InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection()); 1894 } 1895 1896 void DwarfDebug::emitDebugLineDWO() { 1897 assert(useSplitDwarf() && "No split dwarf?"); 1898 Asm->OutStreamer->SwitchSection( 1899 Asm->getObjFileLowering().getDwarfLineDWOSection()); 1900 SplitTypeUnitFileTable.Emit(*Asm->OutStreamer, MCDwarfLineTableParams()); 1901 } 1902 1903 // Emit the .debug_str.dwo section for separated dwarf. This contains the 1904 // string section and is identical in format to traditional .debug_str 1905 // sections. 1906 void DwarfDebug::emitDebugStrDWO() { 1907 assert(useSplitDwarf() && "No split dwarf?"); 1908 MCSection *OffSec = Asm->getObjFileLowering().getDwarfStrOffDWOSection(); 1909 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(), 1910 OffSec); 1911 } 1912 1913 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) { 1914 if (!useSplitDwarf()) 1915 return nullptr; 1916 if (SingleCU) 1917 SplitTypeUnitFileTable.setCompilationDir(CU.getCUNode()->getDirectory()); 1918 return &SplitTypeUnitFileTable; 1919 } 1920 1921 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier) { 1922 MD5 Hash; 1923 Hash.update(Identifier); 1924 // ... take the least significant 8 bytes and return those. Our MD5 1925 // implementation always returns its results in little endian, swap bytes 1926 // appropriately. 1927 MD5::MD5Result Result; 1928 Hash.final(Result); 1929 return support::endian::read64le(Result + 8); 1930 } 1931 1932 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU, 1933 StringRef Identifier, DIE &RefDie, 1934 const DICompositeType *CTy) { 1935 // Fast path if we're building some type units and one has already used the 1936 // address pool we know we're going to throw away all this work anyway, so 1937 // don't bother building dependent types. 1938 if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed()) 1939 return; 1940 1941 const DwarfTypeUnit *&TU = DwarfTypeUnits[CTy]; 1942 if (TU) { 1943 CU.addDIETypeSignature(RefDie, *TU); 1944 return; 1945 } 1946 1947 bool TopLevelType = TypeUnitsUnderConstruction.empty(); 1948 AddrPool.resetUsedFlag(); 1949 1950 auto OwnedUnit = make_unique<DwarfTypeUnit>( 1951 InfoHolder.getUnits().size() + TypeUnitsUnderConstruction.size(), CU, Asm, 1952 this, &InfoHolder, getDwoLineTable(CU)); 1953 DwarfTypeUnit &NewTU = *OwnedUnit; 1954 DIE &UnitDie = NewTU.getUnitDie(); 1955 TU = &NewTU; 1956 TypeUnitsUnderConstruction.push_back( 1957 std::make_pair(std::move(OwnedUnit), CTy)); 1958 1959 NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2, 1960 CU.getLanguage()); 1961 1962 uint64_t Signature = makeTypeSignature(Identifier); 1963 NewTU.setTypeSignature(Signature); 1964 1965 if (useSplitDwarf()) 1966 NewTU.initSection(Asm->getObjFileLowering().getDwarfTypesDWOSection()); 1967 else { 1968 CU.applyStmtList(UnitDie); 1969 NewTU.initSection( 1970 Asm->getObjFileLowering().getDwarfTypesSection(Signature)); 1971 } 1972 1973 NewTU.setType(NewTU.createTypeDIE(CTy)); 1974 1975 if (TopLevelType) { 1976 auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction); 1977 TypeUnitsUnderConstruction.clear(); 1978 1979 // Types referencing entries in the address table cannot be placed in type 1980 // units. 1981 if (AddrPool.hasBeenUsed()) { 1982 1983 // Remove all the types built while building this type. 1984 // This is pessimistic as some of these types might not be dependent on 1985 // the type that used an address. 1986 for (const auto &TU : TypeUnitsToAdd) 1987 DwarfTypeUnits.erase(TU.second); 1988 1989 // Construct this type in the CU directly. 1990 // This is inefficient because all the dependent types will be rebuilt 1991 // from scratch, including building them in type units, discovering that 1992 // they depend on addresses, throwing them out and rebuilding them. 1993 CU.constructTypeDIE(RefDie, cast<DICompositeType>(CTy)); 1994 return; 1995 } 1996 1997 // If the type wasn't dependent on fission addresses, finish adding the type 1998 // and all its dependent types. 1999 for (auto &TU : TypeUnitsToAdd) 2000 InfoHolder.addUnit(std::move(TU.first)); 2001 } 2002 CU.addDIETypeSignature(RefDie, NewTU); 2003 } 2004 2005 // Accelerator table mutators - add each name along with its companion 2006 // DIE to the proper table while ensuring that the name that we're going 2007 // to reference is in the string table. We do this since the names we 2008 // add may not only be identical to the names in the DIE. 2009 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) { 2010 if (!useDwarfAccelTables()) 2011 return; 2012 AccelNames.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2013 } 2014 2015 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) { 2016 if (!useDwarfAccelTables()) 2017 return; 2018 AccelObjC.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2019 } 2020 2021 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) { 2022 if (!useDwarfAccelTables()) 2023 return; 2024 AccelNamespace.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2025 } 2026 2027 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) { 2028 if (!useDwarfAccelTables()) 2029 return; 2030 AccelTypes.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die); 2031 } 2032