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",
163 SkeletonAbbrevSet(InitAbbreviationsSetSize),
164 SkeletonHolder(A, &SkeletonAbbrevSet, &SkeletonAbbrevs, "skel_string",
167 DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
168 DwarfStrSectionSym = TextSectionSym = 0;
169 DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
170 DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0;
171 FunctionBeginSym = FunctionEndSym = 0;
173 // Turn on accelerator tables and older gdb compatibility
175 bool IsDarwin = Triple(M->getTargetTriple()).isOSDarwin();
176 if (DarwinGDBCompat == Default) {
178 IsDarwinGDBCompat = true;
180 IsDarwinGDBCompat = false;
182 IsDarwinGDBCompat = DarwinGDBCompat == Enable ? true : false;
184 if (DwarfAccelTables == Default) {
186 HasDwarfAccelTables = true;
188 HasDwarfAccelTables = false;
190 HasDwarfAccelTables = DwarfAccelTables == Enable ? true : false;
192 if (SplitDwarf == Default)
193 HasSplitDwarf = false;
195 HasSplitDwarf = SplitDwarf == Enable ? true : false;
198 NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
202 DwarfDebug::~DwarfDebug() {
205 // Switch to the specified MCSection and emit an assembler
206 // temporary label to it if SymbolStem is specified.
207 static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section,
208 const char *SymbolStem = 0) {
209 Asm->OutStreamer.SwitchSection(Section);
210 if (!SymbolStem) return 0;
212 MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
213 Asm->OutStreamer.EmitLabel(TmpSym);
217 MCSymbol *DwarfUnits::getStringPoolSym() {
218 return Asm->GetTempSymbol(StringPref);
221 MCSymbol *DwarfUnits::getStringPoolEntry(StringRef Str) {
222 std::pair<MCSymbol*, unsigned> &Entry =
223 StringPool.GetOrCreateValue(Str).getValue();
224 if (Entry.first) return Entry.first;
226 Entry.second = NextStringPoolNumber++;
227 return Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
230 unsigned DwarfUnits::getStringPoolIndex(StringRef Str) {
231 std::pair<MCSymbol*, unsigned> &Entry =
232 StringPool.GetOrCreateValue(Str).getValue();
233 if (Entry.first) return Entry.second;
235 Entry.second = NextStringPoolNumber++;
236 Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
240 unsigned DwarfUnits::getAddrPoolIndex(MCSymbol *Sym) {
241 std::pair<MCSymbol*, unsigned> &Entry = AddressPool[Sym];
242 if (Entry.first) return Entry.second;
244 Entry.second = NextAddrPoolNumber++;
249 // Define a unique number for the abbreviation.
251 void DwarfUnits::assignAbbrevNumber(DIEAbbrev &Abbrev) {
252 // Profile the node so that we can make it unique.
256 // Check the set for priors.
257 DIEAbbrev *InSet = AbbreviationsSet->GetOrInsertNode(&Abbrev);
259 // If it's newly added.
260 if (InSet == &Abbrev) {
261 // Add to abbreviation list.
262 Abbreviations->push_back(&Abbrev);
264 // Assign the vector position + 1 as its number.
265 Abbrev.setNumber(Abbreviations->size());
267 // Assign existing abbreviation number.
268 Abbrev.setNumber(InSet->getNumber());
272 // If special LLVM prefix that is used to inform the asm
273 // printer to not emit usual symbol prefix before the symbol name is used then
274 // return linkage name after skipping this special LLVM prefix.
275 static StringRef getRealLinkageName(StringRef LinkageName) {
277 if (LinkageName.startswith(StringRef(&One, 1)))
278 return LinkageName.substr(1);
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 if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
353 // Pick up abstract subprogram DIE.
354 SPDie = new DIE(dwarf::DW_TAG_subprogram);
355 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
356 dwarf::DW_FORM_ref4, AbsSPDIE);
359 DISubprogram SPDecl = SP.getFunctionDeclaration();
360 if (!SPDecl.isSubprogram()) {
361 // There is not any need to generate specification DIE for a function
362 // defined at compile unit level. If a function is defined inside another
363 // function then gdb prefers the definition at top level and but does not
364 // expect specification DIE in parent function. So avoid creating
365 // specification DIE for a function defined inside a function.
366 if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
367 !SP.getContext().isFile() &&
368 !isSubprogramContext(SP.getContext())) {
369 SPCU->addFlag(SPDie, dwarf::DW_AT_declaration);
372 DICompositeType SPTy = SP.getType();
373 DIArray Args = SPTy.getTypeArray();
374 unsigned SPTag = SPTy.getTag();
375 if (SPTag == dwarf::DW_TAG_subroutine_type)
376 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
377 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
378 DIType ATy = DIType(Args.getElement(i));
379 SPCU->addType(Arg, ATy);
380 if (ATy.isArtificial())
381 SPCU->addFlag(Arg, dwarf::DW_AT_artificial);
382 if (ATy.isObjectPointer())
383 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer,
384 dwarf::DW_FORM_ref4, Arg);
385 SPDie->addChild(Arg);
387 DIE *SPDeclDie = SPDie;
388 SPDie = new DIE(dwarf::DW_TAG_subprogram);
389 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification,
390 dwarf::DW_FORM_ref4, SPDeclDie);
396 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_low_pc,
397 Asm->GetTempSymbol("func_begin",
398 Asm->getFunctionNumber()));
399 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_high_pc,
400 Asm->GetTempSymbol("func_end",
401 Asm->getFunctionNumber()));
402 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
403 MachineLocation Location(RI->getFrameRegister(*Asm->MF));
404 SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
406 // Add name to the name table, we do this here because we're guaranteed
407 // to have concrete versions of our DW_TAG_subprogram nodes.
408 addSubprogramNames(SPCU, SP, SPDie);
413 // Construct new DW_TAG_lexical_block for this scope and attach
414 // DW_AT_low_pc/DW_AT_high_pc labels.
415 DIE *DwarfDebug::constructLexicalScopeDIE(CompileUnit *TheCU,
416 LexicalScope *Scope) {
417 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
418 if (Scope->isAbstractScope())
421 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
425 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
426 if (Ranges.size() > 1) {
427 // .debug_range section has not been laid out yet. Emit offset in
428 // .debug_range as a uint, size 4, for now. emitDIE will handle
429 // DW_AT_ranges appropriately.
430 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
431 DebugRangeSymbols.size()
432 * Asm->getDataLayout().getPointerSize());
433 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
434 RE = Ranges.end(); RI != RE; ++RI) {
435 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
436 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
438 DebugRangeSymbols.push_back(NULL);
439 DebugRangeSymbols.push_back(NULL);
443 MCSymbol *Start = getLabelBeforeInsn(RI->first);
444 MCSymbol *End = getLabelAfterInsn(RI->second);
446 if (End == 0) return 0;
448 assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
449 assert(End->isDefined() && "Invalid end label for an inlined scope!");
451 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, Start);
452 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, End);
457 // This scope represents inlined body of a function. Construct DIE to
458 // represent this concrete inlined copy of the function.
459 DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
460 LexicalScope *Scope) {
461 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
462 assert(Ranges.empty() == false &&
463 "LexicalScope does not have instruction markers!");
465 if (!Scope->getScopeNode())
467 DIScope DS(Scope->getScopeNode());
468 DISubprogram InlinedSP = getDISubprogram(DS);
469 DIE *OriginDIE = TheCU->getDIE(InlinedSP);
471 DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram.");
475 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
476 MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
477 MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
479 if (StartLabel == 0 || EndLabel == 0) {
480 llvm_unreachable("Unexpected Start and End labels for an inlined scope!");
482 assert(StartLabel->isDefined() &&
483 "Invalid starting label for an inlined scope!");
484 assert(EndLabel->isDefined() &&
485 "Invalid end label for an inlined scope!");
487 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
488 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
489 dwarf::DW_FORM_ref4, OriginDIE);
491 if (Ranges.size() > 1) {
492 // .debug_range section has not been laid out yet. Emit offset in
493 // .debug_range as a uint, size 4, for now. emitDIE will handle
494 // DW_AT_ranges appropriately.
495 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
496 DebugRangeSymbols.size()
497 * Asm->getDataLayout().getPointerSize());
498 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
499 RE = Ranges.end(); RI != RE; ++RI) {
500 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
501 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
503 DebugRangeSymbols.push_back(NULL);
504 DebugRangeSymbols.push_back(NULL);
506 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, StartLabel);
507 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, EndLabel);
510 InlinedSubprogramDIEs.insert(OriginDIE);
512 // Track the start label for this inlined function.
513 //.debug_inlined section specification does not clearly state how
514 // to emit inlined scope that is split into multiple instruction ranges.
515 // For now, use first instruction range and emit low_pc/high_pc pair and
516 // corresponding .debug_inlined section entry for this pair.
517 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
518 I = InlineInfo.find(InlinedSP);
520 if (I == InlineInfo.end()) {
521 InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel, ScopeDIE));
522 InlinedSPNodes.push_back(InlinedSP);
524 I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
526 DILocation DL(Scope->getInlinedAt());
527 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0,
528 getOrCreateSourceID(DL.getFilename(), DL.getDirectory()));
529 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
531 // Add name to the name table, we do this here because we're guaranteed
532 // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
533 addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
538 // Construct a DIE for this scope.
539 DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
540 if (!Scope || !Scope->getScopeNode())
543 DIScope DS(Scope->getScopeNode());
544 // Early return to avoid creating dangling variable|scope DIEs.
545 if (!Scope->getInlinedAt() && DS.isSubprogram() && Scope->isAbstractScope() &&
549 SmallVector<DIE *, 8> Children;
550 DIE *ObjectPointer = NULL;
552 // Collect arguments for current function.
553 if (LScopes.isCurrentFunctionScope(Scope))
554 for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
555 if (DbgVariable *ArgDV = CurrentFnArguments[i])
557 TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope())) {
558 Children.push_back(Arg);
559 if (ArgDV->isObjectPointer()) ObjectPointer = Arg;
562 // Collect lexical scope children first.
563 const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
564 for (unsigned i = 0, N = Variables.size(); i < N; ++i)
566 TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope())) {
567 Children.push_back(Variable);
568 if (Variables[i]->isObjectPointer()) ObjectPointer = Variable;
570 const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
571 for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
572 if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
573 Children.push_back(Nested);
574 DIE *ScopeDIE = NULL;
575 if (Scope->getInlinedAt())
576 ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
577 else if (DS.isSubprogram()) {
578 ProcessedSPNodes.insert(DS);
579 if (Scope->isAbstractScope()) {
580 ScopeDIE = TheCU->getDIE(DS);
581 // Note down abstract DIE.
583 AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
586 ScopeDIE = updateSubprogramScopeDIE(TheCU, DS);
589 // There is no need to emit empty lexical block DIE.
590 if (Children.empty())
592 ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
595 if (!ScopeDIE) return NULL;
598 for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
599 E = Children.end(); I != E; ++I)
600 ScopeDIE->addChild(*I);
602 if (DS.isSubprogram() && ObjectPointer != NULL)
603 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer,
604 dwarf::DW_FORM_ref4, ObjectPointer);
606 if (DS.isSubprogram())
607 TheCU->addPubTypes(DISubprogram(DS));
612 // Look up the source id with the given directory and source file names.
613 // If none currently exists, create a new id and insert it in the
614 // SourceIds map. This can update DirectoryNames and SourceFileNames maps
616 unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName,
618 // If FE did not provide a file name, then assume stdin.
619 if (FileName.empty())
620 return getOrCreateSourceID("<stdin>", StringRef());
622 // TODO: this might not belong here. See if we can factor this better.
623 if (DirName == CompilationDir)
626 unsigned SrcId = SourceIdMap.size()+1;
628 // We look up the file/dir pair by concatenating them with a zero byte.
629 SmallString<128> NamePair;
631 NamePair += '\0'; // Zero bytes are not allowed in paths.
632 NamePair += FileName;
634 StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId);
635 if (Ent.getValue() != SrcId)
636 return Ent.getValue();
638 // Print out a .file directive to specify files for .loc directives.
639 Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName);
644 // Create new CompileUnit for the given metadata node with tag
645 // DW_TAG_compile_unit.
646 CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) {
647 DICompileUnit DIUnit(N);
648 StringRef FN = DIUnit.getFilename();
649 CompilationDir = DIUnit.getDirectory();
650 // Call this to emit a .file directive if it wasn't emitted for the source
651 // file this CU comes from yet.
652 getOrCreateSourceID(FN, CompilationDir);
654 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
655 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
656 DIUnit.getLanguage(), Die, Asm,
658 NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
659 NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
660 DIUnit.getLanguage());
661 NewCU->addString(Die, dwarf::DW_AT_name, FN);
662 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
663 // into an entity. We're using 0 (or a NULL label) for this.
664 NewCU->addLabelAddress(Die, dwarf::DW_AT_low_pc, NULL);
666 // Define start line table label for each Compile Unit.
667 MCSymbol *LineTableStartSym = Asm->GetTempSymbol("line_table_start",
668 NewCU->getUniqueID());
669 Asm->OutStreamer.getContext().setMCLineTableSymbol(LineTableStartSym,
670 NewCU->getUniqueID());
672 // DW_AT_stmt_list is a offset of line number information for this
673 // compile unit in debug_line section.
674 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
675 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
678 NewCU->addDelta(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
679 LineTableStartSym, Asm->GetTempSymbol("section_line"));
681 if (!CompilationDir.empty())
682 NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
683 if (DIUnit.isOptimized())
684 NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized);
686 StringRef Flags = DIUnit.getFlags();
688 NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
690 if (unsigned RVer = DIUnit.getRunTimeVersion())
691 NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
692 dwarf::DW_FORM_data1, RVer);
697 if (useSplitDwarf()) {
698 // This should be a unique identifier when we want to build .dwp files.
699 NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
700 // Now construct the skeleton CU associated.
701 constructSkeletonCU(N);
704 InfoHolder.addUnit(NewCU);
706 CUMap.insert(std::make_pair(N, NewCU));
710 // Construct subprogram DIE.
711 void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
713 CompileUnit *&CURef = SPMap[N];
719 if (!SP.isDefinition())
720 // This is a method declaration which will be handled while constructing
724 DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
727 TheCU->insertDIE(N, SubprogramDie);
729 // Add to context owner.
730 TheCU->addToContextOwner(SubprogramDie, SP.getContext());
735 // Collect debug info from named mdnodes such as llvm.dbg.enum and llvm.dbg.ty.
736 void DwarfDebug::collectInfoFromNamedMDNodes(const Module *M) {
737 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.sp"))
738 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
739 const MDNode *N = NMD->getOperand(i);
740 if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
741 constructSubprogramDIE(CU, N);
744 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv"))
745 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
746 const MDNode *N = NMD->getOperand(i);
747 if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
748 CU->createGlobalVariableDIE(N);
751 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
752 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
753 DIType Ty(NMD->getOperand(i));
754 if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
755 CU->getOrCreateTypeDIE(Ty);
758 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
759 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
760 DIType Ty(NMD->getOperand(i));
761 if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
762 CU->getOrCreateTypeDIE(Ty);
766 // Collect debug info using DebugInfoFinder.
767 // FIXME - Remove this when dragonegg switches to DIBuilder.
768 bool DwarfDebug::collectLegacyDebugInfo(const Module *M) {
769 DebugInfoFinder DbgFinder;
770 DbgFinder.processModule(*M);
772 bool HasDebugInfo = false;
773 // Scan all the compile-units to see if there are any marked as the main
774 // unit. If not, we do not generate debug info.
775 for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
776 E = DbgFinder.compile_unit_end(); I != E; ++I) {
777 if (DICompileUnit(*I).isMain()) {
782 if (!HasDebugInfo) return false;
784 // Create all the compile unit DIEs.
785 for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
786 E = DbgFinder.compile_unit_end(); I != E; ++I)
787 constructCompileUnit(*I);
789 // Create DIEs for each global variable.
790 for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
791 E = DbgFinder.global_variable_end(); I != E; ++I) {
792 const MDNode *N = *I;
793 if (CompileUnit *CU = CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
794 CU->createGlobalVariableDIE(N);
797 // Create DIEs for each subprogram.
798 for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
799 E = DbgFinder.subprogram_end(); I != E; ++I) {
800 const MDNode *N = *I;
801 if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
802 constructSubprogramDIE(CU, N);
808 // Emit all Dwarf sections that should come prior to the content. Create
809 // global DIEs and emit initial debug info sections. This is invoked by
810 // the target AsmPrinter.
811 void DwarfDebug::beginModule() {
812 if (DisableDebugInfoPrinting)
815 const Module *M = MMI->getModule();
817 // If module has named metadata anchors then use them, otherwise scan the
818 // module using debug info finder to collect debug info.
819 NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
821 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
822 DICompileUnit CUNode(CU_Nodes->getOperand(i));
823 CompileUnit *CU = constructCompileUnit(CUNode);
824 DIArray GVs = CUNode.getGlobalVariables();
825 for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
826 CU->createGlobalVariableDIE(GVs.getElement(i));
827 DIArray SPs = CUNode.getSubprograms();
828 for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
829 constructSubprogramDIE(CU, SPs.getElement(i));
830 DIArray EnumTypes = CUNode.getEnumTypes();
831 for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
832 CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
833 DIArray RetainedTypes = CUNode.getRetainedTypes();
834 for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
835 CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
837 } else if (!collectLegacyDebugInfo(M))
840 collectInfoFromNamedMDNodes(M);
842 // Tell MMI that we have debug info.
843 MMI->setDebugInfoAvailability(true);
845 // Prime section data.
846 SectionMap.insert(Asm->getObjFileLowering().getTextSection());
849 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
850 void DwarfDebug::computeInlinedDIEs() {
851 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
852 for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
853 AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
855 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
857 for (DenseMap<const MDNode *, DIE *>::iterator AI = AbstractSPDies.begin(),
858 AE = AbstractSPDies.end(); AI != AE; ++AI) {
859 DIE *ISP = AI->second;
860 if (InlinedSubprogramDIEs.count(ISP))
862 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
866 // Collect info for variables that were optimized out.
867 void DwarfDebug::collectDeadVariables() {
868 const Module *M = MMI->getModule();
869 DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
871 if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
872 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
873 DICompileUnit TheCU(CU_Nodes->getOperand(i));
874 DIArray Subprograms = TheCU.getSubprograms();
875 for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
876 DISubprogram SP(Subprograms.getElement(i));
877 if (ProcessedSPNodes.count(SP) != 0) continue;
878 if (!SP.Verify()) continue;
879 if (!SP.isDefinition()) continue;
880 DIArray Variables = SP.getVariables();
881 if (Variables.getNumElements() == 0) continue;
883 LexicalScope *Scope =
884 new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
885 DeadFnScopeMap[SP] = Scope;
887 // Construct subprogram DIE and add variables DIEs.
888 CompileUnit *SPCU = CUMap.lookup(TheCU);
889 assert(SPCU && "Unable to find Compile Unit!");
890 constructSubprogramDIE(SPCU, SP);
891 DIE *ScopeDIE = SPCU->getDIE(SP);
892 for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
893 DIVariable DV(Variables.getElement(vi));
894 if (!DV.Verify()) continue;
895 DbgVariable *NewVar = new DbgVariable(DV, NULL);
896 if (DIE *VariableDIE =
897 SPCU->constructVariableDIE(NewVar, Scope->isAbstractScope()))
898 ScopeDIE->addChild(VariableDIE);
903 DeleteContainerSeconds(DeadFnScopeMap);
906 void DwarfDebug::finalizeModuleInfo() {
907 // Collect info for variables that were optimized out.
908 collectDeadVariables();
910 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
911 computeInlinedDIEs();
913 // Emit DW_AT_containing_type attribute to connect types with their
914 // vtable holding type.
915 for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
916 CUE = CUMap.end(); CUI != CUE; ++CUI) {
917 CompileUnit *TheCU = CUI->second;
918 TheCU->constructContainingTypeDIEs();
921 // Compute DIE offsets and sizes.
922 InfoHolder.computeSizeAndOffsets();
924 SkeletonHolder.computeSizeAndOffsets();
927 void DwarfDebug::endSections() {
928 // Standard sections final addresses.
929 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
930 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
931 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
932 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
934 // End text sections.
935 for (unsigned I = 0, E = SectionMap.size(); I != E; ++I) {
936 Asm->OutStreamer.SwitchSection(SectionMap[I]);
937 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", I+1));
941 // Emit all Dwarf sections that should come after the content.
942 void DwarfDebug::endModule() {
944 if (!FirstCU) return;
946 // End any existing sections.
947 // TODO: Does this need to happen?
950 // Finalize the debug info for the module.
951 finalizeModuleInfo();
953 // Emit initial sections.
956 if (!useSplitDwarf()) {
957 // Emit all the DIEs into a debug info section.
960 // Corresponding abbreviations into a abbrev section.
963 // Emit info into a debug loc section.
966 // Emit info into a debug aranges section.
969 // Emit info into a debug ranges section.
972 // Emit info into a debug macinfo section.
976 // TODO: When we don't need the option anymore we
977 // can remove all of the code that this section
979 if (useDarwinGDBCompat())
980 emitDebugInlineInfo();
982 // TODO: Fill this in for separated debug sections and separate
983 // out information into new sections.
985 // Emit the debug info section and compile units.
989 // Corresponding abbreviations into a abbrev section.
991 emitDebugAbbrevDWO();
993 // Emit info into a debug loc section.
996 // Emit info into a debug aranges section.
999 // Emit info into a debug ranges section.
1002 // Emit info into a debug macinfo section.
1005 // Emit DWO addresses.
1006 InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1008 // Emit inline info.
1009 // TODO: When we don't need the option anymore we
1010 // can remove all of the code that this section
1012 if (useDarwinGDBCompat())
1013 emitDebugInlineInfo();
1016 // Emit info into the dwarf accelerator table sections.
1017 if (useDwarfAccelTables()) {
1020 emitAccelNamespaces();
1024 // Emit info into a debug pubtypes section.
1025 // TODO: When we don't need the option anymore we can
1026 // remove all of the code that adds to the table.
1027 if (useDarwinGDBCompat())
1028 emitDebugPubTypes();
1030 // Finally emit string information into a string table.
1032 if (useSplitDwarf())
1037 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1038 E = CUMap.end(); I != E; ++I)
1043 // Reset these for the next Module if we have one.
1048 // Find abstract variable, if any, associated with Var.
1049 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1050 DebugLoc ScopeLoc) {
1051 LLVMContext &Ctx = DV->getContext();
1052 // More then one inlined variable corresponds to one abstract variable.
1053 DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1054 DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1056 return AbsDbgVariable;
1058 LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1062 AbsDbgVariable = new DbgVariable(Var, NULL);
1063 addScopeVariable(Scope, AbsDbgVariable);
1064 AbstractVariables[Var] = AbsDbgVariable;
1065 return AbsDbgVariable;
1068 // If Var is a current function argument then add it to CurrentFnArguments list.
1069 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1070 DbgVariable *Var, LexicalScope *Scope) {
1071 if (!LScopes.isCurrentFunctionScope(Scope))
1073 DIVariable DV = Var->getVariable();
1074 if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1076 unsigned ArgNo = DV.getArgNumber();
1080 size_t Size = CurrentFnArguments.size();
1082 CurrentFnArguments.resize(MF->getFunction()->arg_size());
1083 // llvm::Function argument size is not good indicator of how many
1084 // arguments does the function have at source level.
1086 CurrentFnArguments.resize(ArgNo * 2);
1087 CurrentFnArguments[ArgNo - 1] = Var;
1091 // Collect variable information from side table maintained by MMI.
1093 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
1094 SmallPtrSet<const MDNode *, 16> &Processed) {
1095 MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1096 for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1097 VE = VMap.end(); VI != VE; ++VI) {
1098 const MDNode *Var = VI->first;
1100 Processed.insert(Var);
1102 const std::pair<unsigned, DebugLoc> &VP = VI->second;
1104 LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
1106 // If variable scope is not found then skip this variable.
1110 DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1111 DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
1112 RegVar->setFrameIndex(VP.first);
1113 if (!addCurrentFnArgument(MF, RegVar, Scope))
1114 addScopeVariable(Scope, RegVar);
1116 AbsDbgVariable->setFrameIndex(VP.first);
1120 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
1122 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1123 assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1124 return MI->getNumOperands() == 3 &&
1125 MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1126 MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1129 // Get .debug_loc entry for the instruction range starting at MI.
1130 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1131 const MCSymbol *FLabel,
1132 const MCSymbol *SLabel,
1133 const MachineInstr *MI) {
1134 const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1136 if (MI->getNumOperands() != 3) {
1137 MachineLocation MLoc = Asm->getDebugValueLocation(MI);
1138 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1140 if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
1141 MachineLocation MLoc;
1142 MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1143 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1145 if (MI->getOperand(0).isImm())
1146 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1147 if (MI->getOperand(0).isFPImm())
1148 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1149 if (MI->getOperand(0).isCImm())
1150 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1152 llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1155 // Find variables for each lexical scope.
1157 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1158 SmallPtrSet<const MDNode *, 16> &Processed) {
1160 // collection info from MMI table.
1161 collectVariableInfoFromMMITable(MF, Processed);
1163 for (SmallVectorImpl<const MDNode*>::const_iterator
1164 UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1166 const MDNode *Var = *UVI;
1167 if (Processed.count(Var))
1170 // History contains relevant DBG_VALUE instructions for Var and instructions
1172 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1173 if (History.empty())
1175 const MachineInstr *MInsn = History.front();
1178 LexicalScope *Scope = NULL;
1179 if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1180 DISubprogram(DV.getContext()).describes(MF->getFunction()))
1181 Scope = LScopes.getCurrentFunctionScope();
1183 if (DV.getVersion() <= LLVMDebugVersion9)
1184 Scope = LScopes.findLexicalScope(MInsn->getDebugLoc());
1186 if (MDNode *IA = DV.getInlinedAt())
1187 Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1189 Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1192 // If variable scope is not found then skip this variable.
1196 Processed.insert(DV);
1197 assert(MInsn->isDebugValue() && "History must begin with debug value");
1198 DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1199 DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1200 if (!addCurrentFnArgument(MF, RegVar, Scope))
1201 addScopeVariable(Scope, RegVar);
1203 AbsVar->setMInsn(MInsn);
1205 // Simplify ranges that are fully coalesced.
1206 if (History.size() <= 1 || (History.size() == 2 &&
1207 MInsn->isIdenticalTo(History.back()))) {
1208 RegVar->setMInsn(MInsn);
1212 // Handle multiple DBG_VALUE instructions describing one variable.
1213 RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1215 for (SmallVectorImpl<const MachineInstr*>::const_iterator
1216 HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1217 const MachineInstr *Begin = *HI;
1218 assert(Begin->isDebugValue() && "Invalid History entry");
1220 // Check if DBG_VALUE is truncating a range.
1221 if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1222 && !Begin->getOperand(0).getReg())
1225 // Compute the range for a register location.
1226 const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1227 const MCSymbol *SLabel = 0;
1230 // If Begin is the last instruction in History then its value is valid
1231 // until the end of the function.
1232 SLabel = FunctionEndSym;
1234 const MachineInstr *End = HI[1];
1235 DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1236 << "\t" << *Begin << "\t" << *End << "\n");
1237 if (End->isDebugValue())
1238 SLabel = getLabelBeforeInsn(End);
1240 // End is a normal instruction clobbering the range.
1241 SLabel = getLabelAfterInsn(End);
1242 assert(SLabel && "Forgot label after clobber instruction");
1247 // The value is valid until the next DBG_VALUE or clobber.
1248 DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1251 DotDebugLocEntries.push_back(DotDebugLocEntry());
1254 // Collect info for variables that were optimized out.
1255 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1256 DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1257 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1258 DIVariable DV(Variables.getElement(i));
1259 if (!DV || !DV.Verify() || !Processed.insert(DV))
1261 if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1262 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1266 // Return Label preceding the instruction.
1267 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1268 MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1269 assert(Label && "Didn't insert label before instruction");
1273 // Return Label immediately following the instruction.
1274 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1275 return LabelsAfterInsn.lookup(MI);
1278 // Process beginning of an instruction.
1279 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1280 // Check if source location changes, but ignore DBG_VALUE locations.
1281 if (!MI->isDebugValue()) {
1282 DebugLoc DL = MI->getDebugLoc();
1283 if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1286 if (DL == PrologEndLoc) {
1287 Flags |= DWARF2_FLAG_PROLOGUE_END;
1288 PrologEndLoc = DebugLoc();
1290 if (PrologEndLoc.isUnknown())
1291 Flags |= DWARF2_FLAG_IS_STMT;
1293 if (!DL.isUnknown()) {
1294 const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1295 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1297 recordSourceLine(0, 0, 0, 0);
1301 // Insert labels where requested.
1302 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1303 LabelsBeforeInsn.find(MI);
1306 if (I == LabelsBeforeInsn.end())
1309 // Label already assigned.
1314 PrevLabel = MMI->getContext().CreateTempSymbol();
1315 Asm->OutStreamer.EmitLabel(PrevLabel);
1317 I->second = PrevLabel;
1320 // Process end of an instruction.
1321 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1322 // Don't create a new label after DBG_VALUE instructions.
1323 // They don't generate code.
1324 if (!MI->isDebugValue())
1327 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1328 LabelsAfterInsn.find(MI);
1331 if (I == LabelsAfterInsn.end())
1334 // Label already assigned.
1338 // We need a label after this instruction.
1340 PrevLabel = MMI->getContext().CreateTempSymbol();
1341 Asm->OutStreamer.EmitLabel(PrevLabel);
1343 I->second = PrevLabel;
1346 // Each LexicalScope has first instruction and last instruction to mark
1347 // beginning and end of a scope respectively. Create an inverse map that list
1348 // scopes starts (and ends) with an instruction. One instruction may start (or
1349 // end) multiple scopes. Ignore scopes that are not reachable.
1350 void DwarfDebug::identifyScopeMarkers() {
1351 SmallVector<LexicalScope *, 4> WorkList;
1352 WorkList.push_back(LScopes.getCurrentFunctionScope());
1353 while (!WorkList.empty()) {
1354 LexicalScope *S = WorkList.pop_back_val();
1356 const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1357 if (!Children.empty())
1358 for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1359 SE = Children.end(); SI != SE; ++SI)
1360 WorkList.push_back(*SI);
1362 if (S->isAbstractScope())
1365 const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1368 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1369 RE = Ranges.end(); RI != RE; ++RI) {
1370 assert(RI->first && "InsnRange does not have first instruction!");
1371 assert(RI->second && "InsnRange does not have second instruction!");
1372 requestLabelBeforeInsn(RI->first);
1373 requestLabelAfterInsn(RI->second);
1378 // Get MDNode for DebugLoc's scope.
1379 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1380 if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1381 return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1382 return DL.getScope(Ctx);
1385 // Walk up the scope chain of given debug loc and find line number info
1386 // for the function.
1387 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1388 const MDNode *Scope = getScopeNode(DL, Ctx);
1389 DISubprogram SP = getDISubprogram(Scope);
1391 // Check for number of operands since the compatibility is
1393 if (SP->getNumOperands() > 19)
1394 return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1396 return DebugLoc::get(SP.getLineNumber(), 0, SP);
1402 // Gather pre-function debug information. Assumes being called immediately
1403 // after the function entry point has been emitted.
1404 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1405 if (!MMI->hasDebugInfo()) return;
1406 LScopes.initialize(*MF);
1407 if (LScopes.empty()) return;
1408 identifyScopeMarkers();
1410 // Set DwarfCompileUnitID in MCContext to the Compile Unit this function
1412 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1413 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1414 assert(TheCU && "Unable to find compile unit!");
1415 Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1417 FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1418 Asm->getFunctionNumber());
1419 // Assumes in correct section after the entry point.
1420 Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1422 assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1424 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1425 // LiveUserVar - Map physreg numbers to the MDNode they contain.
1426 std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1428 for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1430 bool AtBlockEntry = true;
1431 for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1433 const MachineInstr *MI = II;
1435 if (MI->isDebugValue()) {
1436 assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1438 // Keep track of user variables.
1440 MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1442 // Variable is in a register, we need to check for clobbers.
1443 if (isDbgValueInDefinedReg(MI))
1444 LiveUserVar[MI->getOperand(0).getReg()] = Var;
1446 // Check the history of this variable.
1447 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1448 if (History.empty()) {
1449 UserVariables.push_back(Var);
1450 // The first mention of a function argument gets the FunctionBeginSym
1451 // label, so arguments are visible when breaking at function entry.
1453 if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1454 DISubprogram(getDISubprogram(DV.getContext()))
1455 .describes(MF->getFunction()))
1456 LabelsBeforeInsn[MI] = FunctionBeginSym;
1458 // We have seen this variable before. Try to coalesce DBG_VALUEs.
1459 const MachineInstr *Prev = History.back();
1460 if (Prev->isDebugValue()) {
1461 // Coalesce identical entries at the end of History.
1462 if (History.size() >= 2 &&
1463 Prev->isIdenticalTo(History[History.size() - 2])) {
1464 DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1466 << "\t" << *History[History.size() - 2] << "\n");
1470 // Terminate old register assignments that don't reach MI;
1471 MachineFunction::const_iterator PrevMBB = Prev->getParent();
1472 if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1473 isDbgValueInDefinedReg(Prev)) {
1474 // Previous register assignment needs to terminate at the end of
1476 MachineBasicBlock::const_iterator LastMI =
1477 PrevMBB->getLastNonDebugInstr();
1478 if (LastMI == PrevMBB->end()) {
1479 // Drop DBG_VALUE for empty range.
1480 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1481 << "\t" << *Prev << "\n");
1485 // Terminate after LastMI.
1486 History.push_back(LastMI);
1491 History.push_back(MI);
1493 // Not a DBG_VALUE instruction.
1495 AtBlockEntry = false;
1497 // First known non-DBG_VALUE and non-frame setup location marks
1498 // the beginning of the function body.
1499 if (!MI->getFlag(MachineInstr::FrameSetup) &&
1500 (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1501 PrologEndLoc = MI->getDebugLoc();
1503 // Check if the instruction clobbers any registers with debug vars.
1504 for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1505 MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1506 if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1508 for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1509 AI.isValid(); ++AI) {
1511 const MDNode *Var = LiveUserVar[Reg];
1514 // Reg is now clobbered.
1515 LiveUserVar[Reg] = 0;
1517 // Was MD last defined by a DBG_VALUE referring to Reg?
1518 DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1519 if (HistI == DbgValues.end())
1521 SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1522 if (History.empty())
1524 const MachineInstr *Prev = History.back();
1525 // Sanity-check: Register assignments are terminated at the end of
1527 if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1529 // Is the variable still in Reg?
1530 if (!isDbgValueInDefinedReg(Prev) ||
1531 Prev->getOperand(0).getReg() != Reg)
1533 // Var is clobbered. Make sure the next instruction gets a label.
1534 History.push_back(MI);
1541 for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1543 SmallVectorImpl<const MachineInstr*> &History = I->second;
1544 if (History.empty())
1547 // Make sure the final register assignments are terminated.
1548 const MachineInstr *Prev = History.back();
1549 if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1550 const MachineBasicBlock *PrevMBB = Prev->getParent();
1551 MachineBasicBlock::const_iterator LastMI =
1552 PrevMBB->getLastNonDebugInstr();
1553 if (LastMI == PrevMBB->end())
1554 // Drop DBG_VALUE for empty range.
1557 // Terminate after LastMI.
1558 History.push_back(LastMI);
1561 // Request labels for the full history.
1562 for (unsigned i = 0, e = History.size(); i != e; ++i) {
1563 const MachineInstr *MI = History[i];
1564 if (MI->isDebugValue())
1565 requestLabelBeforeInsn(MI);
1567 requestLabelAfterInsn(MI);
1571 PrevInstLoc = DebugLoc();
1572 PrevLabel = FunctionBeginSym;
1574 // Record beginning of function.
1575 if (!PrologEndLoc.isUnknown()) {
1576 DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1577 MF->getFunction()->getContext());
1578 recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1579 FnStartDL.getScope(MF->getFunction()->getContext()),
1580 // We'd like to list the prologue as "not statements" but GDB behaves
1581 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1582 DWARF2_FLAG_IS_STMT);
1586 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1587 // SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1588 ScopeVariables[LS].push_back(Var);
1589 // Vars.push_back(Var);
1592 // Gather and emit post-function debug information.
1593 void DwarfDebug::endFunction(const MachineFunction *MF) {
1594 if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1596 // Define end label for subprogram.
1597 FunctionEndSym = Asm->GetTempSymbol("func_end",
1598 Asm->getFunctionNumber());
1599 // Assumes in correct section after the entry point.
1600 Asm->OutStreamer.EmitLabel(FunctionEndSym);
1601 // Set DwarfCompileUnitID in MCContext to default value.
1602 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1604 SmallPtrSet<const MDNode *, 16> ProcessedVars;
1605 collectVariableInfo(MF, ProcessedVars);
1607 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1608 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1609 assert(TheCU && "Unable to find compile unit!");
1611 // Construct abstract scopes.
1612 ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1613 for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1614 LexicalScope *AScope = AList[i];
1615 DISubprogram SP(AScope->getScopeNode());
1617 // Collect info for variables that were optimized out.
1618 DIArray Variables = SP.getVariables();
1619 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1620 DIVariable DV(Variables.getElement(i));
1621 if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1623 // Check that DbgVariable for DV wasn't created earlier, when
1624 // findAbstractVariable() was called for inlined instance of DV.
1625 LLVMContext &Ctx = DV->getContext();
1626 DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1627 if (AbstractVariables.lookup(CleanDV))
1629 if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1630 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1633 if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1634 constructScopeDIE(TheCU, AScope);
1637 DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1639 if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1640 TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1642 DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1643 MMI->getFrameMoves()));
1646 for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1647 I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1648 DeleteContainerPointers(I->second);
1649 ScopeVariables.clear();
1650 DeleteContainerPointers(CurrentFnArguments);
1651 UserVariables.clear();
1653 AbstractVariables.clear();
1654 LabelsBeforeInsn.clear();
1655 LabelsAfterInsn.clear();
1659 // Register a source line with debug info. Returns the unique label that was
1660 // emitted and which provides correspondence to the source line list.
1661 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1667 DIDescriptor Scope(S);
1669 if (Scope.isCompileUnit()) {
1670 DICompileUnit CU(S);
1671 Fn = CU.getFilename();
1672 Dir = CU.getDirectory();
1673 } else if (Scope.isFile()) {
1675 Fn = F.getFilename();
1676 Dir = F.getDirectory();
1677 } else if (Scope.isSubprogram()) {
1679 Fn = SP.getFilename();
1680 Dir = SP.getDirectory();
1681 } else if (Scope.isLexicalBlockFile()) {
1682 DILexicalBlockFile DBF(S);
1683 Fn = DBF.getFilename();
1684 Dir = DBF.getDirectory();
1685 } else if (Scope.isLexicalBlock()) {
1686 DILexicalBlock DB(S);
1687 Fn = DB.getFilename();
1688 Dir = DB.getDirectory();
1690 llvm_unreachable("Unexpected scope info");
1692 Src = getOrCreateSourceID(Fn, Dir);
1694 Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1697 //===----------------------------------------------------------------------===//
1699 //===----------------------------------------------------------------------===//
1701 // Compute the size and offset of a DIE.
1703 DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1704 // Get the children.
1705 const std::vector<DIE *> &Children = Die->getChildren();
1707 // Record the abbreviation.
1708 assignAbbrevNumber(Die->getAbbrev());
1710 // Get the abbreviation for this DIE.
1711 unsigned AbbrevNumber = Die->getAbbrevNumber();
1712 const DIEAbbrev *Abbrev = Abbreviations->at(AbbrevNumber - 1);
1715 Die->setOffset(Offset);
1717 // Start the size with the size of abbreviation code.
1718 Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1720 const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1721 const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1723 // Size the DIE attribute values.
1724 for (unsigned i = 0, N = Values.size(); i < N; ++i)
1725 // Size attribute value.
1726 Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1728 // Size the DIE children if any.
1729 if (!Children.empty()) {
1730 assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1731 "Children flag not set");
1733 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1734 Offset = computeSizeAndOffset(Children[j], Offset);
1736 // End of children marker.
1737 Offset += sizeof(int8_t);
1740 Die->setSize(Offset - Die->getOffset());
1744 // Compute the size and offset of all the DIEs.
1745 void DwarfUnits::computeSizeAndOffsets() {
1746 for (SmallVector<CompileUnit *, 1>::iterator I = CUs.begin(),
1747 E = CUs.end(); I != E; ++I) {
1749 sizeof(int32_t) + // Length of Compilation Unit Info
1750 sizeof(int16_t) + // DWARF version number
1751 sizeof(int32_t) + // Offset Into Abbrev. Section
1752 sizeof(int8_t); // Pointer Size (in bytes)
1754 computeSizeAndOffset((*I)->getCUDie(), Offset);
1758 // Emit initial Dwarf sections with a label at the start of each one.
1759 void DwarfDebug::emitSectionLabels() {
1760 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1762 // Dwarf sections base addresses.
1763 DwarfInfoSectionSym =
1764 emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1765 DwarfAbbrevSectionSym =
1766 emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1767 if (useSplitDwarf())
1768 DwarfAbbrevDWOSectionSym =
1769 emitSectionSym(Asm, TLOF.getDwarfAbbrevDWOSection(),
1770 "section_abbrev_dwo");
1771 emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1773 if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1774 emitSectionSym(Asm, MacroInfo);
1776 emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1777 emitSectionSym(Asm, TLOF.getDwarfLocSection());
1778 emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1779 DwarfStrSectionSym =
1780 emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
1781 if (useSplitDwarf())
1782 DwarfStrDWOSectionSym =
1783 emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
1784 DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1787 DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
1788 "section_debug_loc");
1790 TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1791 emitSectionSym(Asm, TLOF.getDataSection());
1794 // Recursively emits a debug information entry.
1795 void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
1796 // Get the abbreviation for this DIE.
1797 unsigned AbbrevNumber = Die->getAbbrevNumber();
1798 const DIEAbbrev *Abbrev = Abbrevs->at(AbbrevNumber - 1);
1800 // Emit the code (index) for the abbreviation.
1801 if (Asm->isVerbose())
1802 Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1803 Twine::utohexstr(Die->getOffset()) + ":0x" +
1804 Twine::utohexstr(Die->getSize()) + " " +
1805 dwarf::TagString(Abbrev->getTag()));
1806 Asm->EmitULEB128(AbbrevNumber);
1808 const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1809 const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1811 // Emit the DIE attribute values.
1812 for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1813 unsigned Attr = AbbrevData[i].getAttribute();
1814 unsigned Form = AbbrevData[i].getForm();
1815 assert(Form && "Too many attributes for DIE (check abbreviation)");
1817 if (Asm->isVerbose())
1818 Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1821 case dwarf::DW_AT_abstract_origin: {
1822 DIEEntry *E = cast<DIEEntry>(Values[i]);
1823 DIE *Origin = E->getEntry();
1824 unsigned Addr = Origin->getOffset();
1825 Asm->EmitInt32(Addr);
1828 case dwarf::DW_AT_ranges: {
1829 // DW_AT_range Value encodes offset in debug_range section.
1830 DIEInteger *V = cast<DIEInteger>(Values[i]);
1832 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
1833 Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1837 Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1839 DwarfDebugRangeSectionSym,
1844 case dwarf::DW_AT_location: {
1845 if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
1846 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
1847 Asm->EmitLabelReference(L->getValue(), 4);
1849 Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1851 Values[i]->EmitValue(Asm, Form);
1855 case dwarf::DW_AT_accessibility: {
1856 if (Asm->isVerbose()) {
1857 DIEInteger *V = cast<DIEInteger>(Values[i]);
1858 Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1860 Values[i]->EmitValue(Asm, Form);
1864 // Emit an attribute using the defined form.
1865 Values[i]->EmitValue(Asm, Form);
1870 // Emit the DIE children if any.
1871 if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1872 const std::vector<DIE *> &Children = Die->getChildren();
1874 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1875 emitDIE(Children[j], Abbrevs);
1877 if (Asm->isVerbose())
1878 Asm->OutStreamer.AddComment("End Of Children Mark");
1883 // Emit the various dwarf units to the unit section USection with
1884 // the abbreviations going into ASection.
1885 void DwarfUnits::emitUnits(DwarfDebug *DD,
1886 const MCSection *USection,
1887 const MCSection *ASection,
1888 const MCSymbol *ASectionSym) {
1889 Asm->OutStreamer.SwitchSection(USection);
1890 for (SmallVector<CompileUnit *, 1>::iterator I = CUs.begin(),
1891 E = CUs.end(); I != E; ++I) {
1892 CompileUnit *TheCU = *I;
1893 DIE *Die = TheCU->getCUDie();
1895 // Emit the compile units header.
1897 .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(),
1898 TheCU->getUniqueID()));
1900 // Emit size of content not including length itself
1901 unsigned ContentSize = Die->getSize() +
1902 sizeof(int16_t) + // DWARF version number
1903 sizeof(int32_t) + // Offset Into Abbrev. Section
1904 sizeof(int8_t); // Pointer Size (in bytes)
1906 Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1907 Asm->EmitInt32(ContentSize);
1908 Asm->OutStreamer.AddComment("DWARF version number");
1909 Asm->EmitInt16(dwarf::DWARF_VERSION);
1910 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1911 Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
1913 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1914 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1916 DD->emitDIE(Die, Abbreviations);
1917 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(),
1918 TheCU->getUniqueID()));
1922 // Emit the debug info section.
1923 void DwarfDebug::emitDebugInfo() {
1924 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1926 Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(),
1927 Asm->getObjFileLowering().getDwarfAbbrevSection(),
1928 DwarfAbbrevSectionSym);
1931 // Emit the abbreviation section.
1932 void DwarfDebug::emitAbbreviations() {
1933 if (!useSplitDwarf())
1934 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
1937 emitSkeletonAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1940 void DwarfDebug::emitAbbrevs(const MCSection *Section,
1941 std::vector<DIEAbbrev *> *Abbrevs) {
1942 // Check to see if it is worth the effort.
1943 if (!Abbrevs->empty()) {
1944 // Start the debug abbrev section.
1945 Asm->OutStreamer.SwitchSection(Section);
1947 MCSymbol *Begin = Asm->GetTempSymbol(Section->getLabelBeginName());
1948 Asm->OutStreamer.EmitLabel(Begin);
1950 // For each abbrevation.
1951 for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
1952 // Get abbreviation data
1953 const DIEAbbrev *Abbrev = Abbrevs->at(i);
1955 // Emit the abbrevations code (base 1 index.)
1956 Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1958 // Emit the abbreviations data.
1962 // Mark end of abbreviations.
1963 Asm->EmitULEB128(0, "EOM(3)");
1965 MCSymbol *End = Asm->GetTempSymbol(Section->getLabelEndName());
1966 Asm->OutStreamer.EmitLabel(End);
1970 // Emit the last address of the section and the end of the line matrix.
1971 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1972 // Define last address of section.
1973 Asm->OutStreamer.AddComment("Extended Op");
1976 Asm->OutStreamer.AddComment("Op size");
1977 Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
1978 Asm->OutStreamer.AddComment("DW_LNE_set_address");
1979 Asm->EmitInt8(dwarf::DW_LNE_set_address);
1981 Asm->OutStreamer.AddComment("Section end label");
1983 Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1984 Asm->getDataLayout().getPointerSize());
1986 // Mark end of matrix.
1987 Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1993 // Emit visible names into a hashed accelerator table section.
1994 void DwarfDebug::emitAccelNames() {
1995 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
1996 dwarf::DW_FORM_data4));
1997 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1998 E = CUMap.end(); I != E; ++I) {
1999 CompileUnit *TheCU = I->second;
2000 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
2001 for (StringMap<std::vector<DIE*> >::const_iterator
2002 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2003 const char *Name = GI->getKeyData();
2004 const std::vector<DIE *> &Entities = GI->second;
2005 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2006 DE = Entities.end(); DI != DE; ++DI)
2007 AT.AddName(Name, (*DI));
2011 AT.FinalizeTable(Asm, "Names");
2012 Asm->OutStreamer.SwitchSection(
2013 Asm->getObjFileLowering().getDwarfAccelNamesSection());
2014 MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2015 Asm->OutStreamer.EmitLabel(SectionBegin);
2017 // Emit the full data.
2018 AT.Emit(Asm, SectionBegin, &InfoHolder);
2021 // Emit objective C classes and categories into a hashed accelerator table
2023 void DwarfDebug::emitAccelObjC() {
2024 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2025 dwarf::DW_FORM_data4));
2026 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2027 E = CUMap.end(); I != E; ++I) {
2028 CompileUnit *TheCU = I->second;
2029 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
2030 for (StringMap<std::vector<DIE*> >::const_iterator
2031 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2032 const char *Name = GI->getKeyData();
2033 const std::vector<DIE *> &Entities = GI->second;
2034 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2035 DE = Entities.end(); DI != DE; ++DI)
2036 AT.AddName(Name, (*DI));
2040 AT.FinalizeTable(Asm, "ObjC");
2041 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2042 .getDwarfAccelObjCSection());
2043 MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2044 Asm->OutStreamer.EmitLabel(SectionBegin);
2046 // Emit the full data.
2047 AT.Emit(Asm, SectionBegin, &InfoHolder);
2050 // Emit namespace dies into a hashed accelerator table.
2051 void DwarfDebug::emitAccelNamespaces() {
2052 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2053 dwarf::DW_FORM_data4));
2054 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2055 E = CUMap.end(); I != E; ++I) {
2056 CompileUnit *TheCU = I->second;
2057 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
2058 for (StringMap<std::vector<DIE*> >::const_iterator
2059 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2060 const char *Name = GI->getKeyData();
2061 const std::vector<DIE *> &Entities = GI->second;
2062 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2063 DE = Entities.end(); DI != DE; ++DI)
2064 AT.AddName(Name, (*DI));
2068 AT.FinalizeTable(Asm, "namespac");
2069 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2070 .getDwarfAccelNamespaceSection());
2071 MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2072 Asm->OutStreamer.EmitLabel(SectionBegin);
2074 // Emit the full data.
2075 AT.Emit(Asm, SectionBegin, &InfoHolder);
2078 // Emit type dies into a hashed accelerator table.
2079 void DwarfDebug::emitAccelTypes() {
2080 std::vector<DwarfAccelTable::Atom> Atoms;
2081 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2082 dwarf::DW_FORM_data4));
2083 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
2084 dwarf::DW_FORM_data2));
2085 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
2086 dwarf::DW_FORM_data1));
2087 DwarfAccelTable AT(Atoms);
2088 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2089 E = CUMap.end(); I != E; ++I) {
2090 CompileUnit *TheCU = I->second;
2091 const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
2092 = TheCU->getAccelTypes();
2093 for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
2094 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2095 const char *Name = GI->getKeyData();
2096 const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2097 for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
2098 = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
2099 AT.AddName(Name, (*DI).first, (*DI).second);
2103 AT.FinalizeTable(Asm, "types");
2104 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2105 .getDwarfAccelTypesSection());
2106 MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2107 Asm->OutStreamer.EmitLabel(SectionBegin);
2109 // Emit the full data.
2110 AT.Emit(Asm, SectionBegin, &InfoHolder);
2113 void DwarfDebug::emitDebugPubTypes() {
2114 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2115 E = CUMap.end(); I != E; ++I) {
2116 CompileUnit *TheCU = I->second;
2117 // Start the dwarf pubtypes section.
2118 Asm->OutStreamer.SwitchSection(
2119 Asm->getObjFileLowering().getDwarfPubTypesSection());
2120 Asm->OutStreamer.AddComment("Length of Public Types Info");
2121 Asm->EmitLabelDifference(
2122 Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2123 Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2125 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2126 TheCU->getUniqueID()));
2128 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2129 Asm->EmitInt16(dwarf::DWARF_VERSION);
2131 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2132 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2133 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(),
2134 TheCU->getUniqueID()),
2135 DwarfInfoSectionSym);
2137 Asm->OutStreamer.AddComment("Compilation Unit Length");
2138 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(),
2139 TheCU->getUniqueID()),
2140 Asm->GetTempSymbol(ISec->getLabelBeginName(),
2141 TheCU->getUniqueID()),
2144 const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2145 for (StringMap<DIE*>::const_iterator
2146 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2147 const char *Name = GI->getKeyData();
2148 DIE *Entity = GI->second;
2150 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2151 Asm->EmitInt32(Entity->getOffset());
2153 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2154 // Emit the name with a terminating null byte.
2155 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2158 Asm->OutStreamer.AddComment("End Mark");
2160 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2161 TheCU->getUniqueID()));
2165 // Emit strings into a string section.
2166 void DwarfUnits::emitStrings(const MCSection *StrSection,
2167 const MCSection *OffsetSection = NULL,
2168 const MCSymbol *StrSecSym = NULL) {
2170 if (StringPool.empty()) return;
2172 // Start the dwarf str section.
2173 Asm->OutStreamer.SwitchSection(StrSection);
2175 // Get all of the string pool entries and put them in an array by their ID so
2176 // we can sort them.
2177 SmallVector<std::pair<unsigned,
2178 StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2180 for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2181 I = StringPool.begin(), E = StringPool.end();
2183 Entries.push_back(std::make_pair(I->second.second, &*I));
2185 array_pod_sort(Entries.begin(), Entries.end());
2187 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2188 // Emit a label for reference from debug information entries.
2189 Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2191 // Emit the string itself with a terminating null byte.
2192 Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2193 Entries[i].second->getKeyLength()+1));
2196 // If we've got an offset section go ahead and emit that now as well.
2197 if (OffsetSection) {
2198 Asm->OutStreamer.SwitchSection(OffsetSection);
2199 unsigned offset = 0;
2200 unsigned size = 4; // FIXME: DWARF64 is 8.
2201 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2202 Asm->OutStreamer.EmitIntValue(offset, size);
2203 offset += Entries[i].second->getKeyLength() + 1;
2208 // Emit strings into a string section.
2209 void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2211 if (AddressPool.empty()) return;
2213 // Start the dwarf addr section.
2214 Asm->OutStreamer.SwitchSection(AddrSection);
2216 // Get all of the string pool entries and put them in an array by their ID so
2217 // we can sort them.
2218 SmallVector<std::pair<unsigned,
2219 std::pair<MCSymbol*, unsigned>* >, 64> Entries;
2221 for (DenseMap<MCSymbol*, std::pair<MCSymbol*, unsigned> >::iterator
2222 I = AddressPool.begin(), E = AddressPool.end();
2224 Entries.push_back(std::make_pair(I->second.second, &(I->second)));
2226 array_pod_sort(Entries.begin(), Entries.end());
2228 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2229 // Emit a label for reference from debug information entries.
2230 MCSymbol *Sym = Entries[i].second->first;
2232 Asm->EmitLabelReference(Entries[i].second->first,
2233 Asm->getDataLayout().getPointerSize());
2235 Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2240 // Emit visible names into a debug str section.
2241 void DwarfDebug::emitDebugStr() {
2242 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2243 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2246 // Emit visible names into a debug loc section.
2247 void DwarfDebug::emitDebugLoc() {
2248 if (DotDebugLocEntries.empty())
2251 for (SmallVector<DotDebugLocEntry, 4>::iterator
2252 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2254 DotDebugLocEntry &Entry = *I;
2255 if (I + 1 != DotDebugLocEntries.end())
2259 // Start the dwarf loc section.
2260 Asm->OutStreamer.SwitchSection(
2261 Asm->getObjFileLowering().getDwarfLocSection());
2262 unsigned char Size = Asm->getDataLayout().getPointerSize();
2263 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2265 for (SmallVector<DotDebugLocEntry, 4>::iterator
2266 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2267 I != E; ++I, ++index) {
2268 DotDebugLocEntry &Entry = *I;
2269 if (Entry.isMerged()) continue;
2270 if (Entry.isEmpty()) {
2271 Asm->OutStreamer.EmitIntValue(0, Size);
2272 Asm->OutStreamer.EmitIntValue(0, Size);
2273 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2275 Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size);
2276 Asm->OutStreamer.EmitSymbolValue(Entry.End, Size);
2277 DIVariable DV(Entry.Variable);
2278 Asm->OutStreamer.AddComment("Loc expr size");
2279 MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2280 MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2281 Asm->EmitLabelDifference(end, begin, 2);
2282 Asm->OutStreamer.EmitLabel(begin);
2283 if (Entry.isInt()) {
2284 DIBasicType BTy(DV.getType());
2286 (BTy.getEncoding() == dwarf::DW_ATE_signed
2287 || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2288 Asm->OutStreamer.AddComment("DW_OP_consts");
2289 Asm->EmitInt8(dwarf::DW_OP_consts);
2290 Asm->EmitSLEB128(Entry.getInt());
2292 Asm->OutStreamer.AddComment("DW_OP_constu");
2293 Asm->EmitInt8(dwarf::DW_OP_constu);
2294 Asm->EmitULEB128(Entry.getInt());
2296 } else if (Entry.isLocation()) {
2297 if (!DV.hasComplexAddress())
2299 Asm->EmitDwarfRegOp(Entry.Loc);
2301 // Complex address entry.
2302 unsigned N = DV.getNumAddrElements();
2304 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2305 if (Entry.Loc.getOffset()) {
2307 Asm->EmitDwarfRegOp(Entry.Loc);
2308 Asm->OutStreamer.AddComment("DW_OP_deref");
2309 Asm->EmitInt8(dwarf::DW_OP_deref);
2310 Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2311 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2312 Asm->EmitSLEB128(DV.getAddrElement(1));
2314 // If first address element is OpPlus then emit
2315 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2316 MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2317 Asm->EmitDwarfRegOp(Loc);
2321 Asm->EmitDwarfRegOp(Entry.Loc);
2324 // Emit remaining complex address elements.
2325 for (; i < N; ++i) {
2326 uint64_t Element = DV.getAddrElement(i);
2327 if (Element == DIBuilder::OpPlus) {
2328 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2329 Asm->EmitULEB128(DV.getAddrElement(++i));
2330 } else if (Element == DIBuilder::OpDeref) {
2331 if (!Entry.Loc.isReg())
2332 Asm->EmitInt8(dwarf::DW_OP_deref);
2334 llvm_unreachable("unknown Opcode found in complex address");
2338 // else ... ignore constant fp. There is not any good way to
2339 // to represent them here in dwarf.
2340 Asm->OutStreamer.EmitLabel(end);
2345 // Emit visible names into a debug aranges section.
2346 void DwarfDebug::emitDebugARanges() {
2347 // Start the dwarf aranges section.
2348 Asm->OutStreamer.SwitchSection(
2349 Asm->getObjFileLowering().getDwarfARangesSection());
2352 // Emit visible names into a debug ranges section.
2353 void DwarfDebug::emitDebugRanges() {
2354 // Start the dwarf ranges section.
2355 Asm->OutStreamer.SwitchSection(
2356 Asm->getObjFileLowering().getDwarfRangesSection());
2357 unsigned char Size = Asm->getDataLayout().getPointerSize();
2358 for (SmallVector<const MCSymbol *, 8>::iterator
2359 I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2362 Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
2364 Asm->OutStreamer.EmitIntValue(0, Size);
2368 // Emit visible names into a debug macinfo section.
2369 void DwarfDebug::emitDebugMacInfo() {
2370 if (const MCSection *LineInfo =
2371 Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2372 // Start the dwarf macinfo section.
2373 Asm->OutStreamer.SwitchSection(LineInfo);
2377 // Emit inline info using following format.
2379 // 1. length of section
2380 // 2. Dwarf version number
2383 // Entries (one "entry" for each function that was inlined):
2385 // 1. offset into __debug_str section for MIPS linkage name, if exists;
2386 // otherwise offset into __debug_str for regular function name.
2387 // 2. offset into __debug_str section for regular function name.
2388 // 3. an unsigned LEB128 number indicating the number of distinct inlining
2389 // instances for the function.
2391 // The rest of the entry consists of a {die_offset, low_pc} pair for each
2392 // inlined instance; the die_offset points to the inlined_subroutine die in the
2393 // __debug_info section, and the low_pc is the starting address for the
2394 // inlining instance.
2395 void DwarfDebug::emitDebugInlineInfo() {
2396 if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2402 Asm->OutStreamer.SwitchSection(
2403 Asm->getObjFileLowering().getDwarfDebugInlineSection());
2405 Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2406 Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2407 Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2409 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2411 Asm->OutStreamer.AddComment("Dwarf Version");
2412 Asm->EmitInt16(dwarf::DWARF_VERSION);
2413 Asm->OutStreamer.AddComment("Address Size (in bytes)");
2414 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2416 for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2417 E = InlinedSPNodes.end(); I != E; ++I) {
2419 const MDNode *Node = *I;
2420 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2421 = InlineInfo.find(Node);
2422 SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2423 DISubprogram SP(Node);
2424 StringRef LName = SP.getLinkageName();
2425 StringRef Name = SP.getName();
2427 Asm->OutStreamer.AddComment("MIPS linkage name");
2429 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2430 DwarfStrSectionSym);
2432 Asm->EmitSectionOffset(InfoHolder
2433 .getStringPoolEntry(getRealLinkageName(LName)),
2434 DwarfStrSectionSym);
2436 Asm->OutStreamer.AddComment("Function name");
2437 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2438 DwarfStrSectionSym);
2439 Asm->EmitULEB128(Labels.size(), "Inline count");
2441 for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2442 LE = Labels.end(); LI != LE; ++LI) {
2443 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2444 Asm->EmitInt32(LI->second->getOffset());
2446 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2447 Asm->OutStreamer.EmitSymbolValue(LI->first,
2448 Asm->getDataLayout().getPointerSize());
2452 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2455 // DWARF5 Experimental Separate Dwarf emitters.
2457 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2458 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2459 // DW_AT_ranges_base, DW_AT_addr_base. If DW_AT_ranges is present,
2460 // DW_AT_low_pc and DW_AT_high_pc are not used, and vice versa.
2461 CompileUnit *DwarfDebug::constructSkeletonCU(const MDNode *N) {
2462 DICompileUnit DIUnit(N);
2463 CompilationDir = DIUnit.getDirectory();
2465 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2466 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
2467 DIUnit.getLanguage(), Die, Asm,
2468 this, &SkeletonHolder);
2470 SmallString<16> T(DIUnit.getFilename());
2471 sys::path::replace_extension(T, ".dwo");
2472 StringRef FN = sys::path::filename(T);
2473 NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name, FN);
2475 // This should be a unique identifier when we want to build .dwp files.
2476 NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
2478 // FIXME: The addr base should be relative for each compile unit, however,
2479 // this one is going to be 0 anyhow.
2480 NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset, 0);
2482 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2483 // into an entity. We're using 0, or a NULL label for this.
2484 NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2486 // DW_AT_stmt_list is a offset of line number information for this
2487 // compile unit in debug_line section.
2488 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2489 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2490 Asm->GetTempSymbol("section_line"));
2492 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2494 if (!CompilationDir.empty())
2495 NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2500 SkeletonHolder.addUnit(NewCU);
2505 void DwarfDebug::emitSkeletonCU(const MCSection *Section) {
2506 Asm->OutStreamer.SwitchSection(Section);
2507 DIE *Die = SkeletonCU->getCUDie();
2509 // Emit the compile units header.
2510 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(Section->getLabelBeginName(),
2511 SkeletonCU->getUniqueID()));
2513 // Emit size of content not including length itself
2514 unsigned ContentSize = Die->getSize() +
2515 sizeof(int16_t) + // DWARF version number
2516 sizeof(int32_t) + // Offset Into Abbrev. Section
2517 sizeof(int8_t); // Pointer Size (in bytes)
2519 Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
2520 Asm->EmitInt32(ContentSize);
2521 Asm->OutStreamer.AddComment("DWARF version number");
2522 Asm->EmitInt16(dwarf::DWARF_VERSION);
2523 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2525 const MCSection *ASec = Asm->getObjFileLowering().getDwarfAbbrevSection();
2526 Asm->EmitSectionOffset(Asm->GetTempSymbol(ASec->getLabelBeginName()),
2527 DwarfAbbrevSectionSym);
2528 Asm->OutStreamer.AddComment("Address Size (in bytes)");
2529 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2531 emitDIE(Die, &SkeletonAbbrevs);
2532 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(Section->getLabelEndName(),
2533 SkeletonCU->getUniqueID()));
2536 void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
2537 assert(useSplitDwarf() && "No split dwarf debug info?");
2538 emitAbbrevs(Section, &SkeletonAbbrevs);
2541 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2542 // compile units that would normally be in debug_info.
2543 void DwarfDebug::emitDebugInfoDWO() {
2544 assert(useSplitDwarf() && "No split dwarf debug info?");
2545 InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
2546 Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2547 DwarfAbbrevDWOSectionSym);
2550 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2551 // abbreviations for the .debug_info.dwo section.
2552 void DwarfDebug::emitDebugAbbrevDWO() {
2553 assert(useSplitDwarf() && "No split dwarf?");
2554 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2558 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2559 // string section and is identical in format to traditional .debug_str
2561 void DwarfDebug::emitDebugStrDWO() {
2562 assert(useSplitDwarf() && "No split dwarf?");
2563 const MCSection *OffSec = Asm->getObjFileLowering()
2564 .getDwarfStrOffDWOSection();
2565 const MCSymbol *StrSym = DwarfStrSectionSym;
2566 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),