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