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 #define DEBUG_TYPE "dwarfdebug" 15 #include "DwarfDebug.h" 16 #include "DIE.h" 17 #include "DIEHash.h" 18 #include "DwarfAccelTable.h" 19 #include "DwarfUnit.h" 20 #include "llvm/ADT/STLExtras.h" 21 #include "llvm/ADT/Statistic.h" 22 #include "llvm/ADT/StringExtras.h" 23 #include "llvm/ADT/Triple.h" 24 #include "llvm/CodeGen/MachineFunction.h" 25 #include "llvm/CodeGen/MachineModuleInfo.h" 26 #include "llvm/DIBuilder.h" 27 #include "llvm/DebugInfo.h" 28 #include "llvm/IR/Constants.h" 29 #include "llvm/IR/DataLayout.h" 30 #include "llvm/IR/Instructions.h" 31 #include "llvm/IR/Module.h" 32 #include "llvm/MC/MCAsmInfo.h" 33 #include "llvm/MC/MCSection.h" 34 #include "llvm/MC/MCStreamer.h" 35 #include "llvm/MC/MCSymbol.h" 36 #include "llvm/Support/CommandLine.h" 37 #include "llvm/Support/Debug.h" 38 #include "llvm/Support/Dwarf.h" 39 #include "llvm/Support/ErrorHandling.h" 40 #include "llvm/Support/FormattedStream.h" 41 #include "llvm/Support/LEB128.h" 42 #include "llvm/Support/MD5.h" 43 #include "llvm/Support/Path.h" 44 #include "llvm/Support/Timer.h" 45 #include "llvm/Support/ValueHandle.h" 46 #include "llvm/Target/TargetFrameLowering.h" 47 #include "llvm/Target/TargetLoweringObjectFile.h" 48 #include "llvm/Target/TargetMachine.h" 49 #include "llvm/Target/TargetOptions.h" 50 #include "llvm/Target/TargetRegisterInfo.h" 51 using namespace llvm; 52 53 static cl::opt<bool> 54 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden, 55 cl::desc("Disable debug info printing")); 56 57 static cl::opt<bool> UnknownLocations( 58 "use-unknown-locations", cl::Hidden, 59 cl::desc("Make an absence of debug location information explicit."), 60 cl::init(false)); 61 62 static cl::opt<bool> GenerateCUHash("generate-cu-hash", cl::Hidden, 63 cl::desc("Add the CU hash as the dwo_id."), 64 cl::init(false)); 65 66 static cl::opt<bool> 67 GenerateGnuPubSections("generate-gnu-dwarf-pub-sections", cl::Hidden, 68 cl::desc("Generate GNU-style pubnames and pubtypes"), 69 cl::init(false)); 70 71 static cl::opt<bool> GenerateARangeSection("generate-arange-section", 72 cl::Hidden, 73 cl::desc("Generate dwarf aranges"), 74 cl::init(false)); 75 76 namespace { 77 enum DefaultOnOff { Default, Enable, Disable }; 78 } 79 80 static cl::opt<DefaultOnOff> 81 DwarfAccelTables("dwarf-accel-tables", cl::Hidden, 82 cl::desc("Output prototype dwarf accelerator tables."), 83 cl::values(clEnumVal(Default, "Default for platform"), 84 clEnumVal(Enable, "Enabled"), 85 clEnumVal(Disable, "Disabled"), clEnumValEnd), 86 cl::init(Default)); 87 88 static cl::opt<DefaultOnOff> 89 SplitDwarf("split-dwarf", cl::Hidden, 90 cl::desc("Output DWARF5 split debug info."), 91 cl::values(clEnumVal(Default, "Default for platform"), 92 clEnumVal(Enable, "Enabled"), 93 clEnumVal(Disable, "Disabled"), clEnumValEnd), 94 cl::init(Default)); 95 96 static cl::opt<DefaultOnOff> 97 DwarfPubSections("generate-dwarf-pub-sections", cl::Hidden, 98 cl::desc("Generate DWARF pubnames and pubtypes sections"), 99 cl::values(clEnumVal(Default, "Default for platform"), 100 clEnumVal(Enable, "Enabled"), 101 clEnumVal(Disable, "Disabled"), clEnumValEnd), 102 cl::init(Default)); 103 104 static cl::opt<unsigned> 105 DwarfVersionNumber("dwarf-version", cl::Hidden, 106 cl::desc("Generate DWARF for dwarf version."), cl::init(0)); 107 108 static cl::opt<bool> 109 DwarfCURanges("generate-dwarf-cu-ranges", cl::Hidden, 110 cl::desc("Generate DW_AT_ranges for compile units"), 111 cl::init(false)); 112 113 static const char *const DWARFGroupName = "DWARF Emission"; 114 static const char *const DbgTimerName = "DWARF Debug Writer"; 115 116 //===----------------------------------------------------------------------===// 117 118 namespace llvm { 119 120 /// resolve - Look in the DwarfDebug map for the MDNode that 121 /// corresponds to the reference. 122 template <typename T> T DbgVariable::resolve(DIRef<T> Ref) const { 123 return DD->resolve(Ref); 124 } 125 126 DIType DbgVariable::getType() const { 127 DIType Ty = Var.getType(); 128 // FIXME: isBlockByrefVariable should be reformulated in terms of complex 129 // addresses instead. 130 if (Var.isBlockByrefVariable()) { 131 /* Byref variables, in Blocks, are declared by the programmer as 132 "SomeType VarName;", but the compiler creates a 133 __Block_byref_x_VarName struct, and gives the variable VarName 134 either the struct, or a pointer to the struct, as its type. This 135 is necessary for various behind-the-scenes things the compiler 136 needs to do with by-reference variables in blocks. 137 138 However, as far as the original *programmer* is concerned, the 139 variable should still have type 'SomeType', as originally declared. 140 141 The following function dives into the __Block_byref_x_VarName 142 struct to find the original type of the variable. This will be 143 passed back to the code generating the type for the Debug 144 Information Entry for the variable 'VarName'. 'VarName' will then 145 have the original type 'SomeType' in its debug information. 146 147 The original type 'SomeType' will be the type of the field named 148 'VarName' inside the __Block_byref_x_VarName struct. 149 150 NOTE: In order for this to not completely fail on the debugger 151 side, the Debug Information Entry for the variable VarName needs to 152 have a DW_AT_location that tells the debugger how to unwind through 153 the pointers and __Block_byref_x_VarName struct to find the actual 154 value of the variable. The function addBlockByrefType does this. */ 155 DIType subType = Ty; 156 uint16_t tag = Ty.getTag(); 157 158 if (tag == dwarf::DW_TAG_pointer_type) 159 subType = resolve(DIDerivedType(Ty).getTypeDerivedFrom()); 160 161 DIArray Elements = DICompositeType(subType).getTypeArray(); 162 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) { 163 DIDerivedType DT(Elements.getElement(i)); 164 if (getName() == DT.getName()) 165 return (resolve(DT.getTypeDerivedFrom())); 166 } 167 } 168 return Ty; 169 } 170 171 } // end llvm namespace 172 173 /// Return Dwarf Version by checking module flags. 174 static unsigned getDwarfVersionFromModule(const Module *M) { 175 Value *Val = M->getModuleFlag("Dwarf Version"); 176 if (!Val) 177 return dwarf::DWARF_VERSION; 178 return cast<ConstantInt>(Val)->getZExtValue(); 179 } 180 181 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M) 182 : Asm(A), MMI(Asm->MMI), FirstCU(0), SourceIdMap(DIEValueAllocator), 183 PrevLabel(NULL), GlobalRangeCount(0), 184 InfoHolder(A, "info_string", DIEValueAllocator), HasCURanges(false), 185 UsedNonDefaultText(false), 186 SkeletonHolder(A, "skel_string", DIEValueAllocator) { 187 188 DwarfInfoSectionSym = DwarfAbbrevSectionSym = DwarfStrSectionSym = 0; 189 DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0; 190 DwarfAddrSectionSym = 0; 191 DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0; 192 FunctionBeginSym = FunctionEndSym = 0; 193 CurFn = 0; 194 CurMI = 0; 195 196 // Turn on accelerator tables for Darwin by default, pubnames by 197 // default for non-Darwin, and handle split dwarf. 198 bool IsDarwin = Triple(A->getTargetTriple()).isOSDarwin(); 199 200 if (DwarfAccelTables == Default) 201 HasDwarfAccelTables = IsDarwin; 202 else 203 HasDwarfAccelTables = DwarfAccelTables == Enable; 204 205 if (SplitDwarf == Default) 206 HasSplitDwarf = false; 207 else 208 HasSplitDwarf = SplitDwarf == Enable; 209 210 if (DwarfPubSections == Default) 211 HasDwarfPubSections = !IsDarwin; 212 else 213 HasDwarfPubSections = DwarfPubSections == Enable; 214 215 DwarfVersion = DwarfVersionNumber 216 ? DwarfVersionNumber 217 : getDwarfVersionFromModule(MMI->getModule()); 218 219 { 220 NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled); 221 beginModule(); 222 } 223 } 224 225 // Switch to the specified MCSection and emit an assembler 226 // temporary label to it if SymbolStem is specified. 227 static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section, 228 const char *SymbolStem = 0) { 229 Asm->OutStreamer.SwitchSection(Section); 230 if (!SymbolStem) 231 return 0; 232 233 MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem); 234 Asm->OutStreamer.EmitLabel(TmpSym); 235 return TmpSym; 236 } 237 238 DwarfFile::~DwarfFile() { 239 for (SmallVectorImpl<DwarfUnit *>::iterator I = CUs.begin(), E = CUs.end(); 240 I != E; ++I) 241 delete *I; 242 } 243 244 MCSymbol *DwarfFile::getStringPoolSym() { 245 return Asm->GetTempSymbol(StringPref); 246 } 247 248 MCSymbol *DwarfFile::getStringPoolEntry(StringRef Str) { 249 std::pair<MCSymbol *, unsigned> &Entry = 250 StringPool.GetOrCreateValue(Str).getValue(); 251 if (Entry.first) 252 return Entry.first; 253 254 Entry.second = NextStringPoolNumber++; 255 return Entry.first = Asm->GetTempSymbol(StringPref, Entry.second); 256 } 257 258 unsigned DwarfFile::getStringPoolIndex(StringRef Str) { 259 std::pair<MCSymbol *, unsigned> &Entry = 260 StringPool.GetOrCreateValue(Str).getValue(); 261 if (Entry.first) 262 return Entry.second; 263 264 Entry.second = NextStringPoolNumber++; 265 Entry.first = Asm->GetTempSymbol(StringPref, Entry.second); 266 return Entry.second; 267 } 268 269 unsigned DwarfFile::getAddrPoolIndex(const MCSymbol *Sym, bool TLS) { 270 std::pair<AddrPool::iterator, bool> P = AddressPool.insert( 271 std::make_pair(Sym, AddressPoolEntry(NextAddrPoolNumber, TLS))); 272 if (P.second) 273 ++NextAddrPoolNumber; 274 return P.first->second.Number; 275 } 276 277 // Define a unique number for the abbreviation. 278 // 279 void DwarfFile::assignAbbrevNumber(DIEAbbrev &Abbrev) { 280 // Check the set for priors. 281 DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev); 282 283 // If it's newly added. 284 if (InSet == &Abbrev) { 285 // Add to abbreviation list. 286 Abbreviations.push_back(&Abbrev); 287 288 // Assign the vector position + 1 as its number. 289 Abbrev.setNumber(Abbreviations.size()); 290 } else { 291 // Assign existing abbreviation number. 292 Abbrev.setNumber(InSet->getNumber()); 293 } 294 } 295 296 static bool isObjCClass(StringRef Name) { 297 return Name.startswith("+") || Name.startswith("-"); 298 } 299 300 static bool hasObjCCategory(StringRef Name) { 301 if (!isObjCClass(Name)) 302 return false; 303 304 return Name.find(") ") != StringRef::npos; 305 } 306 307 static void getObjCClassCategory(StringRef In, StringRef &Class, 308 StringRef &Category) { 309 if (!hasObjCCategory(In)) { 310 Class = In.slice(In.find('[') + 1, In.find(' ')); 311 Category = ""; 312 return; 313 } 314 315 Class = In.slice(In.find('[') + 1, In.find('(')); 316 Category = In.slice(In.find('[') + 1, In.find(' ')); 317 return; 318 } 319 320 static StringRef getObjCMethodName(StringRef In) { 321 return In.slice(In.find(' ') + 1, In.find(']')); 322 } 323 324 // Helper for sorting sections into a stable output order. 325 static bool SectionSort(const MCSection *A, const MCSection *B) { 326 std::string LA = (A ? A->getLabelBeginName() : ""); 327 std::string LB = (B ? B->getLabelBeginName() : ""); 328 return LA < LB; 329 } 330 331 // Add the various names to the Dwarf accelerator table names. 332 // TODO: Determine whether or not we should add names for programs 333 // that do not have a DW_AT_name or DW_AT_linkage_name field - this 334 // is only slightly different than the lookup of non-standard ObjC names. 335 static void addSubprogramNames(DwarfUnit *TheU, DISubprogram SP, DIE *Die) { 336 if (!SP.isDefinition()) 337 return; 338 TheU->addAccelName(SP.getName(), Die); 339 340 // If the linkage name is different than the name, go ahead and output 341 // that as well into the name table. 342 if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName()) 343 TheU->addAccelName(SP.getLinkageName(), Die); 344 345 // If this is an Objective-C selector name add it to the ObjC accelerator 346 // too. 347 if (isObjCClass(SP.getName())) { 348 StringRef Class, Category; 349 getObjCClassCategory(SP.getName(), Class, Category); 350 TheU->addAccelObjC(Class, Die); 351 if (Category != "") 352 TheU->addAccelObjC(Category, Die); 353 // Also add the base method name to the name table. 354 TheU->addAccelName(getObjCMethodName(SP.getName()), Die); 355 } 356 } 357 358 /// isSubprogramContext - Return true if Context is either a subprogram 359 /// or another context nested inside a subprogram. 360 bool DwarfDebug::isSubprogramContext(const MDNode *Context) { 361 if (!Context) 362 return false; 363 DIDescriptor D(Context); 364 if (D.isSubprogram()) 365 return true; 366 if (D.isType()) 367 return isSubprogramContext(resolve(DIType(Context).getContext())); 368 return false; 369 } 370 371 // Find DIE for the given subprogram and attach appropriate DW_AT_low_pc 372 // and DW_AT_high_pc attributes. If there are global variables in this 373 // scope then create and insert DIEs for these variables. 374 DIE *DwarfDebug::updateSubprogramScopeDIE(DwarfCompileUnit *SPCU, 375 DISubprogram SP) { 376 DIE *SPDie = SPCU->getDIE(SP); 377 378 assert(SPDie && "Unable to find subprogram DIE!"); 379 380 // If we're updating an abstract DIE, then we will be adding the children and 381 // object pointer later on. But what we don't want to do is process the 382 // concrete DIE twice. 383 if (DIE *AbsSPDIE = AbstractSPDies.lookup(SP)) { 384 // Pick up abstract subprogram DIE. 385 SPDie = 386 SPCU->createAndAddDIE(dwarf::DW_TAG_subprogram, *SPCU->getUnitDie()); 387 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin, AbsSPDIE); 388 } else { 389 DISubprogram SPDecl = SP.getFunctionDeclaration(); 390 if (!SPDecl.isSubprogram()) { 391 // There is not any need to generate specification DIE for a function 392 // defined at compile unit level. If a function is defined inside another 393 // function then gdb prefers the definition at top level and but does not 394 // expect specification DIE in parent function. So avoid creating 395 // specification DIE for a function defined inside a function. 396 DIScope SPContext = resolve(SP.getContext()); 397 if (SP.isDefinition() && !SPContext.isCompileUnit() && 398 !SPContext.isFile() && !isSubprogramContext(SPContext)) { 399 SPCU->addFlag(SPDie, dwarf::DW_AT_declaration); 400 401 // Add arguments. 402 DICompositeType SPTy = SP.getType(); 403 DIArray Args = SPTy.getTypeArray(); 404 uint16_t SPTag = SPTy.getTag(); 405 if (SPTag == dwarf::DW_TAG_subroutine_type) 406 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) { 407 DIE *Arg = 408 SPCU->createAndAddDIE(dwarf::DW_TAG_formal_parameter, *SPDie); 409 DIType ATy(Args.getElement(i)); 410 SPCU->addType(Arg, ATy); 411 if (ATy.isArtificial()) 412 SPCU->addFlag(Arg, dwarf::DW_AT_artificial); 413 if (ATy.isObjectPointer()) 414 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer, Arg); 415 } 416 DIE *SPDeclDie = SPDie; 417 SPDie = SPCU->createAndAddDIE(dwarf::DW_TAG_subprogram, 418 *SPCU->getUnitDie()); 419 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, SPDeclDie); 420 } 421 } 422 } 423 424 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_low_pc, FunctionBeginSym); 425 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_high_pc, FunctionEndSym); 426 427 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo(); 428 MachineLocation Location(RI->getFrameRegister(*Asm->MF)); 429 SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location); 430 431 // Add name to the name table, we do this here because we're guaranteed 432 // to have concrete versions of our DW_TAG_subprogram nodes. 433 addSubprogramNames(SPCU, SP, SPDie); 434 435 return SPDie; 436 } 437 438 /// Check whether we should create a DIE for the given Scope, return true 439 /// if we don't create a DIE (the corresponding DIE is null). 440 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) { 441 if (Scope->isAbstractScope()) 442 return false; 443 444 // We don't create a DIE if there is no Range. 445 const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges(); 446 if (Ranges.empty()) 447 return true; 448 449 if (Ranges.size() > 1) 450 return false; 451 452 // We don't create a DIE if we have a single Range and the end label 453 // is null. 454 SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin(); 455 MCSymbol *End = getLabelAfterInsn(RI->second); 456 return !End; 457 } 458 459 static void addSectionLabel(AsmPrinter *Asm, DwarfUnit *U, DIE *D, 460 dwarf::Attribute A, const MCSymbol *L, 461 const MCSymbol *Sec) { 462 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) 463 U->addSectionLabel(D, A, L); 464 else 465 U->addSectionDelta(D, A, L, Sec); 466 } 467 468 void DwarfDebug::addScopeRangeList(DwarfCompileUnit *TheCU, DIE *ScopeDIE, 469 const SmallVectorImpl<InsnRange> &Range) { 470 // Emit offset in .debug_range as a relocatable label. emitDIE will handle 471 // emitting it appropriately. 472 MCSymbol *RangeSym = Asm->GetTempSymbol("debug_ranges", GlobalRangeCount++); 473 addSectionLabel(Asm, TheCU, ScopeDIE, dwarf::DW_AT_ranges, RangeSym, 474 DwarfDebugRangeSectionSym); 475 476 RangeSpanList List(RangeSym); 477 for (SmallVectorImpl<InsnRange>::const_iterator RI = Range.begin(), 478 RE = Range.end(); 479 RI != RE; ++RI) { 480 RangeSpan Span(getLabelBeforeInsn(RI->first), 481 getLabelAfterInsn(RI->second)); 482 List.addRange(llvm_move(Span)); 483 } 484 485 // Add the range list to the set of ranges to be emitted. 486 TheCU->addRangeList(llvm_move(List)); 487 } 488 489 // Construct new DW_TAG_lexical_block for this scope and attach 490 // DW_AT_low_pc/DW_AT_high_pc labels. 491 DIE *DwarfDebug::constructLexicalScopeDIE(DwarfCompileUnit *TheCU, 492 LexicalScope *Scope) { 493 if (isLexicalScopeDIENull(Scope)) 494 return 0; 495 496 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block); 497 if (Scope->isAbstractScope()) 498 return ScopeDIE; 499 500 const SmallVectorImpl<InsnRange> &ScopeRanges = Scope->getRanges(); 501 502 // If we have multiple ranges, emit them into the range section. 503 if (ScopeRanges.size() > 1) { 504 addScopeRangeList(TheCU, ScopeDIE, ScopeRanges); 505 return ScopeDIE; 506 } 507 508 // Construct the address range for this DIE. 509 SmallVectorImpl<InsnRange>::const_iterator RI = ScopeRanges.begin(); 510 MCSymbol *Start = getLabelBeforeInsn(RI->first); 511 MCSymbol *End = getLabelAfterInsn(RI->second); 512 assert(End && "End label should not be null!"); 513 514 assert(Start->isDefined() && "Invalid starting label for an inlined scope!"); 515 assert(End->isDefined() && "Invalid end label for an inlined scope!"); 516 517 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, Start); 518 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, End); 519 520 return ScopeDIE; 521 } 522 523 // This scope represents inlined body of a function. Construct DIE to 524 // represent this concrete inlined copy of the function. 525 DIE *DwarfDebug::constructInlinedScopeDIE(DwarfCompileUnit *TheCU, 526 LexicalScope *Scope) { 527 const SmallVectorImpl<InsnRange> &ScopeRanges = Scope->getRanges(); 528 assert(!ScopeRanges.empty() && 529 "LexicalScope does not have instruction markers!"); 530 531 if (!Scope->getScopeNode()) 532 return NULL; 533 DIScope DS(Scope->getScopeNode()); 534 DISubprogram InlinedSP = getDISubprogram(DS); 535 DIE *OriginDIE = TheCU->getDIE(InlinedSP); 536 if (!OriginDIE) { 537 DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram."); 538 return NULL; 539 } 540 541 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine); 542 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin, OriginDIE); 543 544 // If we have multiple ranges, emit them into the range section. 545 if (ScopeRanges.size() > 1) 546 addScopeRangeList(TheCU, ScopeDIE, ScopeRanges); 547 else { 548 SmallVectorImpl<InsnRange>::const_iterator RI = ScopeRanges.begin(); 549 MCSymbol *StartLabel = getLabelBeforeInsn(RI->first); 550 MCSymbol *EndLabel = getLabelAfterInsn(RI->second); 551 552 if (StartLabel == 0 || EndLabel == 0) 553 llvm_unreachable("Unexpected Start and End labels for an inlined scope!"); 554 555 assert(StartLabel->isDefined() && 556 "Invalid starting label for an inlined scope!"); 557 assert(EndLabel->isDefined() && "Invalid end label for an inlined scope!"); 558 559 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, StartLabel); 560 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, EndLabel); 561 } 562 563 InlinedSubprogramDIEs.insert(OriginDIE); 564 565 // Add the call site information to the DIE. 566 DILocation DL(Scope->getInlinedAt()); 567 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, None, 568 getOrCreateSourceID(DL.getFilename(), DL.getDirectory(), 569 TheCU->getUniqueID())); 570 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, None, DL.getLineNumber()); 571 572 // Add name to the name table, we do this here because we're guaranteed 573 // to have concrete versions of our DW_TAG_inlined_subprogram nodes. 574 addSubprogramNames(TheCU, InlinedSP, ScopeDIE); 575 576 return ScopeDIE; 577 } 578 579 DIE *DwarfDebug::createScopeChildrenDIE(DwarfCompileUnit *TheCU, 580 LexicalScope *Scope, 581 SmallVectorImpl<DIE *> &Children) { 582 DIE *ObjectPointer = NULL; 583 584 // Collect arguments for current function. 585 if (LScopes.isCurrentFunctionScope(Scope)) 586 for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i) 587 if (DbgVariable *ArgDV = CurrentFnArguments[i]) 588 if (DIE *Arg = 589 TheCU->constructVariableDIE(*ArgDV, Scope->isAbstractScope())) { 590 Children.push_back(Arg); 591 if (ArgDV->isObjectPointer()) 592 ObjectPointer = Arg; 593 } 594 595 // Collect lexical scope children first. 596 const SmallVectorImpl<DbgVariable *> &Variables = 597 ScopeVariables.lookup(Scope); 598 for (unsigned i = 0, N = Variables.size(); i < N; ++i) 599 if (DIE *Variable = TheCU->constructVariableDIE(*Variables[i], 600 Scope->isAbstractScope())) { 601 Children.push_back(Variable); 602 if (Variables[i]->isObjectPointer()) 603 ObjectPointer = Variable; 604 } 605 const SmallVectorImpl<LexicalScope *> &Scopes = Scope->getChildren(); 606 for (unsigned j = 0, M = Scopes.size(); j < M; ++j) 607 if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j])) 608 Children.push_back(Nested); 609 return ObjectPointer; 610 } 611 612 // Construct a DIE for this scope. 613 DIE *DwarfDebug::constructScopeDIE(DwarfCompileUnit *TheCU, 614 LexicalScope *Scope) { 615 if (!Scope || !Scope->getScopeNode()) 616 return NULL; 617 618 DIScope DS(Scope->getScopeNode()); 619 620 SmallVector<DIE *, 8> Children; 621 DIE *ObjectPointer = NULL; 622 bool ChildrenCreated = false; 623 624 // We try to create the scope DIE first, then the children DIEs. This will 625 // avoid creating un-used children then removing them later when we find out 626 // the scope DIE is null. 627 DIE *ScopeDIE = NULL; 628 if (Scope->getInlinedAt()) 629 ScopeDIE = constructInlinedScopeDIE(TheCU, Scope); 630 else if (DS.isSubprogram()) { 631 ProcessedSPNodes.insert(DS); 632 if (Scope->isAbstractScope()) { 633 ScopeDIE = TheCU->getDIE(DS); 634 // Note down abstract DIE. 635 if (ScopeDIE) 636 AbstractSPDies.insert(std::make_pair(DS, ScopeDIE)); 637 } else 638 ScopeDIE = updateSubprogramScopeDIE(TheCU, DISubprogram(DS)); 639 } else { 640 // Early exit when we know the scope DIE is going to be null. 641 if (isLexicalScopeDIENull(Scope)) 642 return NULL; 643 644 // We create children here when we know the scope DIE is not going to be 645 // null and the children will be added to the scope DIE. 646 ObjectPointer = createScopeChildrenDIE(TheCU, Scope, Children); 647 ChildrenCreated = true; 648 649 // There is no need to emit empty lexical block DIE. 650 std::pair<ImportedEntityMap::const_iterator, 651 ImportedEntityMap::const_iterator> Range = 652 std::equal_range( 653 ScopesWithImportedEntities.begin(), 654 ScopesWithImportedEntities.end(), 655 std::pair<const MDNode *, const MDNode *>(DS, (const MDNode *)0), 656 less_first()); 657 if (Children.empty() && Range.first == Range.second) 658 return NULL; 659 ScopeDIE = constructLexicalScopeDIE(TheCU, Scope); 660 assert(ScopeDIE && "Scope DIE should not be null."); 661 for (ImportedEntityMap::const_iterator i = Range.first; i != Range.second; 662 ++i) 663 constructImportedEntityDIE(TheCU, i->second, ScopeDIE); 664 } 665 666 if (!ScopeDIE) { 667 assert(Children.empty() && 668 "We create children only when the scope DIE is not null."); 669 return NULL; 670 } 671 if (!ChildrenCreated) 672 // We create children when the scope DIE is not null. 673 ObjectPointer = createScopeChildrenDIE(TheCU, Scope, Children); 674 675 // Add children 676 for (SmallVectorImpl<DIE *>::iterator I = Children.begin(), 677 E = Children.end(); 678 I != E; ++I) 679 ScopeDIE->addChild(*I); 680 681 if (DS.isSubprogram() && ObjectPointer != NULL) 682 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer, ObjectPointer); 683 684 return ScopeDIE; 685 } 686 687 // Look up the source id with the given directory and source file names. 688 // If none currently exists, create a new id and insert it in the 689 // SourceIds map. This can update DirectoryNames and SourceFileNames maps 690 // as well. 691 unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName, StringRef DirName, 692 unsigned CUID) { 693 // If we print assembly, we can't separate .file entries according to 694 // compile units. Thus all files will belong to the default compile unit. 695 696 // FIXME: add a better feature test than hasRawTextSupport. Even better, 697 // extend .file to support this. 698 if (Asm->OutStreamer.hasRawTextSupport()) 699 CUID = 0; 700 701 // If FE did not provide a file name, then assume stdin. 702 if (FileName.empty()) 703 return getOrCreateSourceID("<stdin>", StringRef(), CUID); 704 705 // TODO: this might not belong here. See if we can factor this better. 706 if (DirName == CompilationDir) 707 DirName = ""; 708 709 // FileIDCUMap stores the current ID for the given compile unit. 710 unsigned SrcId = FileIDCUMap[CUID] + 1; 711 712 // We look up the CUID/file/dir by concatenating them with a zero byte. 713 SmallString<128> NamePair; 714 NamePair += utostr(CUID); 715 NamePair += '\0'; 716 NamePair += DirName; 717 NamePair += '\0'; // Zero bytes are not allowed in paths. 718 NamePair += FileName; 719 720 StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId); 721 if (Ent.getValue() != SrcId) 722 return Ent.getValue(); 723 724 FileIDCUMap[CUID] = SrcId; 725 // Print out a .file directive to specify files for .loc directives. 726 Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName, CUID); 727 728 return SrcId; 729 } 730 731 void DwarfDebug::addGnuPubAttributes(DwarfUnit *U, DIE *D) const { 732 if (!GenerateGnuPubSections) 733 return; 734 735 addSectionLabel(Asm, U, D, dwarf::DW_AT_GNU_pubnames, 736 Asm->GetTempSymbol("gnu_pubnames", U->getUniqueID()), 737 DwarfGnuPubNamesSectionSym); 738 739 addSectionLabel(Asm, U, D, dwarf::DW_AT_GNU_pubtypes, 740 Asm->GetTempSymbol("gnu_pubtypes", U->getUniqueID()), 741 DwarfGnuPubTypesSectionSym); 742 } 743 744 // Create new DwarfCompileUnit for the given metadata node with tag 745 // DW_TAG_compile_unit. 746 DwarfCompileUnit *DwarfDebug::constructDwarfCompileUnit(DICompileUnit DIUnit) { 747 StringRef FN = DIUnit.getFilename(); 748 CompilationDir = DIUnit.getDirectory(); 749 750 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit); 751 DwarfCompileUnit *NewCU = new DwarfCompileUnit( 752 InfoHolder.getUnits().size(), Die, DIUnit, Asm, this, &InfoHolder); 753 InfoHolder.addUnit(NewCU); 754 755 FileIDCUMap[NewCU->getUniqueID()] = 0; 756 757 NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer()); 758 NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2, 759 DIUnit.getLanguage()); 760 NewCU->addString(Die, dwarf::DW_AT_name, FN); 761 762 763 if (!useSplitDwarf()) { 764 NewCU->initStmtList(DwarfLineSectionSym); 765 766 // If we're using split dwarf the compilation dir is going to be in the 767 // skeleton CU and so we don't need to duplicate it here. 768 if (!CompilationDir.empty()) 769 NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); 770 771 addGnuPubAttributes(NewCU, Die); 772 } 773 774 if (DIUnit.isOptimized()) 775 NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized); 776 777 StringRef Flags = DIUnit.getFlags(); 778 if (!Flags.empty()) 779 NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags); 780 781 if (unsigned RVer = DIUnit.getRunTimeVersion()) 782 NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers, 783 dwarf::DW_FORM_data1, RVer); 784 785 if (!FirstCU) 786 FirstCU = NewCU; 787 788 if (useSplitDwarf()) { 789 NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoDWOSection(), 790 DwarfInfoDWOSectionSym); 791 NewCU->setSkeleton(constructSkeletonCU(NewCU)); 792 } else 793 NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoSection(), 794 DwarfInfoSectionSym); 795 796 CUMap.insert(std::make_pair(DIUnit, NewCU)); 797 CUDieMap.insert(std::make_pair(Die, NewCU)); 798 return NewCU; 799 } 800 801 // Construct subprogram DIE. 802 void DwarfDebug::constructSubprogramDIE(DwarfCompileUnit *TheCU, 803 const MDNode *N) { 804 // FIXME: We should only call this routine once, however, during LTO if a 805 // program is defined in multiple CUs we could end up calling it out of 806 // beginModule as we walk the CUs. 807 808 DwarfCompileUnit *&CURef = SPMap[N]; 809 if (CURef) 810 return; 811 CURef = TheCU; 812 813 DISubprogram SP(N); 814 if (!SP.isDefinition()) 815 // This is a method declaration which will be handled while constructing 816 // class type. 817 return; 818 819 DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP); 820 821 // Expose as a global name. 822 TheCU->addGlobalName(SP.getName(), SubprogramDie, resolve(SP.getContext())); 823 } 824 825 void DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit *TheCU, 826 const MDNode *N) { 827 DIImportedEntity Module(N); 828 assert(Module.Verify()); 829 if (DIE *D = TheCU->getOrCreateContextDIE(Module.getContext())) 830 constructImportedEntityDIE(TheCU, Module, D); 831 } 832 833 void DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit *TheCU, 834 const MDNode *N, DIE *Context) { 835 DIImportedEntity Module(N); 836 assert(Module.Verify()); 837 return constructImportedEntityDIE(TheCU, Module, Context); 838 } 839 840 void DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit *TheCU, 841 const DIImportedEntity &Module, 842 DIE *Context) { 843 assert(Module.Verify() && 844 "Use one of the MDNode * overloads to handle invalid metadata"); 845 assert(Context && "Should always have a context for an imported_module"); 846 DIE *IMDie = new DIE(Module.getTag()); 847 TheCU->insertDIE(Module, IMDie); 848 DIE *EntityDie; 849 DIDescriptor Entity = Module.getEntity(); 850 if (Entity.isNameSpace()) 851 EntityDie = TheCU->getOrCreateNameSpace(DINameSpace(Entity)); 852 else if (Entity.isSubprogram()) 853 EntityDie = TheCU->getOrCreateSubprogramDIE(DISubprogram(Entity)); 854 else if (Entity.isType()) 855 EntityDie = TheCU->getOrCreateTypeDIE(DIType(Entity)); 856 else 857 EntityDie = TheCU->getDIE(Entity); 858 unsigned FileID = getOrCreateSourceID(Module.getContext().getFilename(), 859 Module.getContext().getDirectory(), 860 TheCU->getUniqueID()); 861 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_file, None, FileID); 862 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_line, None, Module.getLineNumber()); 863 TheCU->addDIEEntry(IMDie, dwarf::DW_AT_import, EntityDie); 864 StringRef Name = Module.getName(); 865 if (!Name.empty()) 866 TheCU->addString(IMDie, dwarf::DW_AT_name, Name); 867 Context->addChild(IMDie); 868 } 869 870 // Emit all Dwarf sections that should come prior to the content. Create 871 // global DIEs and emit initial debug info sections. This is invoked by 872 // the target AsmPrinter. 873 void DwarfDebug::beginModule() { 874 if (DisableDebugInfoPrinting) 875 return; 876 877 const Module *M = MMI->getModule(); 878 879 // If module has named metadata anchors then use them, otherwise scan the 880 // module using debug info finder to collect debug info. 881 NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu"); 882 if (!CU_Nodes) 883 return; 884 TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes); 885 886 // Emit initial sections so we can reference labels later. 887 emitSectionLabels(); 888 889 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) { 890 DICompileUnit CUNode(CU_Nodes->getOperand(i)); 891 DwarfCompileUnit *CU = constructDwarfCompileUnit(CUNode); 892 DIArray ImportedEntities = CUNode.getImportedEntities(); 893 for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i) 894 ScopesWithImportedEntities.push_back(std::make_pair( 895 DIImportedEntity(ImportedEntities.getElement(i)).getContext(), 896 ImportedEntities.getElement(i))); 897 std::sort(ScopesWithImportedEntities.begin(), 898 ScopesWithImportedEntities.end(), less_first()); 899 DIArray GVs = CUNode.getGlobalVariables(); 900 for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) 901 CU->createGlobalVariableDIE(DIGlobalVariable(GVs.getElement(i))); 902 DIArray SPs = CUNode.getSubprograms(); 903 for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i) 904 constructSubprogramDIE(CU, SPs.getElement(i)); 905 DIArray EnumTypes = CUNode.getEnumTypes(); 906 for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i) 907 CU->getOrCreateTypeDIE(EnumTypes.getElement(i)); 908 DIArray RetainedTypes = CUNode.getRetainedTypes(); 909 for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i) 910 CU->getOrCreateTypeDIE(RetainedTypes.getElement(i)); 911 // Emit imported_modules last so that the relevant context is already 912 // available. 913 for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i) 914 constructImportedEntityDIE(CU, ImportedEntities.getElement(i)); 915 } 916 917 // Tell MMI that we have debug info. 918 MMI->setDebugInfoAvailability(true); 919 920 // Prime section data. 921 SectionMap[Asm->getObjFileLowering().getTextSection()]; 922 } 923 924 // Attach DW_AT_inline attribute with inlined subprogram DIEs. 925 void DwarfDebug::computeInlinedDIEs() { 926 // Attach DW_AT_inline attribute with inlined subprogram DIEs. 927 for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(), 928 AE = InlinedSubprogramDIEs.end(); 929 AI != AE; ++AI) { 930 DIE *ISP = *AI; 931 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined); 932 } 933 for (DenseMap<const MDNode *, DIE *>::iterator AI = AbstractSPDies.begin(), 934 AE = AbstractSPDies.end(); 935 AI != AE; ++AI) { 936 DIE *ISP = AI->second; 937 if (InlinedSubprogramDIEs.count(ISP)) 938 continue; 939 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined); 940 } 941 } 942 943 // Collect info for variables that were optimized out. 944 void DwarfDebug::collectDeadVariables() { 945 const Module *M = MMI->getModule(); 946 947 if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) { 948 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) { 949 DICompileUnit TheCU(CU_Nodes->getOperand(i)); 950 DIArray Subprograms = TheCU.getSubprograms(); 951 for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) { 952 DISubprogram SP(Subprograms.getElement(i)); 953 if (ProcessedSPNodes.count(SP) != 0) 954 continue; 955 if (!SP.isSubprogram()) 956 continue; 957 if (!SP.isDefinition()) 958 continue; 959 DIArray Variables = SP.getVariables(); 960 if (Variables.getNumElements() == 0) 961 continue; 962 963 // Construct subprogram DIE and add variables DIEs. 964 DwarfCompileUnit *SPCU = 965 static_cast<DwarfCompileUnit *>(CUMap.lookup(TheCU)); 966 assert(SPCU && "Unable to find Compile Unit!"); 967 // FIXME: See the comment in constructSubprogramDIE about duplicate 968 // subprogram DIEs. 969 constructSubprogramDIE(SPCU, SP); 970 DIE *SPDIE = SPCU->getDIE(SP); 971 for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) { 972 DIVariable DV(Variables.getElement(vi)); 973 if (!DV.isVariable()) 974 continue; 975 DbgVariable NewVar(DV, NULL, this); 976 if (DIE *VariableDIE = SPCU->constructVariableDIE(NewVar, false)) 977 SPDIE->addChild(VariableDIE); 978 } 979 } 980 } 981 } 982 } 983 984 void DwarfDebug::finalizeModuleInfo() { 985 // Collect info for variables that were optimized out. 986 collectDeadVariables(); 987 988 // Attach DW_AT_inline attribute with inlined subprogram DIEs. 989 computeInlinedDIEs(); 990 991 // Handle anything that needs to be done on a per-unit basis after 992 // all other generation. 993 for (SmallVectorImpl<DwarfUnit *>::const_iterator I = getUnits().begin(), 994 E = getUnits().end(); 995 I != E; ++I) { 996 DwarfUnit *TheU = *I; 997 // Emit DW_AT_containing_type attribute to connect types with their 998 // vtable holding type. 999 TheU->constructContainingTypeDIEs(); 1000 1001 // Add CU specific attributes if we need to add any. 1002 if (TheU->getUnitDie()->getTag() == dwarf::DW_TAG_compile_unit) { 1003 // If we're splitting the dwarf out now that we've got the entire 1004 // CU then add the dwo id to it. 1005 DwarfCompileUnit *SkCU = 1006 static_cast<DwarfCompileUnit *>(TheU->getSkeleton()); 1007 if (useSplitDwarf()) { 1008 // This should be a unique identifier when we want to build .dwp files. 1009 uint64_t ID = 0; 1010 if (GenerateCUHash) { 1011 DIEHash CUHash(Asm); 1012 ID = CUHash.computeCUSignature(*TheU->getUnitDie()); 1013 } 1014 TheU->addUInt(TheU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id, 1015 dwarf::DW_FORM_data8, ID); 1016 SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id, 1017 dwarf::DW_FORM_data8, ID); 1018 } 1019 1020 // If we have code split among multiple sections or we've requested 1021 // it then emit a DW_AT_ranges attribute on the unit that will remain 1022 // in the .o file, otherwise add a DW_AT_low_pc. 1023 // FIXME: Also add a high pc if we can. 1024 // FIXME: We should use ranges if we have multiple compile units or 1025 // allow reordering of code ala .subsections_via_symbols in mach-o. 1026 DwarfCompileUnit *U = SkCU ? SkCU : static_cast<DwarfCompileUnit *>(TheU); 1027 if (useCURanges() && TheU->getRanges().size()) { 1028 addSectionLabel(Asm, U, U->getUnitDie(), dwarf::DW_AT_ranges, 1029 Asm->GetTempSymbol("cu_ranges", U->getUniqueID()), 1030 DwarfDebugRangeSectionSym); 1031 1032 // A DW_AT_low_pc attribute may also be specified in combination with 1033 // DW_AT_ranges to specify the default base address for use in location 1034 // lists (see Section 2.6.2) and range lists (see Section 2.17.3). 1035 U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 1036 0); 1037 } else 1038 U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 1039 0); 1040 } 1041 } 1042 1043 // Compute DIE offsets and sizes. 1044 InfoHolder.computeSizeAndOffsets(); 1045 if (useSplitDwarf()) 1046 SkeletonHolder.computeSizeAndOffsets(); 1047 } 1048 1049 void DwarfDebug::endSections() { 1050 // Filter labels by section. 1051 for (size_t n = 0; n < ArangeLabels.size(); n++) { 1052 const SymbolCU &SCU = ArangeLabels[n]; 1053 if (SCU.Sym->isInSection()) { 1054 // Make a note of this symbol and it's section. 1055 const MCSection *Section = &SCU.Sym->getSection(); 1056 if (!Section->getKind().isMetadata()) 1057 SectionMap[Section].push_back(SCU); 1058 } else { 1059 // Some symbols (e.g. common/bss on mach-o) can have no section but still 1060 // appear in the output. This sucks as we rely on sections to build 1061 // arange spans. We can do it without, but it's icky. 1062 SectionMap[NULL].push_back(SCU); 1063 } 1064 } 1065 1066 // Build a list of sections used. 1067 std::vector<const MCSection *> Sections; 1068 for (SectionMapType::iterator it = SectionMap.begin(); it != SectionMap.end(); 1069 it++) { 1070 const MCSection *Section = it->first; 1071 Sections.push_back(Section); 1072 } 1073 1074 // Sort the sections into order. 1075 // This is only done to ensure consistent output order across different runs. 1076 std::sort(Sections.begin(), Sections.end(), SectionSort); 1077 1078 // Add terminating symbols for each section. 1079 for (unsigned ID = 0; ID < Sections.size(); ID++) { 1080 const MCSection *Section = Sections[ID]; 1081 MCSymbol *Sym = NULL; 1082 1083 if (Section) { 1084 // We can't call MCSection::getLabelEndName, as it's only safe to do so 1085 // if we know the section name up-front. For user-created sections, the 1086 // resulting label may not be valid to use as a label. (section names can 1087 // use a greater set of characters on some systems) 1088 Sym = Asm->GetTempSymbol("debug_end", ID); 1089 Asm->OutStreamer.SwitchSection(Section); 1090 Asm->OutStreamer.EmitLabel(Sym); 1091 } 1092 1093 // Insert a final terminator. 1094 SectionMap[Section].push_back(SymbolCU(NULL, Sym)); 1095 } 1096 1097 // For now only turn on CU ranges if we've explicitly asked for it, 1098 // we have -ffunction-sections enabled, we've emitted a function 1099 // into a unique section, or we're using LTO. If we're using LTO then 1100 // we can't know that any particular function in the module is correlated 1101 // to a particular CU and so we need to be conservative. At this point all 1102 // sections should be finalized except for dwarf sections. 1103 HasCURanges = DwarfCURanges || UsedNonDefaultText || (CUMap.size() > 1) || 1104 TargetMachine::getFunctionSections(); 1105 } 1106 1107 // Emit all Dwarf sections that should come after the content. 1108 void DwarfDebug::endModule() { 1109 assert(CurFn == 0); 1110 assert(CurMI == 0); 1111 1112 if (!FirstCU) 1113 return; 1114 1115 // End any existing sections. 1116 // TODO: Does this need to happen? 1117 endSections(); 1118 1119 // Finalize the debug info for the module. 1120 finalizeModuleInfo(); 1121 1122 emitDebugStr(); 1123 1124 // Emit all the DIEs into a debug info section. 1125 emitDebugInfo(); 1126 1127 // Corresponding abbreviations into a abbrev section. 1128 emitAbbreviations(); 1129 1130 // Emit info into a debug loc section. 1131 emitDebugLoc(); 1132 1133 // Emit info into a debug aranges section. 1134 if (GenerateARangeSection) 1135 emitDebugARanges(); 1136 1137 // Emit info into a debug ranges section. 1138 emitDebugRanges(); 1139 1140 if (useSplitDwarf()) { 1141 emitDebugStrDWO(); 1142 emitDebugInfoDWO(); 1143 emitDebugAbbrevDWO(); 1144 // Emit DWO addresses. 1145 InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection()); 1146 } 1147 1148 // Emit info into the dwarf accelerator table sections. 1149 if (useDwarfAccelTables()) { 1150 emitAccelNames(); 1151 emitAccelObjC(); 1152 emitAccelNamespaces(); 1153 emitAccelTypes(); 1154 } 1155 1156 // Emit the pubnames and pubtypes sections if requested. 1157 if (HasDwarfPubSections) { 1158 emitDebugPubNames(GenerateGnuPubSections); 1159 emitDebugPubTypes(GenerateGnuPubSections); 1160 } 1161 1162 // clean up. 1163 SPMap.clear(); 1164 1165 // Reset these for the next Module if we have one. 1166 FirstCU = NULL; 1167 } 1168 1169 // Find abstract variable, if any, associated with Var. 1170 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV, 1171 DebugLoc ScopeLoc) { 1172 LLVMContext &Ctx = DV->getContext(); 1173 // More then one inlined variable corresponds to one abstract variable. 1174 DIVariable Var = cleanseInlinedVariable(DV, Ctx); 1175 DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var); 1176 if (AbsDbgVariable) 1177 return AbsDbgVariable; 1178 1179 LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx)); 1180 if (!Scope) 1181 return NULL; 1182 1183 AbsDbgVariable = new DbgVariable(Var, NULL, this); 1184 addScopeVariable(Scope, AbsDbgVariable); 1185 AbstractVariables[Var] = AbsDbgVariable; 1186 return AbsDbgVariable; 1187 } 1188 1189 // If Var is a current function argument then add it to CurrentFnArguments list. 1190 bool DwarfDebug::addCurrentFnArgument(DbgVariable *Var, LexicalScope *Scope) { 1191 if (!LScopes.isCurrentFunctionScope(Scope)) 1192 return false; 1193 DIVariable DV = Var->getVariable(); 1194 if (DV.getTag() != dwarf::DW_TAG_arg_variable) 1195 return false; 1196 unsigned ArgNo = DV.getArgNumber(); 1197 if (ArgNo == 0) 1198 return false; 1199 1200 size_t Size = CurrentFnArguments.size(); 1201 if (Size == 0) 1202 CurrentFnArguments.resize(CurFn->getFunction()->arg_size()); 1203 // llvm::Function argument size is not good indicator of how many 1204 // arguments does the function have at source level. 1205 if (ArgNo > Size) 1206 CurrentFnArguments.resize(ArgNo * 2); 1207 CurrentFnArguments[ArgNo - 1] = Var; 1208 return true; 1209 } 1210 1211 // Collect variable information from side table maintained by MMI. 1212 void DwarfDebug::collectVariableInfoFromMMITable( 1213 SmallPtrSet<const MDNode *, 16> &Processed) { 1214 MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo(); 1215 for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(), 1216 VE = VMap.end(); 1217 VI != VE; ++VI) { 1218 const MDNode *Var = VI->first; 1219 if (!Var) 1220 continue; 1221 Processed.insert(Var); 1222 DIVariable DV(Var); 1223 const std::pair<unsigned, DebugLoc> &VP = VI->second; 1224 1225 LexicalScope *Scope = LScopes.findLexicalScope(VP.second); 1226 1227 // If variable scope is not found then skip this variable. 1228 if (Scope == 0) 1229 continue; 1230 1231 DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second); 1232 DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable, this); 1233 RegVar->setFrameIndex(VP.first); 1234 if (!addCurrentFnArgument(RegVar, Scope)) 1235 addScopeVariable(Scope, RegVar); 1236 if (AbsDbgVariable) 1237 AbsDbgVariable->setFrameIndex(VP.first); 1238 } 1239 } 1240 1241 // Return true if debug value, encoded by DBG_VALUE instruction, is in a 1242 // defined reg. 1243 static bool isDbgValueInDefinedReg(const MachineInstr *MI) { 1244 assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!"); 1245 return MI->getNumOperands() == 3 && MI->getOperand(0).isReg() && 1246 MI->getOperand(0).getReg() && 1247 (MI->getOperand(1).isImm() || 1248 (MI->getOperand(1).isReg() && MI->getOperand(1).getReg() == 0U)); 1249 } 1250 1251 // Get .debug_loc entry for the instruction range starting at MI. 1252 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm, 1253 const MCSymbol *FLabel, 1254 const MCSymbol *SLabel, 1255 const MachineInstr *MI) { 1256 const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata(); 1257 1258 assert(MI->getNumOperands() == 3); 1259 if (MI->getOperand(0).isReg()) { 1260 MachineLocation MLoc; 1261 // If the second operand is an immediate, this is a 1262 // register-indirect address. 1263 if (!MI->getOperand(1).isImm()) 1264 MLoc.set(MI->getOperand(0).getReg()); 1265 else 1266 MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm()); 1267 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var); 1268 } 1269 if (MI->getOperand(0).isImm()) 1270 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm()); 1271 if (MI->getOperand(0).isFPImm()) 1272 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm()); 1273 if (MI->getOperand(0).isCImm()) 1274 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm()); 1275 1276 llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!"); 1277 } 1278 1279 // Find variables for each lexical scope. 1280 void 1281 DwarfDebug::collectVariableInfo(SmallPtrSet<const MDNode *, 16> &Processed) { 1282 1283 // Grab the variable info that was squirreled away in the MMI side-table. 1284 collectVariableInfoFromMMITable(Processed); 1285 1286 for (SmallVectorImpl<const MDNode *>::const_iterator 1287 UVI = UserVariables.begin(), 1288 UVE = UserVariables.end(); 1289 UVI != UVE; ++UVI) { 1290 const MDNode *Var = *UVI; 1291 if (Processed.count(Var)) 1292 continue; 1293 1294 // History contains relevant DBG_VALUE instructions for Var and instructions 1295 // clobbering it. 1296 SmallVectorImpl<const MachineInstr *> &History = DbgValues[Var]; 1297 if (History.empty()) 1298 continue; 1299 const MachineInstr *MInsn = History.front(); 1300 1301 DIVariable DV(Var); 1302 LexicalScope *Scope = NULL; 1303 if (DV.getTag() == dwarf::DW_TAG_arg_variable && 1304 DISubprogram(DV.getContext()).describes(CurFn->getFunction())) 1305 Scope = LScopes.getCurrentFunctionScope(); 1306 else if (MDNode *IA = DV.getInlinedAt()) 1307 Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA)); 1308 else 1309 Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1))); 1310 // If variable scope is not found then skip this variable. 1311 if (!Scope) 1312 continue; 1313 1314 Processed.insert(DV); 1315 assert(MInsn->isDebugValue() && "History must begin with debug value"); 1316 DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc()); 1317 DbgVariable *RegVar = new DbgVariable(DV, AbsVar, this); 1318 if (!addCurrentFnArgument(RegVar, Scope)) 1319 addScopeVariable(Scope, RegVar); 1320 if (AbsVar) 1321 AbsVar->setMInsn(MInsn); 1322 1323 // Simplify ranges that are fully coalesced. 1324 if (History.size() <= 1 || 1325 (History.size() == 2 && MInsn->isIdenticalTo(History.back()))) { 1326 RegVar->setMInsn(MInsn); 1327 continue; 1328 } 1329 1330 // Handle multiple DBG_VALUE instructions describing one variable. 1331 RegVar->setDotDebugLocOffset(DotDebugLocEntries.size()); 1332 1333 for (SmallVectorImpl<const MachineInstr *>::const_iterator 1334 HI = History.begin(), 1335 HE = History.end(); 1336 HI != HE; ++HI) { 1337 const MachineInstr *Begin = *HI; 1338 assert(Begin->isDebugValue() && "Invalid History entry"); 1339 1340 // Check if DBG_VALUE is truncating a range. 1341 if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg() && 1342 !Begin->getOperand(0).getReg()) 1343 continue; 1344 1345 // Compute the range for a register location. 1346 const MCSymbol *FLabel = getLabelBeforeInsn(Begin); 1347 const MCSymbol *SLabel = 0; 1348 1349 if (HI + 1 == HE) 1350 // If Begin is the last instruction in History then its value is valid 1351 // until the end of the function. 1352 SLabel = FunctionEndSym; 1353 else { 1354 const MachineInstr *End = HI[1]; 1355 DEBUG(dbgs() << "DotDebugLoc Pair:\n" 1356 << "\t" << *Begin << "\t" << *End << "\n"); 1357 if (End->isDebugValue()) 1358 SLabel = getLabelBeforeInsn(End); 1359 else { 1360 // End is a normal instruction clobbering the range. 1361 SLabel = getLabelAfterInsn(End); 1362 assert(SLabel && "Forgot label after clobber instruction"); 1363 ++HI; 1364 } 1365 } 1366 1367 // The value is valid until the next DBG_VALUE or clobber. 1368 DotDebugLocEntries.push_back( 1369 getDebugLocEntry(Asm, FLabel, SLabel, Begin)); 1370 } 1371 DotDebugLocEntries.push_back(DotDebugLocEntry()); 1372 } 1373 1374 // Collect info for variables that were optimized out. 1375 LexicalScope *FnScope = LScopes.getCurrentFunctionScope(); 1376 DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables(); 1377 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) { 1378 DIVariable DV(Variables.getElement(i)); 1379 if (!DV || !DV.isVariable() || !Processed.insert(DV)) 1380 continue; 1381 if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext())) 1382 addScopeVariable(Scope, new DbgVariable(DV, NULL, this)); 1383 } 1384 } 1385 1386 // Return Label preceding the instruction. 1387 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) { 1388 MCSymbol *Label = LabelsBeforeInsn.lookup(MI); 1389 assert(Label && "Didn't insert label before instruction"); 1390 return Label; 1391 } 1392 1393 // Return Label immediately following the instruction. 1394 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) { 1395 return LabelsAfterInsn.lookup(MI); 1396 } 1397 1398 // Process beginning of an instruction. 1399 void DwarfDebug::beginInstruction(const MachineInstr *MI) { 1400 assert(CurMI == 0); 1401 CurMI = MI; 1402 // Check if source location changes, but ignore DBG_VALUE locations. 1403 if (!MI->isDebugValue()) { 1404 DebugLoc DL = MI->getDebugLoc(); 1405 if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) { 1406 unsigned Flags = 0; 1407 PrevInstLoc = DL; 1408 if (DL == PrologEndLoc) { 1409 Flags |= DWARF2_FLAG_PROLOGUE_END; 1410 PrologEndLoc = DebugLoc(); 1411 } 1412 if (PrologEndLoc.isUnknown()) 1413 Flags |= DWARF2_FLAG_IS_STMT; 1414 1415 if (!DL.isUnknown()) { 1416 const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext()); 1417 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags); 1418 } else 1419 recordSourceLine(0, 0, 0, 0); 1420 } 1421 } 1422 1423 // Insert labels where requested. 1424 DenseMap<const MachineInstr *, MCSymbol *>::iterator I = 1425 LabelsBeforeInsn.find(MI); 1426 1427 // No label needed. 1428 if (I == LabelsBeforeInsn.end()) 1429 return; 1430 1431 // Label already assigned. 1432 if (I->second) 1433 return; 1434 1435 if (!PrevLabel) { 1436 PrevLabel = MMI->getContext().CreateTempSymbol(); 1437 Asm->OutStreamer.EmitLabel(PrevLabel); 1438 } 1439 I->second = PrevLabel; 1440 } 1441 1442 // Process end of an instruction. 1443 void DwarfDebug::endInstruction() { 1444 assert(CurMI != 0); 1445 // Don't create a new label after DBG_VALUE instructions. 1446 // They don't generate code. 1447 if (!CurMI->isDebugValue()) 1448 PrevLabel = 0; 1449 1450 DenseMap<const MachineInstr *, MCSymbol *>::iterator I = 1451 LabelsAfterInsn.find(CurMI); 1452 CurMI = 0; 1453 1454 // No label needed. 1455 if (I == LabelsAfterInsn.end()) 1456 return; 1457 1458 // Label already assigned. 1459 if (I->second) 1460 return; 1461 1462 // We need a label after this instruction. 1463 if (!PrevLabel) { 1464 PrevLabel = MMI->getContext().CreateTempSymbol(); 1465 Asm->OutStreamer.EmitLabel(PrevLabel); 1466 } 1467 I->second = PrevLabel; 1468 } 1469 1470 // Each LexicalScope has first instruction and last instruction to mark 1471 // beginning and end of a scope respectively. Create an inverse map that list 1472 // scopes starts (and ends) with an instruction. One instruction may start (or 1473 // end) multiple scopes. Ignore scopes that are not reachable. 1474 void DwarfDebug::identifyScopeMarkers() { 1475 SmallVector<LexicalScope *, 4> WorkList; 1476 WorkList.push_back(LScopes.getCurrentFunctionScope()); 1477 while (!WorkList.empty()) { 1478 LexicalScope *S = WorkList.pop_back_val(); 1479 1480 const SmallVectorImpl<LexicalScope *> &Children = S->getChildren(); 1481 if (!Children.empty()) 1482 for (SmallVectorImpl<LexicalScope *>::const_iterator 1483 SI = Children.begin(), 1484 SE = Children.end(); 1485 SI != SE; ++SI) 1486 WorkList.push_back(*SI); 1487 1488 if (S->isAbstractScope()) 1489 continue; 1490 1491 const SmallVectorImpl<InsnRange> &Ranges = S->getRanges(); 1492 if (Ranges.empty()) 1493 continue; 1494 for (SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin(), 1495 RE = Ranges.end(); 1496 RI != RE; ++RI) { 1497 assert(RI->first && "InsnRange does not have first instruction!"); 1498 assert(RI->second && "InsnRange does not have second instruction!"); 1499 requestLabelBeforeInsn(RI->first); 1500 requestLabelAfterInsn(RI->second); 1501 } 1502 } 1503 } 1504 1505 // Gather pre-function debug information. Assumes being called immediately 1506 // after the function entry point has been emitted. 1507 void DwarfDebug::beginFunction(const MachineFunction *MF) { 1508 CurFn = MF; 1509 1510 // If there's no debug info for the function we're not going to do anything. 1511 if (!MMI->hasDebugInfo()) 1512 return; 1513 1514 // Grab the lexical scopes for the function, if we don't have any of those 1515 // then we're not going to be able to do anything. 1516 LScopes.initialize(*MF); 1517 if (LScopes.empty()) 1518 return; 1519 1520 assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned"); 1521 1522 // Make sure that each lexical scope will have a begin/end label. 1523 identifyScopeMarkers(); 1524 1525 // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function 1526 // belongs to so that we add to the correct per-cu line table in the 1527 // non-asm case. 1528 LexicalScope *FnScope = LScopes.getCurrentFunctionScope(); 1529 DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode()); 1530 assert(TheCU && "Unable to find compile unit!"); 1531 if (Asm->OutStreamer.hasRawTextSupport()) 1532 // Use a single line table if we are generating assembly. 1533 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0); 1534 else 1535 Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID()); 1536 1537 // Check the current section against the standard text section. If different 1538 // keep track so that we will know when we're emitting functions into multiple 1539 // sections. 1540 if (Asm->getObjFileLowering().getTextSection() != Asm->getCurrentSection()) 1541 UsedNonDefaultText = true; 1542 1543 // Emit a label for the function so that we have a beginning address. 1544 FunctionBeginSym = Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber()); 1545 // Assumes in correct section after the entry point. 1546 Asm->OutStreamer.EmitLabel(FunctionBeginSym); 1547 1548 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo(); 1549 // LiveUserVar - Map physreg numbers to the MDNode they contain. 1550 std::vector<const MDNode *> LiveUserVar(TRI->getNumRegs()); 1551 1552 for (MachineFunction::const_iterator I = MF->begin(), E = MF->end(); I != E; 1553 ++I) { 1554 bool AtBlockEntry = true; 1555 for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end(); 1556 II != IE; ++II) { 1557 const MachineInstr *MI = II; 1558 1559 if (MI->isDebugValue()) { 1560 assert(MI->getNumOperands() > 1 && "Invalid machine instruction!"); 1561 1562 // Keep track of user variables. 1563 const MDNode *Var = 1564 MI->getOperand(MI->getNumOperands() - 1).getMetadata(); 1565 1566 // Variable is in a register, we need to check for clobbers. 1567 if (isDbgValueInDefinedReg(MI)) 1568 LiveUserVar[MI->getOperand(0).getReg()] = Var; 1569 1570 // Check the history of this variable. 1571 SmallVectorImpl<const MachineInstr *> &History = DbgValues[Var]; 1572 if (History.empty()) { 1573 UserVariables.push_back(Var); 1574 // The first mention of a function argument gets the FunctionBeginSym 1575 // label, so arguments are visible when breaking at function entry. 1576 DIVariable DV(Var); 1577 if (DV.isVariable() && DV.getTag() == dwarf::DW_TAG_arg_variable && 1578 getDISubprogram(DV.getContext()).describes(MF->getFunction())) 1579 LabelsBeforeInsn[MI] = FunctionBeginSym; 1580 } else { 1581 // We have seen this variable before. Try to coalesce DBG_VALUEs. 1582 const MachineInstr *Prev = History.back(); 1583 if (Prev->isDebugValue()) { 1584 // Coalesce identical entries at the end of History. 1585 if (History.size() >= 2 && 1586 Prev->isIdenticalTo(History[History.size() - 2])) { 1587 DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n" 1588 << "\t" << *Prev << "\t" 1589 << *History[History.size() - 2] << "\n"); 1590 History.pop_back(); 1591 } 1592 1593 // Terminate old register assignments that don't reach MI; 1594 MachineFunction::const_iterator PrevMBB = Prev->getParent(); 1595 if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) && 1596 isDbgValueInDefinedReg(Prev)) { 1597 // Previous register assignment needs to terminate at the end of 1598 // its basic block. 1599 MachineBasicBlock::const_iterator LastMI = 1600 PrevMBB->getLastNonDebugInstr(); 1601 if (LastMI == PrevMBB->end()) { 1602 // Drop DBG_VALUE for empty range. 1603 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n" 1604 << "\t" << *Prev << "\n"); 1605 History.pop_back(); 1606 } else if (llvm::next(PrevMBB) != PrevMBB->getParent()->end()) 1607 // Terminate after LastMI. 1608 History.push_back(LastMI); 1609 } 1610 } 1611 } 1612 History.push_back(MI); 1613 } else { 1614 // Not a DBG_VALUE instruction. 1615 if (!MI->isLabel()) 1616 AtBlockEntry = false; 1617 1618 // First known non-DBG_VALUE and non-frame setup location marks 1619 // the beginning of the function body. 1620 if (!MI->getFlag(MachineInstr::FrameSetup) && 1621 (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown())) 1622 PrologEndLoc = MI->getDebugLoc(); 1623 1624 // Check if the instruction clobbers any registers with debug vars. 1625 for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(), 1626 MOE = MI->operands_end(); 1627 MOI != MOE; ++MOI) { 1628 if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg()) 1629 continue; 1630 for (MCRegAliasIterator AI(MOI->getReg(), TRI, true); AI.isValid(); 1631 ++AI) { 1632 unsigned Reg = *AI; 1633 const MDNode *Var = LiveUserVar[Reg]; 1634 if (!Var) 1635 continue; 1636 // Reg is now clobbered. 1637 LiveUserVar[Reg] = 0; 1638 1639 // Was MD last defined by a DBG_VALUE referring to Reg? 1640 DbgValueHistoryMap::iterator HistI = DbgValues.find(Var); 1641 if (HistI == DbgValues.end()) 1642 continue; 1643 SmallVectorImpl<const MachineInstr *> &History = HistI->second; 1644 if (History.empty()) 1645 continue; 1646 const MachineInstr *Prev = History.back(); 1647 // Sanity-check: Register assignments are terminated at the end of 1648 // their block. 1649 if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent()) 1650 continue; 1651 // Is the variable still in Reg? 1652 if (!isDbgValueInDefinedReg(Prev) || 1653 Prev->getOperand(0).getReg() != Reg) 1654 continue; 1655 // Var is clobbered. Make sure the next instruction gets a label. 1656 History.push_back(MI); 1657 } 1658 } 1659 } 1660 } 1661 } 1662 1663 for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end(); 1664 I != E; ++I) { 1665 SmallVectorImpl<const MachineInstr *> &History = I->second; 1666 if (History.empty()) 1667 continue; 1668 1669 // Make sure the final register assignments are terminated. 1670 const MachineInstr *Prev = History.back(); 1671 if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) { 1672 const MachineBasicBlock *PrevMBB = Prev->getParent(); 1673 MachineBasicBlock::const_iterator LastMI = 1674 PrevMBB->getLastNonDebugInstr(); 1675 if (LastMI == PrevMBB->end()) 1676 // Drop DBG_VALUE for empty range. 1677 History.pop_back(); 1678 else if (PrevMBB != &PrevMBB->getParent()->back()) { 1679 // Terminate after LastMI. 1680 History.push_back(LastMI); 1681 } 1682 } 1683 // Request labels for the full history. 1684 for (unsigned i = 0, e = History.size(); i != e; ++i) { 1685 const MachineInstr *MI = History[i]; 1686 if (MI->isDebugValue()) 1687 requestLabelBeforeInsn(MI); 1688 else 1689 requestLabelAfterInsn(MI); 1690 } 1691 } 1692 1693 PrevInstLoc = DebugLoc(); 1694 PrevLabel = FunctionBeginSym; 1695 1696 // Record beginning of function. 1697 if (!PrologEndLoc.isUnknown()) { 1698 DebugLoc FnStartDL = 1699 PrologEndLoc.getFnDebugLoc(MF->getFunction()->getContext()); 1700 recordSourceLine( 1701 FnStartDL.getLine(), FnStartDL.getCol(), 1702 FnStartDL.getScope(MF->getFunction()->getContext()), 1703 // We'd like to list the prologue as "not statements" but GDB behaves 1704 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing. 1705 DWARF2_FLAG_IS_STMT); 1706 } 1707 } 1708 1709 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) { 1710 SmallVectorImpl<DbgVariable *> &Vars = ScopeVariables[LS]; 1711 DIVariable DV = Var->getVariable(); 1712 // Variables with positive arg numbers are parameters. 1713 if (unsigned ArgNum = DV.getArgNumber()) { 1714 // Keep all parameters in order at the start of the variable list to ensure 1715 // function types are correct (no out-of-order parameters) 1716 // 1717 // This could be improved by only doing it for optimized builds (unoptimized 1718 // builds have the right order to begin with), searching from the back (this 1719 // would catch the unoptimized case quickly), or doing a binary search 1720 // rather than linear search. 1721 SmallVectorImpl<DbgVariable *>::iterator I = Vars.begin(); 1722 while (I != Vars.end()) { 1723 unsigned CurNum = (*I)->getVariable().getArgNumber(); 1724 // A local (non-parameter) variable has been found, insert immediately 1725 // before it. 1726 if (CurNum == 0) 1727 break; 1728 // A later indexed parameter has been found, insert immediately before it. 1729 if (CurNum > ArgNum) 1730 break; 1731 ++I; 1732 } 1733 Vars.insert(I, Var); 1734 return; 1735 } 1736 1737 Vars.push_back(Var); 1738 } 1739 1740 // Gather and emit post-function debug information. 1741 void DwarfDebug::endFunction(const MachineFunction *MF) { 1742 // Every beginFunction(MF) call should be followed by an endFunction(MF) call, 1743 // though the beginFunction may not be called at all. 1744 // We should handle both cases. 1745 if (CurFn == 0) 1746 CurFn = MF; 1747 else 1748 assert(CurFn == MF); 1749 assert(CurFn != 0); 1750 1751 if (!MMI->hasDebugInfo() || LScopes.empty()) { 1752 CurFn = 0; 1753 return; 1754 } 1755 1756 // Define end label for subprogram. 1757 FunctionEndSym = Asm->GetTempSymbol("func_end", Asm->getFunctionNumber()); 1758 // Assumes in correct section after the entry point. 1759 Asm->OutStreamer.EmitLabel(FunctionEndSym); 1760 1761 // Set DwarfDwarfCompileUnitID in MCContext to default value. 1762 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0); 1763 1764 SmallPtrSet<const MDNode *, 16> ProcessedVars; 1765 collectVariableInfo(ProcessedVars); 1766 1767 LexicalScope *FnScope = LScopes.getCurrentFunctionScope(); 1768 DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode()); 1769 assert(TheCU && "Unable to find compile unit!"); 1770 1771 // Construct abstract scopes. 1772 ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList(); 1773 for (unsigned i = 0, e = AList.size(); i != e; ++i) { 1774 LexicalScope *AScope = AList[i]; 1775 DISubprogram SP(AScope->getScopeNode()); 1776 if (SP.isSubprogram()) { 1777 // Collect info for variables that were optimized out. 1778 DIArray Variables = SP.getVariables(); 1779 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) { 1780 DIVariable DV(Variables.getElement(i)); 1781 if (!DV || !DV.isVariable() || !ProcessedVars.insert(DV)) 1782 continue; 1783 // Check that DbgVariable for DV wasn't created earlier, when 1784 // findAbstractVariable() was called for inlined instance of DV. 1785 LLVMContext &Ctx = DV->getContext(); 1786 DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx); 1787 if (AbstractVariables.lookup(CleanDV)) 1788 continue; 1789 if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext())) 1790 addScopeVariable(Scope, new DbgVariable(DV, NULL, this)); 1791 } 1792 } 1793 if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0) 1794 constructScopeDIE(TheCU, AScope); 1795 } 1796 1797 DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope); 1798 if (!CurFn->getTarget().Options.DisableFramePointerElim(*CurFn)) 1799 TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr); 1800 1801 // Add the range of this function to the list of ranges for the CU. 1802 RangeSpan Span(FunctionBeginSym, FunctionEndSym); 1803 TheCU->addRange(llvm_move(Span)); 1804 1805 // Clear debug info 1806 for (ScopeVariablesMap::iterator I = ScopeVariables.begin(), 1807 E = ScopeVariables.end(); 1808 I != E; ++I) 1809 DeleteContainerPointers(I->second); 1810 ScopeVariables.clear(); 1811 DeleteContainerPointers(CurrentFnArguments); 1812 UserVariables.clear(); 1813 DbgValues.clear(); 1814 AbstractVariables.clear(); 1815 LabelsBeforeInsn.clear(); 1816 LabelsAfterInsn.clear(); 1817 PrevLabel = NULL; 1818 CurFn = 0; 1819 } 1820 1821 // Register a source line with debug info. Returns the unique label that was 1822 // emitted and which provides correspondence to the source line list. 1823 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S, 1824 unsigned Flags) { 1825 StringRef Fn; 1826 StringRef Dir; 1827 unsigned Src = 1; 1828 if (S) { 1829 DIDescriptor Scope(S); 1830 1831 if (Scope.isCompileUnit()) { 1832 DICompileUnit CU(S); 1833 Fn = CU.getFilename(); 1834 Dir = CU.getDirectory(); 1835 } else if (Scope.isFile()) { 1836 DIFile F(S); 1837 Fn = F.getFilename(); 1838 Dir = F.getDirectory(); 1839 } else if (Scope.isSubprogram()) { 1840 DISubprogram SP(S); 1841 Fn = SP.getFilename(); 1842 Dir = SP.getDirectory(); 1843 } else if (Scope.isLexicalBlockFile()) { 1844 DILexicalBlockFile DBF(S); 1845 Fn = DBF.getFilename(); 1846 Dir = DBF.getDirectory(); 1847 } else if (Scope.isLexicalBlock()) { 1848 DILexicalBlock DB(S); 1849 Fn = DB.getFilename(); 1850 Dir = DB.getDirectory(); 1851 } else 1852 llvm_unreachable("Unexpected scope info"); 1853 1854 Src = getOrCreateSourceID( 1855 Fn, Dir, Asm->OutStreamer.getContext().getDwarfCompileUnitID()); 1856 } 1857 Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn); 1858 } 1859 1860 //===----------------------------------------------------------------------===// 1861 // Emit Methods 1862 //===----------------------------------------------------------------------===// 1863 1864 // Compute the size and offset of a DIE. The offset is relative to start of the 1865 // CU. It returns the offset after laying out the DIE. 1866 unsigned DwarfFile::computeSizeAndOffset(DIE *Die, unsigned Offset) { 1867 // Get the children. 1868 const std::vector<DIE *> &Children = Die->getChildren(); 1869 1870 // Record the abbreviation. 1871 assignAbbrevNumber(Die->getAbbrev()); 1872 1873 // Get the abbreviation for this DIE. 1874 const DIEAbbrev &Abbrev = Die->getAbbrev(); 1875 1876 // Set DIE offset 1877 Die->setOffset(Offset); 1878 1879 // Start the size with the size of abbreviation code. 1880 Offset += getULEB128Size(Die->getAbbrevNumber()); 1881 1882 const SmallVectorImpl<DIEValue *> &Values = Die->getValues(); 1883 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData(); 1884 1885 // Size the DIE attribute values. 1886 for (unsigned i = 0, N = Values.size(); i < N; ++i) 1887 // Size attribute value. 1888 Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm()); 1889 1890 // Size the DIE children if any. 1891 if (!Children.empty()) { 1892 assert(Abbrev.getChildrenFlag() == dwarf::DW_CHILDREN_yes && 1893 "Children flag not set"); 1894 1895 for (unsigned j = 0, M = Children.size(); j < M; ++j) 1896 Offset = computeSizeAndOffset(Children[j], Offset); 1897 1898 // End of children marker. 1899 Offset += sizeof(int8_t); 1900 } 1901 1902 Die->setSize(Offset - Die->getOffset()); 1903 return Offset; 1904 } 1905 1906 // Compute the size and offset for each DIE. 1907 void DwarfFile::computeSizeAndOffsets() { 1908 // Offset from the first CU in the debug info section is 0 initially. 1909 unsigned SecOffset = 0; 1910 1911 // Iterate over each compile unit and set the size and offsets for each 1912 // DIE within each compile unit. All offsets are CU relative. 1913 for (SmallVectorImpl<DwarfUnit *>::const_iterator I = CUs.begin(), 1914 E = CUs.end(); 1915 I != E; ++I) { 1916 (*I)->setDebugInfoOffset(SecOffset); 1917 1918 // CU-relative offset is reset to 0 here. 1919 unsigned Offset = sizeof(int32_t) + // Length of Unit Info 1920 (*I)->getHeaderSize(); // Unit-specific headers 1921 1922 // EndOffset here is CU-relative, after laying out 1923 // all of the CU DIE. 1924 unsigned EndOffset = computeSizeAndOffset((*I)->getUnitDie(), Offset); 1925 SecOffset += EndOffset; 1926 } 1927 } 1928 1929 // Emit initial Dwarf sections with a label at the start of each one. 1930 void DwarfDebug::emitSectionLabels() { 1931 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering(); 1932 1933 // Dwarf sections base addresses. 1934 DwarfInfoSectionSym = 1935 emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info"); 1936 if (useSplitDwarf()) 1937 DwarfInfoDWOSectionSym = 1938 emitSectionSym(Asm, TLOF.getDwarfInfoDWOSection(), "section_info_dwo"); 1939 DwarfAbbrevSectionSym = 1940 emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev"); 1941 if (useSplitDwarf()) 1942 DwarfAbbrevDWOSectionSym = emitSectionSym( 1943 Asm, TLOF.getDwarfAbbrevDWOSection(), "section_abbrev_dwo"); 1944 emitSectionSym(Asm, TLOF.getDwarfARangesSection()); 1945 1946 DwarfLineSectionSym = 1947 emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line"); 1948 emitSectionSym(Asm, TLOF.getDwarfLocSection()); 1949 if (GenerateGnuPubSections) { 1950 DwarfGnuPubNamesSectionSym = 1951 emitSectionSym(Asm, TLOF.getDwarfGnuPubNamesSection()); 1952 DwarfGnuPubTypesSectionSym = 1953 emitSectionSym(Asm, TLOF.getDwarfGnuPubTypesSection()); 1954 } else if (HasDwarfPubSections) { 1955 emitSectionSym(Asm, TLOF.getDwarfPubNamesSection()); 1956 emitSectionSym(Asm, TLOF.getDwarfPubTypesSection()); 1957 } 1958 1959 DwarfStrSectionSym = 1960 emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string"); 1961 if (useSplitDwarf()) { 1962 DwarfStrDWOSectionSym = 1963 emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string"); 1964 DwarfAddrSectionSym = 1965 emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec"); 1966 } 1967 DwarfDebugRangeSectionSym = 1968 emitSectionSym(Asm, TLOF.getDwarfRangesSection(), "debug_range"); 1969 1970 DwarfDebugLocSectionSym = 1971 emitSectionSym(Asm, TLOF.getDwarfLocSection(), "section_debug_loc"); 1972 } 1973 1974 // Recursively emits a debug information entry. 1975 void DwarfDebug::emitDIE(DIE *Die) { 1976 // Get the abbreviation for this DIE. 1977 const DIEAbbrev &Abbrev = Die->getAbbrev(); 1978 1979 // Emit the code (index) for the abbreviation. 1980 if (Asm->isVerbose()) 1981 Asm->OutStreamer.AddComment("Abbrev [" + Twine(Abbrev.getNumber()) + 1982 "] 0x" + Twine::utohexstr(Die->getOffset()) + 1983 ":0x" + Twine::utohexstr(Die->getSize()) + " " + 1984 dwarf::TagString(Abbrev.getTag())); 1985 Asm->EmitULEB128(Abbrev.getNumber()); 1986 1987 const SmallVectorImpl<DIEValue *> &Values = Die->getValues(); 1988 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev.getData(); 1989 1990 // Emit the DIE attribute values. 1991 for (unsigned i = 0, N = Values.size(); i < N; ++i) { 1992 dwarf::Attribute Attr = AbbrevData[i].getAttribute(); 1993 dwarf::Form Form = AbbrevData[i].getForm(); 1994 assert(Form && "Too many attributes for DIE (check abbreviation)"); 1995 1996 if (Asm->isVerbose()) 1997 Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr)); 1998 1999 switch (Attr) { 2000 case dwarf::DW_AT_abstract_origin: 2001 case dwarf::DW_AT_type: 2002 case dwarf::DW_AT_friend: 2003 case dwarf::DW_AT_specification: 2004 case dwarf::DW_AT_import: 2005 case dwarf::DW_AT_containing_type: { 2006 DIEEntry *E = cast<DIEEntry>(Values[i]); 2007 DIE *Origin = E->getEntry(); 2008 unsigned Addr = Origin->getOffset(); 2009 if (Form == dwarf::DW_FORM_ref_addr) { 2010 assert(!useSplitDwarf() && "TODO: dwo files can't have relocations."); 2011 // For DW_FORM_ref_addr, output the offset from beginning of debug info 2012 // section. Origin->getOffset() returns the offset from start of the 2013 // compile unit. 2014 DwarfCompileUnit *CU = CUDieMap.lookup(Origin->getUnit()); 2015 assert(CU && "CUDie should belong to a CU."); 2016 Addr += CU->getDebugInfoOffset(); 2017 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) 2018 Asm->EmitLabelPlusOffset(CU->getSectionSym(), Addr, 2019 DIEEntry::getRefAddrSize(Asm)); 2020 else 2021 Asm->EmitLabelOffsetDifference(CU->getSectionSym(), Addr, 2022 CU->getSectionSym(), 2023 DIEEntry::getRefAddrSize(Asm)); 2024 } else { 2025 // Make sure Origin belong to the same CU. 2026 assert(Die->getUnit() == Origin->getUnit() && 2027 "The referenced DIE should belong to the same CU in ref4"); 2028 Asm->EmitInt32(Addr); 2029 } 2030 break; 2031 } 2032 case dwarf::DW_AT_location: { 2033 if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) { 2034 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) 2035 Asm->EmitSectionOffset(L->getValue(), DwarfDebugLocSectionSym); 2036 else 2037 Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4); 2038 } else { 2039 Values[i]->EmitValue(Asm, Form); 2040 } 2041 break; 2042 } 2043 case dwarf::DW_AT_accessibility: { 2044 if (Asm->isVerbose()) { 2045 DIEInteger *V = cast<DIEInteger>(Values[i]); 2046 Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue())); 2047 } 2048 Values[i]->EmitValue(Asm, Form); 2049 break; 2050 } 2051 default: 2052 // Emit an attribute using the defined form. 2053 Values[i]->EmitValue(Asm, Form); 2054 break; 2055 } 2056 } 2057 2058 // Emit the DIE children if any. 2059 if (Abbrev.getChildrenFlag() == dwarf::DW_CHILDREN_yes) { 2060 const std::vector<DIE *> &Children = Die->getChildren(); 2061 2062 for (unsigned j = 0, M = Children.size(); j < M; ++j) 2063 emitDIE(Children[j]); 2064 2065 Asm->OutStreamer.AddComment("End Of Children Mark"); 2066 Asm->EmitInt8(0); 2067 } 2068 } 2069 2070 // Emit the various dwarf units to the unit section USection with 2071 // the abbreviations going into ASection. 2072 void DwarfFile::emitUnits(DwarfDebug *DD, const MCSection *ASection, 2073 const MCSymbol *ASectionSym) { 2074 for (SmallVectorImpl<DwarfUnit *>::iterator I = CUs.begin(), E = CUs.end(); 2075 I != E; ++I) { 2076 DwarfUnit *TheU = *I; 2077 DIE *Die = TheU->getUnitDie(); 2078 const MCSection *USection = TheU->getSection(); 2079 Asm->OutStreamer.SwitchSection(USection); 2080 2081 // Emit the compile units header. 2082 Asm->OutStreamer.EmitLabel(TheU->getLabelBegin()); 2083 2084 // Emit size of content not including length itself 2085 Asm->OutStreamer.AddComment("Length of Unit"); 2086 Asm->EmitInt32(TheU->getHeaderSize() + Die->getSize()); 2087 2088 TheU->emitHeader(ASection, ASectionSym); 2089 2090 DD->emitDIE(Die); 2091 Asm->OutStreamer.EmitLabel(TheU->getLabelEnd()); 2092 } 2093 } 2094 2095 // Emit the debug info section. 2096 void DwarfDebug::emitDebugInfo() { 2097 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 2098 2099 Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfAbbrevSection(), 2100 DwarfAbbrevSectionSym); 2101 } 2102 2103 // Emit the abbreviation section. 2104 void DwarfDebug::emitAbbreviations() { 2105 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 2106 2107 Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection()); 2108 } 2109 2110 void DwarfFile::emitAbbrevs(const MCSection *Section) { 2111 // Check to see if it is worth the effort. 2112 if (!Abbreviations.empty()) { 2113 // Start the debug abbrev section. 2114 Asm->OutStreamer.SwitchSection(Section); 2115 2116 // For each abbrevation. 2117 for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) { 2118 // Get abbreviation data 2119 const DIEAbbrev *Abbrev = Abbreviations[i]; 2120 2121 // Emit the abbrevations code (base 1 index.) 2122 Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code"); 2123 2124 // Emit the abbreviations data. 2125 Abbrev->Emit(Asm); 2126 } 2127 2128 // Mark end of abbreviations. 2129 Asm->EmitULEB128(0, "EOM(3)"); 2130 } 2131 } 2132 2133 // Emit the last address of the section and the end of the line matrix. 2134 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) { 2135 // Define last address of section. 2136 Asm->OutStreamer.AddComment("Extended Op"); 2137 Asm->EmitInt8(0); 2138 2139 Asm->OutStreamer.AddComment("Op size"); 2140 Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1); 2141 Asm->OutStreamer.AddComment("DW_LNE_set_address"); 2142 Asm->EmitInt8(dwarf::DW_LNE_set_address); 2143 2144 Asm->OutStreamer.AddComment("Section end label"); 2145 2146 Asm->OutStreamer.EmitSymbolValue( 2147 Asm->GetTempSymbol("section_end", SectionEnd), 2148 Asm->getDataLayout().getPointerSize()); 2149 2150 // Mark end of matrix. 2151 Asm->OutStreamer.AddComment("DW_LNE_end_sequence"); 2152 Asm->EmitInt8(0); 2153 Asm->EmitInt8(1); 2154 Asm->EmitInt8(1); 2155 } 2156 2157 // Emit visible names into a hashed accelerator table section. 2158 void DwarfDebug::emitAccelNames() { 2159 DwarfAccelTable AT( 2160 DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)); 2161 for (SmallVectorImpl<DwarfUnit *>::const_iterator I = getUnits().begin(), 2162 E = getUnits().end(); 2163 I != E; ++I) { 2164 DwarfUnit *TheU = *I; 2165 const StringMap<std::vector<const DIE *> > &Names = TheU->getAccelNames(); 2166 for (StringMap<std::vector<const DIE *> >::const_iterator 2167 GI = Names.begin(), 2168 GE = Names.end(); 2169 GI != GE; ++GI) { 2170 StringRef Name = GI->getKey(); 2171 const std::vector<const DIE *> &Entities = GI->second; 2172 for (std::vector<const DIE *>::const_iterator DI = Entities.begin(), 2173 DE = Entities.end(); 2174 DI != DE; ++DI) 2175 AT.AddName(Name, *DI); 2176 } 2177 } 2178 2179 AT.FinalizeTable(Asm, "Names"); 2180 Asm->OutStreamer.SwitchSection( 2181 Asm->getObjFileLowering().getDwarfAccelNamesSection()); 2182 MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin"); 2183 Asm->OutStreamer.EmitLabel(SectionBegin); 2184 2185 // Emit the full data. 2186 AT.Emit(Asm, SectionBegin, &InfoHolder); 2187 } 2188 2189 // Emit objective C classes and categories into a hashed accelerator table 2190 // section. 2191 void DwarfDebug::emitAccelObjC() { 2192 DwarfAccelTable AT( 2193 DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)); 2194 for (SmallVectorImpl<DwarfUnit *>::const_iterator I = getUnits().begin(), 2195 E = getUnits().end(); 2196 I != E; ++I) { 2197 DwarfUnit *TheU = *I; 2198 const StringMap<std::vector<const DIE *> > &Names = TheU->getAccelObjC(); 2199 for (StringMap<std::vector<const DIE *> >::const_iterator 2200 GI = Names.begin(), 2201 GE = Names.end(); 2202 GI != GE; ++GI) { 2203 StringRef Name = GI->getKey(); 2204 const std::vector<const DIE *> &Entities = GI->second; 2205 for (std::vector<const DIE *>::const_iterator DI = Entities.begin(), 2206 DE = Entities.end(); 2207 DI != DE; ++DI) 2208 AT.AddName(Name, *DI); 2209 } 2210 } 2211 2212 AT.FinalizeTable(Asm, "ObjC"); 2213 Asm->OutStreamer.SwitchSection( 2214 Asm->getObjFileLowering().getDwarfAccelObjCSection()); 2215 MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin"); 2216 Asm->OutStreamer.EmitLabel(SectionBegin); 2217 2218 // Emit the full data. 2219 AT.Emit(Asm, SectionBegin, &InfoHolder); 2220 } 2221 2222 // Emit namespace dies into a hashed accelerator table. 2223 void DwarfDebug::emitAccelNamespaces() { 2224 DwarfAccelTable AT( 2225 DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)); 2226 for (SmallVectorImpl<DwarfUnit *>::const_iterator I = getUnits().begin(), 2227 E = getUnits().end(); 2228 I != E; ++I) { 2229 DwarfUnit *TheU = *I; 2230 const StringMap<std::vector<const DIE *> > &Names = 2231 TheU->getAccelNamespace(); 2232 for (StringMap<std::vector<const DIE *> >::const_iterator 2233 GI = Names.begin(), 2234 GE = Names.end(); 2235 GI != GE; ++GI) { 2236 StringRef Name = GI->getKey(); 2237 const std::vector<const DIE *> &Entities = GI->second; 2238 for (std::vector<const DIE *>::const_iterator DI = Entities.begin(), 2239 DE = Entities.end(); 2240 DI != DE; ++DI) 2241 AT.AddName(Name, *DI); 2242 } 2243 } 2244 2245 AT.FinalizeTable(Asm, "namespac"); 2246 Asm->OutStreamer.SwitchSection( 2247 Asm->getObjFileLowering().getDwarfAccelNamespaceSection()); 2248 MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin"); 2249 Asm->OutStreamer.EmitLabel(SectionBegin); 2250 2251 // Emit the full data. 2252 AT.Emit(Asm, SectionBegin, &InfoHolder); 2253 } 2254 2255 // Emit type dies into a hashed accelerator table. 2256 void DwarfDebug::emitAccelTypes() { 2257 std::vector<DwarfAccelTable::Atom> Atoms; 2258 Atoms.push_back( 2259 DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4)); 2260 Atoms.push_back( 2261 DwarfAccelTable::Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2)); 2262 Atoms.push_back( 2263 DwarfAccelTable::Atom(dwarf::DW_ATOM_type_flags, dwarf::DW_FORM_data1)); 2264 DwarfAccelTable AT(Atoms); 2265 for (SmallVectorImpl<DwarfUnit *>::const_iterator I = getUnits().begin(), 2266 E = getUnits().end(); 2267 I != E; ++I) { 2268 DwarfUnit *TheU = *I; 2269 const StringMap<std::vector<std::pair<const DIE *, unsigned> > > &Names = 2270 TheU->getAccelTypes(); 2271 for (StringMap< 2272 std::vector<std::pair<const DIE *, unsigned> > >::const_iterator 2273 GI = Names.begin(), 2274 GE = Names.end(); 2275 GI != GE; ++GI) { 2276 StringRef Name = GI->getKey(); 2277 const std::vector<std::pair<const DIE *, unsigned> > &Entities = 2278 GI->second; 2279 for (std::vector<std::pair<const DIE *, unsigned> >::const_iterator 2280 DI = Entities.begin(), 2281 DE = Entities.end(); 2282 DI != DE; ++DI) 2283 AT.AddName(Name, DI->first, DI->second); 2284 } 2285 } 2286 2287 AT.FinalizeTable(Asm, "types"); 2288 Asm->OutStreamer.SwitchSection( 2289 Asm->getObjFileLowering().getDwarfAccelTypesSection()); 2290 MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin"); 2291 Asm->OutStreamer.EmitLabel(SectionBegin); 2292 2293 // Emit the full data. 2294 AT.Emit(Asm, SectionBegin, &InfoHolder); 2295 } 2296 2297 // Public name handling. 2298 // The format for the various pubnames: 2299 // 2300 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU 2301 // for the DIE that is named. 2302 // 2303 // gnu pubnames - offset/index value/name tuples where the offset is the offset 2304 // into the CU and the index value is computed according to the type of value 2305 // for the DIE that is named. 2306 // 2307 // For type units the offset is the offset of the skeleton DIE. For split dwarf 2308 // it's the offset within the debug_info/debug_types dwo section, however, the 2309 // reference in the pubname header doesn't change. 2310 2311 /// computeIndexValue - Compute the gdb index value for the DIE and CU. 2312 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU, 2313 const DIE *Die) { 2314 dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC; 2315 2316 // We could have a specification DIE that has our most of our knowledge, 2317 // look for that now. 2318 DIEValue *SpecVal = Die->findAttribute(dwarf::DW_AT_specification); 2319 if (SpecVal) { 2320 DIE *SpecDIE = cast<DIEEntry>(SpecVal)->getEntry(); 2321 if (SpecDIE->findAttribute(dwarf::DW_AT_external)) 2322 Linkage = dwarf::GIEL_EXTERNAL; 2323 } else if (Die->findAttribute(dwarf::DW_AT_external)) 2324 Linkage = dwarf::GIEL_EXTERNAL; 2325 2326 switch (Die->getTag()) { 2327 case dwarf::DW_TAG_class_type: 2328 case dwarf::DW_TAG_structure_type: 2329 case dwarf::DW_TAG_union_type: 2330 case dwarf::DW_TAG_enumeration_type: 2331 return dwarf::PubIndexEntryDescriptor( 2332 dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus 2333 ? dwarf::GIEL_STATIC 2334 : dwarf::GIEL_EXTERNAL); 2335 case dwarf::DW_TAG_typedef: 2336 case dwarf::DW_TAG_base_type: 2337 case dwarf::DW_TAG_subrange_type: 2338 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC); 2339 case dwarf::DW_TAG_namespace: 2340 return dwarf::GIEK_TYPE; 2341 case dwarf::DW_TAG_subprogram: 2342 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage); 2343 case dwarf::DW_TAG_constant: 2344 case dwarf::DW_TAG_variable: 2345 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage); 2346 case dwarf::DW_TAG_enumerator: 2347 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, 2348 dwarf::GIEL_STATIC); 2349 default: 2350 return dwarf::GIEK_NONE; 2351 } 2352 } 2353 2354 /// emitDebugPubNames - Emit visible names into a debug pubnames section. 2355 /// 2356 void DwarfDebug::emitDebugPubNames(bool GnuStyle) { 2357 const MCSection *PSec = 2358 GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection() 2359 : Asm->getObjFileLowering().getDwarfPubNamesSection(); 2360 2361 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 2362 const SmallVectorImpl<DwarfUnit *> &Units = Holder.getUnits(); 2363 for (unsigned i = 0; i != Units.size(); ++i) { 2364 DwarfUnit *TheU = Units[i]; 2365 unsigned ID = TheU->getUniqueID(); 2366 2367 // Start the dwarf pubnames section. 2368 Asm->OutStreamer.SwitchSection(PSec); 2369 2370 // Emit a label so we can reference the beginning of this pubname section. 2371 if (GnuStyle) 2372 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("gnu_pubnames", ID)); 2373 2374 // Emit the header. 2375 Asm->OutStreamer.AddComment("Length of Public Names Info"); 2376 MCSymbol *BeginLabel = Asm->GetTempSymbol("pubnames_begin", ID); 2377 MCSymbol *EndLabel = Asm->GetTempSymbol("pubnames_end", ID); 2378 Asm->EmitLabelDifference(EndLabel, BeginLabel, 4); 2379 2380 Asm->OutStreamer.EmitLabel(BeginLabel); 2381 2382 Asm->OutStreamer.AddComment("DWARF Version"); 2383 Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION); 2384 2385 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info"); 2386 Asm->EmitSectionOffset(TheU->getLabelBegin(), TheU->getSectionSym()); 2387 2388 Asm->OutStreamer.AddComment("Compilation Unit Length"); 2389 Asm->EmitLabelDifference(TheU->getLabelEnd(), TheU->getLabelBegin(), 4); 2390 2391 // Emit the pubnames for this compilation unit. 2392 const StringMap<const DIE *> &Globals = getUnits()[ID]->getGlobalNames(); 2393 for (StringMap<const DIE *>::const_iterator GI = Globals.begin(), 2394 GE = Globals.end(); 2395 GI != GE; ++GI) { 2396 const char *Name = GI->getKeyData(); 2397 const DIE *Entity = GI->second; 2398 2399 Asm->OutStreamer.AddComment("DIE offset"); 2400 Asm->EmitInt32(Entity->getOffset()); 2401 2402 if (GnuStyle) { 2403 dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity); 2404 Asm->OutStreamer.AddComment( 2405 Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " + 2406 dwarf::GDBIndexEntryLinkageString(Desc.Linkage)); 2407 Asm->EmitInt8(Desc.toBits()); 2408 } 2409 2410 Asm->OutStreamer.AddComment("External Name"); 2411 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength() + 1)); 2412 } 2413 2414 Asm->OutStreamer.AddComment("End Mark"); 2415 Asm->EmitInt32(0); 2416 Asm->OutStreamer.EmitLabel(EndLabel); 2417 } 2418 } 2419 2420 void DwarfDebug::emitDebugPubTypes(bool GnuStyle) { 2421 const MCSection *PSec = 2422 GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection() 2423 : Asm->getObjFileLowering().getDwarfPubTypesSection(); 2424 2425 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 2426 const SmallVectorImpl<DwarfUnit *> &Units = Holder.getUnits(); 2427 for (unsigned i = 0; i != Units.size(); ++i) { 2428 DwarfUnit *TheU = Units[i]; 2429 unsigned ID = TheU->getUniqueID(); 2430 2431 // Start the dwarf pubtypes section. 2432 Asm->OutStreamer.SwitchSection(PSec); 2433 2434 // Emit a label so we can reference the beginning of this pubtype section. 2435 if (GnuStyle) 2436 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("gnu_pubtypes", ID)); 2437 2438 // Emit the header. 2439 Asm->OutStreamer.AddComment("Length of Public Types Info"); 2440 MCSymbol *BeginLabel = Asm->GetTempSymbol("pubtypes_begin", ID); 2441 MCSymbol *EndLabel = Asm->GetTempSymbol("pubtypes_end", ID); 2442 Asm->EmitLabelDifference(EndLabel, BeginLabel, 4); 2443 2444 Asm->OutStreamer.EmitLabel(BeginLabel); 2445 2446 Asm->OutStreamer.AddComment("DWARF Version"); 2447 Asm->EmitInt16(dwarf::DW_PUBTYPES_VERSION); 2448 2449 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info"); 2450 Asm->EmitSectionOffset(TheU->getLabelBegin(), TheU->getSectionSym()); 2451 2452 Asm->OutStreamer.AddComment("Compilation Unit Length"); 2453 Asm->EmitLabelDifference(TheU->getLabelEnd(), TheU->getLabelBegin(), 4); 2454 2455 // Emit the pubtypes. 2456 const StringMap<const DIE *> &Globals = getUnits()[ID]->getGlobalTypes(); 2457 for (StringMap<const DIE *>::const_iterator GI = Globals.begin(), 2458 GE = Globals.end(); 2459 GI != GE; ++GI) { 2460 const char *Name = GI->getKeyData(); 2461 const DIE *Entity = GI->second; 2462 2463 Asm->OutStreamer.AddComment("DIE offset"); 2464 Asm->EmitInt32(Entity->getOffset()); 2465 2466 if (GnuStyle) { 2467 dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity); 2468 Asm->OutStreamer.AddComment( 2469 Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " + 2470 dwarf::GDBIndexEntryLinkageString(Desc.Linkage)); 2471 Asm->EmitInt8(Desc.toBits()); 2472 } 2473 2474 Asm->OutStreamer.AddComment("External Name"); 2475 2476 // Emit the name with a terminating null byte. 2477 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength() + 1)); 2478 } 2479 2480 Asm->OutStreamer.AddComment("End Mark"); 2481 Asm->EmitInt32(0); 2482 Asm->OutStreamer.EmitLabel(EndLabel); 2483 } 2484 } 2485 2486 // Emit strings into a string section. 2487 void DwarfFile::emitStrings(const MCSection *StrSection, 2488 const MCSection *OffsetSection = NULL, 2489 const MCSymbol *StrSecSym = NULL) { 2490 2491 if (StringPool.empty()) 2492 return; 2493 2494 // Start the dwarf str section. 2495 Asm->OutStreamer.SwitchSection(StrSection); 2496 2497 // Get all of the string pool entries and put them in an array by their ID so 2498 // we can sort them. 2499 SmallVector< 2500 std::pair<unsigned, StringMapEntry<std::pair<MCSymbol *, unsigned> > *>, 2501 64> Entries; 2502 2503 for (StringMap<std::pair<MCSymbol *, unsigned> >::iterator 2504 I = StringPool.begin(), 2505 E = StringPool.end(); 2506 I != E; ++I) 2507 Entries.push_back(std::make_pair(I->second.second, &*I)); 2508 2509 array_pod_sort(Entries.begin(), Entries.end()); 2510 2511 for (unsigned i = 0, e = Entries.size(); i != e; ++i) { 2512 // Emit a label for reference from debug information entries. 2513 Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first); 2514 2515 // Emit the string itself with a terminating null byte. 2516 Asm->OutStreamer.EmitBytes( 2517 StringRef(Entries[i].second->getKeyData(), 2518 Entries[i].second->getKeyLength() + 1)); 2519 } 2520 2521 // If we've got an offset section go ahead and emit that now as well. 2522 if (OffsetSection) { 2523 Asm->OutStreamer.SwitchSection(OffsetSection); 2524 unsigned offset = 0; 2525 unsigned size = 4; // FIXME: DWARF64 is 8. 2526 for (unsigned i = 0, e = Entries.size(); i != e; ++i) { 2527 Asm->OutStreamer.EmitIntValue(offset, size); 2528 offset += Entries[i].second->getKeyLength() + 1; 2529 } 2530 } 2531 } 2532 2533 // Emit addresses into the section given. 2534 void DwarfFile::emitAddresses(const MCSection *AddrSection) { 2535 2536 if (AddressPool.empty()) 2537 return; 2538 2539 // Start the dwarf addr section. 2540 Asm->OutStreamer.SwitchSection(AddrSection); 2541 2542 // Order the address pool entries by ID 2543 SmallVector<const MCExpr *, 64> Entries(AddressPool.size()); 2544 2545 for (AddrPool::iterator I = AddressPool.begin(), E = AddressPool.end(); 2546 I != E; ++I) 2547 Entries[I->second.Number] = 2548 I->second.TLS 2549 ? Asm->getObjFileLowering().getDebugThreadLocalSymbol(I->first) 2550 : MCSymbolRefExpr::Create(I->first, Asm->OutContext); 2551 2552 for (unsigned i = 0, e = Entries.size(); i != e; ++i) 2553 Asm->OutStreamer.EmitValue(Entries[i], 2554 Asm->getDataLayout().getPointerSize()); 2555 } 2556 2557 // Emit visible names into a debug str section. 2558 void DwarfDebug::emitDebugStr() { 2559 DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; 2560 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection()); 2561 } 2562 2563 // Emit locations into the debug loc section. 2564 void DwarfDebug::emitDebugLoc() { 2565 if (DotDebugLocEntries.empty()) 2566 return; 2567 2568 for (SmallVectorImpl<DotDebugLocEntry>::iterator 2569 I = DotDebugLocEntries.begin(), 2570 E = DotDebugLocEntries.end(); 2571 I != E; ++I) { 2572 DotDebugLocEntry &Entry = *I; 2573 if (I + 1 != DotDebugLocEntries.end()) 2574 Entry.Merge(I + 1); 2575 } 2576 2577 // Start the dwarf loc section. 2578 Asm->OutStreamer.SwitchSection( 2579 Asm->getObjFileLowering().getDwarfLocSection()); 2580 unsigned char Size = Asm->getDataLayout().getPointerSize(); 2581 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0)); 2582 unsigned index = 1; 2583 for (SmallVectorImpl<DotDebugLocEntry>::iterator 2584 I = DotDebugLocEntries.begin(), 2585 E = DotDebugLocEntries.end(); 2586 I != E; ++I, ++index) { 2587 DotDebugLocEntry &Entry = *I; 2588 if (Entry.isMerged()) 2589 continue; 2590 if (Entry.isEmpty()) { 2591 Asm->OutStreamer.EmitIntValue(0, Size); 2592 Asm->OutStreamer.EmitIntValue(0, Size); 2593 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index)); 2594 } else { 2595 Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size); 2596 Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size); 2597 DIVariable DV(Entry.getVariable()); 2598 Asm->OutStreamer.AddComment("Loc expr size"); 2599 MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol(); 2600 MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol(); 2601 Asm->EmitLabelDifference(end, begin, 2); 2602 Asm->OutStreamer.EmitLabel(begin); 2603 if (Entry.isInt()) { 2604 DIBasicType BTy(DV.getType()); 2605 if (BTy.Verify() && (BTy.getEncoding() == dwarf::DW_ATE_signed || 2606 BTy.getEncoding() == dwarf::DW_ATE_signed_char)) { 2607 Asm->OutStreamer.AddComment("DW_OP_consts"); 2608 Asm->EmitInt8(dwarf::DW_OP_consts); 2609 Asm->EmitSLEB128(Entry.getInt()); 2610 } else { 2611 Asm->OutStreamer.AddComment("DW_OP_constu"); 2612 Asm->EmitInt8(dwarf::DW_OP_constu); 2613 Asm->EmitULEB128(Entry.getInt()); 2614 } 2615 } else if (Entry.isLocation()) { 2616 MachineLocation Loc = Entry.getLoc(); 2617 if (!DV.hasComplexAddress()) 2618 // Regular entry. 2619 Asm->EmitDwarfRegOp(Loc, DV.isIndirect()); 2620 else { 2621 // Complex address entry. 2622 unsigned N = DV.getNumAddrElements(); 2623 unsigned i = 0; 2624 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) { 2625 if (Loc.getOffset()) { 2626 i = 2; 2627 Asm->EmitDwarfRegOp(Loc, DV.isIndirect()); 2628 Asm->OutStreamer.AddComment("DW_OP_deref"); 2629 Asm->EmitInt8(dwarf::DW_OP_deref); 2630 Asm->OutStreamer.AddComment("DW_OP_plus_uconst"); 2631 Asm->EmitInt8(dwarf::DW_OP_plus_uconst); 2632 Asm->EmitSLEB128(DV.getAddrElement(1)); 2633 } else { 2634 // If first address element is OpPlus then emit 2635 // DW_OP_breg + Offset instead of DW_OP_reg + Offset. 2636 MachineLocation TLoc(Loc.getReg(), DV.getAddrElement(1)); 2637 Asm->EmitDwarfRegOp(TLoc, DV.isIndirect()); 2638 i = 2; 2639 } 2640 } else { 2641 Asm->EmitDwarfRegOp(Loc, DV.isIndirect()); 2642 } 2643 2644 // Emit remaining complex address elements. 2645 for (; i < N; ++i) { 2646 uint64_t Element = DV.getAddrElement(i); 2647 if (Element == DIBuilder::OpPlus) { 2648 Asm->EmitInt8(dwarf::DW_OP_plus_uconst); 2649 Asm->EmitULEB128(DV.getAddrElement(++i)); 2650 } else if (Element == DIBuilder::OpDeref) { 2651 if (!Loc.isReg()) 2652 Asm->EmitInt8(dwarf::DW_OP_deref); 2653 } else 2654 llvm_unreachable("unknown Opcode found in complex address"); 2655 } 2656 } 2657 } 2658 // else ... ignore constant fp. There is not any good way to 2659 // to represent them here in dwarf. 2660 Asm->OutStreamer.EmitLabel(end); 2661 } 2662 } 2663 } 2664 2665 struct SymbolCUSorter { 2666 SymbolCUSorter(const MCStreamer &s) : Streamer(s) {} 2667 const MCStreamer &Streamer; 2668 2669 bool operator()(const SymbolCU &A, const SymbolCU &B) { 2670 unsigned IA = A.Sym ? Streamer.GetSymbolOrder(A.Sym) : 0; 2671 unsigned IB = B.Sym ? Streamer.GetSymbolOrder(B.Sym) : 0; 2672 2673 // Symbols with no order assigned should be placed at the end. 2674 // (e.g. section end labels) 2675 if (IA == 0) 2676 IA = (unsigned)(-1); 2677 if (IB == 0) 2678 IB = (unsigned)(-1); 2679 return IA < IB; 2680 } 2681 }; 2682 2683 static bool CUSort(const DwarfUnit *A, const DwarfUnit *B) { 2684 return (A->getUniqueID() < B->getUniqueID()); 2685 } 2686 2687 struct ArangeSpan { 2688 const MCSymbol *Start, *End; 2689 }; 2690 2691 // Emit a debug aranges section, containing a CU lookup for any 2692 // address we can tie back to a CU. 2693 void DwarfDebug::emitDebugARanges() { 2694 // Start the dwarf aranges section. 2695 Asm->OutStreamer.SwitchSection( 2696 Asm->getObjFileLowering().getDwarfARangesSection()); 2697 2698 typedef DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan> > SpansType; 2699 2700 SpansType Spans; 2701 2702 // Build a list of sections used. 2703 std::vector<const MCSection *> Sections; 2704 for (SectionMapType::iterator it = SectionMap.begin(); it != SectionMap.end(); 2705 it++) { 2706 const MCSection *Section = it->first; 2707 Sections.push_back(Section); 2708 } 2709 2710 // Sort the sections into order. 2711 // This is only done to ensure consistent output order across different runs. 2712 std::sort(Sections.begin(), Sections.end(), SectionSort); 2713 2714 // Build a set of address spans, sorted by CU. 2715 for (size_t SecIdx = 0; SecIdx < Sections.size(); SecIdx++) { 2716 const MCSection *Section = Sections[SecIdx]; 2717 SmallVector<SymbolCU, 8> &List = SectionMap[Section]; 2718 if (List.size() < 2) 2719 continue; 2720 2721 // Sort the symbols by offset within the section. 2722 SymbolCUSorter sorter(Asm->OutStreamer); 2723 std::sort(List.begin(), List.end(), sorter); 2724 2725 // If we have no section (e.g. common), just write out 2726 // individual spans for each symbol. 2727 if (Section == NULL) { 2728 for (size_t n = 0; n < List.size(); n++) { 2729 const SymbolCU &Cur = List[n]; 2730 2731 ArangeSpan Span; 2732 Span.Start = Cur.Sym; 2733 Span.End = NULL; 2734 if (Cur.CU) 2735 Spans[Cur.CU].push_back(Span); 2736 } 2737 } else { 2738 // Build spans between each label. 2739 const MCSymbol *StartSym = List[0].Sym; 2740 for (size_t n = 1; n < List.size(); n++) { 2741 const SymbolCU &Prev = List[n - 1]; 2742 const SymbolCU &Cur = List[n]; 2743 2744 // Try and build the longest span we can within the same CU. 2745 if (Cur.CU != Prev.CU) { 2746 ArangeSpan Span; 2747 Span.Start = StartSym; 2748 Span.End = Cur.Sym; 2749 Spans[Prev.CU].push_back(Span); 2750 StartSym = Cur.Sym; 2751 } 2752 } 2753 } 2754 } 2755 2756 unsigned PtrSize = Asm->getDataLayout().getPointerSize(); 2757 2758 // Build a list of CUs used. 2759 std::vector<DwarfCompileUnit *> CUs; 2760 for (SpansType::iterator it = Spans.begin(); it != Spans.end(); it++) { 2761 DwarfCompileUnit *CU = it->first; 2762 CUs.push_back(CU); 2763 } 2764 2765 // Sort the CU list (again, to ensure consistent output order). 2766 std::sort(CUs.begin(), CUs.end(), CUSort); 2767 2768 // Emit an arange table for each CU we used. 2769 for (size_t CUIdx = 0; CUIdx < CUs.size(); CUIdx++) { 2770 DwarfCompileUnit *CU = CUs[CUIdx]; 2771 std::vector<ArangeSpan> &List = Spans[CU]; 2772 2773 // Emit size of content not including length itself. 2774 unsigned ContentSize = 2775 sizeof(int16_t) + // DWARF ARange version number 2776 sizeof(int32_t) + // Offset of CU in the .debug_info section 2777 sizeof(int8_t) + // Pointer Size (in bytes) 2778 sizeof(int8_t); // Segment Size (in bytes) 2779 2780 unsigned TupleSize = PtrSize * 2; 2781 2782 // 7.20 in the Dwarf specs requires the table to be aligned to a tuple. 2783 unsigned Padding = 2784 OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize); 2785 2786 ContentSize += Padding; 2787 ContentSize += (List.size() + 1) * TupleSize; 2788 2789 // For each compile unit, write the list of spans it covers. 2790 Asm->OutStreamer.AddComment("Length of ARange Set"); 2791 Asm->EmitInt32(ContentSize); 2792 Asm->OutStreamer.AddComment("DWARF Arange version number"); 2793 Asm->EmitInt16(dwarf::DW_ARANGES_VERSION); 2794 Asm->OutStreamer.AddComment("Offset Into Debug Info Section"); 2795 Asm->EmitSectionOffset(CU->getLocalLabelBegin(), CU->getLocalSectionSym()); 2796 Asm->OutStreamer.AddComment("Address Size (in bytes)"); 2797 Asm->EmitInt8(PtrSize); 2798 Asm->OutStreamer.AddComment("Segment Size (in bytes)"); 2799 Asm->EmitInt8(0); 2800 2801 Asm->OutStreamer.EmitFill(Padding, 0xff); 2802 2803 for (unsigned n = 0; n < List.size(); n++) { 2804 const ArangeSpan &Span = List[n]; 2805 Asm->EmitLabelReference(Span.Start, PtrSize); 2806 2807 // Calculate the size as being from the span start to it's end. 2808 if (Span.End) { 2809 Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize); 2810 } else { 2811 // For symbols without an end marker (e.g. common), we 2812 // write a single arange entry containing just that one symbol. 2813 uint64_t Size = SymSize[Span.Start]; 2814 if (Size == 0) 2815 Size = 1; 2816 2817 Asm->OutStreamer.EmitIntValue(Size, PtrSize); 2818 } 2819 } 2820 2821 Asm->OutStreamer.AddComment("ARange terminator"); 2822 Asm->OutStreamer.EmitIntValue(0, PtrSize); 2823 Asm->OutStreamer.EmitIntValue(0, PtrSize); 2824 } 2825 } 2826 2827 // Emit visible names into a debug ranges section. 2828 void DwarfDebug::emitDebugRanges() { 2829 // Start the dwarf ranges section. 2830 Asm->OutStreamer.SwitchSection( 2831 Asm->getObjFileLowering().getDwarfRangesSection()); 2832 2833 // Size for our labels. 2834 unsigned char Size = Asm->getDataLayout().getPointerSize(); 2835 2836 // Grab the specific ranges for the compile units in the module. 2837 for (MapVector<const MDNode *, DwarfCompileUnit *>::iterator 2838 I = CUMap.begin(), 2839 E = CUMap.end(); 2840 I != E; ++I) { 2841 DwarfCompileUnit *TheCU = I->second; 2842 2843 // Emit a symbol so we can find the beginning of our ranges. 2844 Asm->OutStreamer.EmitLabel(TheCU->getLabelRange()); 2845 2846 // Iterate over the misc ranges for the compile units in the module. 2847 const SmallVectorImpl<RangeSpanList> &RangeLists = TheCU->getRangeLists(); 2848 for (SmallVectorImpl<RangeSpanList>::const_iterator I = RangeLists.begin(), 2849 E = RangeLists.end(); 2850 I != E; ++I) { 2851 const RangeSpanList &List = *I; 2852 2853 // Emit our symbol so we can find the beginning of the range. 2854 Asm->OutStreamer.EmitLabel(List.getSym()); 2855 2856 for (SmallVectorImpl<RangeSpan>::const_iterator 2857 RI = List.getRanges().begin(), 2858 RE = List.getRanges().end(); 2859 RI != RE; ++RI) { 2860 const RangeSpan &Range = *RI; 2861 const MCSymbol *Begin = Range.getStart(); 2862 const MCSymbol *End = Range.getEnd(); 2863 assert(Begin && "Range without a begin symbol?"); 2864 assert(End && "Range without an end symbol?"); 2865 Asm->OutStreamer.EmitSymbolValue(Begin, Size); 2866 Asm->OutStreamer.EmitSymbolValue(End, Size); 2867 } 2868 2869 // And terminate the list with two 0 values. 2870 Asm->OutStreamer.EmitIntValue(0, Size); 2871 Asm->OutStreamer.EmitIntValue(0, Size); 2872 } 2873 2874 // Now emit a range for the CU itself. 2875 if (useCURanges()) { 2876 Asm->OutStreamer.EmitLabel( 2877 Asm->GetTempSymbol("cu_ranges", TheCU->getUniqueID())); 2878 const SmallVectorImpl<RangeSpan> &Ranges = TheCU->getRanges(); 2879 for (uint32_t i = 0, e = Ranges.size(); i != e; ++i) { 2880 RangeSpan Range = Ranges[i]; 2881 const MCSymbol *Begin = Range.getStart(); 2882 const MCSymbol *End = Range.getEnd(); 2883 assert(Begin && "Range without a begin symbol?"); 2884 assert(End && "Range without an end symbol?"); 2885 Asm->OutStreamer.EmitSymbolValue(Begin, Size); 2886 Asm->OutStreamer.EmitSymbolValue(End, Size); 2887 } 2888 // And terminate the list with two 0 values. 2889 Asm->OutStreamer.EmitIntValue(0, Size); 2890 Asm->OutStreamer.EmitIntValue(0, Size); 2891 } 2892 } 2893 } 2894 2895 // DWARF5 Experimental Separate Dwarf emitters. 2896 2897 void DwarfDebug::initSkeletonUnit(const DwarfUnit *U, DIE *Die, 2898 DwarfUnit *NewU) { 2899 NewU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name, 2900 U->getCUNode().getSplitDebugFilename()); 2901 2902 // Relocate to the beginning of the addr_base section, else 0 for the 2903 // beginning of the one for this compile unit. 2904 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) 2905 NewU->addSectionLabel(Die, dwarf::DW_AT_GNU_addr_base, DwarfAddrSectionSym); 2906 else 2907 NewU->addSectionOffset(Die, dwarf::DW_AT_GNU_addr_base, 0); 2908 2909 if (!CompilationDir.empty()) 2910 NewU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir); 2911 2912 addGnuPubAttributes(NewU, Die); 2913 2914 SkeletonHolder.addUnit(NewU); 2915 } 2916 2917 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list, 2918 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id, 2919 // DW_AT_ranges_base, DW_AT_addr_base. 2920 // TODO: Implement DW_AT_ranges_base. 2921 DwarfCompileUnit *DwarfDebug::constructSkeletonCU(const DwarfCompileUnit *CU) { 2922 2923 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit); 2924 DwarfCompileUnit *NewCU = new DwarfCompileUnit( 2925 CU->getUniqueID(), Die, CU->getCUNode(), Asm, this, &SkeletonHolder); 2926 NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoSection(), 2927 DwarfInfoSectionSym); 2928 2929 NewCU->initStmtList(DwarfLineSectionSym); 2930 2931 initSkeletonUnit(CU, Die, NewCU); 2932 2933 return NewCU; 2934 } 2935 2936 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_dwo_name, 2937 // DW_AT_addr_base. 2938 DwarfTypeUnit *DwarfDebug::constructSkeletonTU(DwarfTypeUnit *TU) { 2939 DwarfCompileUnit &CU = static_cast<DwarfCompileUnit &>( 2940 *SkeletonHolder.getUnits()[TU->getCU().getUniqueID()]); 2941 2942 DIE *Die = new DIE(dwarf::DW_TAG_type_unit); 2943 DwarfTypeUnit *NewTU = 2944 new DwarfTypeUnit(TU->getUniqueID(), Die, CU, Asm, this, &SkeletonHolder); 2945 NewTU->setTypeSignature(TU->getTypeSignature()); 2946 NewTU->setType(NULL); 2947 NewTU->initSection( 2948 Asm->getObjFileLowering().getDwarfTypesSection(TU->getTypeSignature())); 2949 CU.applyStmtList(*Die); 2950 2951 initSkeletonUnit(TU, Die, NewTU); 2952 return NewTU; 2953 } 2954 2955 // Emit the .debug_info.dwo section for separated dwarf. This contains the 2956 // compile units that would normally be in debug_info. 2957 void DwarfDebug::emitDebugInfoDWO() { 2958 assert(useSplitDwarf() && "No split dwarf debug info?"); 2959 InfoHolder.emitUnits(this, 2960 Asm->getObjFileLowering().getDwarfAbbrevDWOSection(), 2961 DwarfAbbrevDWOSectionSym); 2962 } 2963 2964 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the 2965 // abbreviations for the .debug_info.dwo section. 2966 void DwarfDebug::emitDebugAbbrevDWO() { 2967 assert(useSplitDwarf() && "No split dwarf?"); 2968 InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection()); 2969 } 2970 2971 // Emit the .debug_str.dwo section for separated dwarf. This contains the 2972 // string section and is identical in format to traditional .debug_str 2973 // sections. 2974 void DwarfDebug::emitDebugStrDWO() { 2975 assert(useSplitDwarf() && "No split dwarf?"); 2976 const MCSection *OffSec = 2977 Asm->getObjFileLowering().getDwarfStrOffDWOSection(); 2978 const MCSymbol *StrSym = DwarfStrSectionSym; 2979 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(), 2980 OffSec, StrSym); 2981 } 2982 2983 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU, 2984 StringRef Identifier, DIE *RefDie, 2985 DICompositeType CTy) { 2986 // Flag the type unit reference as a declaration so that if it contains 2987 // members (implicit special members, static data member definitions, member 2988 // declarations for definitions in this CU, etc) consumers don't get confused 2989 // and think this is a full definition. 2990 CU.addFlag(RefDie, dwarf::DW_AT_declaration); 2991 2992 const DwarfTypeUnit *&TU = DwarfTypeUnits[CTy]; 2993 if (TU) { 2994 CU.addDIETypeSignature(RefDie, *TU); 2995 return; 2996 } 2997 2998 DIE *UnitDie = new DIE(dwarf::DW_TAG_type_unit); 2999 DwarfTypeUnit *NewTU = new DwarfTypeUnit(InfoHolder.getUnits().size(), 3000 UnitDie, CU, Asm, this, &InfoHolder); 3001 TU = NewTU; 3002 InfoHolder.addUnit(NewTU); 3003 3004 NewTU->addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2, 3005 CU.getLanguage()); 3006 3007 MD5 Hash; 3008 Hash.update(Identifier); 3009 // ... take the least significant 8 bytes and return those. Our MD5 3010 // implementation always returns its results in little endian, swap bytes 3011 // appropriately. 3012 MD5::MD5Result Result; 3013 Hash.final(Result); 3014 uint64_t Signature = *reinterpret_cast<support::ulittle64_t *>(Result + 8); 3015 NewTU->setTypeSignature(Signature); 3016 if (useSplitDwarf()) 3017 NewTU->setSkeleton(constructSkeletonTU(NewTU)); 3018 else 3019 CU.applyStmtList(*UnitDie); 3020 3021 NewTU->setType(NewTU->createTypeDIE(CTy)); 3022 3023 NewTU->initSection( 3024 useSplitDwarf() 3025 ? Asm->getObjFileLowering().getDwarfTypesDWOSection(Signature) 3026 : Asm->getObjFileLowering().getDwarfTypesSection(Signature)); 3027 3028 CU.addDIETypeSignature(RefDie, *NewTU); 3029 } 3030