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