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."),
59 Default, Enable, Disable
63 static cl::opt<DefaultOnOff> DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
64 cl::desc("Output prototype dwarf accelerator tables."),
66 clEnumVal(Default, "Default for platform"),
67 clEnumVal(Enable, "Enabled"),
68 clEnumVal(Disable, "Disabled"),
72 static cl::opt<DefaultOnOff> DarwinGDBCompat("darwin-gdb-compat", cl::Hidden,
73 cl::desc("Compatibility with Darwin gdb."),
75 clEnumVal(Default, "Default for platform"),
76 clEnumVal(Enable, "Enabled"),
77 clEnumVal(Disable, "Disabled"),
81 static cl::opt<DefaultOnOff> SplitDwarf("split-dwarf", cl::Hidden,
82 cl::desc("Output prototype dwarf split debug info."),
84 clEnumVal(Default, "Default for platform"),
85 clEnumVal(Enable, "Enabled"),
86 clEnumVal(Disable, "Disabled"),
91 const char *DWARFGroupName = "DWARF Emission";
92 const char *DbgTimerName = "DWARF Debug Writer";
93 } // end anonymous namespace
95 //===----------------------------------------------------------------------===//
97 // Configuration values for initial hash set sizes (log2).
99 static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
103 DIType DbgVariable::getType() const {
104 DIType Ty = Var.getType();
105 // FIXME: isBlockByrefVariable should be reformulated in terms of complex
106 // addresses instead.
107 if (Var.isBlockByrefVariable()) {
108 /* Byref variables, in Blocks, are declared by the programmer as
109 "SomeType VarName;", but the compiler creates a
110 __Block_byref_x_VarName struct, and gives the variable VarName
111 either the struct, or a pointer to the struct, as its type. This
112 is necessary for various behind-the-scenes things the compiler
113 needs to do with by-reference variables in blocks.
115 However, as far as the original *programmer* is concerned, the
116 variable should still have type 'SomeType', as originally declared.
118 The following function dives into the __Block_byref_x_VarName
119 struct to find the original type of the variable. This will be
120 passed back to the code generating the type for the Debug
121 Information Entry for the variable 'VarName'. 'VarName' will then
122 have the original type 'SomeType' in its debug information.
124 The original type 'SomeType' will be the type of the field named
125 'VarName' inside the __Block_byref_x_VarName struct.
127 NOTE: In order for this to not completely fail on the debugger
128 side, the Debug Information Entry for the variable VarName needs to
129 have a DW_AT_location that tells the debugger how to unwind through
130 the pointers and __Block_byref_x_VarName struct to find the actual
131 value of the variable. The function addBlockByrefType does this. */
133 unsigned tag = Ty.getTag();
135 if (tag == dwarf::DW_TAG_pointer_type) {
136 DIDerivedType DTy = DIDerivedType(Ty);
137 subType = DTy.getTypeDerivedFrom();
140 DICompositeType blockStruct = DICompositeType(subType);
141 DIArray Elements = blockStruct.getTypeArray();
143 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
144 DIDescriptor Element = Elements.getElement(i);
145 DIDerivedType DT = DIDerivedType(Element);
146 if (getName() == DT.getName())
147 return (DT.getTypeDerivedFrom());
153 } // end llvm namespace
155 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
156 : Asm(A), MMI(Asm->MMI), FirstCU(0),
157 AbbreviationsSet(InitAbbreviationsSetSize),
158 SourceIdMap(DIEValueAllocator),
159 PrevLabel(NULL), GlobalCUIndexCount(0),
160 InfoHolder(A, &AbbreviationsSet, &Abbreviations, "info_string",
162 SkeletonAbbrevSet(InitAbbreviationsSetSize),
163 SkeletonHolder(A, &SkeletonAbbrevSet, &SkeletonAbbrevs, "skel_string",
166 DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
167 DwarfStrSectionSym = TextSectionSym = 0;
168 DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0;
169 DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0;
170 FunctionBeginSym = FunctionEndSym = 0;
172 // Turn on accelerator tables and older gdb compatibility
174 bool IsDarwin = Triple(M->getTargetTriple()).isOSDarwin();
175 if (DarwinGDBCompat == Default) {
177 IsDarwinGDBCompat = true;
179 IsDarwinGDBCompat = false;
181 IsDarwinGDBCompat = DarwinGDBCompat == Enable ? true : false;
183 if (DwarfAccelTables == Default) {
185 HasDwarfAccelTables = true;
187 HasDwarfAccelTables = false;
189 HasDwarfAccelTables = DwarfAccelTables == Enable ? true : false;
191 if (SplitDwarf == Default)
192 HasSplitDwarf = false;
194 HasSplitDwarf = SplitDwarf == Enable ? true : false;
197 NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
201 DwarfDebug::~DwarfDebug() {
204 // Switch to the specified MCSection and emit an assembler
205 // temporary label to it if SymbolStem is specified.
206 static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section,
207 const char *SymbolStem = 0) {
208 Asm->OutStreamer.SwitchSection(Section);
209 if (!SymbolStem) return 0;
211 MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
212 Asm->OutStreamer.EmitLabel(TmpSym);
216 MCSymbol *DwarfUnits::getStringPoolSym() {
217 return Asm->GetTempSymbol(StringPref);
220 MCSymbol *DwarfUnits::getStringPoolEntry(StringRef Str) {
221 std::pair<MCSymbol*, unsigned> &Entry =
222 StringPool.GetOrCreateValue(Str).getValue();
223 if (Entry.first) return Entry.first;
225 Entry.second = NextStringPoolNumber++;
226 return Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
229 unsigned DwarfUnits::getStringPoolIndex(StringRef Str) {
230 std::pair<MCSymbol*, unsigned> &Entry =
231 StringPool.GetOrCreateValue(Str).getValue();
232 if (Entry.first) return Entry.second;
234 Entry.second = NextStringPoolNumber++;
235 Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
239 unsigned DwarfUnits::getAddrPoolIndex(MCSymbol *Sym) {
240 std::pair<MCSymbol*, unsigned> &Entry = AddressPool[Sym];
241 if (Entry.first) return Entry.second;
243 Entry.second = NextAddrPoolNumber++;
248 // Define a unique number for the abbreviation.
250 void DwarfUnits::assignAbbrevNumber(DIEAbbrev &Abbrev) {
251 // Profile the node so that we can make it unique.
255 // Check the set for priors.
256 DIEAbbrev *InSet = AbbreviationsSet->GetOrInsertNode(&Abbrev);
258 // If it's newly added.
259 if (InSet == &Abbrev) {
260 // Add to abbreviation list.
261 Abbreviations->push_back(&Abbrev);
263 // Assign the vector position + 1 as its number.
264 Abbrev.setNumber(Abbreviations->size());
266 // Assign existing abbreviation number.
267 Abbrev.setNumber(InSet->getNumber());
271 // If special LLVM prefix that is used to inform the asm
272 // printer to not emit usual symbol prefix before the symbol name is used then
273 // return linkage name after skipping this special LLVM prefix.
274 static StringRef getRealLinkageName(StringRef LinkageName) {
276 if (LinkageName.startswith(StringRef(&One, 1)))
277 return LinkageName.substr(1);
281 static bool isObjCClass(StringRef Name) {
282 return Name.startswith("+") || Name.startswith("-");
285 static bool hasObjCCategory(StringRef Name) {
286 if (!isObjCClass(Name)) return false;
288 size_t pos = Name.find(')');
289 if (pos != std::string::npos) {
290 if (Name[pos+1] != ' ') return false;
296 static void getObjCClassCategory(StringRef In, StringRef &Class,
297 StringRef &Category) {
298 if (!hasObjCCategory(In)) {
299 Class = In.slice(In.find('[') + 1, In.find(' '));
304 Class = In.slice(In.find('[') + 1, In.find('('));
305 Category = In.slice(In.find('[') + 1, In.find(' '));
309 static StringRef getObjCMethodName(StringRef In) {
310 return In.slice(In.find(' ') + 1, In.find(']'));
313 // Add the various names to the Dwarf accelerator table names.
314 static void addSubprogramNames(CompileUnit *TheCU, DISubprogram SP,
316 if (!SP.isDefinition()) return;
318 TheCU->addAccelName(SP.getName(), Die);
320 // If the linkage name is different than the name, go ahead and output
321 // that as well into the name table.
322 if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
323 TheCU->addAccelName(SP.getLinkageName(), Die);
325 // If this is an Objective-C selector name add it to the ObjC accelerator
327 if (isObjCClass(SP.getName())) {
328 StringRef Class, Category;
329 getObjCClassCategory(SP.getName(), Class, Category);
330 TheCU->addAccelObjC(Class, Die);
332 TheCU->addAccelObjC(Category, Die);
333 // Also add the base method name to the name table.
334 TheCU->addAccelName(getObjCMethodName(SP.getName()), Die);
338 // Find DIE for the given subprogram and attach appropriate DW_AT_low_pc
339 // and DW_AT_high_pc attributes. If there are global variables in this
340 // scope then create and insert DIEs for these variables.
341 DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
342 const MDNode *SPNode) {
343 DIE *SPDie = SPCU->getDIE(SPNode);
345 assert(SPDie && "Unable to find subprogram DIE!");
346 DISubprogram SP(SPNode);
348 // If we're updating an abstract DIE, then we will be adding the children and
349 // object pointer later on. But what we don't want to do is process the
350 // concrete DIE twice.
351 if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
352 // Pick up abstract subprogram DIE.
353 SPDie = new DIE(dwarf::DW_TAG_subprogram);
354 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
355 dwarf::DW_FORM_ref4, AbsSPDIE);
358 DISubprogram SPDecl = SP.getFunctionDeclaration();
359 if (!SPDecl.isSubprogram()) {
360 // There is not any need to generate specification DIE for a function
361 // defined at compile unit level. If a function is defined inside another
362 // function then gdb prefers the definition at top level and but does not
363 // expect specification DIE in parent function. So avoid creating
364 // specification DIE for a function defined inside a function.
365 if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
366 !SP.getContext().isFile() &&
367 !isSubprogramContext(SP.getContext())) {
368 SPCU->addFlag(SPDie, dwarf::DW_AT_declaration);
371 DICompositeType SPTy = SP.getType();
372 DIArray Args = SPTy.getTypeArray();
373 unsigned SPTag = SPTy.getTag();
374 if (SPTag == dwarf::DW_TAG_subroutine_type)
375 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
376 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
377 DIType ATy = DIType(Args.getElement(i));
378 SPCU->addType(Arg, ATy);
379 if (ATy.isArtificial())
380 SPCU->addFlag(Arg, dwarf::DW_AT_artificial);
381 if (ATy.isObjectPointer())
382 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer,
383 dwarf::DW_FORM_ref4, Arg);
384 SPDie->addChild(Arg);
386 DIE *SPDeclDie = SPDie;
387 SPDie = new DIE(dwarf::DW_TAG_subprogram);
388 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification,
389 dwarf::DW_FORM_ref4, SPDeclDie);
395 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_low_pc,
396 Asm->GetTempSymbol("func_begin",
397 Asm->getFunctionNumber()));
398 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_high_pc,
399 Asm->GetTempSymbol("func_end",
400 Asm->getFunctionNumber()));
401 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
402 MachineLocation Location(RI->getFrameRegister(*Asm->MF));
403 SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
405 // Add name to the name table, we do this here because we're guaranteed
406 // to have concrete versions of our DW_TAG_subprogram nodes.
407 addSubprogramNames(SPCU, SP, SPDie);
412 // Construct new DW_TAG_lexical_block for this scope and attach
413 // DW_AT_low_pc/DW_AT_high_pc labels.
414 DIE *DwarfDebug::constructLexicalScopeDIE(CompileUnit *TheCU,
415 LexicalScope *Scope) {
416 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
417 if (Scope->isAbstractScope())
420 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
424 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
425 if (Ranges.size() > 1) {
426 // .debug_range section has not been laid out yet. Emit offset in
427 // .debug_range as a uint, size 4, for now. emitDIE will handle
428 // DW_AT_ranges appropriately.
429 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
430 DebugRangeSymbols.size()
431 * Asm->getDataLayout().getPointerSize());
432 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
433 RE = Ranges.end(); RI != RE; ++RI) {
434 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
435 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
437 DebugRangeSymbols.push_back(NULL);
438 DebugRangeSymbols.push_back(NULL);
442 MCSymbol *Start = getLabelBeforeInsn(RI->first);
443 MCSymbol *End = getLabelAfterInsn(RI->second);
445 if (End == 0) return 0;
447 assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
448 assert(End->isDefined() && "Invalid end label for an inlined scope!");
450 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, Start);
451 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, End);
456 // This scope represents inlined body of a function. Construct DIE to
457 // represent this concrete inlined copy of the function.
458 DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
459 LexicalScope *Scope) {
460 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
461 assert(Ranges.empty() == false &&
462 "LexicalScope does not have instruction markers!");
464 if (!Scope->getScopeNode())
466 DIScope DS(Scope->getScopeNode());
467 DISubprogram InlinedSP = getDISubprogram(DS);
468 DIE *OriginDIE = TheCU->getDIE(InlinedSP);
470 DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram.");
474 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
475 MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
476 MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
478 if (StartLabel == 0 || EndLabel == 0) {
479 llvm_unreachable("Unexpected Start and End labels for an inlined scope!");
481 assert(StartLabel->isDefined() &&
482 "Invalid starting label for an inlined scope!");
483 assert(EndLabel->isDefined() &&
484 "Invalid end label for an inlined scope!");
486 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
487 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
488 dwarf::DW_FORM_ref4, OriginDIE);
490 if (Ranges.size() > 1) {
491 // .debug_range section has not been laid out yet. Emit offset in
492 // .debug_range as a uint, size 4, for now. emitDIE will handle
493 // DW_AT_ranges appropriately.
494 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
495 DebugRangeSymbols.size()
496 * Asm->getDataLayout().getPointerSize());
497 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
498 RE = Ranges.end(); RI != RE; ++RI) {
499 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
500 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
502 DebugRangeSymbols.push_back(NULL);
503 DebugRangeSymbols.push_back(NULL);
505 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, StartLabel);
506 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, EndLabel);
509 InlinedSubprogramDIEs.insert(OriginDIE);
511 // Track the start label for this inlined function.
512 //.debug_inlined section specification does not clearly state how
513 // to emit inlined scope that is split into multiple instruction ranges.
514 // For now, use first instruction range and emit low_pc/high_pc pair and
515 // corresponding .debug_inlined section entry for this pair.
516 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
517 I = InlineInfo.find(InlinedSP);
519 if (I == InlineInfo.end()) {
520 InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel, ScopeDIE));
521 InlinedSPNodes.push_back(InlinedSP);
523 I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
525 DILocation DL(Scope->getInlinedAt());
526 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0,
527 getOrCreateSourceID(DL.getFilename(), DL.getDirectory()));
528 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
530 // Add name to the name table, we do this here because we're guaranteed
531 // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
532 addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
537 // Construct a DIE for this scope.
538 DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
539 if (!Scope || !Scope->getScopeNode())
542 DIScope DS(Scope->getScopeNode());
543 // Early return to avoid creating dangling variable|scope DIEs.
544 if (!Scope->getInlinedAt() && DS.isSubprogram() && Scope->isAbstractScope() &&
548 SmallVector<DIE *, 8> Children;
549 DIE *ObjectPointer = NULL;
551 // Collect arguments for current function.
552 if (LScopes.isCurrentFunctionScope(Scope))
553 for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
554 if (DbgVariable *ArgDV = CurrentFnArguments[i])
556 TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope())) {
557 Children.push_back(Arg);
558 if (ArgDV->isObjectPointer()) ObjectPointer = Arg;
561 // Collect lexical scope children first.
562 const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
563 for (unsigned i = 0, N = Variables.size(); i < N; ++i)
565 TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope())) {
566 Children.push_back(Variable);
567 if (Variables[i]->isObjectPointer()) ObjectPointer = Variable;
569 const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
570 for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
571 if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
572 Children.push_back(Nested);
573 DIE *ScopeDIE = NULL;
574 if (Scope->getInlinedAt())
575 ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
576 else if (DS.isSubprogram()) {
577 ProcessedSPNodes.insert(DS);
578 if (Scope->isAbstractScope()) {
579 ScopeDIE = TheCU->getDIE(DS);
580 // Note down abstract DIE.
582 AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
585 ScopeDIE = updateSubprogramScopeDIE(TheCU, DS);
588 // There is no need to emit empty lexical block DIE.
589 if (Children.empty())
591 ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
594 if (!ScopeDIE) return NULL;
597 for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
598 E = Children.end(); I != E; ++I)
599 ScopeDIE->addChild(*I);
601 if (DS.isSubprogram() && ObjectPointer != NULL)
602 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer,
603 dwarf::DW_FORM_ref4, ObjectPointer);
605 if (DS.isSubprogram())
606 TheCU->addPubTypes(DISubprogram(DS));
611 // Look up the source id with the given directory and source file names.
612 // If none currently exists, create a new id and insert it in the
613 // SourceIds map. This can update DirectoryNames and SourceFileNames maps
615 unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName,
617 // If FE did not provide a file name, then assume stdin.
618 if (FileName.empty())
619 return getOrCreateSourceID("<stdin>", StringRef());
621 // TODO: this might not belong here. See if we can factor this better.
622 if (DirName == CompilationDir)
625 unsigned SrcId = SourceIdMap.size()+1;
627 // We look up the file/dir pair by concatenating them with a zero byte.
628 SmallString<128> NamePair;
630 NamePair += '\0'; // Zero bytes are not allowed in paths.
631 NamePair += FileName;
633 StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId);
634 if (Ent.getValue() != SrcId)
635 return Ent.getValue();
637 // Print out a .file directive to specify files for .loc directives.
638 Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName);
643 // Create new CompileUnit for the given metadata node with tag
644 // DW_TAG_compile_unit.
645 CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) {
646 DICompileUnit DIUnit(N);
647 StringRef FN = DIUnit.getFilename();
648 CompilationDir = DIUnit.getDirectory();
649 // Call this to emit a .file directive if it wasn't emitted for the source
650 // file this CU comes from yet.
651 getOrCreateSourceID(FN, CompilationDir);
653 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
654 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
655 DIUnit.getLanguage(), Die, Asm,
657 NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
658 NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
659 DIUnit.getLanguage());
660 NewCU->addString(Die, dwarf::DW_AT_name, FN);
661 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
662 // into an entity. We're using 0 (or a NULL label) for this.
663 NewCU->addLabelAddress(Die, dwarf::DW_AT_low_pc, NULL);
665 // Define start line table label for each Compile Unit.
666 MCSymbol *LineTableStartSym = Asm->GetTempSymbol("line_table_start",
667 NewCU->getUniqueID());
668 Asm->OutStreamer.getContext().setMCLineTableSymbol(LineTableStartSym,
669 NewCU->getUniqueID());
671 // DW_AT_stmt_list is a offset of line number information for this
672 // compile unit in debug_line section.
673 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
674 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
676 else if (NewCU->getUniqueID() == 0)
677 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
679 NewCU->addDelta(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
680 LineTableStartSym, DwarfLineSectionSym);
682 if (!CompilationDir.empty())
683 NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
684 if (DIUnit.isOptimized())
685 NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized);
687 StringRef Flags = DIUnit.getFlags();
689 NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
691 if (unsigned RVer = DIUnit.getRunTimeVersion())
692 NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
693 dwarf::DW_FORM_data1, RVer);
698 if (useSplitDwarf()) {
699 // This should be a unique identifier when we want to build .dwp files.
700 NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
701 // Now construct the skeleton CU associated.
702 constructSkeletonCU(N);
705 InfoHolder.addUnit(NewCU);
707 CUMap.insert(std::make_pair(N, NewCU));
711 // Construct subprogram DIE.
712 void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
714 CompileUnit *&CURef = SPMap[N];
720 if (!SP.isDefinition())
721 // This is a method declaration which will be handled while constructing
725 DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
728 TheCU->insertDIE(N, SubprogramDie);
730 // Add to context owner.
731 TheCU->addToContextOwner(SubprogramDie, SP.getContext());
736 // Collect debug info from named mdnodes such as llvm.dbg.enum and llvm.dbg.ty.
737 void DwarfDebug::collectInfoFromNamedMDNodes(const Module *M) {
738 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.sp"))
739 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
740 const MDNode *N = NMD->getOperand(i);
741 if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
742 constructSubprogramDIE(CU, N);
745 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv"))
746 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
747 const MDNode *N = NMD->getOperand(i);
748 if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
749 CU->createGlobalVariableDIE(N);
752 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
753 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
754 DIType Ty(NMD->getOperand(i));
755 if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
756 CU->getOrCreateTypeDIE(Ty);
759 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
760 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
761 DIType Ty(NMD->getOperand(i));
762 if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
763 CU->getOrCreateTypeDIE(Ty);
767 // Collect debug info using DebugInfoFinder.
768 // FIXME - Remove this when dragonegg switches to DIBuilder.
769 bool DwarfDebug::collectLegacyDebugInfo(const Module *M) {
770 DebugInfoFinder DbgFinder;
771 DbgFinder.processModule(*M);
773 bool HasDebugInfo = false;
774 // Scan all the compile-units to see if there are any marked as the main
775 // unit. If not, we do not generate debug info.
776 for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
777 E = DbgFinder.compile_unit_end(); I != E; ++I) {
778 if (DICompileUnit(*I).isMain()) {
783 if (!HasDebugInfo) return false;
785 // Emit initial sections so we can refer to them later.
788 // Create all the compile unit DIEs.
789 for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
790 E = DbgFinder.compile_unit_end(); I != E; ++I)
791 constructCompileUnit(*I);
793 // Create DIEs for each global variable.
794 for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
795 E = DbgFinder.global_variable_end(); I != E; ++I) {
796 const MDNode *N = *I;
797 if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
798 CU->createGlobalVariableDIE(N);
801 // Create DIEs for each subprogram.
802 for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
803 E = DbgFinder.subprogram_end(); I != E; ++I) {
804 const MDNode *N = *I;
805 if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
806 constructSubprogramDIE(CU, N);
812 // Emit all Dwarf sections that should come prior to the content. Create
813 // global DIEs and emit initial debug info sections. This is invoked by
814 // the target AsmPrinter.
815 void DwarfDebug::beginModule() {
816 if (DisableDebugInfoPrinting)
819 const Module *M = MMI->getModule();
821 // If module has named metadata anchors then use them, otherwise scan the
822 // module using debug info finder to collect debug info.
823 NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
825 // Emit initial sections so we can reference labels later.
828 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
829 DICompileUnit CUNode(CU_Nodes->getOperand(i));
830 CompileUnit *CU = constructCompileUnit(CUNode);
831 DIArray GVs = CUNode.getGlobalVariables();
832 for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
833 CU->createGlobalVariableDIE(GVs.getElement(i));
834 DIArray SPs = CUNode.getSubprograms();
835 for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
836 constructSubprogramDIE(CU, SPs.getElement(i));
837 DIArray EnumTypes = CUNode.getEnumTypes();
838 for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
839 CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
840 DIArray RetainedTypes = CUNode.getRetainedTypes();
841 for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
842 CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
844 } else if (!collectLegacyDebugInfo(M))
847 collectInfoFromNamedMDNodes(M);
849 // Tell MMI that we have debug info.
850 MMI->setDebugInfoAvailability(true);
852 // Prime section data.
853 SectionMap.insert(Asm->getObjFileLowering().getTextSection());
856 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
857 void DwarfDebug::computeInlinedDIEs() {
858 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
859 for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
860 AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
862 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
864 for (DenseMap<const MDNode *, DIE *>::iterator AI = AbstractSPDies.begin(),
865 AE = AbstractSPDies.end(); AI != AE; ++AI) {
866 DIE *ISP = AI->second;
867 if (InlinedSubprogramDIEs.count(ISP))
869 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
873 // Collect info for variables that were optimized out.
874 void DwarfDebug::collectDeadVariables() {
875 const Module *M = MMI->getModule();
876 DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
878 if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
879 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
880 DICompileUnit TheCU(CU_Nodes->getOperand(i));
881 DIArray Subprograms = TheCU.getSubprograms();
882 for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
883 DISubprogram SP(Subprograms.getElement(i));
884 if (ProcessedSPNodes.count(SP) != 0) continue;
885 if (!SP.Verify()) continue;
886 if (!SP.isDefinition()) continue;
887 DIArray Variables = SP.getVariables();
888 if (Variables.getNumElements() == 0) continue;
890 LexicalScope *Scope =
891 new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
892 DeadFnScopeMap[SP] = Scope;
894 // Construct subprogram DIE and add variables DIEs.
895 CompileUnit *SPCU = CUMap.lookup(TheCU);
896 assert(SPCU && "Unable to find Compile Unit!");
897 constructSubprogramDIE(SPCU, SP);
898 DIE *ScopeDIE = SPCU->getDIE(SP);
899 for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
900 DIVariable DV(Variables.getElement(vi));
901 if (!DV.Verify()) continue;
902 DbgVariable *NewVar = new DbgVariable(DV, NULL);
903 if (DIE *VariableDIE =
904 SPCU->constructVariableDIE(NewVar, Scope->isAbstractScope()))
905 ScopeDIE->addChild(VariableDIE);
910 DeleteContainerSeconds(DeadFnScopeMap);
913 void DwarfDebug::finalizeModuleInfo() {
914 // Collect info for variables that were optimized out.
915 collectDeadVariables();
917 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
918 computeInlinedDIEs();
920 // Emit DW_AT_containing_type attribute to connect types with their
921 // vtable holding type.
922 for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
923 CUE = CUMap.end(); CUI != CUE; ++CUI) {
924 CompileUnit *TheCU = CUI->second;
925 TheCU->constructContainingTypeDIEs();
928 // Compute DIE offsets and sizes.
929 InfoHolder.computeSizeAndOffsets();
931 SkeletonHolder.computeSizeAndOffsets();
934 void DwarfDebug::endSections() {
935 // Standard sections final addresses.
936 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
937 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
938 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
939 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
941 // End text sections.
942 for (unsigned I = 0, E = SectionMap.size(); I != E; ++I) {
943 Asm->OutStreamer.SwitchSection(SectionMap[I]);
944 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", I+1));
948 // Emit all Dwarf sections that should come after the content.
949 void DwarfDebug::endModule() {
951 if (!FirstCU) return;
953 // End any existing sections.
954 // TODO: Does this need to happen?
957 // Finalize the debug info for the module.
958 finalizeModuleInfo();
960 if (!useSplitDwarf()) {
961 // Emit all the DIEs into a debug info section.
964 // Corresponding abbreviations into a abbrev section.
967 // Emit info into a debug loc section.
970 // Emit info into a debug aranges section.
973 // Emit info into a debug ranges section.
976 // Emit info into a debug macinfo section.
980 // TODO: When we don't need the option anymore we
981 // can remove all of the code that this section
983 if (useDarwinGDBCompat())
984 emitDebugInlineInfo();
986 // TODO: Fill this in for separated debug sections and separate
987 // out information into new sections.
989 // Emit the debug info section and compile units.
993 // Corresponding abbreviations into a abbrev section.
995 emitDebugAbbrevDWO();
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 DWO addresses.
1010 InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1012 // Emit inline info.
1013 // TODO: When we don't need the option anymore we
1014 // can remove all of the code that this section
1016 if (useDarwinGDBCompat())
1017 emitDebugInlineInfo();
1020 // Emit info into the dwarf accelerator table sections.
1021 if (useDwarfAccelTables()) {
1024 emitAccelNamespaces();
1028 // Emit info into a debug pubtypes section.
1029 // TODO: When we don't need the option anymore we can
1030 // remove all of the code that adds to the table.
1031 if (useDarwinGDBCompat())
1032 emitDebugPubTypes();
1034 // Finally emit string information into a string table.
1036 if (useSplitDwarf())
1041 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1042 E = CUMap.end(); I != E; ++I)
1045 for (SmallVector<CompileUnit *, 1>::iterator I = SkeletonCUs.begin(),
1046 E = SkeletonCUs.end(); I != E; ++I)
1049 // Reset these for the next Module if we have one.
1053 // Find abstract variable, if any, associated with Var.
1054 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1055 DebugLoc ScopeLoc) {
1056 LLVMContext &Ctx = DV->getContext();
1057 // More then one inlined variable corresponds to one abstract variable.
1058 DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1059 DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1061 return AbsDbgVariable;
1063 LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1067 AbsDbgVariable = new DbgVariable(Var, NULL);
1068 addScopeVariable(Scope, AbsDbgVariable);
1069 AbstractVariables[Var] = AbsDbgVariable;
1070 return AbsDbgVariable;
1073 // If Var is a current function argument then add it to CurrentFnArguments list.
1074 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1075 DbgVariable *Var, LexicalScope *Scope) {
1076 if (!LScopes.isCurrentFunctionScope(Scope))
1078 DIVariable DV = Var->getVariable();
1079 if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1081 unsigned ArgNo = DV.getArgNumber();
1085 size_t Size = CurrentFnArguments.size();
1087 CurrentFnArguments.resize(MF->getFunction()->arg_size());
1088 // llvm::Function argument size is not good indicator of how many
1089 // arguments does the function have at source level.
1091 CurrentFnArguments.resize(ArgNo * 2);
1092 CurrentFnArguments[ArgNo - 1] = Var;
1096 // Collect variable information from side table maintained by MMI.
1098 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
1099 SmallPtrSet<const MDNode *, 16> &Processed) {
1100 MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1101 for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1102 VE = VMap.end(); VI != VE; ++VI) {
1103 const MDNode *Var = VI->first;
1105 Processed.insert(Var);
1107 const std::pair<unsigned, DebugLoc> &VP = VI->second;
1109 LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
1111 // If variable scope is not found then skip this variable.
1115 DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1116 DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
1117 RegVar->setFrameIndex(VP.first);
1118 if (!addCurrentFnArgument(MF, RegVar, Scope))
1119 addScopeVariable(Scope, RegVar);
1121 AbsDbgVariable->setFrameIndex(VP.first);
1125 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
1127 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1128 assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1129 return MI->getNumOperands() == 3 &&
1130 MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1131 MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1134 // Get .debug_loc entry for the instruction range starting at MI.
1135 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1136 const MCSymbol *FLabel,
1137 const MCSymbol *SLabel,
1138 const MachineInstr *MI) {
1139 const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1141 if (MI->getNumOperands() != 3) {
1142 MachineLocation MLoc = Asm->getDebugValueLocation(MI);
1143 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1145 if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
1146 MachineLocation MLoc;
1147 MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1148 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1150 if (MI->getOperand(0).isImm())
1151 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1152 if (MI->getOperand(0).isFPImm())
1153 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1154 if (MI->getOperand(0).isCImm())
1155 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1157 llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1160 // Find variables for each lexical scope.
1162 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1163 SmallPtrSet<const MDNode *, 16> &Processed) {
1165 // collection info from MMI table.
1166 collectVariableInfoFromMMITable(MF, Processed);
1168 for (SmallVectorImpl<const MDNode*>::const_iterator
1169 UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1171 const MDNode *Var = *UVI;
1172 if (Processed.count(Var))
1175 // History contains relevant DBG_VALUE instructions for Var and instructions
1177 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1178 if (History.empty())
1180 const MachineInstr *MInsn = History.front();
1183 LexicalScope *Scope = NULL;
1184 if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1185 DISubprogram(DV.getContext()).describes(MF->getFunction()))
1186 Scope = LScopes.getCurrentFunctionScope();
1188 if (DV.getVersion() <= LLVMDebugVersion9)
1189 Scope = LScopes.findLexicalScope(MInsn->getDebugLoc());
1191 if (MDNode *IA = DV.getInlinedAt())
1192 Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1194 Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1197 // If variable scope is not found then skip this variable.
1201 Processed.insert(DV);
1202 assert(MInsn->isDebugValue() && "History must begin with debug value");
1203 DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1204 DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1205 if (!addCurrentFnArgument(MF, RegVar, Scope))
1206 addScopeVariable(Scope, RegVar);
1208 AbsVar->setMInsn(MInsn);
1210 // Simplify ranges that are fully coalesced.
1211 if (History.size() <= 1 || (History.size() == 2 &&
1212 MInsn->isIdenticalTo(History.back()))) {
1213 RegVar->setMInsn(MInsn);
1217 // Handle multiple DBG_VALUE instructions describing one variable.
1218 RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1220 for (SmallVectorImpl<const MachineInstr*>::const_iterator
1221 HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1222 const MachineInstr *Begin = *HI;
1223 assert(Begin->isDebugValue() && "Invalid History entry");
1225 // Check if DBG_VALUE is truncating a range.
1226 if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1227 && !Begin->getOperand(0).getReg())
1230 // Compute the range for a register location.
1231 const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1232 const MCSymbol *SLabel = 0;
1235 // If Begin is the last instruction in History then its value is valid
1236 // until the end of the function.
1237 SLabel = FunctionEndSym;
1239 const MachineInstr *End = HI[1];
1240 DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1241 << "\t" << *Begin << "\t" << *End << "\n");
1242 if (End->isDebugValue())
1243 SLabel = getLabelBeforeInsn(End);
1245 // End is a normal instruction clobbering the range.
1246 SLabel = getLabelAfterInsn(End);
1247 assert(SLabel && "Forgot label after clobber instruction");
1252 // The value is valid until the next DBG_VALUE or clobber.
1253 DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1256 DotDebugLocEntries.push_back(DotDebugLocEntry());
1259 // Collect info for variables that were optimized out.
1260 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1261 DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1262 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1263 DIVariable DV(Variables.getElement(i));
1264 if (!DV || !DV.Verify() || !Processed.insert(DV))
1266 if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1267 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1271 // Return Label preceding the instruction.
1272 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1273 MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1274 assert(Label && "Didn't insert label before instruction");
1278 // Return Label immediately following the instruction.
1279 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1280 return LabelsAfterInsn.lookup(MI);
1283 // Process beginning of an instruction.
1284 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1285 // Check if source location changes, but ignore DBG_VALUE locations.
1286 if (!MI->isDebugValue()) {
1287 DebugLoc DL = MI->getDebugLoc();
1288 if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1291 if (DL == PrologEndLoc) {
1292 Flags |= DWARF2_FLAG_PROLOGUE_END;
1293 PrologEndLoc = DebugLoc();
1295 if (PrologEndLoc.isUnknown())
1296 Flags |= DWARF2_FLAG_IS_STMT;
1298 if (!DL.isUnknown()) {
1299 const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1300 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1302 recordSourceLine(0, 0, 0, 0);
1306 // Insert labels where requested.
1307 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1308 LabelsBeforeInsn.find(MI);
1311 if (I == LabelsBeforeInsn.end())
1314 // Label already assigned.
1319 PrevLabel = MMI->getContext().CreateTempSymbol();
1320 Asm->OutStreamer.EmitLabel(PrevLabel);
1322 I->second = PrevLabel;
1325 // Process end of an instruction.
1326 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1327 // Don't create a new label after DBG_VALUE instructions.
1328 // They don't generate code.
1329 if (!MI->isDebugValue())
1332 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1333 LabelsAfterInsn.find(MI);
1336 if (I == LabelsAfterInsn.end())
1339 // Label already assigned.
1343 // We need a label after this instruction.
1345 PrevLabel = MMI->getContext().CreateTempSymbol();
1346 Asm->OutStreamer.EmitLabel(PrevLabel);
1348 I->second = PrevLabel;
1351 // Each LexicalScope has first instruction and last instruction to mark
1352 // beginning and end of a scope respectively. Create an inverse map that list
1353 // scopes starts (and ends) with an instruction. One instruction may start (or
1354 // end) multiple scopes. Ignore scopes that are not reachable.
1355 void DwarfDebug::identifyScopeMarkers() {
1356 SmallVector<LexicalScope *, 4> WorkList;
1357 WorkList.push_back(LScopes.getCurrentFunctionScope());
1358 while (!WorkList.empty()) {
1359 LexicalScope *S = WorkList.pop_back_val();
1361 const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1362 if (!Children.empty())
1363 for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1364 SE = Children.end(); SI != SE; ++SI)
1365 WorkList.push_back(*SI);
1367 if (S->isAbstractScope())
1370 const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1373 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1374 RE = Ranges.end(); RI != RE; ++RI) {
1375 assert(RI->first && "InsnRange does not have first instruction!");
1376 assert(RI->second && "InsnRange does not have second instruction!");
1377 requestLabelBeforeInsn(RI->first);
1378 requestLabelAfterInsn(RI->second);
1383 // Get MDNode for DebugLoc's scope.
1384 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1385 if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1386 return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1387 return DL.getScope(Ctx);
1390 // Walk up the scope chain of given debug loc and find line number info
1391 // for the function.
1392 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1393 const MDNode *Scope = getScopeNode(DL, Ctx);
1394 DISubprogram SP = getDISubprogram(Scope);
1396 // Check for number of operands since the compatibility is
1398 if (SP->getNumOperands() > 19)
1399 return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1401 return DebugLoc::get(SP.getLineNumber(), 0, SP);
1407 // Gather pre-function debug information. Assumes being called immediately
1408 // after the function entry point has been emitted.
1409 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1410 if (!MMI->hasDebugInfo()) return;
1411 LScopes.initialize(*MF);
1412 if (LScopes.empty()) return;
1413 identifyScopeMarkers();
1415 // Set DwarfCompileUnitID in MCContext to the Compile Unit this function
1417 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1418 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1419 assert(TheCU && "Unable to find compile unit!");
1420 Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1422 FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1423 Asm->getFunctionNumber());
1424 // Assumes in correct section after the entry point.
1425 Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1427 assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1429 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1430 // LiveUserVar - Map physreg numbers to the MDNode they contain.
1431 std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1433 for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1435 bool AtBlockEntry = true;
1436 for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1438 const MachineInstr *MI = II;
1440 if (MI->isDebugValue()) {
1441 assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1443 // Keep track of user variables.
1445 MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1447 // Variable is in a register, we need to check for clobbers.
1448 if (isDbgValueInDefinedReg(MI))
1449 LiveUserVar[MI->getOperand(0).getReg()] = Var;
1451 // Check the history of this variable.
1452 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1453 if (History.empty()) {
1454 UserVariables.push_back(Var);
1455 // The first mention of a function argument gets the FunctionBeginSym
1456 // label, so arguments are visible when breaking at function entry.
1458 if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1459 DISubprogram(getDISubprogram(DV.getContext()))
1460 .describes(MF->getFunction()))
1461 LabelsBeforeInsn[MI] = FunctionBeginSym;
1463 // We have seen this variable before. Try to coalesce DBG_VALUEs.
1464 const MachineInstr *Prev = History.back();
1465 if (Prev->isDebugValue()) {
1466 // Coalesce identical entries at the end of History.
1467 if (History.size() >= 2 &&
1468 Prev->isIdenticalTo(History[History.size() - 2])) {
1469 DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1471 << "\t" << *History[History.size() - 2] << "\n");
1475 // Terminate old register assignments that don't reach MI;
1476 MachineFunction::const_iterator PrevMBB = Prev->getParent();
1477 if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1478 isDbgValueInDefinedReg(Prev)) {
1479 // Previous register assignment needs to terminate at the end of
1481 MachineBasicBlock::const_iterator LastMI =
1482 PrevMBB->getLastNonDebugInstr();
1483 if (LastMI == PrevMBB->end()) {
1484 // Drop DBG_VALUE for empty range.
1485 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1486 << "\t" << *Prev << "\n");
1490 // Terminate after LastMI.
1491 History.push_back(LastMI);
1496 History.push_back(MI);
1498 // Not a DBG_VALUE instruction.
1500 AtBlockEntry = false;
1502 // First known non-DBG_VALUE and non-frame setup location marks
1503 // the beginning of the function body.
1504 if (!MI->getFlag(MachineInstr::FrameSetup) &&
1505 (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1506 PrologEndLoc = MI->getDebugLoc();
1508 // Check if the instruction clobbers any registers with debug vars.
1509 for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1510 MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1511 if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1513 for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1514 AI.isValid(); ++AI) {
1516 const MDNode *Var = LiveUserVar[Reg];
1519 // Reg is now clobbered.
1520 LiveUserVar[Reg] = 0;
1522 // Was MD last defined by a DBG_VALUE referring to Reg?
1523 DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1524 if (HistI == DbgValues.end())
1526 SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1527 if (History.empty())
1529 const MachineInstr *Prev = History.back();
1530 // Sanity-check: Register assignments are terminated at the end of
1532 if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1534 // Is the variable still in Reg?
1535 if (!isDbgValueInDefinedReg(Prev) ||
1536 Prev->getOperand(0).getReg() != Reg)
1538 // Var is clobbered. Make sure the next instruction gets a label.
1539 History.push_back(MI);
1546 for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1548 SmallVectorImpl<const MachineInstr*> &History = I->second;
1549 if (History.empty())
1552 // Make sure the final register assignments are terminated.
1553 const MachineInstr *Prev = History.back();
1554 if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1555 const MachineBasicBlock *PrevMBB = Prev->getParent();
1556 MachineBasicBlock::const_iterator LastMI =
1557 PrevMBB->getLastNonDebugInstr();
1558 if (LastMI == PrevMBB->end())
1559 // Drop DBG_VALUE for empty range.
1562 // Terminate after LastMI.
1563 History.push_back(LastMI);
1566 // Request labels for the full history.
1567 for (unsigned i = 0, e = History.size(); i != e; ++i) {
1568 const MachineInstr *MI = History[i];
1569 if (MI->isDebugValue())
1570 requestLabelBeforeInsn(MI);
1572 requestLabelAfterInsn(MI);
1576 PrevInstLoc = DebugLoc();
1577 PrevLabel = FunctionBeginSym;
1579 // Record beginning of function.
1580 if (!PrologEndLoc.isUnknown()) {
1581 DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1582 MF->getFunction()->getContext());
1583 recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1584 FnStartDL.getScope(MF->getFunction()->getContext()),
1585 // We'd like to list the prologue as "not statements" but GDB behaves
1586 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1587 DWARF2_FLAG_IS_STMT);
1591 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1592 // SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1593 ScopeVariables[LS].push_back(Var);
1594 // Vars.push_back(Var);
1597 // Gather and emit post-function debug information.
1598 void DwarfDebug::endFunction(const MachineFunction *MF) {
1599 if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1601 // Define end label for subprogram.
1602 FunctionEndSym = Asm->GetTempSymbol("func_end",
1603 Asm->getFunctionNumber());
1604 // Assumes in correct section after the entry point.
1605 Asm->OutStreamer.EmitLabel(FunctionEndSym);
1606 // Set DwarfCompileUnitID in MCContext to default value.
1607 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1609 SmallPtrSet<const MDNode *, 16> ProcessedVars;
1610 collectVariableInfo(MF, ProcessedVars);
1612 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1613 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1614 assert(TheCU && "Unable to find compile unit!");
1616 // Construct abstract scopes.
1617 ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1618 for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1619 LexicalScope *AScope = AList[i];
1620 DISubprogram SP(AScope->getScopeNode());
1622 // Collect info for variables that were optimized out.
1623 DIArray Variables = SP.getVariables();
1624 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1625 DIVariable DV(Variables.getElement(i));
1626 if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1628 // Check that DbgVariable for DV wasn't created earlier, when
1629 // findAbstractVariable() was called for inlined instance of DV.
1630 LLVMContext &Ctx = DV->getContext();
1631 DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1632 if (AbstractVariables.lookup(CleanDV))
1634 if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1635 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1638 if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1639 constructScopeDIE(TheCU, AScope);
1642 DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1644 if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1645 TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1647 DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1648 MMI->getFrameMoves()));
1651 for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1652 I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1653 DeleteContainerPointers(I->second);
1654 ScopeVariables.clear();
1655 DeleteContainerPointers(CurrentFnArguments);
1656 UserVariables.clear();
1658 AbstractVariables.clear();
1659 LabelsBeforeInsn.clear();
1660 LabelsAfterInsn.clear();
1664 // Register a source line with debug info. Returns the unique label that was
1665 // emitted and which provides correspondence to the source line list.
1666 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1672 DIDescriptor Scope(S);
1674 if (Scope.isCompileUnit()) {
1675 DICompileUnit CU(S);
1676 Fn = CU.getFilename();
1677 Dir = CU.getDirectory();
1678 } else if (Scope.isFile()) {
1680 Fn = F.getFilename();
1681 Dir = F.getDirectory();
1682 } else if (Scope.isSubprogram()) {
1684 Fn = SP.getFilename();
1685 Dir = SP.getDirectory();
1686 } else if (Scope.isLexicalBlockFile()) {
1687 DILexicalBlockFile DBF(S);
1688 Fn = DBF.getFilename();
1689 Dir = DBF.getDirectory();
1690 } else if (Scope.isLexicalBlock()) {
1691 DILexicalBlock DB(S);
1692 Fn = DB.getFilename();
1693 Dir = DB.getDirectory();
1695 llvm_unreachable("Unexpected scope info");
1697 Src = getOrCreateSourceID(Fn, Dir);
1699 Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1702 //===----------------------------------------------------------------------===//
1704 //===----------------------------------------------------------------------===//
1706 // Compute the size and offset of a DIE.
1708 DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1709 // Get the children.
1710 const std::vector<DIE *> &Children = Die->getChildren();
1712 // Record the abbreviation.
1713 assignAbbrevNumber(Die->getAbbrev());
1715 // Get the abbreviation for this DIE.
1716 unsigned AbbrevNumber = Die->getAbbrevNumber();
1717 const DIEAbbrev *Abbrev = Abbreviations->at(AbbrevNumber - 1);
1720 Die->setOffset(Offset);
1722 // Start the size with the size of abbreviation code.
1723 Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1725 const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1726 const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1728 // Size the DIE attribute values.
1729 for (unsigned i = 0, N = Values.size(); i < N; ++i)
1730 // Size attribute value.
1731 Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1733 // Size the DIE children if any.
1734 if (!Children.empty()) {
1735 assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1736 "Children flag not set");
1738 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1739 Offset = computeSizeAndOffset(Children[j], Offset);
1741 // End of children marker.
1742 Offset += sizeof(int8_t);
1745 Die->setSize(Offset - Die->getOffset());
1749 // Compute the size and offset of all the DIEs.
1750 void DwarfUnits::computeSizeAndOffsets() {
1751 for (SmallVector<CompileUnit *, 1>::iterator I = CUs.begin(),
1752 E = CUs.end(); I != E; ++I) {
1754 sizeof(int32_t) + // Length of Compilation Unit Info
1755 sizeof(int16_t) + // DWARF version number
1756 sizeof(int32_t) + // Offset Into Abbrev. Section
1757 sizeof(int8_t); // Pointer Size (in bytes)
1759 computeSizeAndOffset((*I)->getCUDie(), Offset);
1763 // Emit initial Dwarf sections with a label at the start of each one.
1764 void DwarfDebug::emitSectionLabels() {
1765 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1767 // Dwarf sections base addresses.
1768 DwarfInfoSectionSym =
1769 emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1770 DwarfAbbrevSectionSym =
1771 emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1772 if (useSplitDwarf())
1773 DwarfAbbrevDWOSectionSym =
1774 emitSectionSym(Asm, TLOF.getDwarfAbbrevDWOSection(),
1775 "section_abbrev_dwo");
1776 emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1778 if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1779 emitSectionSym(Asm, MacroInfo);
1781 DwarfLineSectionSym =
1782 emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1783 emitSectionSym(Asm, TLOF.getDwarfLocSection());
1784 emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1785 DwarfStrSectionSym =
1786 emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
1787 if (useSplitDwarf())
1788 DwarfStrDWOSectionSym =
1789 emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
1790 DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1793 DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
1794 "section_debug_loc");
1796 TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1797 emitSectionSym(Asm, TLOF.getDataSection());
1800 // Recursively emits a debug information entry.
1801 void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
1802 // Get the abbreviation for this DIE.
1803 unsigned AbbrevNumber = Die->getAbbrevNumber();
1804 const DIEAbbrev *Abbrev = Abbrevs->at(AbbrevNumber - 1);
1806 // Emit the code (index) for the abbreviation.
1807 if (Asm->isVerbose())
1808 Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1809 Twine::utohexstr(Die->getOffset()) + ":0x" +
1810 Twine::utohexstr(Die->getSize()) + " " +
1811 dwarf::TagString(Abbrev->getTag()));
1812 Asm->EmitULEB128(AbbrevNumber);
1814 const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1815 const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1817 // Emit the DIE attribute values.
1818 for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1819 unsigned Attr = AbbrevData[i].getAttribute();
1820 unsigned Form = AbbrevData[i].getForm();
1821 assert(Form && "Too many attributes for DIE (check abbreviation)");
1823 if (Asm->isVerbose())
1824 Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1827 case dwarf::DW_AT_abstract_origin: {
1828 DIEEntry *E = cast<DIEEntry>(Values[i]);
1829 DIE *Origin = E->getEntry();
1830 unsigned Addr = Origin->getOffset();
1831 Asm->EmitInt32(Addr);
1834 case dwarf::DW_AT_ranges: {
1835 // DW_AT_range Value encodes offset in debug_range section.
1836 DIEInteger *V = cast<DIEInteger>(Values[i]);
1838 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
1839 Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1843 Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1845 DwarfDebugRangeSectionSym,
1850 case dwarf::DW_AT_location: {
1851 if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
1852 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
1853 Asm->EmitLabelReference(L->getValue(), 4);
1855 Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1857 Values[i]->EmitValue(Asm, Form);
1861 case dwarf::DW_AT_accessibility: {
1862 if (Asm->isVerbose()) {
1863 DIEInteger *V = cast<DIEInteger>(Values[i]);
1864 Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1866 Values[i]->EmitValue(Asm, Form);
1870 // Emit an attribute using the defined form.
1871 Values[i]->EmitValue(Asm, Form);
1876 // Emit the DIE children if any.
1877 if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1878 const std::vector<DIE *> &Children = Die->getChildren();
1880 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1881 emitDIE(Children[j], Abbrevs);
1883 if (Asm->isVerbose())
1884 Asm->OutStreamer.AddComment("End Of Children Mark");
1889 // Emit the various dwarf units to the unit section USection with
1890 // the abbreviations going into ASection.
1891 void DwarfUnits::emitUnits(DwarfDebug *DD,
1892 const MCSection *USection,
1893 const MCSection *ASection,
1894 const MCSymbol *ASectionSym) {
1895 Asm->OutStreamer.SwitchSection(USection);
1896 for (SmallVector<CompileUnit *, 1>::iterator I = CUs.begin(),
1897 E = CUs.end(); I != E; ++I) {
1898 CompileUnit *TheCU = *I;
1899 DIE *Die = TheCU->getCUDie();
1901 // Emit the compile units header.
1903 .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(),
1904 TheCU->getUniqueID()));
1906 // Emit size of content not including length itself
1907 unsigned ContentSize = Die->getSize() +
1908 sizeof(int16_t) + // DWARF version number
1909 sizeof(int32_t) + // Offset Into Abbrev. Section
1910 sizeof(int8_t); // Pointer Size (in bytes)
1912 Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1913 Asm->EmitInt32(ContentSize);
1914 Asm->OutStreamer.AddComment("DWARF version number");
1915 Asm->EmitInt16(dwarf::DWARF_VERSION);
1916 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1917 Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
1919 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1920 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1922 DD->emitDIE(Die, Abbreviations);
1923 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(),
1924 TheCU->getUniqueID()));
1928 // Emit the debug info section.
1929 void DwarfDebug::emitDebugInfo() {
1930 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1932 Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(),
1933 Asm->getObjFileLowering().getDwarfAbbrevSection(),
1934 DwarfAbbrevSectionSym);
1937 // Emit the abbreviation section.
1938 void DwarfDebug::emitAbbreviations() {
1939 if (!useSplitDwarf())
1940 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
1943 emitSkeletonAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1946 void DwarfDebug::emitAbbrevs(const MCSection *Section,
1947 std::vector<DIEAbbrev *> *Abbrevs) {
1948 // Check to see if it is worth the effort.
1949 if (!Abbrevs->empty()) {
1950 // Start the debug abbrev section.
1951 Asm->OutStreamer.SwitchSection(Section);
1953 MCSymbol *Begin = Asm->GetTempSymbol(Section->getLabelBeginName());
1954 Asm->OutStreamer.EmitLabel(Begin);
1956 // For each abbrevation.
1957 for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
1958 // Get abbreviation data
1959 const DIEAbbrev *Abbrev = Abbrevs->at(i);
1961 // Emit the abbrevations code (base 1 index.)
1962 Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1964 // Emit the abbreviations data.
1968 // Mark end of abbreviations.
1969 Asm->EmitULEB128(0, "EOM(3)");
1971 MCSymbol *End = Asm->GetTempSymbol(Section->getLabelEndName());
1972 Asm->OutStreamer.EmitLabel(End);
1976 // Emit the last address of the section and the end of the line matrix.
1977 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1978 // Define last address of section.
1979 Asm->OutStreamer.AddComment("Extended Op");
1982 Asm->OutStreamer.AddComment("Op size");
1983 Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
1984 Asm->OutStreamer.AddComment("DW_LNE_set_address");
1985 Asm->EmitInt8(dwarf::DW_LNE_set_address);
1987 Asm->OutStreamer.AddComment("Section end label");
1989 Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1990 Asm->getDataLayout().getPointerSize());
1992 // Mark end of matrix.
1993 Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1999 // Emit visible names into a hashed accelerator table section.
2000 void DwarfDebug::emitAccelNames() {
2001 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2002 dwarf::DW_FORM_data4));
2003 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2004 E = CUMap.end(); I != E; ++I) {
2005 CompileUnit *TheCU = I->second;
2006 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
2007 for (StringMap<std::vector<DIE*> >::const_iterator
2008 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2009 const char *Name = GI->getKeyData();
2010 const std::vector<DIE *> &Entities = GI->second;
2011 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2012 DE = Entities.end(); DI != DE; ++DI)
2013 AT.AddName(Name, (*DI));
2017 AT.FinalizeTable(Asm, "Names");
2018 Asm->OutStreamer.SwitchSection(
2019 Asm->getObjFileLowering().getDwarfAccelNamesSection());
2020 MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2021 Asm->OutStreamer.EmitLabel(SectionBegin);
2023 // Emit the full data.
2024 AT.Emit(Asm, SectionBegin, &InfoHolder);
2027 // Emit objective C classes and categories into a hashed accelerator table
2029 void DwarfDebug::emitAccelObjC() {
2030 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2031 dwarf::DW_FORM_data4));
2032 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2033 E = CUMap.end(); I != E; ++I) {
2034 CompileUnit *TheCU = I->second;
2035 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
2036 for (StringMap<std::vector<DIE*> >::const_iterator
2037 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2038 const char *Name = GI->getKeyData();
2039 const std::vector<DIE *> &Entities = GI->second;
2040 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2041 DE = Entities.end(); DI != DE; ++DI)
2042 AT.AddName(Name, (*DI));
2046 AT.FinalizeTable(Asm, "ObjC");
2047 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2048 .getDwarfAccelObjCSection());
2049 MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2050 Asm->OutStreamer.EmitLabel(SectionBegin);
2052 // Emit the full data.
2053 AT.Emit(Asm, SectionBegin, &InfoHolder);
2056 // Emit namespace dies into a hashed accelerator table.
2057 void DwarfDebug::emitAccelNamespaces() {
2058 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2059 dwarf::DW_FORM_data4));
2060 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2061 E = CUMap.end(); I != E; ++I) {
2062 CompileUnit *TheCU = I->second;
2063 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
2064 for (StringMap<std::vector<DIE*> >::const_iterator
2065 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2066 const char *Name = GI->getKeyData();
2067 const std::vector<DIE *> &Entities = GI->second;
2068 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2069 DE = Entities.end(); DI != DE; ++DI)
2070 AT.AddName(Name, (*DI));
2074 AT.FinalizeTable(Asm, "namespac");
2075 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2076 .getDwarfAccelNamespaceSection());
2077 MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2078 Asm->OutStreamer.EmitLabel(SectionBegin);
2080 // Emit the full data.
2081 AT.Emit(Asm, SectionBegin, &InfoHolder);
2084 // Emit type dies into a hashed accelerator table.
2085 void DwarfDebug::emitAccelTypes() {
2086 std::vector<DwarfAccelTable::Atom> Atoms;
2087 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2088 dwarf::DW_FORM_data4));
2089 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
2090 dwarf::DW_FORM_data2));
2091 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
2092 dwarf::DW_FORM_data1));
2093 DwarfAccelTable AT(Atoms);
2094 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2095 E = CUMap.end(); I != E; ++I) {
2096 CompileUnit *TheCU = I->second;
2097 const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
2098 = TheCU->getAccelTypes();
2099 for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
2100 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2101 const char *Name = GI->getKeyData();
2102 const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2103 for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
2104 = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
2105 AT.AddName(Name, (*DI).first, (*DI).second);
2109 AT.FinalizeTable(Asm, "types");
2110 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2111 .getDwarfAccelTypesSection());
2112 MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2113 Asm->OutStreamer.EmitLabel(SectionBegin);
2115 // Emit the full data.
2116 AT.Emit(Asm, SectionBegin, &InfoHolder);
2119 void DwarfDebug::emitDebugPubTypes() {
2120 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2121 E = CUMap.end(); I != E; ++I) {
2122 CompileUnit *TheCU = I->second;
2123 // Start the dwarf pubtypes section.
2124 Asm->OutStreamer.SwitchSection(
2125 Asm->getObjFileLowering().getDwarfPubTypesSection());
2126 Asm->OutStreamer.AddComment("Length of Public Types Info");
2127 Asm->EmitLabelDifference(
2128 Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2129 Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2131 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2132 TheCU->getUniqueID()));
2134 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2135 Asm->EmitInt16(dwarf::DWARF_VERSION);
2137 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2138 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2139 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(),
2140 TheCU->getUniqueID()),
2141 DwarfInfoSectionSym);
2143 Asm->OutStreamer.AddComment("Compilation Unit Length");
2144 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(),
2145 TheCU->getUniqueID()),
2146 Asm->GetTempSymbol(ISec->getLabelBeginName(),
2147 TheCU->getUniqueID()),
2150 const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2151 for (StringMap<DIE*>::const_iterator
2152 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2153 const char *Name = GI->getKeyData();
2154 DIE *Entity = GI->second;
2156 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2157 Asm->EmitInt32(Entity->getOffset());
2159 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2160 // Emit the name with a terminating null byte.
2161 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2164 Asm->OutStreamer.AddComment("End Mark");
2166 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2167 TheCU->getUniqueID()));
2171 // Emit strings into a string section.
2172 void DwarfUnits::emitStrings(const MCSection *StrSection,
2173 const MCSection *OffsetSection = NULL,
2174 const MCSymbol *StrSecSym = NULL) {
2176 if (StringPool.empty()) return;
2178 // Start the dwarf str section.
2179 Asm->OutStreamer.SwitchSection(StrSection);
2181 // Get all of the string pool entries and put them in an array by their ID so
2182 // we can sort them.
2183 SmallVector<std::pair<unsigned,
2184 StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2186 for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2187 I = StringPool.begin(), E = StringPool.end();
2189 Entries.push_back(std::make_pair(I->second.second, &*I));
2191 array_pod_sort(Entries.begin(), Entries.end());
2193 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2194 // Emit a label for reference from debug information entries.
2195 Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2197 // Emit the string itself with a terminating null byte.
2198 Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2199 Entries[i].second->getKeyLength()+1));
2202 // If we've got an offset section go ahead and emit that now as well.
2203 if (OffsetSection) {
2204 Asm->OutStreamer.SwitchSection(OffsetSection);
2205 unsigned offset = 0;
2206 unsigned size = 4; // FIXME: DWARF64 is 8.
2207 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2208 Asm->OutStreamer.EmitIntValue(offset, size);
2209 offset += Entries[i].second->getKeyLength() + 1;
2214 // Emit strings into a string section.
2215 void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2217 if (AddressPool.empty()) return;
2219 // Start the dwarf addr section.
2220 Asm->OutStreamer.SwitchSection(AddrSection);
2222 // Get all of the string pool entries and put them in an array by their ID so
2223 // we can sort them.
2224 SmallVector<std::pair<unsigned,
2225 std::pair<MCSymbol*, unsigned>* >, 64> Entries;
2227 for (DenseMap<MCSymbol*, std::pair<MCSymbol*, unsigned> >::iterator
2228 I = AddressPool.begin(), E = AddressPool.end();
2230 Entries.push_back(std::make_pair(I->second.second, &(I->second)));
2232 array_pod_sort(Entries.begin(), Entries.end());
2234 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2235 // Emit a label for reference from debug information entries.
2236 MCSymbol *Sym = Entries[i].second->first;
2238 Asm->EmitLabelReference(Entries[i].second->first,
2239 Asm->getDataLayout().getPointerSize());
2241 Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2246 // Emit visible names into a debug str section.
2247 void DwarfDebug::emitDebugStr() {
2248 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2249 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2252 // Emit visible names into a debug loc section.
2253 void DwarfDebug::emitDebugLoc() {
2254 if (DotDebugLocEntries.empty())
2257 for (SmallVector<DotDebugLocEntry, 4>::iterator
2258 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2260 DotDebugLocEntry &Entry = *I;
2261 if (I + 1 != DotDebugLocEntries.end())
2265 // Start the dwarf loc section.
2266 Asm->OutStreamer.SwitchSection(
2267 Asm->getObjFileLowering().getDwarfLocSection());
2268 unsigned char Size = Asm->getDataLayout().getPointerSize();
2269 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2271 for (SmallVector<DotDebugLocEntry, 4>::iterator
2272 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2273 I != E; ++I, ++index) {
2274 DotDebugLocEntry &Entry = *I;
2275 if (Entry.isMerged()) continue;
2276 if (Entry.isEmpty()) {
2277 Asm->OutStreamer.EmitIntValue(0, Size);
2278 Asm->OutStreamer.EmitIntValue(0, Size);
2279 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2281 Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size);
2282 Asm->OutStreamer.EmitSymbolValue(Entry.End, Size);
2283 DIVariable DV(Entry.Variable);
2284 Asm->OutStreamer.AddComment("Loc expr size");
2285 MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2286 MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2287 Asm->EmitLabelDifference(end, begin, 2);
2288 Asm->OutStreamer.EmitLabel(begin);
2289 if (Entry.isInt()) {
2290 DIBasicType BTy(DV.getType());
2292 (BTy.getEncoding() == dwarf::DW_ATE_signed
2293 || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2294 Asm->OutStreamer.AddComment("DW_OP_consts");
2295 Asm->EmitInt8(dwarf::DW_OP_consts);
2296 Asm->EmitSLEB128(Entry.getInt());
2298 Asm->OutStreamer.AddComment("DW_OP_constu");
2299 Asm->EmitInt8(dwarf::DW_OP_constu);
2300 Asm->EmitULEB128(Entry.getInt());
2302 } else if (Entry.isLocation()) {
2303 if (!DV.hasComplexAddress())
2305 Asm->EmitDwarfRegOp(Entry.Loc);
2307 // Complex address entry.
2308 unsigned N = DV.getNumAddrElements();
2310 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2311 if (Entry.Loc.getOffset()) {
2313 Asm->EmitDwarfRegOp(Entry.Loc);
2314 Asm->OutStreamer.AddComment("DW_OP_deref");
2315 Asm->EmitInt8(dwarf::DW_OP_deref);
2316 Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2317 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2318 Asm->EmitSLEB128(DV.getAddrElement(1));
2320 // If first address element is OpPlus then emit
2321 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2322 MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2323 Asm->EmitDwarfRegOp(Loc);
2327 Asm->EmitDwarfRegOp(Entry.Loc);
2330 // Emit remaining complex address elements.
2331 for (; i < N; ++i) {
2332 uint64_t Element = DV.getAddrElement(i);
2333 if (Element == DIBuilder::OpPlus) {
2334 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2335 Asm->EmitULEB128(DV.getAddrElement(++i));
2336 } else if (Element == DIBuilder::OpDeref) {
2337 if (!Entry.Loc.isReg())
2338 Asm->EmitInt8(dwarf::DW_OP_deref);
2340 llvm_unreachable("unknown Opcode found in complex address");
2344 // else ... ignore constant fp. There is not any good way to
2345 // to represent them here in dwarf.
2346 Asm->OutStreamer.EmitLabel(end);
2351 // Emit visible names into a debug aranges section.
2352 void DwarfDebug::emitDebugARanges() {
2353 // Start the dwarf aranges section.
2354 Asm->OutStreamer.SwitchSection(
2355 Asm->getObjFileLowering().getDwarfARangesSection());
2358 // Emit visible names into a debug ranges section.
2359 void DwarfDebug::emitDebugRanges() {
2360 // Start the dwarf ranges section.
2361 Asm->OutStreamer.SwitchSection(
2362 Asm->getObjFileLowering().getDwarfRangesSection());
2363 unsigned char Size = Asm->getDataLayout().getPointerSize();
2364 for (SmallVector<const MCSymbol *, 8>::iterator
2365 I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2368 Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
2370 Asm->OutStreamer.EmitIntValue(0, Size);
2374 // Emit visible names into a debug macinfo section.
2375 void DwarfDebug::emitDebugMacInfo() {
2376 if (const MCSection *LineInfo =
2377 Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2378 // Start the dwarf macinfo section.
2379 Asm->OutStreamer.SwitchSection(LineInfo);
2383 // Emit inline info using following format.
2385 // 1. length of section
2386 // 2. Dwarf version number
2389 // Entries (one "entry" for each function that was inlined):
2391 // 1. offset into __debug_str section for MIPS linkage name, if exists;
2392 // otherwise offset into __debug_str for regular function name.
2393 // 2. offset into __debug_str section for regular function name.
2394 // 3. an unsigned LEB128 number indicating the number of distinct inlining
2395 // instances for the function.
2397 // The rest of the entry consists of a {die_offset, low_pc} pair for each
2398 // inlined instance; the die_offset points to the inlined_subroutine die in the
2399 // __debug_info section, and the low_pc is the starting address for the
2400 // inlining instance.
2401 void DwarfDebug::emitDebugInlineInfo() {
2402 if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2408 Asm->OutStreamer.SwitchSection(
2409 Asm->getObjFileLowering().getDwarfDebugInlineSection());
2411 Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2412 Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2413 Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2415 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2417 Asm->OutStreamer.AddComment("Dwarf Version");
2418 Asm->EmitInt16(dwarf::DWARF_VERSION);
2419 Asm->OutStreamer.AddComment("Address Size (in bytes)");
2420 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2422 for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2423 E = InlinedSPNodes.end(); I != E; ++I) {
2425 const MDNode *Node = *I;
2426 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2427 = InlineInfo.find(Node);
2428 SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2429 DISubprogram SP(Node);
2430 StringRef LName = SP.getLinkageName();
2431 StringRef Name = SP.getName();
2433 Asm->OutStreamer.AddComment("MIPS linkage name");
2435 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2436 DwarfStrSectionSym);
2438 Asm->EmitSectionOffset(InfoHolder
2439 .getStringPoolEntry(getRealLinkageName(LName)),
2440 DwarfStrSectionSym);
2442 Asm->OutStreamer.AddComment("Function name");
2443 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2444 DwarfStrSectionSym);
2445 Asm->EmitULEB128(Labels.size(), "Inline count");
2447 for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2448 LE = Labels.end(); LI != LE; ++LI) {
2449 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2450 Asm->EmitInt32(LI->second->getOffset());
2452 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2453 Asm->OutStreamer.EmitSymbolValue(LI->first,
2454 Asm->getDataLayout().getPointerSize());
2458 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2461 // DWARF5 Experimental Separate Dwarf emitters.
2463 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2464 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2465 // DW_AT_ranges_base, DW_AT_addr_base. If DW_AT_ranges is present,
2466 // DW_AT_low_pc and DW_AT_high_pc are not used, and vice versa.
2467 CompileUnit *DwarfDebug::constructSkeletonCU(const MDNode *N) {
2468 DICompileUnit DIUnit(N);
2469 CompilationDir = DIUnit.getDirectory();
2471 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2472 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
2473 DIUnit.getLanguage(), Die, Asm,
2474 this, &SkeletonHolder);
2476 SmallString<16> T(DIUnit.getFilename());
2477 sys::path::replace_extension(T, ".dwo");
2478 StringRef FN = sys::path::filename(T);
2479 NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name, FN);
2481 // This should be a unique identifier when we want to build .dwp files.
2482 NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
2484 // FIXME: The addr base should be relative for each compile unit, however,
2485 // this one is going to be 0 anyhow.
2486 NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset, 0);
2488 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2489 // into an entity. We're using 0, or a NULL label for this.
2490 NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2492 // DW_AT_stmt_list is a offset of line number information for this
2493 // compile unit in debug_line section.
2494 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2495 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2496 DwarfLineSectionSym);
2498 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2500 if (!CompilationDir.empty())
2501 NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2503 SkeletonHolder.addUnit(NewCU);
2504 SkeletonCUs.push_back(NewCU);
2509 void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
2510 assert(useSplitDwarf() && "No split dwarf debug info?");
2511 emitAbbrevs(Section, &SkeletonAbbrevs);
2514 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2515 // compile units that would normally be in debug_info.
2516 void DwarfDebug::emitDebugInfoDWO() {
2517 assert(useSplitDwarf() && "No split dwarf debug info?");
2518 InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
2519 Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2520 DwarfAbbrevDWOSectionSym);
2523 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2524 // abbreviations for the .debug_info.dwo section.
2525 void DwarfDebug::emitDebugAbbrevDWO() {
2526 assert(useSplitDwarf() && "No split dwarf?");
2527 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2531 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2532 // string section and is identical in format to traditional .debug_str
2534 void DwarfDebug::emitDebugStrDWO() {
2535 assert(useSplitDwarf() && "No split dwarf?");
2536 const MCSection *OffSec = Asm->getObjFileLowering()
2537 .getDwarfStrOffDWOSection();
2538 const MCSymbol *StrSym = DwarfStrSectionSym;
2539 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),