1 //===-- llvm/CodeGen/DwarfDebug.cpp - Dwarf Debug Framework ---------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains support for writing dwarf debug info into asm files.
12 //===----------------------------------------------------------------------===//
14 #define DEBUG_TYPE "dwarfdebug"
15 #include "DwarfDebug.h"
17 #include "DwarfAccelTable.h"
18 #include "DwarfCompileUnit.h"
19 #include "llvm/ADT/STLExtras.h"
20 #include "llvm/ADT/Statistic.h"
21 #include "llvm/ADT/StringExtras.h"
22 #include "llvm/ADT/Triple.h"
23 #include "llvm/CodeGen/MachineFunction.h"
24 #include "llvm/CodeGen/MachineModuleInfo.h"
25 #include "llvm/DIBuilder.h"
26 #include "llvm/DebugInfo.h"
27 #include "llvm/IR/Constants.h"
28 #include "llvm/IR/DataLayout.h"
29 #include "llvm/IR/Instructions.h"
30 #include "llvm/IR/Module.h"
31 #include "llvm/MC/MCAsmInfo.h"
32 #include "llvm/MC/MCSection.h"
33 #include "llvm/MC/MCStreamer.h"
34 #include "llvm/MC/MCSymbol.h"
35 #include "llvm/Support/CommandLine.h"
36 #include "llvm/Support/Debug.h"
37 #include "llvm/Support/ErrorHandling.h"
38 #include "llvm/Support/FormattedStream.h"
39 #include "llvm/Support/MD5.h"
40 #include "llvm/Support/Path.h"
41 #include "llvm/Support/Timer.h"
42 #include "llvm/Support/ValueHandle.h"
43 #include "llvm/Target/TargetFrameLowering.h"
44 #include "llvm/Target/TargetLoweringObjectFile.h"
45 #include "llvm/Target/TargetMachine.h"
46 #include "llvm/Target/TargetOptions.h"
47 #include "llvm/Target/TargetRegisterInfo.h"
51 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden,
52 cl::desc("Disable debug info printing"));
54 static cl::opt<bool> UnknownLocations(
55 "use-unknown-locations", cl::Hidden,
56 cl::desc("Make an absence of debug location information explicit."),
60 GenerateDwarfPubNamesSection("generate-dwarf-pubnames", cl::Hidden,
62 cl::desc("Generate DWARF pubnames section"));
65 GenerateODRHash("generate-odr-hash", cl::Hidden,
66 cl::desc("Add an ODR hash to external type DIEs."),
77 static cl::opt<DefaultOnOff>
78 DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
79 cl::desc("Output prototype dwarf accelerator tables."),
80 cl::values(clEnumVal(Default, "Default for platform"),
81 clEnumVal(Enable, "Enabled"),
82 clEnumVal(Disable, "Disabled"), clEnumValEnd),
85 static cl::opt<DefaultOnOff>
86 DarwinGDBCompat("darwin-gdb-compat", cl::Hidden,
87 cl::desc("Compatibility with Darwin gdb."),
88 cl::values(clEnumVal(Default, "Default for platform"),
89 clEnumVal(Enable, "Enabled"),
90 clEnumVal(Disable, "Disabled"), clEnumValEnd),
93 static cl::opt<DefaultOnOff>
94 SplitDwarf("split-dwarf", cl::Hidden,
95 cl::desc("Output prototype dwarf split debug info."),
96 cl::values(clEnumVal(Default, "Default for platform"),
97 clEnumVal(Enable, "Enabled"),
98 clEnumVal(Disable, "Disabled"), clEnumValEnd),
102 const char *const DWARFGroupName = "DWARF Emission";
103 const char *const DbgTimerName = "DWARF Debug Writer";
105 struct CompareFirst {
106 template <typename T> bool operator()(const T &lhs, const T &rhs) const {
107 return lhs.first < rhs.first;
110 } // end anonymous namespace
112 //===----------------------------------------------------------------------===//
114 // Configuration values for initial hash set sizes (log2).
116 static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
120 DIType DbgVariable::getType() const {
121 DIType Ty = Var.getType();
122 // FIXME: isBlockByrefVariable should be reformulated in terms of complex
123 // addresses instead.
124 if (Var.isBlockByrefVariable()) {
125 /* Byref variables, in Blocks, are declared by the programmer as
126 "SomeType VarName;", but the compiler creates a
127 __Block_byref_x_VarName struct, and gives the variable VarName
128 either the struct, or a pointer to the struct, as its type. This
129 is necessary for various behind-the-scenes things the compiler
130 needs to do with by-reference variables in blocks.
132 However, as far as the original *programmer* is concerned, the
133 variable should still have type 'SomeType', as originally declared.
135 The following function dives into the __Block_byref_x_VarName
136 struct to find the original type of the variable. This will be
137 passed back to the code generating the type for the Debug
138 Information Entry for the variable 'VarName'. 'VarName' will then
139 have the original type 'SomeType' in its debug information.
141 The original type 'SomeType' will be the type of the field named
142 'VarName' inside the __Block_byref_x_VarName struct.
144 NOTE: In order for this to not completely fail on the debugger
145 side, the Debug Information Entry for the variable VarName needs to
146 have a DW_AT_location that tells the debugger how to unwind through
147 the pointers and __Block_byref_x_VarName struct to find the actual
148 value of the variable. The function addBlockByrefType does this. */
150 unsigned tag = Ty.getTag();
152 if (tag == dwarf::DW_TAG_pointer_type) {
153 DIDerivedType DTy = DIDerivedType(Ty);
154 subType = DTy.getTypeDerivedFrom();
157 DICompositeType blockStruct = DICompositeType(subType);
158 DIArray Elements = blockStruct.getTypeArray();
160 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
161 DIDescriptor Element = Elements.getElement(i);
162 DIDerivedType DT = DIDerivedType(Element);
163 if (getName() == DT.getName())
164 return (DT.getTypeDerivedFrom());
170 } // end llvm namespace
172 /// Return Dwarf Version by checking module flags.
173 static unsigned getDwarfVersionFromModule(const Module *M) {
174 Value *Val = M->getModuleFlag("Dwarf Version");
176 return dwarf::DWARF_VERSION;
177 return cast<ConstantInt>(Val)->getZExtValue();
180 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
181 : Asm(A), MMI(Asm->MMI), FirstCU(0),
182 AbbreviationsSet(InitAbbreviationsSetSize),
183 SourceIdMap(DIEValueAllocator),
184 PrevLabel(NULL), GlobalCUIndexCount(0),
185 InfoHolder(A, &AbbreviationsSet, &Abbreviations, "info_string",
187 SkeletonAbbrevSet(InitAbbreviationsSetSize),
188 SkeletonHolder(A, &SkeletonAbbrevSet, &SkeletonAbbrevs, "skel_string",
191 DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
192 DwarfStrSectionSym = TextSectionSym = 0;
193 DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0;
194 DwarfAddrSectionSym = 0;
195 DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0;
196 FunctionBeginSym = FunctionEndSym = 0;
198 // Turn on accelerator tables and older gdb compatibility
200 bool IsDarwin = Triple(A->getTargetTriple()).isOSDarwin();
201 if (DarwinGDBCompat == Default) {
203 IsDarwinGDBCompat = true;
205 IsDarwinGDBCompat = false;
207 IsDarwinGDBCompat = DarwinGDBCompat == Enable ? true : false;
209 if (DwarfAccelTables == Default) {
211 HasDwarfAccelTables = true;
213 HasDwarfAccelTables = false;
215 HasDwarfAccelTables = DwarfAccelTables == Enable ? true : false;
217 if (SplitDwarf == Default)
218 HasSplitDwarf = false;
220 HasSplitDwarf = SplitDwarf == Enable ? true : false;
222 DwarfVersion = getDwarfVersionFromModule(MMI->getModule());
225 NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
229 DwarfDebug::~DwarfDebug() {
232 // Switch to the specified MCSection and emit an assembler
233 // temporary label to it if SymbolStem is specified.
234 static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section,
235 const char *SymbolStem = 0) {
236 Asm->OutStreamer.SwitchSection(Section);
237 if (!SymbolStem) return 0;
239 MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
240 Asm->OutStreamer.EmitLabel(TmpSym);
244 MCSymbol *DwarfUnits::getStringPoolSym() {
245 return Asm->GetTempSymbol(StringPref);
248 MCSymbol *DwarfUnits::getStringPoolEntry(StringRef Str) {
249 std::pair<MCSymbol*, unsigned> &Entry =
250 StringPool.GetOrCreateValue(Str).getValue();
251 if (Entry.first) return Entry.first;
253 Entry.second = NextStringPoolNumber++;
254 return Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
257 unsigned DwarfUnits::getStringPoolIndex(StringRef Str) {
258 std::pair<MCSymbol*, unsigned> &Entry =
259 StringPool.GetOrCreateValue(Str).getValue();
260 if (Entry.first) return Entry.second;
262 Entry.second = NextStringPoolNumber++;
263 Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
267 unsigned DwarfUnits::getAddrPoolIndex(const MCSymbol *Sym) {
268 return getAddrPoolIndex(MCSymbolRefExpr::Create(Sym, Asm->OutContext));
271 unsigned DwarfUnits::getAddrPoolIndex(const MCExpr *Sym) {
272 std::pair<DenseMap<const MCExpr *, unsigned>::iterator, bool> P =
273 AddressPool.insert(std::make_pair(Sym, NextAddrPoolNumber));
275 ++NextAddrPoolNumber;
276 return P.first->second;
279 // Define a unique number for the abbreviation.
281 void DwarfUnits::assignAbbrevNumber(DIEAbbrev &Abbrev) {
282 // Check the set for priors.
283 DIEAbbrev *InSet = AbbreviationsSet->GetOrInsertNode(&Abbrev);
285 // If it's newly added.
286 if (InSet == &Abbrev) {
287 // Add to abbreviation list.
288 Abbreviations->push_back(&Abbrev);
290 // Assign the vector position + 1 as its number.
291 Abbrev.setNumber(Abbreviations->size());
293 // Assign existing abbreviation number.
294 Abbrev.setNumber(InSet->getNumber());
298 static bool isObjCClass(StringRef Name) {
299 return Name.startswith("+") || Name.startswith("-");
302 static bool hasObjCCategory(StringRef Name) {
303 if (!isObjCClass(Name)) return false;
305 size_t pos = Name.find(')');
306 if (pos != std::string::npos) {
307 if (Name[pos+1] != ' ') return false;
313 static void getObjCClassCategory(StringRef In, StringRef &Class,
314 StringRef &Category) {
315 if (!hasObjCCategory(In)) {
316 Class = In.slice(In.find('[') + 1, In.find(' '));
321 Class = In.slice(In.find('[') + 1, In.find('('));
322 Category = In.slice(In.find('[') + 1, In.find(' '));
326 static StringRef getObjCMethodName(StringRef In) {
327 return In.slice(In.find(' ') + 1, In.find(']'));
330 // Add the various names to the Dwarf accelerator table names.
331 static void addSubprogramNames(CompileUnit *TheCU, DISubprogram SP,
333 if (!SP.isDefinition()) return;
335 TheCU->addAccelName(SP.getName(), Die);
337 // If the linkage name is different than the name, go ahead and output
338 // that as well into the name table.
339 if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
340 TheCU->addAccelName(SP.getLinkageName(), Die);
342 // If this is an Objective-C selector name add it to the ObjC accelerator
344 if (isObjCClass(SP.getName())) {
345 StringRef Class, Category;
346 getObjCClassCategory(SP.getName(), Class, Category);
347 TheCU->addAccelObjC(Class, Die);
349 TheCU->addAccelObjC(Category, Die);
350 // Also add the base method name to the name table.
351 TheCU->addAccelName(getObjCMethodName(SP.getName()), Die);
355 // Find DIE for the given subprogram and attach appropriate DW_AT_low_pc
356 // and DW_AT_high_pc attributes. If there are global variables in this
357 // scope then create and insert DIEs for these variables.
358 DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
359 const MDNode *SPNode) {
360 DIE *SPDie = SPCU->getDIE(SPNode);
362 assert(SPDie && "Unable to find subprogram DIE!");
363 DISubprogram SP(SPNode);
365 // If we're updating an abstract DIE, then we will be adding the children and
366 // object pointer later on. But what we don't want to do is process the
367 // concrete DIE twice.
368 DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode);
370 bool InSameCU = (AbsSPDIE->getCompileUnit() == SPCU->getCUDie());
371 // Pick up abstract subprogram DIE.
372 SPDie = new DIE(dwarf::DW_TAG_subprogram);
373 // If AbsSPDIE belongs to a different CU, use DW_FORM_ref_addr instead of
375 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
376 InSameCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
380 DISubprogram SPDecl = SP.getFunctionDeclaration();
381 if (!SPDecl.isSubprogram()) {
382 // There is not any need to generate specification DIE for a function
383 // defined at compile unit level. If a function is defined inside another
384 // function then gdb prefers the definition at top level and but does not
385 // expect specification DIE in parent function. So avoid creating
386 // specification DIE for a function defined inside a function.
387 if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
388 !SP.getContext().isFile() &&
389 !isSubprogramContext(SP.getContext())) {
390 SPCU->addFlag(SPDie, dwarf::DW_AT_declaration);
393 DICompositeType SPTy = SP.getType();
394 DIArray Args = SPTy.getTypeArray();
395 unsigned SPTag = SPTy.getTag();
396 if (SPTag == dwarf::DW_TAG_subroutine_type)
397 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
398 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
399 DIType ATy = DIType(Args.getElement(i));
400 SPCU->addType(Arg, ATy);
401 if (ATy.isArtificial())
402 SPCU->addFlag(Arg, dwarf::DW_AT_artificial);
403 if (ATy.isObjectPointer())
404 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer,
405 dwarf::DW_FORM_ref4, Arg);
406 SPDie->addChild(Arg);
408 DIE *SPDeclDie = SPDie;
409 SPDie = new DIE(dwarf::DW_TAG_subprogram);
410 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification,
411 dwarf::DW_FORM_ref4, SPDeclDie);
417 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_low_pc,
418 Asm->GetTempSymbol("func_begin",
419 Asm->getFunctionNumber()));
420 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_high_pc,
421 Asm->GetTempSymbol("func_end",
422 Asm->getFunctionNumber()));
423 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
424 MachineLocation Location(RI->getFrameRegister(*Asm->MF));
425 SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
427 // Add name to the name table, we do this here because we're guaranteed
428 // to have concrete versions of our DW_TAG_subprogram nodes.
429 addSubprogramNames(SPCU, SP, SPDie);
434 // Construct new DW_TAG_lexical_block for this scope and attach
435 // DW_AT_low_pc/DW_AT_high_pc labels.
436 DIE *DwarfDebug::constructLexicalScopeDIE(CompileUnit *TheCU,
437 LexicalScope *Scope) {
438 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
439 if (Scope->isAbstractScope())
442 const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges();
446 // If we have multiple ranges, emit them into the range section.
447 if (Ranges.size() > 1) {
448 // .debug_range section has not been laid out yet. Emit offset in
449 // .debug_range as a uint, size 4, for now. emitDIE will handle
450 // DW_AT_ranges appropriately.
451 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
452 DebugRangeSymbols.size()
453 * Asm->getDataLayout().getPointerSize());
454 for (SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin(),
455 RE = Ranges.end(); RI != RE; ++RI) {
456 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
457 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
460 // Terminate the range list.
461 DebugRangeSymbols.push_back(NULL);
462 DebugRangeSymbols.push_back(NULL);
466 // Construct the address range for this DIE.
467 SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin();
468 MCSymbol *Start = getLabelBeforeInsn(RI->first);
469 MCSymbol *End = getLabelAfterInsn(RI->second);
471 if (End == 0) return 0;
473 assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
474 assert(End->isDefined() && "Invalid end label for an inlined scope!");
476 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, Start);
477 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, End);
482 // This scope represents inlined body of a function. Construct DIE to
483 // represent this concrete inlined copy of the function.
484 DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
485 LexicalScope *Scope) {
486 const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges();
487 assert(Ranges.empty() == false &&
488 "LexicalScope does not have instruction markers!");
490 if (!Scope->getScopeNode())
492 DIScope DS(Scope->getScopeNode());
493 DISubprogram InlinedSP = getDISubprogram(DS);
494 DIE *OriginDIE = TheCU->getDIE(InlinedSP);
496 DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram.");
500 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
501 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
502 dwarf::DW_FORM_ref4, OriginDIE);
504 if (Ranges.size() > 1) {
505 // .debug_range section has not been laid out yet. Emit offset in
506 // .debug_range as a uint, size 4, for now. emitDIE will handle
507 // DW_AT_ranges appropriately.
508 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
509 DebugRangeSymbols.size()
510 * Asm->getDataLayout().getPointerSize());
511 for (SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin(),
512 RE = Ranges.end(); RI != RE; ++RI) {
513 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
514 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
516 DebugRangeSymbols.push_back(NULL);
517 DebugRangeSymbols.push_back(NULL);
519 SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin();
520 MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
521 MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
523 if (StartLabel == 0 || EndLabel == 0)
524 llvm_unreachable("Unexpected Start and End labels for an inlined scope!");
526 assert(StartLabel->isDefined() &&
527 "Invalid starting label for an inlined scope!");
528 assert(EndLabel->isDefined() && "Invalid end label for an inlined scope!");
530 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, StartLabel);
531 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, EndLabel);
534 InlinedSubprogramDIEs.insert(OriginDIE);
536 // Add the call site information to the DIE.
537 DILocation DL(Scope->getInlinedAt());
538 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0,
539 getOrCreateSourceID(DL.getFilename(), DL.getDirectory(),
540 TheCU->getUniqueID()));
541 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
543 // Track the start label for this inlined function.
544 //.debug_inlined section specification does not clearly state how
545 // to emit inlined scopes that are split into multiple instruction ranges.
546 // For now, use the first instruction range and emit low_pc/high_pc pair and
547 // corresponding the .debug_inlined section entry for this pair.
548 if (Asm->MAI->doesDwarfUseInlineInfoSection()) {
549 MCSymbol *StartLabel = getLabelBeforeInsn(Ranges.begin()->first);
550 InlineInfoMap::iterator I = InlineInfo.find(InlinedSP);
552 if (I == InlineInfo.end()) {
553 InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel, ScopeDIE));
554 InlinedSPNodes.push_back(InlinedSP);
556 I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
559 // Add name to the name table, we do this here because we're guaranteed
560 // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
561 addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
566 // Construct a DIE for this scope.
567 DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
568 if (!Scope || !Scope->getScopeNode())
571 DIScope DS(Scope->getScopeNode());
572 // Early return to avoid creating dangling variable|scope DIEs.
573 if (!Scope->getInlinedAt() && DS.isSubprogram() && Scope->isAbstractScope() &&
577 SmallVector<DIE *, 8> Children;
578 DIE *ObjectPointer = NULL;
580 // Collect arguments for current function.
581 if (LScopes.isCurrentFunctionScope(Scope))
582 for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
583 if (DbgVariable *ArgDV = CurrentFnArguments[i])
585 TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope())) {
586 Children.push_back(Arg);
587 if (ArgDV->isObjectPointer()) ObjectPointer = Arg;
590 // Collect lexical scope children first.
591 const SmallVectorImpl<DbgVariable *> &Variables =ScopeVariables.lookup(Scope);
592 for (unsigned i = 0, N = Variables.size(); i < N; ++i)
594 TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope())) {
595 Children.push_back(Variable);
596 if (Variables[i]->isObjectPointer()) ObjectPointer = Variable;
598 const SmallVectorImpl<LexicalScope *> &Scopes = Scope->getChildren();
599 for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
600 if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
601 Children.push_back(Nested);
602 DIE *ScopeDIE = NULL;
603 if (Scope->getInlinedAt())
604 ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
605 else if (DS.isSubprogram()) {
606 ProcessedSPNodes.insert(DS);
607 if (Scope->isAbstractScope()) {
608 ScopeDIE = TheCU->getDIE(DS);
609 // Note down abstract DIE.
611 AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
614 ScopeDIE = updateSubprogramScopeDIE(TheCU, DS);
617 // There is no need to emit empty lexical block DIE.
618 std::pair<ImportedEntityMap::const_iterator,
619 ImportedEntityMap::const_iterator> Range = std::equal_range(
620 ScopesWithImportedEntities.begin(), ScopesWithImportedEntities.end(),
621 std::pair<const MDNode *, const MDNode *>(DS, (const MDNode*)0),
623 if (Children.empty() && Range.first == Range.second)
625 ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
626 for (ImportedEntityMap::const_iterator i = Range.first; i != Range.second;
628 constructImportedEntityDIE(TheCU, i->second, ScopeDIE);
631 if (!ScopeDIE) return NULL;
634 for (SmallVectorImpl<DIE *>::iterator I = Children.begin(),
635 E = Children.end(); I != E; ++I)
636 ScopeDIE->addChild(*I);
638 if (DS.isSubprogram() && ObjectPointer != NULL)
639 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer,
640 dwarf::DW_FORM_ref4, ObjectPointer);
642 if (DS.isSubprogram())
643 TheCU->addPubTypes(DISubprogram(DS));
648 // Look up the source id with the given directory and source file names.
649 // If none currently exists, create a new id and insert it in the
650 // SourceIds map. This can update DirectoryNames and SourceFileNames maps
652 unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName,
653 StringRef DirName, unsigned CUID) {
654 // If we use .loc in assembly, we can't separate .file entries according to
655 // compile units. Thus all files will belong to the default compile unit.
656 if (Asm->TM.hasMCUseLoc() &&
657 Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer)
660 // If FE did not provide a file name, then assume stdin.
661 if (FileName.empty())
662 return getOrCreateSourceID("<stdin>", StringRef(), CUID);
664 // TODO: this might not belong here. See if we can factor this better.
665 if (DirName == CompilationDir)
668 // FileIDCUMap stores the current ID for the given compile unit.
669 unsigned SrcId = FileIDCUMap[CUID] + 1;
671 // We look up the CUID/file/dir by concatenating them with a zero byte.
672 SmallString<128> NamePair;
673 NamePair += utostr(CUID);
676 NamePair += '\0'; // Zero bytes are not allowed in paths.
677 NamePair += FileName;
679 StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId);
680 if (Ent.getValue() != SrcId)
681 return Ent.getValue();
683 FileIDCUMap[CUID] = SrcId;
684 // Print out a .file directive to specify files for .loc directives.
685 Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName, CUID);
690 // Create new CompileUnit for the given metadata node with tag
691 // DW_TAG_compile_unit.
692 CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) {
693 DICompileUnit DIUnit(N);
694 StringRef FN = DIUnit.getFilename();
695 CompilationDir = DIUnit.getDirectory();
697 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
698 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
699 DIUnit.getLanguage(), Die, N, Asm,
702 FileIDCUMap[NewCU->getUniqueID()] = 0;
703 // Call this to emit a .file directive if it wasn't emitted for the source
704 // file this CU comes from yet.
705 getOrCreateSourceID(FN, CompilationDir, NewCU->getUniqueID());
707 NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
708 NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
709 DIUnit.getLanguage());
710 NewCU->addString(Die, dwarf::DW_AT_name, FN);
712 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
713 // into an entity. We're using 0 (or a NULL label) for this. For
714 // split dwarf it's in the skeleton CU so omit it here.
715 if (!useSplitDwarf())
716 NewCU->addLabelAddress(Die, dwarf::DW_AT_low_pc, NULL);
718 // Define start line table label for each Compile Unit.
719 MCSymbol *LineTableStartSym = Asm->GetTempSymbol("line_table_start",
720 NewCU->getUniqueID());
721 Asm->OutStreamer.getContext().setMCLineTableSymbol(LineTableStartSym,
722 NewCU->getUniqueID());
724 // Use a single line table if we are using .loc and generating assembly.
726 (Asm->TM.hasMCUseLoc() &&
727 Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer) ||
728 (NewCU->getUniqueID() == 0);
730 // DW_AT_stmt_list is a offset of line number information for this
731 // compile unit in debug_line section. For split dwarf this is
732 // left in the skeleton CU and so not included.
733 // The line table entries are not always emitted in assembly, so it
734 // is not okay to use line_table_start here.
735 if (!useSplitDwarf()) {
736 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
737 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
739 Asm->GetTempSymbol("section_line") : LineTableStartSym);
740 else if (UseTheFirstCU)
741 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
743 NewCU->addDelta(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
744 LineTableStartSym, DwarfLineSectionSym);
747 // If we're using split dwarf the compilation dir is going to be in the
748 // skeleton CU and so we don't need to duplicate it here.
749 if (!useSplitDwarf() && !CompilationDir.empty())
750 NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
751 if (DIUnit.isOptimized())
752 NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized);
754 StringRef Flags = DIUnit.getFlags();
756 NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
758 if (unsigned RVer = DIUnit.getRunTimeVersion())
759 NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
760 dwarf::DW_FORM_data1, RVer);
765 InfoHolder.addUnit(NewCU);
767 CUMap.insert(std::make_pair(N, NewCU));
771 // Construct subprogram DIE.
772 void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
774 CompileUnit *&CURef = SPMap[N];
780 if (!SP.isDefinition())
781 // This is a method declaration which will be handled while constructing
785 DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
788 TheCU->insertDIE(N, SubprogramDie);
790 // Add to context owner.
791 TheCU->addToContextOwner(SubprogramDie, SP.getContext());
793 // Expose as global, if requested.
794 if (GenerateDwarfPubNamesSection)
795 TheCU->addGlobalName(SP.getName(), SubprogramDie);
798 void DwarfDebug::constructImportedEntityDIE(CompileUnit *TheCU,
800 DIImportedEntity Module(N);
801 if (!Module.Verify())
803 if (DIE *D = TheCU->getOrCreateContextDIE(Module.getContext()))
804 constructImportedEntityDIE(TheCU, Module, D);
807 void DwarfDebug::constructImportedEntityDIE(CompileUnit *TheCU, const MDNode *N,
809 DIImportedEntity Module(N);
810 if (!Module.Verify())
812 return constructImportedEntityDIE(TheCU, Module, Context);
815 void DwarfDebug::constructImportedEntityDIE(CompileUnit *TheCU,
816 const DIImportedEntity &Module,
818 assert(Module.Verify() &&
819 "Use one of the MDNode * overloads to handle invalid metadata");
820 assert(Context && "Should always have a context for an imported_module");
821 DIE *IMDie = new DIE(Module.getTag());
822 TheCU->insertDIE(Module, IMDie);
824 DIDescriptor Entity = Module.getEntity();
825 if (Entity.isNameSpace())
826 EntityDie = TheCU->getOrCreateNameSpace(DINameSpace(Entity));
827 else if (Entity.isSubprogram())
828 EntityDie = TheCU->getOrCreateSubprogramDIE(DISubprogram(Entity));
829 else if (Entity.isType())
830 EntityDie = TheCU->getOrCreateTypeDIE(DIType(Entity));
832 EntityDie = TheCU->getDIE(Entity);
833 unsigned FileID = getOrCreateSourceID(Module.getContext().getFilename(),
834 Module.getContext().getDirectory(),
835 TheCU->getUniqueID());
836 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_file, 0, FileID);
837 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_line, 0, Module.getLineNumber());
838 TheCU->addDIEEntry(IMDie, dwarf::DW_AT_import, dwarf::DW_FORM_ref4,
840 StringRef Name = Module.getName();
842 TheCU->addString(IMDie, dwarf::DW_AT_name, Name);
843 Context->addChild(IMDie);
846 // Emit all Dwarf sections that should come prior to the content. Create
847 // global DIEs and emit initial debug info sections. This is invoked by
848 // the target AsmPrinter.
849 void DwarfDebug::beginModule() {
850 if (DisableDebugInfoPrinting)
853 const Module *M = MMI->getModule();
855 // If module has named metadata anchors then use them, otherwise scan the
856 // module using debug info finder to collect debug info.
857 NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
861 // Emit initial sections so we can reference labels later.
864 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
865 DICompileUnit CUNode(CU_Nodes->getOperand(i));
866 CompileUnit *CU = constructCompileUnit(CUNode);
867 DIArray ImportedEntities = CUNode.getImportedEntities();
868 for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
869 ScopesWithImportedEntities.push_back(std::make_pair(
870 DIImportedEntity(ImportedEntities.getElement(i)).getContext(),
871 ImportedEntities.getElement(i)));
872 std::sort(ScopesWithImportedEntities.begin(),
873 ScopesWithImportedEntities.end(), CompareFirst());
874 DIArray GVs = CUNode.getGlobalVariables();
875 for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
876 CU->createGlobalVariableDIE(GVs.getElement(i));
877 DIArray SPs = CUNode.getSubprograms();
878 for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
879 constructSubprogramDIE(CU, SPs.getElement(i));
880 DIArray EnumTypes = CUNode.getEnumTypes();
881 for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
882 CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
883 DIArray RetainedTypes = CUNode.getRetainedTypes();
884 for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
885 CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
886 // Emit imported_modules last so that the relevant context is already
888 for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
889 constructImportedEntityDIE(CU, ImportedEntities.getElement(i));
890 // If we're splitting the dwarf out now that we've got the entire
891 // CU then construct a skeleton CU based upon it.
892 if (useSplitDwarf()) {
893 // This should be a unique identifier when we want to build .dwp files.
894 CU->addUInt(CU->getCUDie(), dwarf::DW_AT_GNU_dwo_id,
895 dwarf::DW_FORM_data8, 0);
896 // Now construct the skeleton CU associated.
897 constructSkeletonCU(CUNode);
901 // Tell MMI that we have debug info.
902 MMI->setDebugInfoAvailability(true);
904 // Prime section data.
905 SectionMap.insert(Asm->getObjFileLowering().getTextSection());
908 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
909 void DwarfDebug::computeInlinedDIEs() {
910 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
911 for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
912 AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
914 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
916 for (DenseMap<const MDNode *, DIE *>::iterator AI = AbstractSPDies.begin(),
917 AE = AbstractSPDies.end(); AI != AE; ++AI) {
918 DIE *ISP = AI->second;
919 if (InlinedSubprogramDIEs.count(ISP))
921 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
925 // Collect info for variables that were optimized out.
926 void DwarfDebug::collectDeadVariables() {
927 const Module *M = MMI->getModule();
928 DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
930 if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
931 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
932 DICompileUnit TheCU(CU_Nodes->getOperand(i));
933 DIArray Subprograms = TheCU.getSubprograms();
934 for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
935 DISubprogram SP(Subprograms.getElement(i));
936 if (ProcessedSPNodes.count(SP) != 0) continue;
937 if (!SP.isSubprogram()) continue;
938 if (!SP.isDefinition()) continue;
939 DIArray Variables = SP.getVariables();
940 if (Variables.getNumElements() == 0) continue;
942 LexicalScope *Scope =
943 new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
944 DeadFnScopeMap[SP] = Scope;
946 // Construct subprogram DIE and add variables DIEs.
947 CompileUnit *SPCU = CUMap.lookup(TheCU);
948 assert(SPCU && "Unable to find Compile Unit!");
949 constructSubprogramDIE(SPCU, SP);
950 DIE *ScopeDIE = SPCU->getDIE(SP);
951 for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
952 DIVariable DV(Variables.getElement(vi));
953 if (!DV.isVariable()) continue;
954 DbgVariable NewVar(DV, NULL);
955 if (DIE *VariableDIE =
956 SPCU->constructVariableDIE(&NewVar, Scope->isAbstractScope()))
957 ScopeDIE->addChild(VariableDIE);
962 DeleteContainerSeconds(DeadFnScopeMap);
965 // Type Signature [7.27] computation code.
966 typedef ArrayRef<uint8_t> HashValue;
968 /// \brief Grabs the string in whichever attribute is passed in and returns
969 /// a reference to it.
970 static StringRef getDIEStringAttr(DIE *Die, unsigned Attr) {
971 const SmallVectorImpl<DIEValue *> &Values = Die->getValues();
972 const DIEAbbrev &Abbrevs = Die->getAbbrev();
974 // Iterate through all the attributes until we find the one we're
975 // looking for, if we can't find it return an empty string.
976 for (size_t i = 0; i < Values.size(); ++i) {
977 if (Abbrevs.getData()[i].getAttribute() == Attr) {
978 DIEValue *V = Values[i];
979 assert(isa<DIEString>(V) && "String requested. Not a string.");
980 DIEString *S = cast<DIEString>(V);
981 return S->getString();
984 return StringRef("");
987 /// \brief Adds the string in \p Str to the hash in \p Hash. This also hashes
988 /// a trailing NULL with the string.
989 static void addStringToHash(MD5 &Hash, StringRef Str) {
990 DEBUG(dbgs() << "Adding string " << Str << " to hash.\n");
992 Hash.update(makeArrayRef((uint8_t)'\0'));
995 // FIXME: These are copied and only slightly modified out of LEB128.h.
997 /// \brief Adds the unsigned in \p N to the hash in \p Hash. This also encodes
998 /// the unsigned as a ULEB128.
999 static void addULEB128ToHash(MD5 &Hash, uint64_t Value) {
1000 DEBUG(dbgs() << "Adding ULEB128 " << Value << " to hash.\n");
1002 uint8_t Byte = Value & 0x7f;
1005 Byte |= 0x80; // Mark this byte to show that more bytes will follow.
1007 } while (Value != 0);
1010 /// \brief Including \p Parent adds the context of Parent to \p Hash.
1011 static void addParentContextToHash(MD5 &Hash, DIE *Parent) {
1013 DEBUG(dbgs() << "Adding parent context to hash...\n");
1015 // [7.27.2] For each surrounding type or namespace beginning with the
1016 // outermost such construct...
1017 SmallVector<DIE *, 1> Parents;
1018 while (Parent->getTag() != dwarf::DW_TAG_compile_unit) {
1019 Parents.push_back(Parent);
1020 Parent = Parent->getParent();
1023 // Reverse iterate over our list to go from the outermost construct to the
1025 for (SmallVectorImpl<DIE *>::reverse_iterator I = Parents.rbegin(),
1030 // ... Append the letter "C" to the sequence...
1031 addULEB128ToHash(Hash, 'C');
1033 // ... Followed by the DWARF tag of the construct...
1034 addULEB128ToHash(Hash, Die->getTag());
1036 // ... Then the name, taken from the DW_AT_name attribute.
1037 StringRef Name = getDIEStringAttr(Die, dwarf::DW_AT_name);
1038 DEBUG(dbgs() << "... adding context: " << Name << "\n");
1040 addStringToHash(Hash, Name);
1044 /// This is based on the type signature computation given in section 7.27 of the
1045 /// DWARF4 standard. It is the md5 hash of a flattened description of the DIE with
1046 /// the exception that we are hashing only the context and the name of the type.
1047 static void addDIEODRSignature(MD5 &Hash, CompileUnit *CU, DIE *Die) {
1049 // Add the contexts to the hash. We won't be computing the ODR hash for
1050 // function local types so it's safe to use the generic context hashing
1052 // FIXME: If we figure out how to account for linkage in some way we could
1053 // actually do this with a slight modification to the parent hash algorithm.
1054 DIE *Parent = Die->getParent();
1056 addParentContextToHash(Hash, Parent);
1058 // Add the current DIE information.
1060 // Add the DWARF tag of the DIE.
1061 addULEB128ToHash(Hash, Die->getTag());
1063 // Add the name of the type to the hash.
1064 addStringToHash(Hash, getDIEStringAttr(Die, dwarf::DW_AT_name));
1066 // Now get the result.
1067 MD5::MD5Result Result;
1070 // ... take the least significant 8 bytes and store those as the attribute.
1071 // Our MD5 implementation always returns its results in little endian, swap
1072 // bytes appropriately.
1073 uint64_t Signature = *reinterpret_cast<support::ulittle64_t *>(Result + 8);
1075 // FIXME: This should be added onto the type unit, not the type, but this
1076 // works as an intermediate stage.
1077 CU->addUInt(Die, dwarf::DW_AT_GNU_odr_signature, dwarf::DW_FORM_data8,
1081 /// Return true if the current DIE is contained within an anonymous namespace.
1082 static bool isContainedInAnonNamespace(DIE *Die) {
1083 DIE *Parent = Die->getParent();
1086 if (Parent->getTag() == dwarf::DW_TAG_namespace &&
1087 getDIEStringAttr(Parent, dwarf::DW_AT_name) == "")
1089 Parent = Parent->getParent();
1095 /// Test if the current CU language is C++ and that we have
1096 /// a named type that is not contained in an anonymous namespace.
1097 static bool shouldAddODRHash(CompileUnit *CU, DIE *Die) {
1098 return (CU->getLanguage() == dwarf::DW_LANG_C_plus_plus &&
1099 getDIEStringAttr(Die, dwarf::DW_AT_name) != "" &&
1100 !isContainedInAnonNamespace(Die));
1103 void DwarfDebug::finalizeModuleInfo() {
1104 // Collect info for variables that were optimized out.
1105 collectDeadVariables();
1107 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
1108 computeInlinedDIEs();
1110 // Emit DW_AT_containing_type attribute to connect types with their
1111 // vtable holding type.
1112 for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
1113 CUE = CUMap.end(); CUI != CUE; ++CUI) {
1114 CompileUnit *TheCU = CUI->second;
1115 TheCU->constructContainingTypeDIEs();
1118 // Split out type units and conditionally add an ODR tag to the split
1120 // FIXME: Do type splitting.
1121 for (unsigned i = 0, e = TypeUnits.size(); i != e; ++i) {
1123 DIE *Die = TypeUnits[i];
1124 // If we've requested ODR hashes and it's applicable for an ODR hash then
1125 // add the ODR signature now.
1126 if (GenerateODRHash && shouldAddODRHash(CUMap.begin()->second, Die))
1127 addDIEODRSignature(Hash, CUMap.begin()->second, Die);
1130 // Compute DIE offsets and sizes.
1131 InfoHolder.computeSizeAndOffsets();
1132 if (useSplitDwarf())
1133 SkeletonHolder.computeSizeAndOffsets();
1136 void DwarfDebug::endSections() {
1137 // Standard sections final addresses.
1138 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
1139 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
1140 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
1141 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
1143 // End text sections.
1144 for (unsigned I = 0, E = SectionMap.size(); I != E; ++I) {
1145 Asm->OutStreamer.SwitchSection(SectionMap[I]);
1146 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", I+1));
1150 // Emit all Dwarf sections that should come after the content.
1151 void DwarfDebug::endModule() {
1153 if (!FirstCU) return;
1155 // End any existing sections.
1156 // TODO: Does this need to happen?
1159 // Finalize the debug info for the module.
1160 finalizeModuleInfo();
1162 if (!useSplitDwarf()) {
1163 // Emit all the DIEs into a debug info section.
1166 // Corresponding abbreviations into a abbrev section.
1167 emitAbbreviations();
1169 // Emit info into a debug loc section.
1172 // Emit info into a debug aranges section.
1175 // Emit info into a debug ranges section.
1178 // Emit info into a debug macinfo section.
1181 // Emit inline info.
1182 // TODO: When we don't need the option anymore we
1183 // can remove all of the code that this section
1185 if (useDarwinGDBCompat())
1186 emitDebugInlineInfo();
1188 // TODO: Fill this in for separated debug sections and separate
1189 // out information into new sections.
1191 // Emit the debug info section and compile units.
1195 // Corresponding abbreviations into a abbrev section.
1196 emitAbbreviations();
1197 emitDebugAbbrevDWO();
1199 // Emit info into a debug loc section.
1202 // Emit info into a debug aranges section.
1205 // Emit info into a debug ranges section.
1208 // Emit info into a debug macinfo section.
1211 // Emit DWO addresses.
1212 InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1214 // Emit inline info.
1215 // TODO: When we don't need the option anymore we
1216 // can remove all of the code that this section
1218 if (useDarwinGDBCompat())
1219 emitDebugInlineInfo();
1222 // Emit info into the dwarf accelerator table sections.
1223 if (useDwarfAccelTables()) {
1226 emitAccelNamespaces();
1230 // Emit info into a debug pubnames section, if requested.
1231 if (GenerateDwarfPubNamesSection)
1232 emitDebugPubnames();
1234 // Emit info into a debug pubtypes section.
1235 // TODO: When we don't need the option anymore we can
1236 // remove all of the code that adds to the table.
1237 if (useDarwinGDBCompat())
1238 emitDebugPubTypes();
1240 // Finally emit string information into a string table.
1242 if (useSplitDwarf())
1247 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1248 E = CUMap.end(); I != E; ++I)
1251 for (SmallVectorImpl<CompileUnit *>::iterator I = SkeletonCUs.begin(),
1252 E = SkeletonCUs.end(); I != E; ++I)
1255 // Reset these for the next Module if we have one.
1259 // Find abstract variable, if any, associated with Var.
1260 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1261 DebugLoc ScopeLoc) {
1262 LLVMContext &Ctx = DV->getContext();
1263 // More then one inlined variable corresponds to one abstract variable.
1264 DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1265 DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1267 return AbsDbgVariable;
1269 LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1273 AbsDbgVariable = new DbgVariable(Var, NULL);
1274 addScopeVariable(Scope, AbsDbgVariable);
1275 AbstractVariables[Var] = AbsDbgVariable;
1276 return AbsDbgVariable;
1279 // If Var is a current function argument then add it to CurrentFnArguments list.
1280 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1281 DbgVariable *Var, LexicalScope *Scope) {
1282 if (!LScopes.isCurrentFunctionScope(Scope))
1284 DIVariable DV = Var->getVariable();
1285 if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1287 unsigned ArgNo = DV.getArgNumber();
1291 size_t Size = CurrentFnArguments.size();
1293 CurrentFnArguments.resize(MF->getFunction()->arg_size());
1294 // llvm::Function argument size is not good indicator of how many
1295 // arguments does the function have at source level.
1297 CurrentFnArguments.resize(ArgNo * 2);
1298 CurrentFnArguments[ArgNo - 1] = Var;
1302 // Collect variable information from side table maintained by MMI.
1304 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
1305 SmallPtrSet<const MDNode *, 16> &Processed) {
1306 MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1307 for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1308 VE = VMap.end(); VI != VE; ++VI) {
1309 const MDNode *Var = VI->first;
1311 Processed.insert(Var);
1313 const std::pair<unsigned, DebugLoc> &VP = VI->second;
1315 LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
1317 // If variable scope is not found then skip this variable.
1321 DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1322 DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
1323 RegVar->setFrameIndex(VP.first);
1324 if (!addCurrentFnArgument(MF, RegVar, Scope))
1325 addScopeVariable(Scope, RegVar);
1327 AbsDbgVariable->setFrameIndex(VP.first);
1331 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
1333 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1334 assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1335 return MI->getNumOperands() == 3 &&
1336 MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1337 (MI->getOperand(1).isImm() ||
1338 (MI->getOperand(1).isReg() && MI->getOperand(1).getReg() == 0U));
1341 // Get .debug_loc entry for the instruction range starting at MI.
1342 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1343 const MCSymbol *FLabel,
1344 const MCSymbol *SLabel,
1345 const MachineInstr *MI) {
1346 const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1348 assert(MI->getNumOperands() == 3);
1349 if (MI->getOperand(0).isReg()) {
1350 MachineLocation MLoc;
1351 // If the second operand is an immediate, this is a
1352 // register-indirect address.
1353 if (!MI->getOperand(1).isImm())
1354 MLoc.set(MI->getOperand(0).getReg());
1356 MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1357 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1359 if (MI->getOperand(0).isImm())
1360 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1361 if (MI->getOperand(0).isFPImm())
1362 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1363 if (MI->getOperand(0).isCImm())
1364 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1366 llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1369 // Find variables for each lexical scope.
1371 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1372 SmallPtrSet<const MDNode *, 16> &Processed) {
1374 // Grab the variable info that was squirreled away in the MMI side-table.
1375 collectVariableInfoFromMMITable(MF, Processed);
1377 for (SmallVectorImpl<const MDNode*>::const_iterator
1378 UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1380 const MDNode *Var = *UVI;
1381 if (Processed.count(Var))
1384 // History contains relevant DBG_VALUE instructions for Var and instructions
1386 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1387 if (History.empty())
1389 const MachineInstr *MInsn = History.front();
1392 LexicalScope *Scope = NULL;
1393 if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1394 DISubprogram(DV.getContext()).describes(MF->getFunction()))
1395 Scope = LScopes.getCurrentFunctionScope();
1396 else if (MDNode *IA = DV.getInlinedAt())
1397 Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1399 Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1400 // If variable scope is not found then skip this variable.
1404 Processed.insert(DV);
1405 assert(MInsn->isDebugValue() && "History must begin with debug value");
1406 DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1407 DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1408 if (!addCurrentFnArgument(MF, RegVar, Scope))
1409 addScopeVariable(Scope, RegVar);
1411 AbsVar->setMInsn(MInsn);
1413 // Simplify ranges that are fully coalesced.
1414 if (History.size() <= 1 || (History.size() == 2 &&
1415 MInsn->isIdenticalTo(History.back()))) {
1416 RegVar->setMInsn(MInsn);
1420 // Handle multiple DBG_VALUE instructions describing one variable.
1421 RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1423 for (SmallVectorImpl<const MachineInstr*>::const_iterator
1424 HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1425 const MachineInstr *Begin = *HI;
1426 assert(Begin->isDebugValue() && "Invalid History entry");
1428 // Check if DBG_VALUE is truncating a range.
1429 if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1430 && !Begin->getOperand(0).getReg())
1433 // Compute the range for a register location.
1434 const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1435 const MCSymbol *SLabel = 0;
1438 // If Begin is the last instruction in History then its value is valid
1439 // until the end of the function.
1440 SLabel = FunctionEndSym;
1442 const MachineInstr *End = HI[1];
1443 DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1444 << "\t" << *Begin << "\t" << *End << "\n");
1445 if (End->isDebugValue())
1446 SLabel = getLabelBeforeInsn(End);
1448 // End is a normal instruction clobbering the range.
1449 SLabel = getLabelAfterInsn(End);
1450 assert(SLabel && "Forgot label after clobber instruction");
1455 // The value is valid until the next DBG_VALUE or clobber.
1456 DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1459 DotDebugLocEntries.push_back(DotDebugLocEntry());
1462 // Collect info for variables that were optimized out.
1463 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1464 DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1465 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1466 DIVariable DV(Variables.getElement(i));
1467 if (!DV || !DV.isVariable() || !Processed.insert(DV))
1469 if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1470 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1474 // Return Label preceding the instruction.
1475 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1476 MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1477 assert(Label && "Didn't insert label before instruction");
1481 // Return Label immediately following the instruction.
1482 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1483 return LabelsAfterInsn.lookup(MI);
1486 // Process beginning of an instruction.
1487 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1488 // Check if source location changes, but ignore DBG_VALUE locations.
1489 if (!MI->isDebugValue()) {
1490 DebugLoc DL = MI->getDebugLoc();
1491 if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1494 if (DL == PrologEndLoc) {
1495 Flags |= DWARF2_FLAG_PROLOGUE_END;
1496 PrologEndLoc = DebugLoc();
1498 if (PrologEndLoc.isUnknown())
1499 Flags |= DWARF2_FLAG_IS_STMT;
1501 if (!DL.isUnknown()) {
1502 const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1503 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1505 recordSourceLine(0, 0, 0, 0);
1509 // Insert labels where requested.
1510 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1511 LabelsBeforeInsn.find(MI);
1514 if (I == LabelsBeforeInsn.end())
1517 // Label already assigned.
1522 PrevLabel = MMI->getContext().CreateTempSymbol();
1523 Asm->OutStreamer.EmitLabel(PrevLabel);
1525 I->second = PrevLabel;
1528 // Process end of an instruction.
1529 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1530 // Don't create a new label after DBG_VALUE instructions.
1531 // They don't generate code.
1532 if (!MI->isDebugValue())
1535 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1536 LabelsAfterInsn.find(MI);
1539 if (I == LabelsAfterInsn.end())
1542 // Label already assigned.
1546 // We need a label after this instruction.
1548 PrevLabel = MMI->getContext().CreateTempSymbol();
1549 Asm->OutStreamer.EmitLabel(PrevLabel);
1551 I->second = PrevLabel;
1554 // Each LexicalScope has first instruction and last instruction to mark
1555 // beginning and end of a scope respectively. Create an inverse map that list
1556 // scopes starts (and ends) with an instruction. One instruction may start (or
1557 // end) multiple scopes. Ignore scopes that are not reachable.
1558 void DwarfDebug::identifyScopeMarkers() {
1559 SmallVector<LexicalScope *, 4> WorkList;
1560 WorkList.push_back(LScopes.getCurrentFunctionScope());
1561 while (!WorkList.empty()) {
1562 LexicalScope *S = WorkList.pop_back_val();
1564 const SmallVectorImpl<LexicalScope *> &Children = S->getChildren();
1565 if (!Children.empty())
1566 for (SmallVectorImpl<LexicalScope *>::const_iterator SI = Children.begin(),
1567 SE = Children.end(); SI != SE; ++SI)
1568 WorkList.push_back(*SI);
1570 if (S->isAbstractScope())
1573 const SmallVectorImpl<InsnRange> &Ranges = S->getRanges();
1576 for (SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin(),
1577 RE = Ranges.end(); RI != RE; ++RI) {
1578 assert(RI->first && "InsnRange does not have first instruction!");
1579 assert(RI->second && "InsnRange does not have second instruction!");
1580 requestLabelBeforeInsn(RI->first);
1581 requestLabelAfterInsn(RI->second);
1586 // Get MDNode for DebugLoc's scope.
1587 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1588 if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1589 return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1590 return DL.getScope(Ctx);
1593 // Walk up the scope chain of given debug loc and find line number info
1594 // for the function.
1595 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1596 const MDNode *Scope = getScopeNode(DL, Ctx);
1597 DISubprogram SP = getDISubprogram(Scope);
1598 if (SP.isSubprogram()) {
1599 // Check for number of operands since the compatibility is
1601 if (SP->getNumOperands() > 19)
1602 return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1604 return DebugLoc::get(SP.getLineNumber(), 0, SP);
1610 // Gather pre-function debug information. Assumes being called immediately
1611 // after the function entry point has been emitted.
1612 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1613 if (!MMI->hasDebugInfo()) return;
1614 LScopes.initialize(*MF);
1615 if (LScopes.empty()) return;
1616 identifyScopeMarkers();
1618 // Set DwarfCompileUnitID in MCContext to the Compile Unit this function
1620 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1621 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1622 assert(TheCU && "Unable to find compile unit!");
1623 if (Asm->TM.hasMCUseLoc() &&
1624 Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer)
1625 // Use a single line table if we are using .loc and generating assembly.
1626 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1628 Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1630 FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1631 Asm->getFunctionNumber());
1632 // Assumes in correct section after the entry point.
1633 Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1635 assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1637 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1638 // LiveUserVar - Map physreg numbers to the MDNode they contain.
1639 std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1641 for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1643 bool AtBlockEntry = true;
1644 for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1646 const MachineInstr *MI = II;
1648 if (MI->isDebugValue()) {
1649 assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1651 // Keep track of user variables.
1653 MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1655 // Variable is in a register, we need to check for clobbers.
1656 if (isDbgValueInDefinedReg(MI))
1657 LiveUserVar[MI->getOperand(0).getReg()] = Var;
1659 // Check the history of this variable.
1660 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1661 if (History.empty()) {
1662 UserVariables.push_back(Var);
1663 // The first mention of a function argument gets the FunctionBeginSym
1664 // label, so arguments are visible when breaking at function entry.
1666 if (DV.isVariable() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1667 DISubprogram(getDISubprogram(DV.getContext()))
1668 .describes(MF->getFunction()))
1669 LabelsBeforeInsn[MI] = FunctionBeginSym;
1671 // We have seen this variable before. Try to coalesce DBG_VALUEs.
1672 const MachineInstr *Prev = History.back();
1673 if (Prev->isDebugValue()) {
1674 // Coalesce identical entries at the end of History.
1675 if (History.size() >= 2 &&
1676 Prev->isIdenticalTo(History[History.size() - 2])) {
1677 DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1679 << "\t" << *History[History.size() - 2] << "\n");
1683 // Terminate old register assignments that don't reach MI;
1684 MachineFunction::const_iterator PrevMBB = Prev->getParent();
1685 if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1686 isDbgValueInDefinedReg(Prev)) {
1687 // Previous register assignment needs to terminate at the end of
1689 MachineBasicBlock::const_iterator LastMI =
1690 PrevMBB->getLastNonDebugInstr();
1691 if (LastMI == PrevMBB->end()) {
1692 // Drop DBG_VALUE for empty range.
1693 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1694 << "\t" << *Prev << "\n");
1696 } else if (llvm::next(PrevMBB) != PrevMBB->getParent()->end())
1697 // Terminate after LastMI.
1698 History.push_back(LastMI);
1702 History.push_back(MI);
1704 // Not a DBG_VALUE instruction.
1706 AtBlockEntry = false;
1708 // First known non-DBG_VALUE and non-frame setup location marks
1709 // the beginning of the function body.
1710 if (!MI->getFlag(MachineInstr::FrameSetup) &&
1711 (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1712 PrologEndLoc = MI->getDebugLoc();
1714 // Check if the instruction clobbers any registers with debug vars.
1715 for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1716 MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1717 if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1719 for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1720 AI.isValid(); ++AI) {
1722 const MDNode *Var = LiveUserVar[Reg];
1725 // Reg is now clobbered.
1726 LiveUserVar[Reg] = 0;
1728 // Was MD last defined by a DBG_VALUE referring to Reg?
1729 DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1730 if (HistI == DbgValues.end())
1732 SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1733 if (History.empty())
1735 const MachineInstr *Prev = History.back();
1736 // Sanity-check: Register assignments are terminated at the end of
1738 if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1740 // Is the variable still in Reg?
1741 if (!isDbgValueInDefinedReg(Prev) ||
1742 Prev->getOperand(0).getReg() != Reg)
1744 // Var is clobbered. Make sure the next instruction gets a label.
1745 History.push_back(MI);
1752 for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1754 SmallVectorImpl<const MachineInstr*> &History = I->second;
1755 if (History.empty())
1758 // Make sure the final register assignments are terminated.
1759 const MachineInstr *Prev = History.back();
1760 if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1761 const MachineBasicBlock *PrevMBB = Prev->getParent();
1762 MachineBasicBlock::const_iterator LastMI =
1763 PrevMBB->getLastNonDebugInstr();
1764 if (LastMI == PrevMBB->end())
1765 // Drop DBG_VALUE for empty range.
1767 else if (PrevMBB != &PrevMBB->getParent()->back()) {
1768 // Terminate after LastMI.
1769 History.push_back(LastMI);
1772 // Request labels for the full history.
1773 for (unsigned i = 0, e = History.size(); i != e; ++i) {
1774 const MachineInstr *MI = History[i];
1775 if (MI->isDebugValue())
1776 requestLabelBeforeInsn(MI);
1778 requestLabelAfterInsn(MI);
1782 PrevInstLoc = DebugLoc();
1783 PrevLabel = FunctionBeginSym;
1785 // Record beginning of function.
1786 if (!PrologEndLoc.isUnknown()) {
1787 DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1788 MF->getFunction()->getContext());
1789 recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1790 FnStartDL.getScope(MF->getFunction()->getContext()),
1791 // We'd like to list the prologue as "not statements" but GDB behaves
1792 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1793 DWARF2_FLAG_IS_STMT);
1797 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1798 SmallVectorImpl<DbgVariable *> &Vars = ScopeVariables[LS];
1799 DIVariable DV = Var->getVariable();
1800 // Variables with positive arg numbers are parameters.
1801 if (unsigned ArgNum = DV.getArgNumber()) {
1802 // Keep all parameters in order at the start of the variable list to ensure
1803 // function types are correct (no out-of-order parameters)
1805 // This could be improved by only doing it for optimized builds (unoptimized
1806 // builds have the right order to begin with), searching from the back (this
1807 // would catch the unoptimized case quickly), or doing a binary search
1808 // rather than linear search.
1809 SmallVectorImpl<DbgVariable *>::iterator I = Vars.begin();
1810 while (I != Vars.end()) {
1811 unsigned CurNum = (*I)->getVariable().getArgNumber();
1812 // A local (non-parameter) variable has been found, insert immediately
1816 // A later indexed parameter has been found, insert immediately before it.
1817 if (CurNum > ArgNum)
1821 Vars.insert(I, Var);
1825 Vars.push_back(Var);
1828 // Gather and emit post-function debug information.
1829 void DwarfDebug::endFunction(const MachineFunction *MF) {
1830 if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1832 // Define end label for subprogram.
1833 FunctionEndSym = Asm->GetTempSymbol("func_end",
1834 Asm->getFunctionNumber());
1835 // Assumes in correct section after the entry point.
1836 Asm->OutStreamer.EmitLabel(FunctionEndSym);
1837 // Set DwarfCompileUnitID in MCContext to default value.
1838 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1840 SmallPtrSet<const MDNode *, 16> ProcessedVars;
1841 collectVariableInfo(MF, ProcessedVars);
1843 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1844 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1845 assert(TheCU && "Unable to find compile unit!");
1847 // Construct abstract scopes.
1848 ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1849 for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1850 LexicalScope *AScope = AList[i];
1851 DISubprogram SP(AScope->getScopeNode());
1852 if (SP.isSubprogram()) {
1853 // Collect info for variables that were optimized out.
1854 DIArray Variables = SP.getVariables();
1855 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1856 DIVariable DV(Variables.getElement(i));
1857 if (!DV || !DV.isVariable() || !ProcessedVars.insert(DV))
1859 // Check that DbgVariable for DV wasn't created earlier, when
1860 // findAbstractVariable() was called for inlined instance of DV.
1861 LLVMContext &Ctx = DV->getContext();
1862 DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1863 if (AbstractVariables.lookup(CleanDV))
1865 if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1866 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1869 if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1870 constructScopeDIE(TheCU, AScope);
1873 DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1875 if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1876 TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1879 for (ScopeVariablesMap::iterator
1880 I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1881 DeleteContainerPointers(I->second);
1882 ScopeVariables.clear();
1883 DeleteContainerPointers(CurrentFnArguments);
1884 UserVariables.clear();
1886 AbstractVariables.clear();
1887 LabelsBeforeInsn.clear();
1888 LabelsAfterInsn.clear();
1892 // Register a source line with debug info. Returns the unique label that was
1893 // emitted and which provides correspondence to the source line list.
1894 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1900 DIDescriptor Scope(S);
1902 if (Scope.isCompileUnit()) {
1903 DICompileUnit CU(S);
1904 Fn = CU.getFilename();
1905 Dir = CU.getDirectory();
1906 } else if (Scope.isFile()) {
1908 Fn = F.getFilename();
1909 Dir = F.getDirectory();
1910 } else if (Scope.isSubprogram()) {
1912 Fn = SP.getFilename();
1913 Dir = SP.getDirectory();
1914 } else if (Scope.isLexicalBlockFile()) {
1915 DILexicalBlockFile DBF(S);
1916 Fn = DBF.getFilename();
1917 Dir = DBF.getDirectory();
1918 } else if (Scope.isLexicalBlock()) {
1919 DILexicalBlock DB(S);
1920 Fn = DB.getFilename();
1921 Dir = DB.getDirectory();
1923 llvm_unreachable("Unexpected scope info");
1925 Src = getOrCreateSourceID(Fn, Dir,
1926 Asm->OutStreamer.getContext().getDwarfCompileUnitID());
1928 Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1931 //===----------------------------------------------------------------------===//
1933 //===----------------------------------------------------------------------===//
1935 // Compute the size and offset of a DIE.
1937 DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1938 // Get the children.
1939 const std::vector<DIE *> &Children = Die->getChildren();
1941 // Record the abbreviation.
1942 assignAbbrevNumber(Die->getAbbrev());
1944 // Get the abbreviation for this DIE.
1945 unsigned AbbrevNumber = Die->getAbbrevNumber();
1946 const DIEAbbrev *Abbrev = Abbreviations->at(AbbrevNumber - 1);
1949 Die->setOffset(Offset);
1951 // Start the size with the size of abbreviation code.
1952 Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1954 const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
1955 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
1957 // Size the DIE attribute values.
1958 for (unsigned i = 0, N = Values.size(); i < N; ++i)
1959 // Size attribute value.
1960 Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1962 // Size the DIE children if any.
1963 if (!Children.empty()) {
1964 assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1965 "Children flag not set");
1967 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1968 Offset = computeSizeAndOffset(Children[j], Offset);
1970 // End of children marker.
1971 Offset += sizeof(int8_t);
1974 Die->setSize(Offset - Die->getOffset());
1978 // Compute the size and offset of all the DIEs.
1979 void DwarfUnits::computeSizeAndOffsets() {
1980 // Offset from the beginning of debug info section.
1981 unsigned SecOffset = 0;
1982 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1983 E = CUs.end(); I != E; ++I) {
1984 (*I)->setDebugInfoOffset(SecOffset);
1986 sizeof(int32_t) + // Length of Compilation Unit Info
1987 sizeof(int16_t) + // DWARF version number
1988 sizeof(int32_t) + // Offset Into Abbrev. Section
1989 sizeof(int8_t); // Pointer Size (in bytes)
1991 unsigned EndOffset = computeSizeAndOffset((*I)->getCUDie(), Offset);
1992 SecOffset += EndOffset;
1996 // Emit initial Dwarf sections with a label at the start of each one.
1997 void DwarfDebug::emitSectionLabels() {
1998 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
2000 // Dwarf sections base addresses.
2001 DwarfInfoSectionSym =
2002 emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
2003 DwarfAbbrevSectionSym =
2004 emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
2005 if (useSplitDwarf())
2006 DwarfAbbrevDWOSectionSym =
2007 emitSectionSym(Asm, TLOF.getDwarfAbbrevDWOSection(),
2008 "section_abbrev_dwo");
2009 emitSectionSym(Asm, TLOF.getDwarfARangesSection());
2011 if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
2012 emitSectionSym(Asm, MacroInfo);
2014 DwarfLineSectionSym =
2015 emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
2016 emitSectionSym(Asm, TLOF.getDwarfLocSection());
2017 if (GenerateDwarfPubNamesSection)
2018 emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
2019 emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
2020 DwarfStrSectionSym =
2021 emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
2022 if (useSplitDwarf()) {
2023 DwarfStrDWOSectionSym =
2024 emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
2025 DwarfAddrSectionSym =
2026 emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
2028 DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
2031 DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
2032 "section_debug_loc");
2034 TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
2035 emitSectionSym(Asm, TLOF.getDataSection());
2038 // Recursively emits a debug information entry.
2039 void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
2040 // Get the abbreviation for this DIE.
2041 unsigned AbbrevNumber = Die->getAbbrevNumber();
2042 const DIEAbbrev *Abbrev = Abbrevs->at(AbbrevNumber - 1);
2044 // Emit the code (index) for the abbreviation.
2045 if (Asm->isVerbose())
2046 Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
2047 Twine::utohexstr(Die->getOffset()) + ":0x" +
2048 Twine::utohexstr(Die->getSize()) + " " +
2049 dwarf::TagString(Abbrev->getTag()));
2050 Asm->EmitULEB128(AbbrevNumber);
2052 const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
2053 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
2055 // Emit the DIE attribute values.
2056 for (unsigned i = 0, N = Values.size(); i < N; ++i) {
2057 unsigned Attr = AbbrevData[i].getAttribute();
2058 unsigned Form = AbbrevData[i].getForm();
2059 assert(Form && "Too many attributes for DIE (check abbreviation)");
2061 if (Asm->isVerbose())
2062 Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
2065 case dwarf::DW_AT_abstract_origin: {
2066 DIEEntry *E = cast<DIEEntry>(Values[i]);
2067 DIE *Origin = E->getEntry();
2068 unsigned Addr = Origin->getOffset();
2069 if (Form == dwarf::DW_FORM_ref_addr) {
2070 // For DW_FORM_ref_addr, output the offset from beginning of debug info
2071 // section. Origin->getOffset() returns the offset from start of the
2073 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2074 Addr += Holder.getCUOffset(Origin->getCompileUnit());
2076 Asm->OutStreamer.EmitIntValue(Addr,
2077 Form == dwarf::DW_FORM_ref_addr ? DIEEntry::getRefAddrSize(Asm) : 4);
2080 case dwarf::DW_AT_ranges: {
2081 // DW_AT_range Value encodes offset in debug_range section.
2082 DIEInteger *V = cast<DIEInteger>(Values[i]);
2084 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
2085 Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
2089 Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
2091 DwarfDebugRangeSectionSym,
2096 case dwarf::DW_AT_location: {
2097 if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
2098 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2099 Asm->EmitLabelReference(L->getValue(), 4);
2101 Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
2103 Values[i]->EmitValue(Asm, Form);
2107 case dwarf::DW_AT_accessibility: {
2108 if (Asm->isVerbose()) {
2109 DIEInteger *V = cast<DIEInteger>(Values[i]);
2110 Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
2112 Values[i]->EmitValue(Asm, Form);
2116 // Emit an attribute using the defined form.
2117 Values[i]->EmitValue(Asm, Form);
2122 // Emit the DIE children if any.
2123 if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
2124 const std::vector<DIE *> &Children = Die->getChildren();
2126 for (unsigned j = 0, M = Children.size(); j < M; ++j)
2127 emitDIE(Children[j], Abbrevs);
2129 if (Asm->isVerbose())
2130 Asm->OutStreamer.AddComment("End Of Children Mark");
2135 // Emit the various dwarf units to the unit section USection with
2136 // the abbreviations going into ASection.
2137 void DwarfUnits::emitUnits(DwarfDebug *DD,
2138 const MCSection *USection,
2139 const MCSection *ASection,
2140 const MCSymbol *ASectionSym) {
2141 Asm->OutStreamer.SwitchSection(USection);
2142 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
2143 E = CUs.end(); I != E; ++I) {
2144 CompileUnit *TheCU = *I;
2145 DIE *Die = TheCU->getCUDie();
2147 // Emit the compile units header.
2149 .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(),
2150 TheCU->getUniqueID()));
2152 // Emit size of content not including length itself
2153 unsigned ContentSize = Die->getSize() +
2154 sizeof(int16_t) + // DWARF version number
2155 sizeof(int32_t) + // Offset Into Abbrev. Section
2156 sizeof(int8_t); // Pointer Size (in bytes)
2158 Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
2159 Asm->EmitInt32(ContentSize);
2160 Asm->OutStreamer.AddComment("DWARF version number");
2161 Asm->EmitInt16(DD->getDwarfVersion());
2162 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2163 Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
2165 Asm->OutStreamer.AddComment("Address Size (in bytes)");
2166 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2168 DD->emitDIE(Die, Abbreviations);
2169 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(),
2170 TheCU->getUniqueID()));
2174 /// For a given compile unit DIE, returns offset from beginning of debug info.
2175 unsigned DwarfUnits::getCUOffset(DIE *Die) {
2176 assert(Die->getTag() == dwarf::DW_TAG_compile_unit &&
2177 "Input DIE should be compile unit in getCUOffset.");
2178 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
2179 E = CUs.end(); I != E; ++I) {
2180 CompileUnit *TheCU = *I;
2181 if (TheCU->getCUDie() == Die)
2182 return TheCU->getDebugInfoOffset();
2184 llvm_unreachable("The compile unit DIE should belong to CUs in DwarfUnits.");
2187 // Emit the debug info section.
2188 void DwarfDebug::emitDebugInfo() {
2189 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2191 Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(),
2192 Asm->getObjFileLowering().getDwarfAbbrevSection(),
2193 DwarfAbbrevSectionSym);
2196 // Emit the abbreviation section.
2197 void DwarfDebug::emitAbbreviations() {
2198 if (!useSplitDwarf())
2199 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
2202 emitSkeletonAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
2205 void DwarfDebug::emitAbbrevs(const MCSection *Section,
2206 std::vector<DIEAbbrev *> *Abbrevs) {
2207 // Check to see if it is worth the effort.
2208 if (!Abbrevs->empty()) {
2209 // Start the debug abbrev section.
2210 Asm->OutStreamer.SwitchSection(Section);
2212 MCSymbol *Begin = Asm->GetTempSymbol(Section->getLabelBeginName());
2213 Asm->OutStreamer.EmitLabel(Begin);
2215 // For each abbrevation.
2216 for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
2217 // Get abbreviation data
2218 const DIEAbbrev *Abbrev = Abbrevs->at(i);
2220 // Emit the abbrevations code (base 1 index.)
2221 Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2223 // Emit the abbreviations data.
2227 // Mark end of abbreviations.
2228 Asm->EmitULEB128(0, "EOM(3)");
2230 MCSymbol *End = Asm->GetTempSymbol(Section->getLabelEndName());
2231 Asm->OutStreamer.EmitLabel(End);
2235 // Emit the last address of the section and the end of the line matrix.
2236 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2237 // Define last address of section.
2238 Asm->OutStreamer.AddComment("Extended Op");
2241 Asm->OutStreamer.AddComment("Op size");
2242 Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
2243 Asm->OutStreamer.AddComment("DW_LNE_set_address");
2244 Asm->EmitInt8(dwarf::DW_LNE_set_address);
2246 Asm->OutStreamer.AddComment("Section end label");
2248 Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2249 Asm->getDataLayout().getPointerSize());
2251 // Mark end of matrix.
2252 Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2258 // Emit visible names into a hashed accelerator table section.
2259 void DwarfDebug::emitAccelNames() {
2260 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2261 dwarf::DW_FORM_data4));
2262 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2263 E = CUMap.end(); I != E; ++I) {
2264 CompileUnit *TheCU = I->second;
2265 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
2266 for (StringMap<std::vector<DIE*> >::const_iterator
2267 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2268 StringRef Name = GI->getKey();
2269 const std::vector<DIE *> &Entities = GI->second;
2270 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2271 DE = Entities.end(); DI != DE; ++DI)
2272 AT.AddName(Name, (*DI));
2276 AT.FinalizeTable(Asm, "Names");
2277 Asm->OutStreamer.SwitchSection(
2278 Asm->getObjFileLowering().getDwarfAccelNamesSection());
2279 MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2280 Asm->OutStreamer.EmitLabel(SectionBegin);
2282 // Emit the full data.
2283 AT.Emit(Asm, SectionBegin, &InfoHolder);
2286 // Emit objective C classes and categories into a hashed accelerator table
2288 void DwarfDebug::emitAccelObjC() {
2289 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2290 dwarf::DW_FORM_data4));
2291 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2292 E = CUMap.end(); I != E; ++I) {
2293 CompileUnit *TheCU = I->second;
2294 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
2295 for (StringMap<std::vector<DIE*> >::const_iterator
2296 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2297 StringRef Name = GI->getKey();
2298 const std::vector<DIE *> &Entities = GI->second;
2299 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2300 DE = Entities.end(); DI != DE; ++DI)
2301 AT.AddName(Name, (*DI));
2305 AT.FinalizeTable(Asm, "ObjC");
2306 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2307 .getDwarfAccelObjCSection());
2308 MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2309 Asm->OutStreamer.EmitLabel(SectionBegin);
2311 // Emit the full data.
2312 AT.Emit(Asm, SectionBegin, &InfoHolder);
2315 // Emit namespace dies into a hashed accelerator table.
2316 void DwarfDebug::emitAccelNamespaces() {
2317 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2318 dwarf::DW_FORM_data4));
2319 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2320 E = CUMap.end(); I != E; ++I) {
2321 CompileUnit *TheCU = I->second;
2322 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
2323 for (StringMap<std::vector<DIE*> >::const_iterator
2324 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2325 StringRef Name = GI->getKey();
2326 const std::vector<DIE *> &Entities = GI->second;
2327 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2328 DE = Entities.end(); DI != DE; ++DI)
2329 AT.AddName(Name, (*DI));
2333 AT.FinalizeTable(Asm, "namespac");
2334 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2335 .getDwarfAccelNamespaceSection());
2336 MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2337 Asm->OutStreamer.EmitLabel(SectionBegin);
2339 // Emit the full data.
2340 AT.Emit(Asm, SectionBegin, &InfoHolder);
2343 // Emit type dies into a hashed accelerator table.
2344 void DwarfDebug::emitAccelTypes() {
2345 std::vector<DwarfAccelTable::Atom> Atoms;
2346 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2347 dwarf::DW_FORM_data4));
2348 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
2349 dwarf::DW_FORM_data2));
2350 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
2351 dwarf::DW_FORM_data1));
2352 DwarfAccelTable AT(Atoms);
2353 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2354 E = CUMap.end(); I != E; ++I) {
2355 CompileUnit *TheCU = I->second;
2356 const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
2357 = TheCU->getAccelTypes();
2358 for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
2359 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2360 StringRef Name = GI->getKey();
2361 const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2362 for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
2363 = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
2364 AT.AddName(Name, (*DI).first, (*DI).second);
2368 AT.FinalizeTable(Asm, "types");
2369 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2370 .getDwarfAccelTypesSection());
2371 MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2372 Asm->OutStreamer.EmitLabel(SectionBegin);
2374 // Emit the full data.
2375 AT.Emit(Asm, SectionBegin, &InfoHolder);
2378 /// emitDebugPubnames - Emit visible names into a debug pubnames section.
2380 void DwarfDebug::emitDebugPubnames() {
2381 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2383 typedef DenseMap<const MDNode*, CompileUnit*> CUMapType;
2384 for (CUMapType::iterator I = CUMap.begin(), E = CUMap.end(); I != E; ++I) {
2385 CompileUnit *TheCU = I->second;
2386 unsigned ID = TheCU->getUniqueID();
2388 if (TheCU->getGlobalNames().empty())
2391 // Start the dwarf pubnames section.
2392 Asm->OutStreamer.SwitchSection(
2393 Asm->getObjFileLowering().getDwarfPubNamesSection());
2395 Asm->OutStreamer.AddComment("Length of Public Names Info");
2396 Asm->EmitLabelDifference(Asm->GetTempSymbol("pubnames_end", ID),
2397 Asm->GetTempSymbol("pubnames_begin", ID), 4);
2399 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
2401 Asm->OutStreamer.AddComment("DWARF Version");
2402 Asm->EmitInt16(DwarfVersion);
2404 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2405 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2406 DwarfInfoSectionSym);
2408 Asm->OutStreamer.AddComment("Compilation Unit Length");
2409 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(), ID),
2410 Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2413 const StringMap<DIE*> &Globals = TheCU->getGlobalNames();
2414 for (StringMap<DIE*>::const_iterator
2415 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2416 const char *Name = GI->getKeyData();
2417 const DIE *Entity = GI->second;
2419 Asm->OutStreamer.AddComment("DIE offset");
2420 Asm->EmitInt32(Entity->getOffset());
2422 if (Asm->isVerbose())
2423 Asm->OutStreamer.AddComment("External Name");
2424 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2427 Asm->OutStreamer.AddComment("End Mark");
2429 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end", ID));
2433 void DwarfDebug::emitDebugPubTypes() {
2434 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2435 E = CUMap.end(); I != E; ++I) {
2436 CompileUnit *TheCU = I->second;
2437 // Start the dwarf pubtypes section.
2438 Asm->OutStreamer.SwitchSection(
2439 Asm->getObjFileLowering().getDwarfPubTypesSection());
2440 Asm->OutStreamer.AddComment("Length of Public Types Info");
2441 Asm->EmitLabelDifference(
2442 Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2443 Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2445 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2446 TheCU->getUniqueID()));
2448 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2449 Asm->EmitInt16(DwarfVersion);
2451 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2452 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2453 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(),
2454 TheCU->getUniqueID()),
2455 DwarfInfoSectionSym);
2457 Asm->OutStreamer.AddComment("Compilation Unit Length");
2458 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(),
2459 TheCU->getUniqueID()),
2460 Asm->GetTempSymbol(ISec->getLabelBeginName(),
2461 TheCU->getUniqueID()),
2464 const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2465 for (StringMap<DIE*>::const_iterator
2466 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2467 const char *Name = GI->getKeyData();
2468 DIE *Entity = GI->second;
2470 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2471 Asm->EmitInt32(Entity->getOffset());
2473 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2474 // Emit the name with a terminating null byte.
2475 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2478 Asm->OutStreamer.AddComment("End Mark");
2480 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2481 TheCU->getUniqueID()));
2485 // Emit strings into a string section.
2486 void DwarfUnits::emitStrings(const MCSection *StrSection,
2487 const MCSection *OffsetSection = NULL,
2488 const MCSymbol *StrSecSym = NULL) {
2490 if (StringPool.empty()) return;
2492 // Start the dwarf str section.
2493 Asm->OutStreamer.SwitchSection(StrSection);
2495 // Get all of the string pool entries and put them in an array by their ID so
2496 // we can sort them.
2497 SmallVector<std::pair<unsigned,
2498 StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2500 for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2501 I = StringPool.begin(), E = StringPool.end();
2503 Entries.push_back(std::make_pair(I->second.second, &*I));
2505 array_pod_sort(Entries.begin(), Entries.end());
2507 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2508 // Emit a label for reference from debug information entries.
2509 Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2511 // Emit the string itself with a terminating null byte.
2512 Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2513 Entries[i].second->getKeyLength()+1));
2516 // If we've got an offset section go ahead and emit that now as well.
2517 if (OffsetSection) {
2518 Asm->OutStreamer.SwitchSection(OffsetSection);
2519 unsigned offset = 0;
2520 unsigned size = 4; // FIXME: DWARF64 is 8.
2521 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2522 Asm->OutStreamer.EmitIntValue(offset, size);
2523 offset += Entries[i].second->getKeyLength() + 1;
2528 // Emit strings into a string section.
2529 void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2531 if (AddressPool.empty()) return;
2533 // Start the dwarf addr section.
2534 Asm->OutStreamer.SwitchSection(AddrSection);
2536 // Order the address pool entries by ID
2537 SmallVector<const MCExpr *, 64> Entries(AddressPool.size());
2539 for (DenseMap<const MCExpr *, unsigned>::iterator I = AddressPool.begin(),
2540 E = AddressPool.end();
2542 Entries[I->second] = I->first;
2544 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2545 // Emit an expression for reference from debug information entries.
2546 if (const MCExpr *Expr = Entries[i])
2547 Asm->OutStreamer.EmitValue(Expr, Asm->getDataLayout().getPointerSize());
2549 Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2554 // Emit visible names into a debug str section.
2555 void DwarfDebug::emitDebugStr() {
2556 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2557 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2560 // Emit locations into the debug loc section.
2561 void DwarfDebug::emitDebugLoc() {
2562 if (DotDebugLocEntries.empty())
2565 for (SmallVectorImpl<DotDebugLocEntry>::iterator
2566 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2568 DotDebugLocEntry &Entry = *I;
2569 if (I + 1 != DotDebugLocEntries.end())
2573 // Start the dwarf loc section.
2574 Asm->OutStreamer.SwitchSection(
2575 Asm->getObjFileLowering().getDwarfLocSection());
2576 unsigned char Size = Asm->getDataLayout().getPointerSize();
2577 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2579 for (SmallVectorImpl<DotDebugLocEntry>::iterator
2580 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2581 I != E; ++I, ++index) {
2582 DotDebugLocEntry &Entry = *I;
2583 if (Entry.isMerged()) continue;
2584 if (Entry.isEmpty()) {
2585 Asm->OutStreamer.EmitIntValue(0, Size);
2586 Asm->OutStreamer.EmitIntValue(0, Size);
2587 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2589 Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size);
2590 Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size);
2591 DIVariable DV(Entry.getVariable());
2592 Asm->OutStreamer.AddComment("Loc expr size");
2593 MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2594 MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2595 Asm->EmitLabelDifference(end, begin, 2);
2596 Asm->OutStreamer.EmitLabel(begin);
2597 if (Entry.isInt()) {
2598 DIBasicType BTy(DV.getType());
2600 (BTy.getEncoding() == dwarf::DW_ATE_signed
2601 || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2602 Asm->OutStreamer.AddComment("DW_OP_consts");
2603 Asm->EmitInt8(dwarf::DW_OP_consts);
2604 Asm->EmitSLEB128(Entry.getInt());
2606 Asm->OutStreamer.AddComment("DW_OP_constu");
2607 Asm->EmitInt8(dwarf::DW_OP_constu);
2608 Asm->EmitULEB128(Entry.getInt());
2610 } else if (Entry.isLocation()) {
2611 MachineLocation Loc = Entry.getLoc();
2612 if (!DV.hasComplexAddress())
2614 Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2616 // Complex address entry.
2617 unsigned N = DV.getNumAddrElements();
2619 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2620 if (Loc.getOffset()) {
2622 Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2623 Asm->OutStreamer.AddComment("DW_OP_deref");
2624 Asm->EmitInt8(dwarf::DW_OP_deref);
2625 Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2626 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2627 Asm->EmitSLEB128(DV.getAddrElement(1));
2629 // If first address element is OpPlus then emit
2630 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2631 MachineLocation TLoc(Loc.getReg(), DV.getAddrElement(1));
2632 Asm->EmitDwarfRegOp(TLoc, DV.isIndirect());
2636 Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2639 // Emit remaining complex address elements.
2640 for (; i < N; ++i) {
2641 uint64_t Element = DV.getAddrElement(i);
2642 if (Element == DIBuilder::OpPlus) {
2643 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2644 Asm->EmitULEB128(DV.getAddrElement(++i));
2645 } else if (Element == DIBuilder::OpDeref) {
2647 Asm->EmitInt8(dwarf::DW_OP_deref);
2649 llvm_unreachable("unknown Opcode found in complex address");
2653 // else ... ignore constant fp. There is not any good way to
2654 // to represent them here in dwarf.
2655 Asm->OutStreamer.EmitLabel(end);
2660 // Emit visible names into a debug aranges section.
2661 void DwarfDebug::emitDebugARanges() {
2662 // Start the dwarf aranges section.
2663 Asm->OutStreamer.SwitchSection(
2664 Asm->getObjFileLowering().getDwarfARangesSection());
2667 // Emit visible names into a debug ranges section.
2668 void DwarfDebug::emitDebugRanges() {
2669 // Start the dwarf ranges section.
2670 Asm->OutStreamer.SwitchSection(
2671 Asm->getObjFileLowering().getDwarfRangesSection());
2672 unsigned char Size = Asm->getDataLayout().getPointerSize();
2673 for (SmallVectorImpl<const MCSymbol *>::iterator
2674 I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2677 Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
2679 Asm->OutStreamer.EmitIntValue(0, Size);
2683 // Emit visible names into a debug macinfo section.
2684 void DwarfDebug::emitDebugMacInfo() {
2685 if (const MCSection *LineInfo =
2686 Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2687 // Start the dwarf macinfo section.
2688 Asm->OutStreamer.SwitchSection(LineInfo);
2692 // Emit inline info using following format.
2694 // 1. length of section
2695 // 2. Dwarf version number
2698 // Entries (one "entry" for each function that was inlined):
2700 // 1. offset into __debug_str section for MIPS linkage name, if exists;
2701 // otherwise offset into __debug_str for regular function name.
2702 // 2. offset into __debug_str section for regular function name.
2703 // 3. an unsigned LEB128 number indicating the number of distinct inlining
2704 // instances for the function.
2706 // The rest of the entry consists of a {die_offset, low_pc} pair for each
2707 // inlined instance; the die_offset points to the inlined_subroutine die in the
2708 // __debug_info section, and the low_pc is the starting address for the
2709 // inlining instance.
2710 void DwarfDebug::emitDebugInlineInfo() {
2711 if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2717 Asm->OutStreamer.SwitchSection(
2718 Asm->getObjFileLowering().getDwarfDebugInlineSection());
2720 Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2721 Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2722 Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2724 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2726 Asm->OutStreamer.AddComment("Dwarf Version");
2727 Asm->EmitInt16(DwarfVersion);
2728 Asm->OutStreamer.AddComment("Address Size (in bytes)");
2729 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2731 for (SmallVectorImpl<const MDNode *>::iterator I = InlinedSPNodes.begin(),
2732 E = InlinedSPNodes.end(); I != E; ++I) {
2734 const MDNode *Node = *I;
2735 InlineInfoMap::iterator II = InlineInfo.find(Node);
2736 SmallVectorImpl<InlineInfoLabels> &Labels = II->second;
2737 DISubprogram SP(Node);
2738 StringRef LName = SP.getLinkageName();
2739 StringRef Name = SP.getName();
2741 Asm->OutStreamer.AddComment("MIPS linkage name");
2743 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2744 DwarfStrSectionSym);
2746 Asm->EmitSectionOffset(
2747 InfoHolder.getStringPoolEntry(Function::getRealLinkageName(LName)),
2748 DwarfStrSectionSym);
2750 Asm->OutStreamer.AddComment("Function name");
2751 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2752 DwarfStrSectionSym);
2753 Asm->EmitULEB128(Labels.size(), "Inline count");
2755 for (SmallVectorImpl<InlineInfoLabels>::iterator LI = Labels.begin(),
2756 LE = Labels.end(); LI != LE; ++LI) {
2757 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2758 Asm->EmitInt32(LI->second->getOffset());
2760 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2761 Asm->OutStreamer.EmitSymbolValue(LI->first,
2762 Asm->getDataLayout().getPointerSize());
2766 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2769 // DWARF5 Experimental Separate Dwarf emitters.
2771 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2772 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2773 // DW_AT_ranges_base, DW_AT_addr_base. If DW_AT_ranges is present,
2774 // DW_AT_low_pc and DW_AT_high_pc are not used, and vice versa.
2775 CompileUnit *DwarfDebug::constructSkeletonCU(const MDNode *N) {
2776 DICompileUnit DIUnit(N);
2777 CompilationDir = DIUnit.getDirectory();
2779 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2780 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
2781 DIUnit.getLanguage(), Die, N, Asm,
2782 this, &SkeletonHolder);
2784 NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2785 DIUnit.getSplitDebugFilename());
2787 // This should be a unique identifier when we want to build .dwp files.
2788 NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
2790 // Relocate to the beginning of the addr_base section, else 0 for the
2791 // beginning of the one for this compile unit.
2792 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2793 NewCU->addLabel(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset,
2794 DwarfAddrSectionSym);
2796 NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base,
2797 dwarf::DW_FORM_sec_offset, 0);
2799 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2800 // into an entity. We're using 0, or a NULL label for this.
2801 NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2803 // DW_AT_stmt_list is a offset of line number information for this
2804 // compile unit in debug_line section.
2805 // FIXME: Should handle multiple compile units.
2806 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2807 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2808 DwarfLineSectionSym);
2810 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2812 if (!CompilationDir.empty())
2813 NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2815 SkeletonHolder.addUnit(NewCU);
2816 SkeletonCUs.push_back(NewCU);
2821 void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
2822 assert(useSplitDwarf() && "No split dwarf debug info?");
2823 emitAbbrevs(Section, &SkeletonAbbrevs);
2826 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2827 // compile units that would normally be in debug_info.
2828 void DwarfDebug::emitDebugInfoDWO() {
2829 assert(useSplitDwarf() && "No split dwarf debug info?");
2830 InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
2831 Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2832 DwarfAbbrevDWOSectionSym);
2835 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2836 // abbreviations for the .debug_info.dwo section.
2837 void DwarfDebug::emitDebugAbbrevDWO() {
2838 assert(useSplitDwarf() && "No split dwarf?");
2839 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2843 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2844 // string section and is identical in format to traditional .debug_str
2846 void DwarfDebug::emitDebugStrDWO() {
2847 assert(useSplitDwarf() && "No split dwarf?");
2848 const MCSection *OffSec = Asm->getObjFileLowering()
2849 .getDwarfStrOffDWOSection();
2850 const MCSymbol *StrSym = DwarfStrSectionSym;
2851 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),