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