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