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