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/Path.h"
40 #include "llvm/Support/Timer.h"
41 #include "llvm/Support/ValueHandle.h"
42 #include "llvm/Target/TargetFrameLowering.h"
43 #include "llvm/Target/TargetLoweringObjectFile.h"
44 #include "llvm/Target/TargetMachine.h"
45 #include "llvm/Target/TargetOptions.h"
46 #include "llvm/Target/TargetRegisterInfo.h"
49 static cl::opt<bool> DisableDebugInfoPrinting("disable-debug-info-print",
51 cl::desc("Disable debug info printing"));
53 static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
54 cl::desc("Make an absence of debug location information explicit."),
57 static cl::opt<bool> GenerateDwarfPubNamesSection("generate-dwarf-pubnames",
58 cl::Hidden, cl::init(false),
59 cl::desc("Generate DWARF pubnames section"));
63 Default, Enable, Disable
67 static cl::opt<DefaultOnOff> DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
68 cl::desc("Output prototype dwarf accelerator tables."),
70 clEnumVal(Default, "Default for platform"),
71 clEnumVal(Enable, "Enabled"),
72 clEnumVal(Disable, "Disabled"),
76 static cl::opt<DefaultOnOff> DarwinGDBCompat("darwin-gdb-compat", cl::Hidden,
77 cl::desc("Compatibility with Darwin gdb."),
79 clEnumVal(Default, "Default for platform"),
80 clEnumVal(Enable, "Enabled"),
81 clEnumVal(Disable, "Disabled"),
85 static cl::opt<DefaultOnOff> SplitDwarf("split-dwarf", cl::Hidden,
86 cl::desc("Output prototype dwarf split debug info."),
88 clEnumVal(Default, "Default for platform"),
89 clEnumVal(Enable, "Enabled"),
90 clEnumVal(Disable, "Disabled"),
95 const char *DWARFGroupName = "DWARF Emission";
96 const char *DbgTimerName = "DWARF Debug Writer";
99 template <typename T> bool operator()(const T &lhs, const T &rhs) const {
100 return lhs.first < rhs.first;
103 } // end anonymous namespace
105 //===----------------------------------------------------------------------===//
107 // Configuration values for initial hash set sizes (log2).
109 static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
113 DIType DbgVariable::getType() const {
114 DIType Ty = Var.getType();
115 // FIXME: isBlockByrefVariable should be reformulated in terms of complex
116 // addresses instead.
117 if (Var.isBlockByrefVariable()) {
118 /* Byref variables, in Blocks, are declared by the programmer as
119 "SomeType VarName;", but the compiler creates a
120 __Block_byref_x_VarName struct, and gives the variable VarName
121 either the struct, or a pointer to the struct, as its type. This
122 is necessary for various behind-the-scenes things the compiler
123 needs to do with by-reference variables in blocks.
125 However, as far as the original *programmer* is concerned, the
126 variable should still have type 'SomeType', as originally declared.
128 The following function dives into the __Block_byref_x_VarName
129 struct to find the original type of the variable. This will be
130 passed back to the code generating the type for the Debug
131 Information Entry for the variable 'VarName'. 'VarName' will then
132 have the original type 'SomeType' in its debug information.
134 The original type 'SomeType' will be the type of the field named
135 'VarName' inside the __Block_byref_x_VarName struct.
137 NOTE: In order for this to not completely fail on the debugger
138 side, the Debug Information Entry for the variable VarName needs to
139 have a DW_AT_location that tells the debugger how to unwind through
140 the pointers and __Block_byref_x_VarName struct to find the actual
141 value of the variable. The function addBlockByrefType does this. */
143 unsigned tag = Ty.getTag();
145 if (tag == dwarf::DW_TAG_pointer_type) {
146 DIDerivedType DTy = DIDerivedType(Ty);
147 subType = DTy.getTypeDerivedFrom();
150 DICompositeType blockStruct = DICompositeType(subType);
151 DIArray Elements = blockStruct.getTypeArray();
153 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
154 DIDescriptor Element = Elements.getElement(i);
155 DIDerivedType DT = DIDerivedType(Element);
156 if (getName() == DT.getName())
157 return (DT.getTypeDerivedFrom());
163 } // end llvm namespace
165 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
166 : Asm(A), MMI(Asm->MMI), FirstCU(0),
167 AbbreviationsSet(InitAbbreviationsSetSize),
168 SourceIdMap(DIEValueAllocator),
169 PrevLabel(NULL), GlobalCUIndexCount(0),
170 InfoHolder(A, &AbbreviationsSet, &Abbreviations, "info_string",
172 SkeletonAbbrevSet(InitAbbreviationsSetSize),
173 SkeletonHolder(A, &SkeletonAbbrevSet, &SkeletonAbbrevs, "skel_string",
176 DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
177 DwarfStrSectionSym = TextSectionSym = 0;
178 DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0;
179 DwarfAddrSectionSym = 0;
180 DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0;
181 FunctionBeginSym = FunctionEndSym = 0;
183 // Turn on accelerator tables and older gdb compatibility
185 bool IsDarwin = Triple(A->getTargetTriple()).isOSDarwin();
186 if (DarwinGDBCompat == Default) {
188 IsDarwinGDBCompat = true;
190 IsDarwinGDBCompat = false;
192 IsDarwinGDBCompat = DarwinGDBCompat == Enable ? true : false;
194 if (DwarfAccelTables == Default) {
196 HasDwarfAccelTables = true;
198 HasDwarfAccelTables = false;
200 HasDwarfAccelTables = DwarfAccelTables == Enable ? true : false;
202 if (SplitDwarf == Default)
203 HasSplitDwarf = false;
205 HasSplitDwarf = SplitDwarf == Enable ? true : false;
208 NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
212 DwarfDebug::~DwarfDebug() {
215 // Switch to the specified MCSection and emit an assembler
216 // temporary label to it if SymbolStem is specified.
217 static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section,
218 const char *SymbolStem = 0) {
219 Asm->OutStreamer.SwitchSection(Section);
220 if (!SymbolStem) return 0;
222 MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
223 Asm->OutStreamer.EmitLabel(TmpSym);
227 MCSymbol *DwarfUnits::getStringPoolSym() {
228 return Asm->GetTempSymbol(StringPref);
231 MCSymbol *DwarfUnits::getStringPoolEntry(StringRef Str) {
232 std::pair<MCSymbol*, unsigned> &Entry =
233 StringPool.GetOrCreateValue(Str).getValue();
234 if (Entry.first) return Entry.first;
236 Entry.second = NextStringPoolNumber++;
237 return Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
240 unsigned DwarfUnits::getStringPoolIndex(StringRef Str) {
241 std::pair<MCSymbol*, unsigned> &Entry =
242 StringPool.GetOrCreateValue(Str).getValue();
243 if (Entry.first) return Entry.second;
245 Entry.second = NextStringPoolNumber++;
246 Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
250 unsigned DwarfUnits::getAddrPoolIndex(MCSymbol *Sym) {
251 std::pair<MCSymbol*, unsigned> &Entry = AddressPool[Sym];
252 if (Entry.first) return Entry.second;
254 Entry.second = NextAddrPoolNumber++;
259 // Define a unique number for the abbreviation.
261 void DwarfUnits::assignAbbrevNumber(DIEAbbrev &Abbrev) {
262 // Profile the node so that we can make it unique.
266 // Check the set for priors.
267 DIEAbbrev *InSet = AbbreviationsSet->GetOrInsertNode(&Abbrev);
269 // If it's newly added.
270 if (InSet == &Abbrev) {
271 // Add to abbreviation list.
272 Abbreviations->push_back(&Abbrev);
274 // Assign the vector position + 1 as its number.
275 Abbrev.setNumber(Abbreviations->size());
277 // Assign existing abbreviation number.
278 Abbrev.setNumber(InSet->getNumber());
282 static bool isObjCClass(StringRef Name) {
283 return Name.startswith("+") || Name.startswith("-");
286 static bool hasObjCCategory(StringRef Name) {
287 if (!isObjCClass(Name)) return false;
289 size_t pos = Name.find(')');
290 if (pos != std::string::npos) {
291 if (Name[pos+1] != ' ') return false;
297 static void getObjCClassCategory(StringRef In, StringRef &Class,
298 StringRef &Category) {
299 if (!hasObjCCategory(In)) {
300 Class = In.slice(In.find('[') + 1, In.find(' '));
305 Class = In.slice(In.find('[') + 1, In.find('('));
306 Category = In.slice(In.find('[') + 1, In.find(' '));
310 static StringRef getObjCMethodName(StringRef In) {
311 return In.slice(In.find(' ') + 1, In.find(']'));
314 // Add the various names to the Dwarf accelerator table names.
315 static void addSubprogramNames(CompileUnit *TheCU, DISubprogram SP,
317 if (!SP.isDefinition()) return;
319 TheCU->addAccelName(SP.getName(), Die);
321 // If the linkage name is different than the name, go ahead and output
322 // that as well into the name table.
323 if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
324 TheCU->addAccelName(SP.getLinkageName(), Die);
326 // If this is an Objective-C selector name add it to the ObjC accelerator
328 if (isObjCClass(SP.getName())) {
329 StringRef Class, Category;
330 getObjCClassCategory(SP.getName(), Class, Category);
331 TheCU->addAccelObjC(Class, Die);
333 TheCU->addAccelObjC(Category, Die);
334 // Also add the base method name to the name table.
335 TheCU->addAccelName(getObjCMethodName(SP.getName()), Die);
339 // Find DIE for the given subprogram and attach appropriate DW_AT_low_pc
340 // and DW_AT_high_pc attributes. If there are global variables in this
341 // scope then create and insert DIEs for these variables.
342 DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
343 const MDNode *SPNode) {
344 DIE *SPDie = SPCU->getDIE(SPNode);
346 assert(SPDie && "Unable to find subprogram DIE!");
347 DISubprogram SP(SPNode);
349 // If we're updating an abstract DIE, then we will be adding the children and
350 // object pointer later on. But what we don't want to do is process the
351 // concrete DIE twice.
352 DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode);
354 bool InSameCU = (AbsSPDIE->getCompileUnit() == SPCU->getCUDie());
355 // Pick up abstract subprogram DIE.
356 SPDie = new DIE(dwarf::DW_TAG_subprogram);
357 // If AbsSPDIE belongs to a different CU, use DW_FORM_ref_addr instead of
359 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
360 InSameCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
364 DISubprogram SPDecl = SP.getFunctionDeclaration();
365 if (!SPDecl.isSubprogram()) {
366 // There is not any need to generate specification DIE for a function
367 // defined at compile unit level. If a function is defined inside another
368 // function then gdb prefers the definition at top level and but does not
369 // expect specification DIE in parent function. So avoid creating
370 // specification DIE for a function defined inside a function.
371 if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
372 !SP.getContext().isFile() &&
373 !isSubprogramContext(SP.getContext())) {
374 SPCU->addFlag(SPDie, dwarf::DW_AT_declaration);
377 DICompositeType SPTy = SP.getType();
378 DIArray Args = SPTy.getTypeArray();
379 unsigned SPTag = SPTy.getTag();
380 if (SPTag == dwarf::DW_TAG_subroutine_type)
381 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
382 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
383 DIType ATy = DIType(Args.getElement(i));
384 SPCU->addType(Arg, ATy);
385 if (ATy.isArtificial())
386 SPCU->addFlag(Arg, dwarf::DW_AT_artificial);
387 if (ATy.isObjectPointer())
388 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer,
389 dwarf::DW_FORM_ref4, Arg);
390 SPDie->addChild(Arg);
392 DIE *SPDeclDie = SPDie;
393 SPDie = new DIE(dwarf::DW_TAG_subprogram);
394 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification,
395 dwarf::DW_FORM_ref4, SPDeclDie);
401 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_low_pc,
402 Asm->GetTempSymbol("func_begin",
403 Asm->getFunctionNumber()));
404 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_high_pc,
405 Asm->GetTempSymbol("func_end",
406 Asm->getFunctionNumber()));
407 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
408 MachineLocation Location(RI->getFrameRegister(*Asm->MF));
409 SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
411 // Add name to the name table, we do this here because we're guaranteed
412 // to have concrete versions of our DW_TAG_subprogram nodes.
413 addSubprogramNames(SPCU, SP, SPDie);
418 // Construct new DW_TAG_lexical_block for this scope and attach
419 // DW_AT_low_pc/DW_AT_high_pc labels.
420 DIE *DwarfDebug::constructLexicalScopeDIE(CompileUnit *TheCU,
421 LexicalScope *Scope) {
422 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
423 if (Scope->isAbstractScope())
426 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
430 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
431 if (Ranges.size() > 1) {
432 // .debug_range section has not been laid out yet. Emit offset in
433 // .debug_range as a uint, size 4, for now. emitDIE will handle
434 // DW_AT_ranges appropriately.
435 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
436 DebugRangeSymbols.size()
437 * Asm->getDataLayout().getPointerSize());
438 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
439 RE = Ranges.end(); RI != RE; ++RI) {
440 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
441 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
443 DebugRangeSymbols.push_back(NULL);
444 DebugRangeSymbols.push_back(NULL);
448 MCSymbol *Start = getLabelBeforeInsn(RI->first);
449 MCSymbol *End = getLabelAfterInsn(RI->second);
451 if (End == 0) return 0;
453 assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
454 assert(End->isDefined() && "Invalid end label for an inlined scope!");
456 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, Start);
457 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, End);
462 // This scope represents inlined body of a function. Construct DIE to
463 // represent this concrete inlined copy of the function.
464 DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
465 LexicalScope *Scope) {
466 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
467 assert(Ranges.empty() == false &&
468 "LexicalScope does not have instruction markers!");
470 if (!Scope->getScopeNode())
472 DIScope DS(Scope->getScopeNode());
473 DISubprogram InlinedSP = getDISubprogram(DS);
474 DIE *OriginDIE = TheCU->getDIE(InlinedSP);
476 DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram.");
480 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
481 MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
482 MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
484 if (StartLabel == 0 || EndLabel == 0) {
485 llvm_unreachable("Unexpected Start and End labels for an inlined scope!");
487 assert(StartLabel->isDefined() &&
488 "Invalid starting label for an inlined scope!");
489 assert(EndLabel->isDefined() &&
490 "Invalid end label for an inlined scope!");
492 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
493 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
494 dwarf::DW_FORM_ref4, OriginDIE);
496 if (Ranges.size() > 1) {
497 // .debug_range section has not been laid out yet. Emit offset in
498 // .debug_range as a uint, size 4, for now. emitDIE will handle
499 // DW_AT_ranges appropriately.
500 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
501 DebugRangeSymbols.size()
502 * Asm->getDataLayout().getPointerSize());
503 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
504 RE = Ranges.end(); RI != RE; ++RI) {
505 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
506 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
508 DebugRangeSymbols.push_back(NULL);
509 DebugRangeSymbols.push_back(NULL);
511 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, StartLabel);
512 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, EndLabel);
515 InlinedSubprogramDIEs.insert(OriginDIE);
517 // Track the start label for this inlined function.
518 //.debug_inlined section specification does not clearly state how
519 // to emit inlined scope that is split into multiple instruction ranges.
520 // For now, use first instruction range and emit low_pc/high_pc pair and
521 // corresponding .debug_inlined section entry for this pair.
522 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
523 I = InlineInfo.find(InlinedSP);
525 if (I == InlineInfo.end()) {
526 InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel, ScopeDIE));
527 InlinedSPNodes.push_back(InlinedSP);
529 I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
531 DILocation DL(Scope->getInlinedAt());
532 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0,
533 getOrCreateSourceID(DL.getFilename(), DL.getDirectory(),
534 TheCU->getUniqueID()));
535 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
537 // Add name to the name table, we do this here because we're guaranteed
538 // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
539 addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
544 // Construct a DIE for this scope.
545 DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
546 if (!Scope || !Scope->getScopeNode())
549 DIScope DS(Scope->getScopeNode());
550 // Early return to avoid creating dangling variable|scope DIEs.
551 if (!Scope->getInlinedAt() && DS.isSubprogram() && Scope->isAbstractScope() &&
555 SmallVector<DIE *, 8> Children;
556 DIE *ObjectPointer = NULL;
558 // Collect arguments for current function.
559 if (LScopes.isCurrentFunctionScope(Scope))
560 for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
561 if (DbgVariable *ArgDV = CurrentFnArguments[i])
563 TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope())) {
564 Children.push_back(Arg);
565 if (ArgDV->isObjectPointer()) ObjectPointer = Arg;
568 // Collect lexical scope children first.
569 const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
570 for (unsigned i = 0, N = Variables.size(); i < N; ++i)
572 TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope())) {
573 Children.push_back(Variable);
574 if (Variables[i]->isObjectPointer()) ObjectPointer = Variable;
576 const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
577 for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
578 if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
579 Children.push_back(Nested);
580 DIE *ScopeDIE = NULL;
581 if (Scope->getInlinedAt())
582 ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
583 else if (DS.isSubprogram()) {
584 ProcessedSPNodes.insert(DS);
585 if (Scope->isAbstractScope()) {
586 ScopeDIE = TheCU->getDIE(DS);
587 // Note down abstract DIE.
589 AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
592 ScopeDIE = updateSubprogramScopeDIE(TheCU, DS);
595 // There is no need to emit empty lexical block DIE.
596 std::pair<ImportedEntityMap::const_iterator,
597 ImportedEntityMap::const_iterator> Range = std::equal_range(
598 ScopesWithImportedEntities.begin(), ScopesWithImportedEntities.end(),
599 std::pair<const MDNode *, const MDNode *>(DS, (const MDNode*)0),
601 if (Children.empty() && Range.first == Range.second)
603 ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
604 for (ImportedEntityMap::const_iterator i = Range.first; i != Range.second;
606 constructImportedEntityDIE(TheCU, i->second, ScopeDIE);
609 if (!ScopeDIE) return NULL;
612 for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
613 E = Children.end(); I != E; ++I)
614 ScopeDIE->addChild(*I);
616 if (DS.isSubprogram() && ObjectPointer != NULL)
617 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer,
618 dwarf::DW_FORM_ref4, ObjectPointer);
620 if (DS.isSubprogram())
621 TheCU->addPubTypes(DISubprogram(DS));
626 // Look up the source id with the given directory and source file names.
627 // If none currently exists, create a new id and insert it in the
628 // SourceIds map. This can update DirectoryNames and SourceFileNames maps
630 unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName,
631 StringRef DirName, unsigned CUID) {
632 // If we use .loc in assembly, we can't separate .file entries according to
633 // compile units. Thus all files will belong to the default compile unit.
634 if (Asm->TM.hasMCUseLoc() &&
635 Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer)
638 // If FE did not provide a file name, then assume stdin.
639 if (FileName.empty())
640 return getOrCreateSourceID("<stdin>", StringRef(), CUID);
642 // TODO: this might not belong here. See if we can factor this better.
643 if (DirName == CompilationDir)
646 // FileIDCUMap stores the current ID for the given compile unit.
647 unsigned SrcId = FileIDCUMap[CUID] + 1;
649 // We look up the CUID/file/dir by concatenating them with a zero byte.
650 SmallString<128> NamePair;
651 NamePair += utostr(CUID);
654 NamePair += '\0'; // Zero bytes are not allowed in paths.
655 NamePair += FileName;
657 StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId);
658 if (Ent.getValue() != SrcId)
659 return Ent.getValue();
661 FileIDCUMap[CUID] = SrcId;
662 // Print out a .file directive to specify files for .loc directives.
663 Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName, CUID);
668 // Create new CompileUnit for the given metadata node with tag
669 // DW_TAG_compile_unit.
670 CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) {
671 DICompileUnit DIUnit(N);
672 StringRef FN = DIUnit.getFilename();
673 CompilationDir = DIUnit.getDirectory();
675 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
676 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
677 DIUnit.getLanguage(), Die, N, Asm,
680 FileIDCUMap[NewCU->getUniqueID()] = 0;
681 // Call this to emit a .file directive if it wasn't emitted for the source
682 // file this CU comes from yet.
683 getOrCreateSourceID(FN, CompilationDir, NewCU->getUniqueID());
685 NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
686 NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
687 DIUnit.getLanguage());
688 NewCU->addString(Die, dwarf::DW_AT_name, FN);
690 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
691 // into an entity. We're using 0 (or a NULL label) for this. For
692 // split dwarf it's in the skeleton CU so omit it here.
693 if (!useSplitDwarf())
694 NewCU->addLabelAddress(Die, dwarf::DW_AT_low_pc, NULL);
696 // Define start line table label for each Compile Unit.
697 MCSymbol *LineTableStartSym = Asm->GetTempSymbol("line_table_start",
698 NewCU->getUniqueID());
699 Asm->OutStreamer.getContext().setMCLineTableSymbol(LineTableStartSym,
700 NewCU->getUniqueID());
702 // Use a single line table if we are using .loc and generating assembly.
704 (Asm->TM.hasMCUseLoc() &&
705 Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer) ||
706 (NewCU->getUniqueID() == 0);
708 // DW_AT_stmt_list is a offset of line number information for this
709 // compile unit in debug_line section. For split dwarf this is
710 // left in the skeleton CU and so not included.
711 // The line table entries are not always emitted in assembly, so it
712 // is not okay to use line_table_start here.
713 if (!useSplitDwarf()) {
714 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
715 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
717 Asm->GetTempSymbol("section_line") : LineTableStartSym);
718 else if (UseTheFirstCU)
719 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
721 NewCU->addDelta(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
722 LineTableStartSym, DwarfLineSectionSym);
725 // If we're using split dwarf the compilation dir is going to be in the
726 // skeleton CU and so we don't need to duplicate it here.
727 if (!useSplitDwarf() && !CompilationDir.empty())
728 NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
729 if (DIUnit.isOptimized())
730 NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized);
732 StringRef Flags = DIUnit.getFlags();
734 NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
736 if (unsigned RVer = DIUnit.getRunTimeVersion())
737 NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
738 dwarf::DW_FORM_data1, RVer);
743 InfoHolder.addUnit(NewCU);
745 CUMap.insert(std::make_pair(N, NewCU));
749 // Construct subprogram DIE.
750 void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
752 CompileUnit *&CURef = SPMap[N];
758 if (!SP.isDefinition())
759 // This is a method declaration which will be handled while constructing
763 DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
766 TheCU->insertDIE(N, SubprogramDie);
768 // Add to context owner.
769 TheCU->addToContextOwner(SubprogramDie, SP.getContext());
771 // Expose as global, if requested.
772 if (GenerateDwarfPubNamesSection)
773 TheCU->addGlobalName(SP.getName(), SubprogramDie);
776 void DwarfDebug::constructImportedEntityDIE(CompileUnit *TheCU,
778 DIImportedEntity Module(N);
779 if (!Module.Verify())
781 if (DIE *D = TheCU->getOrCreateContextDIE(Module.getContext()))
782 constructImportedEntityDIE(TheCU, Module, D);
785 void DwarfDebug::constructImportedEntityDIE(CompileUnit *TheCU, const MDNode *N,
787 DIImportedEntity Module(N);
788 if (!Module.Verify())
790 return constructImportedEntityDIE(TheCU, Module, Context);
793 void DwarfDebug::constructImportedEntityDIE(CompileUnit *TheCU,
794 const DIImportedEntity &Module,
796 assert(Module.Verify() &&
797 "Use one of the MDNode * overloads to handle invalid metadata");
798 assert(Context && "Should always have a context for an imported_module");
799 DIE *IMDie = new DIE(Module.getTag());
800 TheCU->insertDIE(Module, IMDie);
802 DIDescriptor Entity = Module.getEntity();
803 if (Entity.isNameSpace())
804 EntityDie = TheCU->getOrCreateNameSpace(DINameSpace(Entity));
805 else if (Entity.isSubprogram())
806 EntityDie = TheCU->getOrCreateSubprogramDIE(DISubprogram(Entity));
807 else if (Entity.isType())
808 EntityDie = TheCU->getOrCreateTypeDIE(DIType(Entity));
810 EntityDie = TheCU->getDIE(Entity);
811 unsigned FileID = getOrCreateSourceID(Module.getContext().getFilename(),
812 Module.getContext().getDirectory(),
813 TheCU->getUniqueID());
814 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_file, 0, FileID);
815 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_line, 0, Module.getLineNumber());
816 TheCU->addDIEEntry(IMDie, dwarf::DW_AT_import, dwarf::DW_FORM_ref4,
818 StringRef Name = Module.getName();
820 TheCU->addString(IMDie, dwarf::DW_AT_name, Name);
821 Context->addChild(IMDie);
824 // Emit all Dwarf sections that should come prior to the content. Create
825 // global DIEs and emit initial debug info sections. This is invoked by
826 // the target AsmPrinter.
827 void DwarfDebug::beginModule() {
828 if (DisableDebugInfoPrinting)
831 const Module *M = MMI->getModule();
833 // If module has named metadata anchors then use them, otherwise scan the
834 // module using debug info finder to collect debug info.
835 NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
839 // Emit initial sections so we can reference labels later.
842 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
843 DICompileUnit CUNode(CU_Nodes->getOperand(i));
844 CompileUnit *CU = constructCompileUnit(CUNode);
845 DIArray ImportedEntities = CUNode.getImportedEntities();
846 for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
847 ScopesWithImportedEntities.push_back(std::make_pair(
848 DIImportedEntity(ImportedEntities.getElement(i)).getContext(),
849 ImportedEntities.getElement(i)));
850 std::sort(ScopesWithImportedEntities.begin(),
851 ScopesWithImportedEntities.end(), CompareFirst());
852 DIArray GVs = CUNode.getGlobalVariables();
853 for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
854 CU->createGlobalVariableDIE(GVs.getElement(i));
855 DIArray SPs = CUNode.getSubprograms();
856 for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
857 constructSubprogramDIE(CU, SPs.getElement(i));
858 DIArray EnumTypes = CUNode.getEnumTypes();
859 for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
860 CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
861 DIArray RetainedTypes = CUNode.getRetainedTypes();
862 for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
863 CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
864 // Emit imported_modules last so that the relevant context is already
866 for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
867 constructImportedEntityDIE(CU, ImportedEntities.getElement(i));
868 // If we're splitting the dwarf out now that we've got the entire
869 // CU then construct a skeleton CU based upon it.
870 if (useSplitDwarf()) {
871 // This should be a unique identifier when we want to build .dwp files.
872 CU->addUInt(CU->getCUDie(), dwarf::DW_AT_GNU_dwo_id,
873 dwarf::DW_FORM_data8, 0);
874 // Now construct the skeleton CU associated.
875 constructSkeletonCU(CUNode);
879 // Tell MMI that we have debug info.
880 MMI->setDebugInfoAvailability(true);
882 // Prime section data.
883 SectionMap.insert(Asm->getObjFileLowering().getTextSection());
886 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
887 void DwarfDebug::computeInlinedDIEs() {
888 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
889 for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
890 AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
892 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
894 for (DenseMap<const MDNode *, DIE *>::iterator AI = AbstractSPDies.begin(),
895 AE = AbstractSPDies.end(); AI != AE; ++AI) {
896 DIE *ISP = AI->second;
897 if (InlinedSubprogramDIEs.count(ISP))
899 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
903 // Collect info for variables that were optimized out.
904 void DwarfDebug::collectDeadVariables() {
905 const Module *M = MMI->getModule();
906 DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
908 if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
909 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
910 DICompileUnit TheCU(CU_Nodes->getOperand(i));
911 DIArray Subprograms = TheCU.getSubprograms();
912 for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
913 DISubprogram SP(Subprograms.getElement(i));
914 if (ProcessedSPNodes.count(SP) != 0) continue;
915 if (!SP.Verify()) continue;
916 if (!SP.isDefinition()) continue;
917 DIArray Variables = SP.getVariables();
918 if (Variables.getNumElements() == 0) continue;
920 LexicalScope *Scope =
921 new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
922 DeadFnScopeMap[SP] = Scope;
924 // Construct subprogram DIE and add variables DIEs.
925 CompileUnit *SPCU = CUMap.lookup(TheCU);
926 assert(SPCU && "Unable to find Compile Unit!");
927 constructSubprogramDIE(SPCU, SP);
928 DIE *ScopeDIE = SPCU->getDIE(SP);
929 for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
930 DIVariable DV(Variables.getElement(vi));
931 if (!DV.Verify()) continue;
932 DbgVariable *NewVar = new DbgVariable(DV, NULL);
933 if (DIE *VariableDIE =
934 SPCU->constructVariableDIE(NewVar, Scope->isAbstractScope()))
935 ScopeDIE->addChild(VariableDIE);
940 DeleteContainerSeconds(DeadFnScopeMap);
943 void DwarfDebug::finalizeModuleInfo() {
944 // Collect info for variables that were optimized out.
945 collectDeadVariables();
947 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
948 computeInlinedDIEs();
950 // Emit DW_AT_containing_type attribute to connect types with their
951 // vtable holding type.
952 for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
953 CUE = CUMap.end(); CUI != CUE; ++CUI) {
954 CompileUnit *TheCU = CUI->second;
955 TheCU->constructContainingTypeDIEs();
958 // Compute DIE offsets and sizes.
959 InfoHolder.computeSizeAndOffsets();
961 SkeletonHolder.computeSizeAndOffsets();
964 void DwarfDebug::endSections() {
965 // Standard sections final addresses.
966 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
967 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
968 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
969 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
971 // End text sections.
972 for (unsigned I = 0, E = SectionMap.size(); I != E; ++I) {
973 Asm->OutStreamer.SwitchSection(SectionMap[I]);
974 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", I+1));
978 // Emit all Dwarf sections that should come after the content.
979 void DwarfDebug::endModule() {
981 if (!FirstCU) return;
983 // End any existing sections.
984 // TODO: Does this need to happen?
987 // Finalize the debug info for the module.
988 finalizeModuleInfo();
990 if (!useSplitDwarf()) {
991 // Emit all the DIEs into a debug info section.
994 // Corresponding abbreviations into a abbrev section.
997 // Emit info into a debug loc section.
1000 // Emit info into a debug aranges section.
1003 // Emit info into a debug ranges section.
1006 // Emit info into a debug macinfo section.
1009 // Emit inline info.
1010 // TODO: When we don't need the option anymore we
1011 // can remove all of the code that this section
1013 if (useDarwinGDBCompat())
1014 emitDebugInlineInfo();
1016 // TODO: Fill this in for separated debug sections and separate
1017 // out information into new sections.
1019 // Emit the debug info section and compile units.
1023 // Corresponding abbreviations into a abbrev section.
1024 emitAbbreviations();
1025 emitDebugAbbrevDWO();
1027 // Emit info into a debug loc section.
1030 // Emit info into a debug aranges section.
1033 // Emit info into a debug ranges section.
1036 // Emit info into a debug macinfo section.
1039 // Emit DWO addresses.
1040 InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1042 // Emit inline info.
1043 // TODO: When we don't need the option anymore we
1044 // can remove all of the code that this section
1046 if (useDarwinGDBCompat())
1047 emitDebugInlineInfo();
1050 // Emit info into the dwarf accelerator table sections.
1051 if (useDwarfAccelTables()) {
1054 emitAccelNamespaces();
1058 // Emit info into a debug pubnames section, if requested.
1059 if (GenerateDwarfPubNamesSection)
1060 emitDebugPubnames();
1062 // Emit info into a debug pubtypes section.
1063 // TODO: When we don't need the option anymore we can
1064 // remove all of the code that adds to the table.
1065 if (useDarwinGDBCompat())
1066 emitDebugPubTypes();
1068 // Finally emit string information into a string table.
1070 if (useSplitDwarf())
1075 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1076 E = CUMap.end(); I != E; ++I)
1079 for (SmallVector<CompileUnit *, 1>::iterator I = SkeletonCUs.begin(),
1080 E = SkeletonCUs.end(); I != E; ++I)
1083 // Reset these for the next Module if we have one.
1087 // Find abstract variable, if any, associated with Var.
1088 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1089 DebugLoc ScopeLoc) {
1090 LLVMContext &Ctx = DV->getContext();
1091 // More then one inlined variable corresponds to one abstract variable.
1092 DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1093 DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1095 return AbsDbgVariable;
1097 LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1101 AbsDbgVariable = new DbgVariable(Var, NULL);
1102 addScopeVariable(Scope, AbsDbgVariable);
1103 AbstractVariables[Var] = AbsDbgVariable;
1104 return AbsDbgVariable;
1107 // If Var is a current function argument then add it to CurrentFnArguments list.
1108 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1109 DbgVariable *Var, LexicalScope *Scope) {
1110 if (!LScopes.isCurrentFunctionScope(Scope))
1112 DIVariable DV = Var->getVariable();
1113 if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1115 unsigned ArgNo = DV.getArgNumber();
1119 size_t Size = CurrentFnArguments.size();
1121 CurrentFnArguments.resize(MF->getFunction()->arg_size());
1122 // llvm::Function argument size is not good indicator of how many
1123 // arguments does the function have at source level.
1125 CurrentFnArguments.resize(ArgNo * 2);
1126 CurrentFnArguments[ArgNo - 1] = Var;
1130 // Collect variable information from side table maintained by MMI.
1132 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
1133 SmallPtrSet<const MDNode *, 16> &Processed) {
1134 MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1135 for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1136 VE = VMap.end(); VI != VE; ++VI) {
1137 const MDNode *Var = VI->first;
1139 Processed.insert(Var);
1141 const std::pair<unsigned, DebugLoc> &VP = VI->second;
1143 LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
1145 // If variable scope is not found then skip this variable.
1149 DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1150 DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
1151 RegVar->setFrameIndex(VP.first);
1152 if (!addCurrentFnArgument(MF, RegVar, Scope))
1153 addScopeVariable(Scope, RegVar);
1155 AbsDbgVariable->setFrameIndex(VP.first);
1159 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
1161 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1162 assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1163 return MI->getNumOperands() == 3 &&
1164 MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1165 MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1168 // Get .debug_loc entry for the instruction range starting at MI.
1169 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1170 const MCSymbol *FLabel,
1171 const MCSymbol *SLabel,
1172 const MachineInstr *MI) {
1173 const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1175 assert(MI->getNumOperands() == 3);
1176 if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
1177 MachineLocation MLoc;
1178 // TODO: Currently an offset of 0 in a DBG_VALUE means
1179 // we need to generate a direct register value.
1180 // There is no way to specify an indirect value with offset 0.
1181 if (MI->getOperand(1).getImm() == 0)
1182 MLoc.set(MI->getOperand(0).getReg());
1184 MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1185 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1187 if (MI->getOperand(0).isImm())
1188 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1189 if (MI->getOperand(0).isFPImm())
1190 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1191 if (MI->getOperand(0).isCImm())
1192 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1194 llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1197 // Find variables for each lexical scope.
1199 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1200 SmallPtrSet<const MDNode *, 16> &Processed) {
1202 // collection info from MMI table.
1203 collectVariableInfoFromMMITable(MF, Processed);
1205 for (SmallVectorImpl<const MDNode*>::const_iterator
1206 UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1208 const MDNode *Var = *UVI;
1209 if (Processed.count(Var))
1212 // History contains relevant DBG_VALUE instructions for Var and instructions
1214 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1215 if (History.empty())
1217 const MachineInstr *MInsn = History.front();
1220 LexicalScope *Scope = NULL;
1221 if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1222 DISubprogram(DV.getContext()).describes(MF->getFunction()))
1223 Scope = LScopes.getCurrentFunctionScope();
1224 else if (MDNode *IA = DV.getInlinedAt())
1225 Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1227 Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1228 // If variable scope is not found then skip this variable.
1232 Processed.insert(DV);
1233 assert(MInsn->isDebugValue() && "History must begin with debug value");
1234 DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1235 DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1236 if (!addCurrentFnArgument(MF, RegVar, Scope))
1237 addScopeVariable(Scope, RegVar);
1239 AbsVar->setMInsn(MInsn);
1241 // Simplify ranges that are fully coalesced.
1242 if (History.size() <= 1 || (History.size() == 2 &&
1243 MInsn->isIdenticalTo(History.back()))) {
1244 RegVar->setMInsn(MInsn);
1248 // Handle multiple DBG_VALUE instructions describing one variable.
1249 RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1251 for (SmallVectorImpl<const MachineInstr*>::const_iterator
1252 HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1253 const MachineInstr *Begin = *HI;
1254 assert(Begin->isDebugValue() && "Invalid History entry");
1256 // Check if DBG_VALUE is truncating a range.
1257 if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1258 && !Begin->getOperand(0).getReg())
1261 // Compute the range for a register location.
1262 const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1263 const MCSymbol *SLabel = 0;
1266 // If Begin is the last instruction in History then its value is valid
1267 // until the end of the function.
1268 SLabel = FunctionEndSym;
1270 const MachineInstr *End = HI[1];
1271 DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1272 << "\t" << *Begin << "\t" << *End << "\n");
1273 if (End->isDebugValue())
1274 SLabel = getLabelBeforeInsn(End);
1276 // End is a normal instruction clobbering the range.
1277 SLabel = getLabelAfterInsn(End);
1278 assert(SLabel && "Forgot label after clobber instruction");
1283 // The value is valid until the next DBG_VALUE or clobber.
1284 DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1287 DotDebugLocEntries.push_back(DotDebugLocEntry());
1290 // Collect info for variables that were optimized out.
1291 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1292 DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1293 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1294 DIVariable DV(Variables.getElement(i));
1295 if (!DV || !DV.Verify() || !Processed.insert(DV))
1297 if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1298 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1302 // Return Label preceding the instruction.
1303 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1304 MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1305 assert(Label && "Didn't insert label before instruction");
1309 // Return Label immediately following the instruction.
1310 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1311 return LabelsAfterInsn.lookup(MI);
1314 // Process beginning of an instruction.
1315 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1316 // Check if source location changes, but ignore DBG_VALUE locations.
1317 if (!MI->isDebugValue()) {
1318 DebugLoc DL = MI->getDebugLoc();
1319 if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1322 if (DL == PrologEndLoc) {
1323 Flags |= DWARF2_FLAG_PROLOGUE_END;
1324 PrologEndLoc = DebugLoc();
1326 if (PrologEndLoc.isUnknown())
1327 Flags |= DWARF2_FLAG_IS_STMT;
1329 if (!DL.isUnknown()) {
1330 const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1331 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1333 recordSourceLine(0, 0, 0, 0);
1337 // Insert labels where requested.
1338 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1339 LabelsBeforeInsn.find(MI);
1342 if (I == LabelsBeforeInsn.end())
1345 // Label already assigned.
1350 PrevLabel = MMI->getContext().CreateTempSymbol();
1351 Asm->OutStreamer.EmitLabel(PrevLabel);
1353 I->second = PrevLabel;
1356 // Process end of an instruction.
1357 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1358 // Don't create a new label after DBG_VALUE instructions.
1359 // They don't generate code.
1360 if (!MI->isDebugValue())
1363 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1364 LabelsAfterInsn.find(MI);
1367 if (I == LabelsAfterInsn.end())
1370 // Label already assigned.
1374 // We need a label after this instruction.
1376 PrevLabel = MMI->getContext().CreateTempSymbol();
1377 Asm->OutStreamer.EmitLabel(PrevLabel);
1379 I->second = PrevLabel;
1382 // Each LexicalScope has first instruction and last instruction to mark
1383 // beginning and end of a scope respectively. Create an inverse map that list
1384 // scopes starts (and ends) with an instruction. One instruction may start (or
1385 // end) multiple scopes. Ignore scopes that are not reachable.
1386 void DwarfDebug::identifyScopeMarkers() {
1387 SmallVector<LexicalScope *, 4> WorkList;
1388 WorkList.push_back(LScopes.getCurrentFunctionScope());
1389 while (!WorkList.empty()) {
1390 LexicalScope *S = WorkList.pop_back_val();
1392 const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1393 if (!Children.empty())
1394 for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1395 SE = Children.end(); SI != SE; ++SI)
1396 WorkList.push_back(*SI);
1398 if (S->isAbstractScope())
1401 const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1404 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1405 RE = Ranges.end(); RI != RE; ++RI) {
1406 assert(RI->first && "InsnRange does not have first instruction!");
1407 assert(RI->second && "InsnRange does not have second instruction!");
1408 requestLabelBeforeInsn(RI->first);
1409 requestLabelAfterInsn(RI->second);
1414 // Get MDNode for DebugLoc's scope.
1415 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1416 if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1417 return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1418 return DL.getScope(Ctx);
1421 // Walk up the scope chain of given debug loc and find line number info
1422 // for the function.
1423 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1424 const MDNode *Scope = getScopeNode(DL, Ctx);
1425 DISubprogram SP = getDISubprogram(Scope);
1427 // Check for number of operands since the compatibility is
1429 if (SP->getNumOperands() > 19)
1430 return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1432 return DebugLoc::get(SP.getLineNumber(), 0, SP);
1438 // Gather pre-function debug information. Assumes being called immediately
1439 // after the function entry point has been emitted.
1440 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1441 if (!MMI->hasDebugInfo()) return;
1442 LScopes.initialize(*MF);
1443 if (LScopes.empty()) return;
1444 identifyScopeMarkers();
1446 // Set DwarfCompileUnitID in MCContext to the Compile Unit this function
1448 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1449 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1450 assert(TheCU && "Unable to find compile unit!");
1451 if (Asm->TM.hasMCUseLoc() &&
1452 Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer)
1453 // Use a single line table if we are using .loc and generating assembly.
1454 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1456 Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1458 FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1459 Asm->getFunctionNumber());
1460 // Assumes in correct section after the entry point.
1461 Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1463 assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1465 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1466 // LiveUserVar - Map physreg numbers to the MDNode they contain.
1467 std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1469 for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1471 bool AtBlockEntry = true;
1472 for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1474 const MachineInstr *MI = II;
1476 if (MI->isDebugValue()) {
1477 assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1479 // Keep track of user variables.
1481 MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1483 // Variable is in a register, we need to check for clobbers.
1484 if (isDbgValueInDefinedReg(MI))
1485 LiveUserVar[MI->getOperand(0).getReg()] = Var;
1487 // Check the history of this variable.
1488 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1489 if (History.empty()) {
1490 UserVariables.push_back(Var);
1491 // The first mention of a function argument gets the FunctionBeginSym
1492 // label, so arguments are visible when breaking at function entry.
1494 if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1495 DISubprogram(getDISubprogram(DV.getContext()))
1496 .describes(MF->getFunction()))
1497 LabelsBeforeInsn[MI] = FunctionBeginSym;
1499 // We have seen this variable before. Try to coalesce DBG_VALUEs.
1500 const MachineInstr *Prev = History.back();
1501 if (Prev->isDebugValue()) {
1502 // Coalesce identical entries at the end of History.
1503 if (History.size() >= 2 &&
1504 Prev->isIdenticalTo(History[History.size() - 2])) {
1505 DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1507 << "\t" << *History[History.size() - 2] << "\n");
1511 // Terminate old register assignments that don't reach MI;
1512 MachineFunction::const_iterator PrevMBB = Prev->getParent();
1513 if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1514 isDbgValueInDefinedReg(Prev)) {
1515 // Previous register assignment needs to terminate at the end of
1517 MachineBasicBlock::const_iterator LastMI =
1518 PrevMBB->getLastNonDebugInstr();
1519 if (LastMI == PrevMBB->end()) {
1520 // Drop DBG_VALUE for empty range.
1521 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1522 << "\t" << *Prev << "\n");
1524 } else if (llvm::next(PrevMBB) != PrevMBB->getParent()->end())
1525 // Terminate after LastMI.
1526 History.push_back(LastMI);
1530 History.push_back(MI);
1532 // Not a DBG_VALUE instruction.
1534 AtBlockEntry = false;
1536 // First known non-DBG_VALUE and non-frame setup location marks
1537 // the beginning of the function body.
1538 if (!MI->getFlag(MachineInstr::FrameSetup) &&
1539 (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1540 PrologEndLoc = MI->getDebugLoc();
1542 // Check if the instruction clobbers any registers with debug vars.
1543 for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1544 MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1545 if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1547 for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1548 AI.isValid(); ++AI) {
1550 const MDNode *Var = LiveUserVar[Reg];
1553 // Reg is now clobbered.
1554 LiveUserVar[Reg] = 0;
1556 // Was MD last defined by a DBG_VALUE referring to Reg?
1557 DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1558 if (HistI == DbgValues.end())
1560 SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1561 if (History.empty())
1563 const MachineInstr *Prev = History.back();
1564 // Sanity-check: Register assignments are terminated at the end of
1566 if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1568 // Is the variable still in Reg?
1569 if (!isDbgValueInDefinedReg(Prev) ||
1570 Prev->getOperand(0).getReg() != Reg)
1572 // Var is clobbered. Make sure the next instruction gets a label.
1573 History.push_back(MI);
1580 for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1582 SmallVectorImpl<const MachineInstr*> &History = I->second;
1583 if (History.empty())
1586 // Make sure the final register assignments are terminated.
1587 const MachineInstr *Prev = History.back();
1588 if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1589 const MachineBasicBlock *PrevMBB = Prev->getParent();
1590 MachineBasicBlock::const_iterator LastMI =
1591 PrevMBB->getLastNonDebugInstr();
1592 if (LastMI == PrevMBB->end())
1593 // Drop DBG_VALUE for empty range.
1595 else if (PrevMBB != &PrevMBB->getParent()->back()) {
1596 // Terminate after LastMI.
1597 History.push_back(LastMI);
1600 // Request labels for the full history.
1601 for (unsigned i = 0, e = History.size(); i != e; ++i) {
1602 const MachineInstr *MI = History[i];
1603 if (MI->isDebugValue())
1604 requestLabelBeforeInsn(MI);
1606 requestLabelAfterInsn(MI);
1610 PrevInstLoc = DebugLoc();
1611 PrevLabel = FunctionBeginSym;
1613 // Record beginning of function.
1614 if (!PrologEndLoc.isUnknown()) {
1615 DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1616 MF->getFunction()->getContext());
1617 recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1618 FnStartDL.getScope(MF->getFunction()->getContext()),
1619 // We'd like to list the prologue as "not statements" but GDB behaves
1620 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1621 DWARF2_FLAG_IS_STMT);
1625 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1626 SmallVectorImpl<DbgVariable *> &Vars = ScopeVariables[LS];
1627 DIVariable DV = Var->getVariable();
1628 // Variables with positive arg numbers are parameters.
1629 if (unsigned ArgNum = DV.getArgNumber()) {
1630 // Keep all parameters in order at the start of the variable list to ensure
1631 // function types are correct (no out-of-order parameters)
1633 // This could be improved by only doing it for optimized builds (unoptimized
1634 // builds have the right order to begin with), searching from the back (this
1635 // would catch the unoptimized case quickly), or doing a binary search
1636 // rather than linear search.
1637 SmallVectorImpl<DbgVariable *>::iterator I = Vars.begin();
1638 while (I != Vars.end()) {
1639 unsigned CurNum = (*I)->getVariable().getArgNumber();
1640 // A local (non-parameter) variable has been found, insert immediately
1644 // A later indexed parameter has been found, insert immediately before it.
1645 if (CurNum > ArgNum)
1649 Vars.insert(I, Var);
1653 Vars.push_back(Var);
1656 // Gather and emit post-function debug information.
1657 void DwarfDebug::endFunction(const MachineFunction *MF) {
1658 if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1660 // Define end label for subprogram.
1661 FunctionEndSym = Asm->GetTempSymbol("func_end",
1662 Asm->getFunctionNumber());
1663 // Assumes in correct section after the entry point.
1664 Asm->OutStreamer.EmitLabel(FunctionEndSym);
1665 // Set DwarfCompileUnitID in MCContext to default value.
1666 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1668 SmallPtrSet<const MDNode *, 16> ProcessedVars;
1669 collectVariableInfo(MF, ProcessedVars);
1671 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1672 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1673 assert(TheCU && "Unable to find compile unit!");
1675 // Construct abstract scopes.
1676 ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1677 for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1678 LexicalScope *AScope = AList[i];
1679 DISubprogram SP(AScope->getScopeNode());
1681 // Collect info for variables that were optimized out.
1682 DIArray Variables = SP.getVariables();
1683 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1684 DIVariable DV(Variables.getElement(i));
1685 if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1687 // Check that DbgVariable for DV wasn't created earlier, when
1688 // findAbstractVariable() was called for inlined instance of DV.
1689 LLVMContext &Ctx = DV->getContext();
1690 DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1691 if (AbstractVariables.lookup(CleanDV))
1693 if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1694 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1697 if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1698 constructScopeDIE(TheCU, AScope);
1701 DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1703 if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1704 TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1707 for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1708 I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1709 DeleteContainerPointers(I->second);
1710 ScopeVariables.clear();
1711 DeleteContainerPointers(CurrentFnArguments);
1712 UserVariables.clear();
1714 AbstractVariables.clear();
1715 LabelsBeforeInsn.clear();
1716 LabelsAfterInsn.clear();
1720 // Register a source line with debug info. Returns the unique label that was
1721 // emitted and which provides correspondence to the source line list.
1722 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1728 DIDescriptor Scope(S);
1730 if (Scope.isCompileUnit()) {
1731 DICompileUnit CU(S);
1732 Fn = CU.getFilename();
1733 Dir = CU.getDirectory();
1734 } else if (Scope.isFile()) {
1736 Fn = F.getFilename();
1737 Dir = F.getDirectory();
1738 } else if (Scope.isSubprogram()) {
1740 Fn = SP.getFilename();
1741 Dir = SP.getDirectory();
1742 } else if (Scope.isLexicalBlockFile()) {
1743 DILexicalBlockFile DBF(S);
1744 Fn = DBF.getFilename();
1745 Dir = DBF.getDirectory();
1746 } else if (Scope.isLexicalBlock()) {
1747 DILexicalBlock DB(S);
1748 Fn = DB.getFilename();
1749 Dir = DB.getDirectory();
1751 llvm_unreachable("Unexpected scope info");
1753 Src = getOrCreateSourceID(Fn, Dir,
1754 Asm->OutStreamer.getContext().getDwarfCompileUnitID());
1756 Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1759 //===----------------------------------------------------------------------===//
1761 //===----------------------------------------------------------------------===//
1763 // Compute the size and offset of a DIE.
1765 DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1766 // Get the children.
1767 const std::vector<DIE *> &Children = Die->getChildren();
1769 // Record the abbreviation.
1770 assignAbbrevNumber(Die->getAbbrev());
1772 // Get the abbreviation for this DIE.
1773 unsigned AbbrevNumber = Die->getAbbrevNumber();
1774 const DIEAbbrev *Abbrev = Abbreviations->at(AbbrevNumber - 1);
1777 Die->setOffset(Offset);
1779 // Start the size with the size of abbreviation code.
1780 Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1782 const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
1783 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
1785 // Size the DIE attribute values.
1786 for (unsigned i = 0, N = Values.size(); i < N; ++i)
1787 // Size attribute value.
1788 Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1790 // Size the DIE children if any.
1791 if (!Children.empty()) {
1792 assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1793 "Children flag not set");
1795 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1796 Offset = computeSizeAndOffset(Children[j], Offset);
1798 // End of children marker.
1799 Offset += sizeof(int8_t);
1802 Die->setSize(Offset - Die->getOffset());
1806 // Compute the size and offset of all the DIEs.
1807 void DwarfUnits::computeSizeAndOffsets() {
1808 // Offset from the beginning of debug info section.
1809 unsigned SecOffset = 0;
1810 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1811 E = CUs.end(); I != E; ++I) {
1812 (*I)->setDebugInfoOffset(SecOffset);
1814 sizeof(int32_t) + // Length of Compilation Unit Info
1815 sizeof(int16_t) + // DWARF version number
1816 sizeof(int32_t) + // Offset Into Abbrev. Section
1817 sizeof(int8_t); // Pointer Size (in bytes)
1819 unsigned EndOffset = computeSizeAndOffset((*I)->getCUDie(), Offset);
1820 SecOffset += EndOffset;
1824 // Emit initial Dwarf sections with a label at the start of each one.
1825 void DwarfDebug::emitSectionLabels() {
1826 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1828 // Dwarf sections base addresses.
1829 DwarfInfoSectionSym =
1830 emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1831 DwarfAbbrevSectionSym =
1832 emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1833 if (useSplitDwarf())
1834 DwarfAbbrevDWOSectionSym =
1835 emitSectionSym(Asm, TLOF.getDwarfAbbrevDWOSection(),
1836 "section_abbrev_dwo");
1837 emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1839 if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1840 emitSectionSym(Asm, MacroInfo);
1842 DwarfLineSectionSym =
1843 emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1844 emitSectionSym(Asm, TLOF.getDwarfLocSection());
1845 if (GenerateDwarfPubNamesSection)
1846 emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1847 emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1848 DwarfStrSectionSym =
1849 emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
1850 if (useSplitDwarf()) {
1851 DwarfStrDWOSectionSym =
1852 emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
1853 DwarfAddrSectionSym =
1854 emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
1856 DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1859 DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
1860 "section_debug_loc");
1862 TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1863 emitSectionSym(Asm, TLOF.getDataSection());
1866 // Recursively emits a debug information entry.
1867 void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
1868 // Get the abbreviation for this DIE.
1869 unsigned AbbrevNumber = Die->getAbbrevNumber();
1870 const DIEAbbrev *Abbrev = Abbrevs->at(AbbrevNumber - 1);
1872 // Emit the code (index) for the abbreviation.
1873 if (Asm->isVerbose())
1874 Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1875 Twine::utohexstr(Die->getOffset()) + ":0x" +
1876 Twine::utohexstr(Die->getSize()) + " " +
1877 dwarf::TagString(Abbrev->getTag()));
1878 Asm->EmitULEB128(AbbrevNumber);
1880 const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
1881 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
1883 // Emit the DIE attribute values.
1884 for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1885 unsigned Attr = AbbrevData[i].getAttribute();
1886 unsigned Form = AbbrevData[i].getForm();
1887 assert(Form && "Too many attributes for DIE (check abbreviation)");
1889 if (Asm->isVerbose())
1890 Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1893 case dwarf::DW_AT_abstract_origin: {
1894 DIEEntry *E = cast<DIEEntry>(Values[i]);
1895 DIE *Origin = E->getEntry();
1896 unsigned Addr = Origin->getOffset();
1897 if (Form == dwarf::DW_FORM_ref_addr) {
1898 // For DW_FORM_ref_addr, output the offset from beginning of debug info
1899 // section. Origin->getOffset() returns the offset from start of the
1901 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1902 Addr += Holder.getCUOffset(Origin->getCompileUnit());
1904 Asm->EmitInt32(Addr);
1907 case dwarf::DW_AT_ranges: {
1908 // DW_AT_range Value encodes offset in debug_range section.
1909 DIEInteger *V = cast<DIEInteger>(Values[i]);
1911 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
1912 Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1916 Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1918 DwarfDebugRangeSectionSym,
1923 case dwarf::DW_AT_location: {
1924 if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
1925 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
1926 Asm->EmitLabelReference(L->getValue(), 4);
1928 Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1930 Values[i]->EmitValue(Asm, Form);
1934 case dwarf::DW_AT_accessibility: {
1935 if (Asm->isVerbose()) {
1936 DIEInteger *V = cast<DIEInteger>(Values[i]);
1937 Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1939 Values[i]->EmitValue(Asm, Form);
1943 // Emit an attribute using the defined form.
1944 Values[i]->EmitValue(Asm, Form);
1949 // Emit the DIE children if any.
1950 if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1951 const std::vector<DIE *> &Children = Die->getChildren();
1953 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1954 emitDIE(Children[j], Abbrevs);
1956 if (Asm->isVerbose())
1957 Asm->OutStreamer.AddComment("End Of Children Mark");
1962 // Emit the various dwarf units to the unit section USection with
1963 // the abbreviations going into ASection.
1964 void DwarfUnits::emitUnits(DwarfDebug *DD,
1965 const MCSection *USection,
1966 const MCSection *ASection,
1967 const MCSymbol *ASectionSym) {
1968 Asm->OutStreamer.SwitchSection(USection);
1969 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1970 E = CUs.end(); I != E; ++I) {
1971 CompileUnit *TheCU = *I;
1972 DIE *Die = TheCU->getCUDie();
1974 // Emit the compile units header.
1976 .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(),
1977 TheCU->getUniqueID()));
1979 // Emit size of content not including length itself
1980 unsigned ContentSize = Die->getSize() +
1981 sizeof(int16_t) + // DWARF version number
1982 sizeof(int32_t) + // Offset Into Abbrev. Section
1983 sizeof(int8_t); // Pointer Size (in bytes)
1985 Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1986 Asm->EmitInt32(ContentSize);
1987 Asm->OutStreamer.AddComment("DWARF version number");
1988 Asm->EmitInt16(dwarf::DWARF_VERSION);
1989 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1990 Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
1992 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1993 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1995 DD->emitDIE(Die, Abbreviations);
1996 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(),
1997 TheCU->getUniqueID()));
2001 /// For a given compile unit DIE, returns offset from beginning of debug info.
2002 unsigned DwarfUnits::getCUOffset(DIE *Die) {
2003 assert(Die->getTag() == dwarf::DW_TAG_compile_unit &&
2004 "Input DIE should be compile unit in getCUOffset.");
2005 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
2006 E = CUs.end(); I != E; ++I) {
2007 CompileUnit *TheCU = *I;
2008 if (TheCU->getCUDie() == Die)
2009 return TheCU->getDebugInfoOffset();
2011 llvm_unreachable("The compile unit DIE should belong to CUs in DwarfUnits.");
2014 // Emit the debug info section.
2015 void DwarfDebug::emitDebugInfo() {
2016 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2018 Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(),
2019 Asm->getObjFileLowering().getDwarfAbbrevSection(),
2020 DwarfAbbrevSectionSym);
2023 // Emit the abbreviation section.
2024 void DwarfDebug::emitAbbreviations() {
2025 if (!useSplitDwarf())
2026 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
2029 emitSkeletonAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
2032 void DwarfDebug::emitAbbrevs(const MCSection *Section,
2033 std::vector<DIEAbbrev *> *Abbrevs) {
2034 // Check to see if it is worth the effort.
2035 if (!Abbrevs->empty()) {
2036 // Start the debug abbrev section.
2037 Asm->OutStreamer.SwitchSection(Section);
2039 MCSymbol *Begin = Asm->GetTempSymbol(Section->getLabelBeginName());
2040 Asm->OutStreamer.EmitLabel(Begin);
2042 // For each abbrevation.
2043 for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
2044 // Get abbreviation data
2045 const DIEAbbrev *Abbrev = Abbrevs->at(i);
2047 // Emit the abbrevations code (base 1 index.)
2048 Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2050 // Emit the abbreviations data.
2054 // Mark end of abbreviations.
2055 Asm->EmitULEB128(0, "EOM(3)");
2057 MCSymbol *End = Asm->GetTempSymbol(Section->getLabelEndName());
2058 Asm->OutStreamer.EmitLabel(End);
2062 // Emit the last address of the section and the end of the line matrix.
2063 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2064 // Define last address of section.
2065 Asm->OutStreamer.AddComment("Extended Op");
2068 Asm->OutStreamer.AddComment("Op size");
2069 Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
2070 Asm->OutStreamer.AddComment("DW_LNE_set_address");
2071 Asm->EmitInt8(dwarf::DW_LNE_set_address);
2073 Asm->OutStreamer.AddComment("Section end label");
2075 Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2076 Asm->getDataLayout().getPointerSize());
2078 // Mark end of matrix.
2079 Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2085 // Emit visible names into a hashed accelerator table section.
2086 void DwarfDebug::emitAccelNames() {
2087 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2088 dwarf::DW_FORM_data4));
2089 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2090 E = CUMap.end(); I != E; ++I) {
2091 CompileUnit *TheCU = I->second;
2092 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
2093 for (StringMap<std::vector<DIE*> >::const_iterator
2094 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2095 StringRef Name = GI->getKey();
2096 const std::vector<DIE *> &Entities = GI->second;
2097 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2098 DE = Entities.end(); DI != DE; ++DI)
2099 AT.AddName(Name, (*DI));
2103 AT.FinalizeTable(Asm, "Names");
2104 Asm->OutStreamer.SwitchSection(
2105 Asm->getObjFileLowering().getDwarfAccelNamesSection());
2106 MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2107 Asm->OutStreamer.EmitLabel(SectionBegin);
2109 // Emit the full data.
2110 AT.Emit(Asm, SectionBegin, &InfoHolder);
2113 // Emit objective C classes and categories into a hashed accelerator table
2115 void DwarfDebug::emitAccelObjC() {
2116 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2117 dwarf::DW_FORM_data4));
2118 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2119 E = CUMap.end(); I != E; ++I) {
2120 CompileUnit *TheCU = I->second;
2121 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
2122 for (StringMap<std::vector<DIE*> >::const_iterator
2123 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2124 StringRef Name = GI->getKey();
2125 const std::vector<DIE *> &Entities = GI->second;
2126 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2127 DE = Entities.end(); DI != DE; ++DI)
2128 AT.AddName(Name, (*DI));
2132 AT.FinalizeTable(Asm, "ObjC");
2133 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2134 .getDwarfAccelObjCSection());
2135 MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2136 Asm->OutStreamer.EmitLabel(SectionBegin);
2138 // Emit the full data.
2139 AT.Emit(Asm, SectionBegin, &InfoHolder);
2142 // Emit namespace dies into a hashed accelerator table.
2143 void DwarfDebug::emitAccelNamespaces() {
2144 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2145 dwarf::DW_FORM_data4));
2146 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2147 E = CUMap.end(); I != E; ++I) {
2148 CompileUnit *TheCU = I->second;
2149 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
2150 for (StringMap<std::vector<DIE*> >::const_iterator
2151 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2152 StringRef Name = GI->getKey();
2153 const std::vector<DIE *> &Entities = GI->second;
2154 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2155 DE = Entities.end(); DI != DE; ++DI)
2156 AT.AddName(Name, (*DI));
2160 AT.FinalizeTable(Asm, "namespac");
2161 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2162 .getDwarfAccelNamespaceSection());
2163 MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2164 Asm->OutStreamer.EmitLabel(SectionBegin);
2166 // Emit the full data.
2167 AT.Emit(Asm, SectionBegin, &InfoHolder);
2170 // Emit type dies into a hashed accelerator table.
2171 void DwarfDebug::emitAccelTypes() {
2172 std::vector<DwarfAccelTable::Atom> Atoms;
2173 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2174 dwarf::DW_FORM_data4));
2175 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
2176 dwarf::DW_FORM_data2));
2177 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
2178 dwarf::DW_FORM_data1));
2179 DwarfAccelTable AT(Atoms);
2180 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2181 E = CUMap.end(); I != E; ++I) {
2182 CompileUnit *TheCU = I->second;
2183 const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
2184 = TheCU->getAccelTypes();
2185 for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
2186 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2187 StringRef Name = GI->getKey();
2188 const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2189 for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
2190 = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
2191 AT.AddName(Name, (*DI).first, (*DI).second);
2195 AT.FinalizeTable(Asm, "types");
2196 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2197 .getDwarfAccelTypesSection());
2198 MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2199 Asm->OutStreamer.EmitLabel(SectionBegin);
2201 // Emit the full data.
2202 AT.Emit(Asm, SectionBegin, &InfoHolder);
2205 /// emitDebugPubnames - Emit visible names into a debug pubnames section.
2207 void DwarfDebug::emitDebugPubnames() {
2208 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2210 typedef DenseMap<const MDNode*, CompileUnit*> CUMapType;
2211 for (CUMapType::iterator I = CUMap.begin(), E = CUMap.end(); I != E; ++I) {
2212 CompileUnit *TheCU = I->second;
2213 unsigned ID = TheCU->getUniqueID();
2215 if (TheCU->getGlobalNames().empty())
2218 // Start the dwarf pubnames section.
2219 Asm->OutStreamer.SwitchSection(
2220 Asm->getObjFileLowering().getDwarfPubNamesSection());
2222 Asm->OutStreamer.AddComment("Length of Public Names Info");
2223 Asm->EmitLabelDifference(Asm->GetTempSymbol("pubnames_end", ID),
2224 Asm->GetTempSymbol("pubnames_begin", ID), 4);
2226 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
2228 Asm->OutStreamer.AddComment("DWARF Version");
2229 Asm->EmitInt16(dwarf::DWARF_VERSION);
2231 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2232 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2233 DwarfInfoSectionSym);
2235 Asm->OutStreamer.AddComment("Compilation Unit Length");
2236 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(), ID),
2237 Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2240 const StringMap<DIE*> &Globals = TheCU->getGlobalNames();
2241 for (StringMap<DIE*>::const_iterator
2242 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2243 const char *Name = GI->getKeyData();
2244 const DIE *Entity = GI->second;
2246 Asm->OutStreamer.AddComment("DIE offset");
2247 Asm->EmitInt32(Entity->getOffset());
2249 if (Asm->isVerbose())
2250 Asm->OutStreamer.AddComment("External Name");
2251 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
2254 Asm->OutStreamer.AddComment("End Mark");
2256 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end", ID));
2260 void DwarfDebug::emitDebugPubTypes() {
2261 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2262 E = CUMap.end(); I != E; ++I) {
2263 CompileUnit *TheCU = I->second;
2264 // Start the dwarf pubtypes section.
2265 Asm->OutStreamer.SwitchSection(
2266 Asm->getObjFileLowering().getDwarfPubTypesSection());
2267 Asm->OutStreamer.AddComment("Length of Public Types Info");
2268 Asm->EmitLabelDifference(
2269 Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2270 Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2272 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2273 TheCU->getUniqueID()));
2275 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2276 Asm->EmitInt16(dwarf::DWARF_VERSION);
2278 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2279 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2280 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(),
2281 TheCU->getUniqueID()),
2282 DwarfInfoSectionSym);
2284 Asm->OutStreamer.AddComment("Compilation Unit Length");
2285 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(),
2286 TheCU->getUniqueID()),
2287 Asm->GetTempSymbol(ISec->getLabelBeginName(),
2288 TheCU->getUniqueID()),
2291 const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2292 for (StringMap<DIE*>::const_iterator
2293 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2294 const char *Name = GI->getKeyData();
2295 DIE *Entity = GI->second;
2297 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2298 Asm->EmitInt32(Entity->getOffset());
2300 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2301 // Emit the name with a terminating null byte.
2302 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2305 Asm->OutStreamer.AddComment("End Mark");
2307 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2308 TheCU->getUniqueID()));
2312 // Emit strings into a string section.
2313 void DwarfUnits::emitStrings(const MCSection *StrSection,
2314 const MCSection *OffsetSection = NULL,
2315 const MCSymbol *StrSecSym = NULL) {
2317 if (StringPool.empty()) return;
2319 // Start the dwarf str section.
2320 Asm->OutStreamer.SwitchSection(StrSection);
2322 // Get all of the string pool entries and put them in an array by their ID so
2323 // we can sort them.
2324 SmallVector<std::pair<unsigned,
2325 StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2327 for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2328 I = StringPool.begin(), E = StringPool.end();
2330 Entries.push_back(std::make_pair(I->second.second, &*I));
2332 array_pod_sort(Entries.begin(), Entries.end());
2334 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2335 // Emit a label for reference from debug information entries.
2336 Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2338 // Emit the string itself with a terminating null byte.
2339 Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2340 Entries[i].second->getKeyLength()+1));
2343 // If we've got an offset section go ahead and emit that now as well.
2344 if (OffsetSection) {
2345 Asm->OutStreamer.SwitchSection(OffsetSection);
2346 unsigned offset = 0;
2347 unsigned size = 4; // FIXME: DWARF64 is 8.
2348 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2349 Asm->OutStreamer.EmitIntValue(offset, size);
2350 offset += Entries[i].second->getKeyLength() + 1;
2355 // Emit strings into a string section.
2356 void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2358 if (AddressPool.empty()) return;
2360 // Start the dwarf addr section.
2361 Asm->OutStreamer.SwitchSection(AddrSection);
2363 // Get all of the string pool entries and put them in an array by their ID so
2364 // we can sort them.
2365 SmallVector<std::pair<unsigned,
2366 std::pair<MCSymbol*, unsigned>* >, 64> Entries;
2368 for (DenseMap<MCSymbol*, std::pair<MCSymbol*, unsigned> >::iterator
2369 I = AddressPool.begin(), E = AddressPool.end();
2371 Entries.push_back(std::make_pair(I->second.second, &(I->second)));
2373 array_pod_sort(Entries.begin(), Entries.end());
2375 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2376 // Emit a label for reference from debug information entries.
2377 MCSymbol *Sym = Entries[i].second->first;
2379 Asm->EmitLabelReference(Entries[i].second->first,
2380 Asm->getDataLayout().getPointerSize());
2382 Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2387 // Emit visible names into a debug str section.
2388 void DwarfDebug::emitDebugStr() {
2389 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2390 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2393 // Emit visible names into a debug loc section.
2394 void DwarfDebug::emitDebugLoc() {
2395 if (DotDebugLocEntries.empty())
2398 for (SmallVectorImpl<DotDebugLocEntry>::iterator
2399 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2401 DotDebugLocEntry &Entry = *I;
2402 if (I + 1 != DotDebugLocEntries.end())
2406 // Start the dwarf loc section.
2407 Asm->OutStreamer.SwitchSection(
2408 Asm->getObjFileLowering().getDwarfLocSection());
2409 unsigned char Size = Asm->getDataLayout().getPointerSize();
2410 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2412 for (SmallVectorImpl<DotDebugLocEntry>::iterator
2413 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2414 I != E; ++I, ++index) {
2415 DotDebugLocEntry &Entry = *I;
2416 if (Entry.isMerged()) continue;
2417 if (Entry.isEmpty()) {
2418 Asm->OutStreamer.EmitIntValue(0, Size);
2419 Asm->OutStreamer.EmitIntValue(0, Size);
2420 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2422 Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size);
2423 Asm->OutStreamer.EmitSymbolValue(Entry.End, Size);
2424 DIVariable DV(Entry.Variable);
2425 Asm->OutStreamer.AddComment("Loc expr size");
2426 MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2427 MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2428 Asm->EmitLabelDifference(end, begin, 2);
2429 Asm->OutStreamer.EmitLabel(begin);
2430 if (Entry.isInt()) {
2431 DIBasicType BTy(DV.getType());
2433 (BTy.getEncoding() == dwarf::DW_ATE_signed
2434 || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2435 Asm->OutStreamer.AddComment("DW_OP_consts");
2436 Asm->EmitInt8(dwarf::DW_OP_consts);
2437 Asm->EmitSLEB128(Entry.getInt());
2439 Asm->OutStreamer.AddComment("DW_OP_constu");
2440 Asm->EmitInt8(dwarf::DW_OP_constu);
2441 Asm->EmitULEB128(Entry.getInt());
2443 } else if (Entry.isLocation()) {
2444 if (!DV.hasComplexAddress())
2446 Asm->EmitDwarfRegOp(Entry.Loc, DV.isIndirect());
2448 // Complex address entry.
2449 unsigned N = DV.getNumAddrElements();
2451 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2452 if (Entry.Loc.getOffset()) {
2454 Asm->EmitDwarfRegOp(Entry.Loc, DV.isIndirect());
2455 Asm->OutStreamer.AddComment("DW_OP_deref");
2456 Asm->EmitInt8(dwarf::DW_OP_deref);
2457 Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2458 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2459 Asm->EmitSLEB128(DV.getAddrElement(1));
2461 // If first address element is OpPlus then emit
2462 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2463 MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2464 Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2468 Asm->EmitDwarfRegOp(Entry.Loc, DV.isIndirect());
2471 // Emit remaining complex address elements.
2472 for (; i < N; ++i) {
2473 uint64_t Element = DV.getAddrElement(i);
2474 if (Element == DIBuilder::OpPlus) {
2475 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2476 Asm->EmitULEB128(DV.getAddrElement(++i));
2477 } else if (Element == DIBuilder::OpDeref) {
2478 if (!Entry.Loc.isReg())
2479 Asm->EmitInt8(dwarf::DW_OP_deref);
2481 llvm_unreachable("unknown Opcode found in complex address");
2485 // else ... ignore constant fp. There is not any good way to
2486 // to represent them here in dwarf.
2487 Asm->OutStreamer.EmitLabel(end);
2492 // Emit visible names into a debug aranges section.
2493 void DwarfDebug::emitDebugARanges() {
2494 // Start the dwarf aranges section.
2495 Asm->OutStreamer.SwitchSection(
2496 Asm->getObjFileLowering().getDwarfARangesSection());
2499 // Emit visible names into a debug ranges section.
2500 void DwarfDebug::emitDebugRanges() {
2501 // Start the dwarf ranges section.
2502 Asm->OutStreamer.SwitchSection(
2503 Asm->getObjFileLowering().getDwarfRangesSection());
2504 unsigned char Size = Asm->getDataLayout().getPointerSize();
2505 for (SmallVectorImpl<const MCSymbol *>::iterator
2506 I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2509 Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
2511 Asm->OutStreamer.EmitIntValue(0, Size);
2515 // Emit visible names into a debug macinfo section.
2516 void DwarfDebug::emitDebugMacInfo() {
2517 if (const MCSection *LineInfo =
2518 Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2519 // Start the dwarf macinfo section.
2520 Asm->OutStreamer.SwitchSection(LineInfo);
2524 // Emit inline info using following format.
2526 // 1. length of section
2527 // 2. Dwarf version number
2530 // Entries (one "entry" for each function that was inlined):
2532 // 1. offset into __debug_str section for MIPS linkage name, if exists;
2533 // otherwise offset into __debug_str for regular function name.
2534 // 2. offset into __debug_str section for regular function name.
2535 // 3. an unsigned LEB128 number indicating the number of distinct inlining
2536 // instances for the function.
2538 // The rest of the entry consists of a {die_offset, low_pc} pair for each
2539 // inlined instance; the die_offset points to the inlined_subroutine die in the
2540 // __debug_info section, and the low_pc is the starting address for the
2541 // inlining instance.
2542 void DwarfDebug::emitDebugInlineInfo() {
2543 if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2549 Asm->OutStreamer.SwitchSection(
2550 Asm->getObjFileLowering().getDwarfDebugInlineSection());
2552 Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2553 Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2554 Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2556 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2558 Asm->OutStreamer.AddComment("Dwarf Version");
2559 Asm->EmitInt16(dwarf::DWARF_VERSION);
2560 Asm->OutStreamer.AddComment("Address Size (in bytes)");
2561 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2563 for (SmallVectorImpl<const MDNode *>::iterator I = InlinedSPNodes.begin(),
2564 E = InlinedSPNodes.end(); I != E; ++I) {
2566 const MDNode *Node = *I;
2567 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2568 = InlineInfo.find(Node);
2569 SmallVectorImpl<InlineInfoLabels> &Labels = II->second;
2570 DISubprogram SP(Node);
2571 StringRef LName = SP.getLinkageName();
2572 StringRef Name = SP.getName();
2574 Asm->OutStreamer.AddComment("MIPS linkage name");
2576 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2577 DwarfStrSectionSym);
2579 Asm->EmitSectionOffset(
2580 InfoHolder.getStringPoolEntry(Function::getRealLinkageName(LName)),
2581 DwarfStrSectionSym);
2583 Asm->OutStreamer.AddComment("Function name");
2584 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2585 DwarfStrSectionSym);
2586 Asm->EmitULEB128(Labels.size(), "Inline count");
2588 for (SmallVectorImpl<InlineInfoLabels>::iterator LI = Labels.begin(),
2589 LE = Labels.end(); LI != LE; ++LI) {
2590 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2591 Asm->EmitInt32(LI->second->getOffset());
2593 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2594 Asm->OutStreamer.EmitSymbolValue(LI->first,
2595 Asm->getDataLayout().getPointerSize());
2599 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2602 // DWARF5 Experimental Separate Dwarf emitters.
2604 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2605 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2606 // DW_AT_ranges_base, DW_AT_addr_base. If DW_AT_ranges is present,
2607 // DW_AT_low_pc and DW_AT_high_pc are not used, and vice versa.
2608 CompileUnit *DwarfDebug::constructSkeletonCU(const MDNode *N) {
2609 DICompileUnit DIUnit(N);
2610 CompilationDir = DIUnit.getDirectory();
2612 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2613 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
2614 DIUnit.getLanguage(), Die, N, Asm,
2615 this, &SkeletonHolder);
2617 NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2618 DIUnit.getSplitDebugFilename());
2620 // This should be a unique identifier when we want to build .dwp files.
2621 NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
2623 // Relocate to the beginning of the addr_base section, else 0 for the
2624 // beginning of the one for this compile unit.
2625 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2626 NewCU->addLabel(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset,
2627 DwarfAddrSectionSym);
2629 NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base,
2630 dwarf::DW_FORM_sec_offset, 0);
2632 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2633 // into an entity. We're using 0, or a NULL label for this.
2634 NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2636 // DW_AT_stmt_list is a offset of line number information for this
2637 // compile unit in debug_line section.
2638 // FIXME: Should handle multiple compile units.
2639 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2640 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2641 DwarfLineSectionSym);
2643 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2645 if (!CompilationDir.empty())
2646 NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2648 SkeletonHolder.addUnit(NewCU);
2649 SkeletonCUs.push_back(NewCU);
2654 void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
2655 assert(useSplitDwarf() && "No split dwarf debug info?");
2656 emitAbbrevs(Section, &SkeletonAbbrevs);
2659 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2660 // compile units that would normally be in debug_info.
2661 void DwarfDebug::emitDebugInfoDWO() {
2662 assert(useSplitDwarf() && "No split dwarf debug info?");
2663 InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
2664 Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2665 DwarfAbbrevDWOSectionSym);
2668 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2669 // abbreviations for the .debug_info.dwo section.
2670 void DwarfDebug::emitDebugAbbrevDWO() {
2671 assert(useSplitDwarf() && "No split dwarf?");
2672 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2676 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2677 // string section and is identical in format to traditional .debug_str
2679 void DwarfDebug::emitDebugStrDWO() {
2680 assert(useSplitDwarf() && "No split dwarf?");
2681 const MCSection *OffSec = Asm->getObjFileLowering()
2682 .getDwarfStrOffDWOSection();
2683 const MCSymbol *StrSym = DwarfStrSectionSym;
2684 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),