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