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 "DwarfCompileUnit.h"
18 #include "llvm/Constants.h"
19 #include "llvm/Module.h"
20 #include "llvm/Instructions.h"
21 #include "llvm/CodeGen/MachineFunction.h"
22 #include "llvm/CodeGen/MachineModuleInfo.h"
23 #include "llvm/MC/MCAsmInfo.h"
24 #include "llvm/MC/MCSection.h"
25 #include "llvm/MC/MCStreamer.h"
26 #include "llvm/MC/MCSymbol.h"
27 #include "llvm/Target/TargetData.h"
28 #include "llvm/Target/TargetFrameLowering.h"
29 #include "llvm/Target/TargetLoweringObjectFile.h"
30 #include "llvm/Target/TargetMachine.h"
31 #include "llvm/Target/TargetRegisterInfo.h"
32 #include "llvm/Target/TargetOptions.h"
33 #include "llvm/Analysis/DebugInfo.h"
34 #include "llvm/Analysis/DIBuilder.h"
35 #include "llvm/ADT/Statistic.h"
36 #include "llvm/ADT/STLExtras.h"
37 #include "llvm/ADT/StringExtras.h"
38 #include "llvm/Support/CommandLine.h"
39 #include "llvm/Support/Debug.h"
40 #include "llvm/Support/ErrorHandling.h"
41 #include "llvm/Support/ValueHandle.h"
42 #include "llvm/Support/FormattedStream.h"
43 #include "llvm/Support/Timer.h"
44 #include "llvm/Support/Path.h"
47 static cl::opt<bool> DisableDebugInfoPrinting("disable-debug-info-print",
49 cl::desc("Disable debug info printing"));
51 static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
52 cl::desc("Make an absence of debug location information explicit."),
56 const char *DWARFGroupName = "DWARF Emission";
57 const char *DbgTimerName = "DWARF Debug Writer";
58 } // end anonymous namespace
60 //===----------------------------------------------------------------------===//
62 /// Configuration values for initial hash set sizes (log2).
64 static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
68 DIType DbgVariable::getType() const {
69 DIType Ty = Var.getType();
70 // FIXME: isBlockByrefVariable should be reformulated in terms of complex
72 if (Var.isBlockByrefVariable()) {
73 /* Byref variables, in Blocks, are declared by the programmer as
74 "SomeType VarName;", but the compiler creates a
75 __Block_byref_x_VarName struct, and gives the variable VarName
76 either the struct, or a pointer to the struct, as its type. This
77 is necessary for various behind-the-scenes things the compiler
78 needs to do with by-reference variables in blocks.
80 However, as far as the original *programmer* is concerned, the
81 variable should still have type 'SomeType', as originally declared.
83 The following function dives into the __Block_byref_x_VarName
84 struct to find the original type of the variable. This will be
85 passed back to the code generating the type for the Debug
86 Information Entry for the variable 'VarName'. 'VarName' will then
87 have the original type 'SomeType' in its debug information.
89 The original type 'SomeType' will be the type of the field named
90 'VarName' inside the __Block_byref_x_VarName struct.
92 NOTE: In order for this to not completely fail on the debugger
93 side, the Debug Information Entry for the variable VarName needs to
94 have a DW_AT_location that tells the debugger how to unwind through
95 the pointers and __Block_byref_x_VarName struct to find the actual
96 value of the variable. The function addBlockByrefType does this. */
98 unsigned tag = Ty.getTag();
100 if (tag == dwarf::DW_TAG_pointer_type) {
101 DIDerivedType DTy = DIDerivedType(Ty);
102 subType = DTy.getTypeDerivedFrom();
105 DICompositeType blockStruct = DICompositeType(subType);
106 DIArray Elements = blockStruct.getTypeArray();
108 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
109 DIDescriptor Element = Elements.getElement(i);
110 DIDerivedType DT = DIDerivedType(Element);
111 if (getName() == DT.getName())
112 return (DT.getTypeDerivedFrom());
119 } // end llvm namespace
121 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
122 : Asm(A), MMI(Asm->MMI), FirstCU(0),
123 AbbreviationsSet(InitAbbreviationsSetSize),
125 NextStringPoolNumber = 0;
127 DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
128 DwarfStrSectionSym = TextSectionSym = 0;
129 DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
130 FunctionBeginSym = FunctionEndSym = 0;
132 NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
136 DwarfDebug::~DwarfDebug() {
139 MCSymbol *DwarfDebug::getStringPoolEntry(StringRef Str) {
140 std::pair<MCSymbol*, unsigned> &Entry = StringPool[Str];
141 if (Entry.first) return Entry.first;
143 Entry.second = NextStringPoolNumber++;
144 return Entry.first = Asm->GetTempSymbol("string", Entry.second);
148 /// assignAbbrevNumber - Define a unique number for the abbreviation.
150 void DwarfDebug::assignAbbrevNumber(DIEAbbrev &Abbrev) {
151 // Profile the node so that we can make it unique.
155 // Check the set for priors.
156 DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
158 // If it's newly added.
159 if (InSet == &Abbrev) {
160 // Add to abbreviation list.
161 Abbreviations.push_back(&Abbrev);
163 // Assign the vector position + 1 as its number.
164 Abbrev.setNumber(Abbreviations.size());
166 // Assign existing abbreviation number.
167 Abbrev.setNumber(InSet->getNumber());
171 /// getRealLinkageName - If special LLVM prefix that is used to inform the asm
172 /// printer to not emit usual symbol prefix before the symbol name is used then
173 /// return linkage name after skipping this special LLVM prefix.
174 static StringRef getRealLinkageName(StringRef LinkageName) {
176 if (LinkageName.startswith(StringRef(&One, 1)))
177 return LinkageName.substr(1);
181 /// updateSubprogramScopeDIE - Find DIE for the given subprogram and
182 /// attach appropriate DW_AT_low_pc and DW_AT_high_pc attributes.
183 /// If there are global variables in this scope then create and insert
184 /// DIEs for these variables.
185 DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
186 const MDNode *SPNode) {
187 DIE *SPDie = SPCU->getDIE(SPNode);
189 assert(SPDie && "Unable to find subprogram DIE!");
190 DISubprogram SP(SPNode);
192 DISubprogram SPDecl = SP.getFunctionDeclaration();
193 if (SPDecl.isSubprogram())
194 // Refer function declaration directly.
195 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
196 SPCU->getOrCreateSubprogramDIE(SPDecl));
198 // There is not any need to generate specification DIE for a function
199 // defined at compile unit level. If a function is defined inside another
200 // function then gdb prefers the definition at top level and but does not
201 // expect specification DIE in parent function. So avoid creating
202 // specification DIE for a function defined inside a function.
203 if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
204 !SP.getContext().isFile() &&
205 !isSubprogramContext(SP.getContext())) {
206 SPCU-> addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
209 DICompositeType SPTy = SP.getType();
210 DIArray Args = SPTy.getTypeArray();
211 unsigned SPTag = SPTy.getTag();
212 if (SPTag == dwarf::DW_TAG_subroutine_type)
213 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
214 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
215 DIType ATy = DIType(DIType(Args.getElement(i)));
216 SPCU->addType(Arg, ATy);
217 if (ATy.isArtificial())
218 SPCU->addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
219 SPDie->addChild(Arg);
221 DIE *SPDeclDie = SPDie;
222 SPDie = new DIE(dwarf::DW_TAG_subprogram);
223 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
228 // Pick up abstract subprogram DIE.
229 if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
230 SPDie = new DIE(dwarf::DW_TAG_subprogram);
231 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
232 dwarf::DW_FORM_ref4, AbsSPDIE);
236 SPCU->addLabel(SPDie, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
237 Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber()));
238 SPCU->addLabel(SPDie, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
239 Asm->GetTempSymbol("func_end", Asm->getFunctionNumber()));
240 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
241 MachineLocation Location(RI->getFrameRegister(*Asm->MF));
242 SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
247 /// constructLexicalScope - Construct new DW_TAG_lexical_block
248 /// for this scope and attach DW_AT_low_pc/DW_AT_high_pc labels.
249 DIE *DwarfDebug::constructLexicalScopeDIE(CompileUnit *TheCU,
250 LexicalScope *Scope) {
252 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
253 if (Scope->isAbstractScope())
256 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
260 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
261 if (Ranges.size() > 1) {
262 // .debug_range section has not been laid out yet. Emit offset in
263 // .debug_range as a uint, size 4, for now. emitDIE will handle
264 // DW_AT_ranges appropriately.
265 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
266 DebugRangeSymbols.size()
267 * Asm->getTargetData().getPointerSize());
268 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
269 RE = Ranges.end(); RI != RE; ++RI) {
270 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
271 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
273 DebugRangeSymbols.push_back(NULL);
274 DebugRangeSymbols.push_back(NULL);
278 const MCSymbol *Start = getLabelBeforeInsn(RI->first);
279 const MCSymbol *End = getLabelAfterInsn(RI->second);
281 if (End == 0) return 0;
283 assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
284 assert(End->isDefined() && "Invalid end label for an inlined scope!");
286 TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, Start);
287 TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, End);
292 /// constructInlinedScopeDIE - This scope represents inlined body of
293 /// a function. Construct DIE to represent this concrete inlined copy
295 DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
296 LexicalScope *Scope) {
298 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
299 assert (Ranges.empty() == false
300 && "LexicalScope does not have instruction markers!");
302 if (!Scope->getScopeNode())
304 DIScope DS(Scope->getScopeNode());
305 DISubprogram InlinedSP = getDISubprogram(DS);
306 DIE *OriginDIE = TheCU->getDIE(InlinedSP);
308 DEBUG(dbgs() << "Unable to find original DIE for inlined subprogram.");
312 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
313 const MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
314 const MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
316 if (StartLabel == 0 || EndLabel == 0) {
317 assert (0 && "Unexpected Start and End labels for a inlined scope!");
320 assert(StartLabel->isDefined() &&
321 "Invalid starting label for an inlined scope!");
322 assert(EndLabel->isDefined() &&
323 "Invalid end label for an inlined scope!");
325 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
326 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
327 dwarf::DW_FORM_ref4, OriginDIE);
329 if (Ranges.size() > 1) {
330 // .debug_range section has not been laid out yet. Emit offset in
331 // .debug_range as a uint, size 4, for now. emitDIE will handle
332 // DW_AT_ranges appropriately.
333 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
334 DebugRangeSymbols.size()
335 * Asm->getTargetData().getPointerSize());
336 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
337 RE = Ranges.end(); RI != RE; ++RI) {
338 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
339 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
341 DebugRangeSymbols.push_back(NULL);
342 DebugRangeSymbols.push_back(NULL);
344 TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
346 TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
350 InlinedSubprogramDIEs.insert(OriginDIE);
352 // Track the start label for this inlined function.
353 //.debug_inlined section specification does not clearly state how
354 // to emit inlined scope that is split into multiple instruction ranges.
355 // For now, use first instruction range and emit low_pc/high_pc pair and
356 // corresponding .debug_inlined section entry for this pair.
357 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
358 I = InlineInfo.find(InlinedSP);
360 if (I == InlineInfo.end()) {
361 InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel,
363 InlinedSPNodes.push_back(InlinedSP);
365 I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
367 DILocation DL(Scope->getInlinedAt());
368 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0, TheCU->getID());
369 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
374 /// constructScopeDIE - Construct a DIE for this scope.
375 DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
376 if (!Scope || !Scope->getScopeNode())
379 SmallVector <DIE *, 8> Children;
381 // Collect arguments for current function.
382 if (LScopes.isCurrentFunctionScope(Scope))
383 for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
384 if (DbgVariable *ArgDV = CurrentFnArguments[i])
386 TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope()))
387 Children.push_back(Arg);
389 // Collect lexical scope childrens first.
390 const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
391 for (unsigned i = 0, N = Variables.size(); i < N; ++i)
393 TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope()))
394 Children.push_back(Variable);
395 const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
396 for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
397 if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
398 Children.push_back(Nested);
399 DIScope DS(Scope->getScopeNode());
400 DIE *ScopeDIE = NULL;
401 if (Scope->getInlinedAt())
402 ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
403 else if (DS.isSubprogram()) {
404 ProcessedSPNodes.insert(DS);
405 if (Scope->isAbstractScope()) {
406 ScopeDIE = TheCU->getDIE(DS);
407 // Note down abstract DIE.
409 AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
412 ScopeDIE = updateSubprogramScopeDIE(TheCU, DS);
415 // There is no need to emit empty lexical block DIE.
416 if (Children.empty())
418 ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
421 if (!ScopeDIE) return NULL;
424 for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
425 E = Children.end(); I != E; ++I)
426 ScopeDIE->addChild(*I);
428 if (DS.isSubprogram())
429 TheCU->addPubTypes(DISubprogram(DS));
434 /// GetOrCreateSourceID - Look up the source id with the given directory and
435 /// source file names. If none currently exists, create a new id and insert it
436 /// in the SourceIds map. This can update DirectoryNames and SourceFileNames
439 unsigned DwarfDebug::GetOrCreateSourceID(StringRef FileName,
441 // If FE did not provide a file name, then assume stdin.
442 if (FileName.empty())
443 return GetOrCreateSourceID("<stdin>", StringRef());
445 // MCStream expects full path name as filename.
446 if (!DirName.empty() && !sys::path::is_absolute(FileName)) {
447 SmallString<128> FullPathName = DirName;
448 sys::path::append(FullPathName, FileName);
449 // Here FullPathName will be copied into StringMap by GetOrCreateSourceID.
450 return GetOrCreateSourceID(StringRef(FullPathName), StringRef());
453 StringMapEntry<unsigned> &Entry = SourceIdMap.GetOrCreateValue(FileName);
454 if (Entry.getValue())
455 return Entry.getValue();
457 unsigned SrcId = SourceIdMap.size();
458 Entry.setValue(SrcId);
460 // Print out a .file directive to specify files for .loc directives.
461 Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.getKey());
466 /// constructCompileUnit - Create new CompileUnit for the given
467 /// metadata node with tag DW_TAG_compile_unit.
468 void DwarfDebug::constructCompileUnit(const MDNode *N) {
469 DICompileUnit DIUnit(N);
470 StringRef FN = DIUnit.getFilename();
471 StringRef Dir = DIUnit.getDirectory();
472 unsigned ID = GetOrCreateSourceID(FN, Dir);
474 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
475 CompileUnit *NewCU = new CompileUnit(ID, Die, Asm, this);
476 NewCU->addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
477 DIUnit.getProducer());
478 NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
479 DIUnit.getLanguage());
480 NewCU->addString(Die, dwarf::DW_AT_name, dwarf::DW_FORM_string, FN);
481 // Use DW_AT_entry_pc instead of DW_AT_low_pc/DW_AT_high_pc pair. This
482 // simplifies debug range entries.
483 NewCU->addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
484 // DW_AT_stmt_list is a offset of line number information for this
485 // compile unit in debug_line section.
486 if(Asm->MAI->doesDwarfRequireRelocationForSectionOffset())
487 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
488 Asm->GetTempSymbol("section_line"));
490 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
493 NewCU->addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
494 if (DIUnit.isOptimized())
495 NewCU->addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
497 StringRef Flags = DIUnit.getFlags();
499 NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, dwarf::DW_FORM_string,
502 unsigned RVer = DIUnit.getRunTimeVersion();
504 NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
505 dwarf::DW_FORM_data1, RVer);
509 CUMap.insert(std::make_pair(N, NewCU));
512 /// getCompileUnit - Get CompileUnit DIE.
513 CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
514 assert (N && "Invalid DwarfDebug::getCompileUnit argument!");
516 const MDNode *CUNode = NULL;
517 if (D.isCompileUnit())
519 else if (D.isSubprogram())
520 CUNode = DISubprogram(N).getCompileUnit();
522 CUNode = DIType(N).getCompileUnit();
523 else if (D.isGlobalVariable())
524 CUNode = DIGlobalVariable(N).getCompileUnit();
525 else if (D.isVariable())
526 CUNode = DIVariable(N).getCompileUnit();
527 else if (D.isNameSpace())
528 CUNode = DINameSpace(N).getCompileUnit();
530 CUNode = DIFile(N).getCompileUnit();
534 DenseMap<const MDNode *, CompileUnit *>::const_iterator I
535 = CUMap.find(CUNode);
536 if (I == CUMap.end())
541 /// constructGlobalVariableDIE - Construct global variable DIE.
542 void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
543 DIGlobalVariable GV(N);
545 // If debug information is malformed then ignore it.
546 if (GV.Verify() == false)
549 // Check for pre-existence.
550 CompileUnit *TheCU = getCompileUnit(N);
551 TheCU->createGlobalVariableDIE(N);
555 /// construct SubprogramDIE - Construct subprogram DIE.
556 void DwarfDebug::constructSubprogramDIE(const MDNode *N) {
559 // Check for pre-existence.
560 CompileUnit *TheCU = getCompileUnit(N);
561 if (TheCU->getDIE(N))
564 if (!SP.isDefinition())
565 // This is a method declaration which will be handled while constructing
569 DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
572 TheCU->insertDIE(N, SubprogramDie);
574 // Add to context owner.
575 TheCU->addToContextOwner(SubprogramDie, SP.getContext());
578 TheCU->addGlobal(SP.getName(), SubprogramDie);
583 /// beginModule - Emit all Dwarf sections that should come prior to the
584 /// content. Create global DIEs and emit initial debug info sections.
585 /// This is invoked by the target AsmPrinter.
586 void DwarfDebug::beginModule(Module *M) {
587 if (DisableDebugInfoPrinting)
590 // If module has named metadata anchors then use them, otherwise scan the
591 // module using debug info finder to collect debug info.
592 NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
595 NamedMDNode *GV_Nodes = M->getNamedMetadata("llvm.dbg.gv");
596 NamedMDNode *SP_Nodes = M->getNamedMetadata("llvm.dbg.sp");
597 if (!GV_Nodes && !SP_Nodes)
598 // If there are not any global variables or any functions then
599 // there is not any debug info in this module.
602 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)
603 constructCompileUnit(CU_Nodes->getOperand(i));
606 for (unsigned i = 0, e = GV_Nodes->getNumOperands(); i != e; ++i)
607 constructGlobalVariableDIE(GV_Nodes->getOperand(i));
610 for (unsigned i = 0, e = SP_Nodes->getNumOperands(); i != e; ++i)
611 constructSubprogramDIE(SP_Nodes->getOperand(i));
615 DebugInfoFinder DbgFinder;
616 DbgFinder.processModule(*M);
618 bool HasDebugInfo = false;
619 // Scan all the compile-units to see if there are any marked as the main
620 // unit. If not, we do not generate debug info.
621 for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
622 E = DbgFinder.compile_unit_end(); I != E; ++I) {
623 if (DICompileUnit(*I).isMain()) {
628 if (!HasDebugInfo) return;
630 // Create all the compile unit DIEs.
631 for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
632 E = DbgFinder.compile_unit_end(); I != E; ++I)
633 constructCompileUnit(*I);
635 // Create DIEs for each global variable.
636 for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
637 E = DbgFinder.global_variable_end(); I != E; ++I)
638 constructGlobalVariableDIE(*I);
640 // Create DIEs for each subprogram.
641 for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
642 E = DbgFinder.subprogram_end(); I != E; ++I)
643 constructSubprogramDIE(*I);
646 // Tell MMI that we have debug info.
647 MMI->setDebugInfoAvailability(true);
649 // Emit initial sections.
653 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
654 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
655 DIType Ty(NMD->getOperand(i));
656 getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
659 if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
660 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
661 DIType Ty(NMD->getOperand(i));
662 getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
665 // Prime section data.
666 SectionMap.insert(Asm->getObjFileLowering().getTextSection());
669 /// endModule - Emit all Dwarf sections that should come after the content.
671 void DwarfDebug::endModule() {
672 if (!FirstCU) return;
673 const Module *M = MMI->getModule();
674 DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
675 if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
676 for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
677 if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
678 DISubprogram SP(AllSPs->getOperand(SI));
679 if (!SP.Verify()) continue;
681 // Collect info for variables that were optimized out.
682 if (!SP.isDefinition()) continue;
683 StringRef FName = SP.getLinkageName();
685 FName = SP.getName();
686 NamedMDNode *NMD = getFnSpecificMDNode(*(MMI->getModule()), FName);
688 unsigned E = NMD->getNumOperands();
690 LexicalScope *Scope = new LexicalScope(NULL, DIDescriptor(SP), NULL,
692 DeadFnScopeMap[SP] = Scope;
693 SmallVector<DbgVariable, 8> Variables;
694 for (unsigned I = 0; I != E; ++I) {
695 DIVariable DV(NMD->getOperand(I));
696 if (!DV.Verify()) continue;
697 Variables.push_back(DbgVariable(DV, NULL));
700 // Construct subprogram DIE and add variables DIEs.
701 constructSubprogramDIE(SP);
702 CompileUnit *SPCU = getCompileUnit(SP);
703 DIE *ScopeDIE = SPCU->getDIE(SP);
704 for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
705 if (DIE *VariableDIE =
706 SPCU->constructVariableDIE(&Variables[i], Scope->isAbstractScope()))
707 ScopeDIE->addChild(VariableDIE);
712 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
713 for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
714 AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
716 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
719 // Emit DW_AT_containing_type attribute to connect types with their
720 // vtable holding type.
721 for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
722 CUE = CUMap.end(); CUI != CUE; ++CUI) {
723 CompileUnit *TheCU = CUI->second;
724 TheCU->constructContainingTypeDIEs();
727 // Standard sections final addresses.
728 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
729 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
730 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
731 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
733 // End text sections.
734 for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
735 Asm->OutStreamer.SwitchSection(SectionMap[i]);
736 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
739 // Compute DIE offsets and sizes.
740 computeSizeAndOffsets();
742 // Emit all the DIEs into a debug info section
745 // Corresponding abbreviations into a abbrev section.
748 // Emit info into a debug pubnames section.
751 // Emit info into a debug pubtypes section.
754 // Emit info into a debug loc section.
757 // Emit info into a debug aranges section.
760 // Emit info into a debug ranges section.
763 // Emit info into a debug macinfo section.
767 emitDebugInlineInfo();
769 // Emit info into a debug str section.
773 DeleteContainerSeconds(DeadFnScopeMap);
774 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
775 E = CUMap.end(); I != E; ++I)
777 FirstCU = NULL; // Reset for the next Module, if any.
780 /// findAbstractVariable - Find abstract variable, if any, associated with Var.
781 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
783 LLVMContext &Ctx = DV->getContext();
784 // More then one inlined variable corresponds to one abstract variable.
785 DIVariable Var = cleanseInlinedVariable(DV, Ctx);
786 DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
788 return AbsDbgVariable;
790 LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
794 AbsDbgVariable = new DbgVariable(Var, NULL);
795 addScopeVariable(Scope, AbsDbgVariable);
796 AbstractVariables[Var] = AbsDbgVariable;
797 return AbsDbgVariable;
800 /// addCurrentFnArgument - If Var is a current function argument then add
801 /// it to CurrentFnArguments list.
802 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
803 DbgVariable *Var, LexicalScope *Scope) {
804 if (!LScopes.isCurrentFunctionScope(Scope))
806 DIVariable DV = Var->getVariable();
807 if (DV.getTag() != dwarf::DW_TAG_arg_variable)
809 unsigned ArgNo = DV.getArgNumber();
813 size_t Size = CurrentFnArguments.size();
815 CurrentFnArguments.resize(MF->getFunction()->arg_size());
816 // llvm::Function argument size is not good indicator of how many
817 // arguments does the function have at source level.
819 CurrentFnArguments.resize(ArgNo * 2);
820 CurrentFnArguments[ArgNo - 1] = Var;
824 /// collectVariableInfoFromMMITable - Collect variable information from
825 /// side table maintained by MMI.
827 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
828 SmallPtrSet<const MDNode *, 16> &Processed) {
829 MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
830 for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
831 VE = VMap.end(); VI != VE; ++VI) {
832 const MDNode *Var = VI->first;
834 Processed.insert(Var);
836 const std::pair<unsigned, DebugLoc> &VP = VI->second;
838 LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
840 // If variable scope is not found then skip this variable.
844 DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
845 DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
846 RegVar->setFrameIndex(VP.first);
847 if (!addCurrentFnArgument(MF, RegVar, Scope))
848 addScopeVariable(Scope, RegVar);
850 AbsDbgVariable->setFrameIndex(VP.first);
854 /// isDbgValueInDefinedReg - Return true if debug value, encoded by
855 /// DBG_VALUE instruction, is in a defined reg.
856 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
857 assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
858 return MI->getNumOperands() == 3 &&
859 MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
860 MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
863 /// getDebugLocEntry - Get .debug_loc entry for the instruction range starting
865 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
866 const MCSymbol *FLabel,
867 const MCSymbol *SLabel,
868 const MachineInstr *MI) {
869 const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata();
871 if (MI->getNumOperands() != 3) {
872 MachineLocation MLoc = Asm->getDebugValueLocation(MI);
873 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
875 if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
876 MachineLocation MLoc;
877 MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
878 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
880 if (MI->getOperand(0).isImm())
881 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
882 if (MI->getOperand(0).isFPImm())
883 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
884 if (MI->getOperand(0).isCImm())
885 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
887 assert (0 && "Unexpected 3 operand DBG_VALUE instruction!");
888 return DotDebugLocEntry();
891 /// collectVariableInfo - Find variables for each lexical scope.
893 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
894 SmallPtrSet<const MDNode *, 16> &Processed) {
896 /// collection info from MMI table.
897 collectVariableInfoFromMMITable(MF, Processed);
899 for (SmallVectorImpl<const MDNode*>::const_iterator
900 UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
902 const MDNode *Var = *UVI;
903 if (Processed.count(Var))
906 // History contains relevant DBG_VALUE instructions for Var and instructions
908 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
911 const MachineInstr *MInsn = History.front();
914 LexicalScope *Scope = NULL;
915 if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
916 DISubprogram(DV.getContext()).describes(MF->getFunction()))
917 Scope = LScopes.getCurrentFunctionScope();
919 if (DV.getVersion() <= LLVMDebugVersion9)
920 Scope = LScopes.findLexicalScope(MInsn->getDebugLoc());
922 if (MDNode *IA = DV.getInlinedAt())
923 Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
925 Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
928 // If variable scope is not found then skip this variable.
932 Processed.insert(DV);
933 assert(MInsn->isDebugValue() && "History must begin with debug value");
934 DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
935 DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
936 if (!addCurrentFnArgument(MF, RegVar, Scope))
937 addScopeVariable(Scope, RegVar);
939 AbsVar->setMInsn(MInsn);
941 // Simple ranges that are fully coalesced.
942 if (History.size() <= 1 || (History.size() == 2 &&
943 MInsn->isIdenticalTo(History.back()))) {
944 RegVar->setMInsn(MInsn);
948 // handle multiple DBG_VALUE instructions describing one variable.
949 RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
951 for (SmallVectorImpl<const MachineInstr*>::const_iterator
952 HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
953 const MachineInstr *Begin = *HI;
954 assert(Begin->isDebugValue() && "Invalid History entry");
956 // Check if DBG_VALUE is truncating a range.
957 if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
958 && !Begin->getOperand(0).getReg())
961 // Compute the range for a register location.
962 const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
963 const MCSymbol *SLabel = 0;
966 // If Begin is the last instruction in History then its value is valid
967 // until the end of the function.
968 SLabel = FunctionEndSym;
970 const MachineInstr *End = HI[1];
971 DEBUG(dbgs() << "DotDebugLoc Pair:\n"
972 << "\t" << *Begin << "\t" << *End << "\n");
973 if (End->isDebugValue())
974 SLabel = getLabelBeforeInsn(End);
976 // End is a normal instruction clobbering the range.
977 SLabel = getLabelAfterInsn(End);
978 assert(SLabel && "Forgot label after clobber instruction");
983 // The value is valid until the next DBG_VALUE or clobber.
984 DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel, Begin));
986 DotDebugLocEntries.push_back(DotDebugLocEntry());
989 // Collect info for variables that were optimized out.
990 const Function *F = MF->getFunction();
991 if (NamedMDNode *NMD = getFnSpecificMDNode(*(F->getParent()), F->getName())) {
992 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
993 DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
994 if (!DV || !Processed.insert(DV))
996 if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
997 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1002 /// getLabelBeforeInsn - Return Label preceding the instruction.
1003 const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1004 MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1005 assert(Label && "Didn't insert label before instruction");
1009 /// getLabelAfterInsn - Return Label immediately following the instruction.
1010 const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1011 return LabelsAfterInsn.lookup(MI);
1014 /// beginInstruction - Process beginning of an instruction.
1015 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1016 // Check if source location changes, but ignore DBG_VALUE locations.
1017 if (!MI->isDebugValue()) {
1018 DebugLoc DL = MI->getDebugLoc();
1019 if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1020 unsigned Flags = DWARF2_FLAG_IS_STMT;
1022 if (DL == PrologEndLoc) {
1023 Flags |= DWARF2_FLAG_PROLOGUE_END;
1024 PrologEndLoc = DebugLoc();
1026 if (!DL.isUnknown()) {
1027 const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1028 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1030 recordSourceLine(0, 0, 0, 0);
1034 // Insert labels where requested.
1035 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1036 LabelsBeforeInsn.find(MI);
1039 if (I == LabelsBeforeInsn.end())
1042 // Label already assigned.
1047 PrevLabel = MMI->getContext().CreateTempSymbol();
1048 Asm->OutStreamer.EmitLabel(PrevLabel);
1050 I->second = PrevLabel;
1053 /// endInstruction - Process end of an instruction.
1054 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1055 // Don't create a new label after DBG_VALUE instructions.
1056 // They don't generate code.
1057 if (!MI->isDebugValue())
1060 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1061 LabelsAfterInsn.find(MI);
1064 if (I == LabelsAfterInsn.end())
1067 // Label already assigned.
1071 // We need a label after this instruction.
1073 PrevLabel = MMI->getContext().CreateTempSymbol();
1074 Asm->OutStreamer.EmitLabel(PrevLabel);
1076 I->second = PrevLabel;
1079 /// identifyScopeMarkers() -
1080 /// Each LexicalScope has first instruction and last instruction to mark
1081 /// beginning and end of a scope respectively. Create an inverse map that list
1082 /// scopes starts (and ends) with an instruction. One instruction may start (or
1083 /// end) multiple scopes. Ignore scopes that are not reachable.
1084 void DwarfDebug::identifyScopeMarkers() {
1085 SmallVector<LexicalScope *, 4> WorkList;
1086 WorkList.push_back(LScopes.getCurrentFunctionScope());
1087 while (!WorkList.empty()) {
1088 LexicalScope *S = WorkList.pop_back_val();
1090 const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1091 if (!Children.empty())
1092 for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1093 SE = Children.end(); SI != SE; ++SI)
1094 WorkList.push_back(*SI);
1096 if (S->isAbstractScope())
1099 const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1102 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1103 RE = Ranges.end(); RI != RE; ++RI) {
1104 assert(RI->first && "InsnRange does not have first instruction!");
1105 assert(RI->second && "InsnRange does not have second instruction!");
1106 requestLabelBeforeInsn(RI->first);
1107 requestLabelAfterInsn(RI->second);
1112 /// getScopeNode - Get MDNode for DebugLoc's scope.
1113 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1114 if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1115 return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1116 return DL.getScope(Ctx);
1119 /// getFnDebugLoc - Walk up the scope chain of given debug loc and find
1120 /// line number info for the function.
1121 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1122 const MDNode *Scope = getScopeNode(DL, Ctx);
1123 DISubprogram SP = getDISubprogram(Scope);
1125 return DebugLoc::get(SP.getLineNumber(), 0, SP);
1129 /// beginFunction - Gather pre-function debug information. Assumes being
1130 /// emitted immediately after the function entry point.
1131 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1132 if (!MMI->hasDebugInfo()) return;
1133 LScopes.initialize(*MF);
1134 if (LScopes.empty()) return;
1135 identifyScopeMarkers();
1137 FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1138 Asm->getFunctionNumber());
1139 // Assumes in correct section after the entry point.
1140 Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1142 assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1144 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1145 /// LiveUserVar - Map physreg numbers to the MDNode they contain.
1146 std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1148 for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1150 bool AtBlockEntry = true;
1151 for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1153 const MachineInstr *MI = II;
1155 if (MI->isDebugValue()) {
1156 assert (MI->getNumOperands() > 1 && "Invalid machine instruction!");
1158 // Keep track of user variables.
1160 MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1162 // Variable is in a register, we need to check for clobbers.
1163 if (isDbgValueInDefinedReg(MI))
1164 LiveUserVar[MI->getOperand(0).getReg()] = Var;
1166 // Check the history of this variable.
1167 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1168 if (History.empty()) {
1169 UserVariables.push_back(Var);
1170 // The first mention of a function argument gets the FunctionBeginSym
1171 // label, so arguments are visible when breaking at function entry.
1173 if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1174 DISubprogram(getDISubprogram(DV.getContext()))
1175 .describes(MF->getFunction()))
1176 LabelsBeforeInsn[MI] = FunctionBeginSym;
1178 // We have seen this variable before. Try to coalesce DBG_VALUEs.
1179 const MachineInstr *Prev = History.back();
1180 if (Prev->isDebugValue()) {
1181 // Coalesce identical entries at the end of History.
1182 if (History.size() >= 2 &&
1183 Prev->isIdenticalTo(History[History.size() - 2])) {
1184 DEBUG(dbgs() << "Coalesce identical DBG_VALUE entries:\n"
1186 << "\t" << *History[History.size() - 2] << "\n");
1190 // Terminate old register assignments that don't reach MI;
1191 MachineFunction::const_iterator PrevMBB = Prev->getParent();
1192 if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1193 isDbgValueInDefinedReg(Prev)) {
1194 // Previous register assignment needs to terminate at the end of
1196 MachineBasicBlock::const_iterator LastMI =
1197 PrevMBB->getLastNonDebugInstr();
1198 if (LastMI == PrevMBB->end()) {
1199 // Drop DBG_VALUE for empty range.
1200 DEBUG(dbgs() << "Drop DBG_VALUE for empty range:\n"
1201 << "\t" << *Prev << "\n");
1205 // Terminate after LastMI.
1206 History.push_back(LastMI);
1211 History.push_back(MI);
1213 // Not a DBG_VALUE instruction.
1215 AtBlockEntry = false;
1217 // First known non DBG_VALUE location marks beginning of function
1219 if (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown())
1220 PrologEndLoc = MI->getDebugLoc();
1222 // Check if the instruction clobbers any registers with debug vars.
1223 for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1224 MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1225 if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1227 for (const unsigned *AI = TRI->getOverlaps(MOI->getReg());
1228 unsigned Reg = *AI; ++AI) {
1229 const MDNode *Var = LiveUserVar[Reg];
1232 // Reg is now clobbered.
1233 LiveUserVar[Reg] = 0;
1235 // Was MD last defined by a DBG_VALUE referring to Reg?
1236 DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1237 if (HistI == DbgValues.end())
1239 SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1240 if (History.empty())
1242 const MachineInstr *Prev = History.back();
1243 // Sanity-check: Register assignments are terminated at the end of
1245 if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1247 // Is the variable still in Reg?
1248 if (!isDbgValueInDefinedReg(Prev) ||
1249 Prev->getOperand(0).getReg() != Reg)
1251 // Var is clobbered. Make sure the next instruction gets a label.
1252 History.push_back(MI);
1259 for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1261 SmallVectorImpl<const MachineInstr*> &History = I->second;
1262 if (History.empty())
1265 // Make sure the final register assignments are terminated.
1266 const MachineInstr *Prev = History.back();
1267 if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1268 const MachineBasicBlock *PrevMBB = Prev->getParent();
1269 MachineBasicBlock::const_iterator LastMI =
1270 PrevMBB->getLastNonDebugInstr();
1271 if (LastMI == PrevMBB->end())
1272 // Drop DBG_VALUE for empty range.
1275 // Terminate after LastMI.
1276 History.push_back(LastMI);
1279 // Request labels for the full history.
1280 for (unsigned i = 0, e = History.size(); i != e; ++i) {
1281 const MachineInstr *MI = History[i];
1282 if (MI->isDebugValue())
1283 requestLabelBeforeInsn(MI);
1285 requestLabelAfterInsn(MI);
1289 PrevInstLoc = DebugLoc();
1290 PrevLabel = FunctionBeginSym;
1292 // Record beginning of function.
1293 if (!PrologEndLoc.isUnknown()) {
1294 DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1295 MF->getFunction()->getContext());
1296 recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1297 FnStartDL.getScope(MF->getFunction()->getContext()),
1298 DWARF2_FLAG_IS_STMT);
1302 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1303 // SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1304 ScopeVariables[LS].push_back(Var);
1305 // Vars.push_back(Var);
1308 /// endFunction - Gather and emit post-function debug information.
1310 void DwarfDebug::endFunction(const MachineFunction *MF) {
1311 if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1313 // Define end label for subprogram.
1314 FunctionEndSym = Asm->GetTempSymbol("func_end",
1315 Asm->getFunctionNumber());
1316 // Assumes in correct section after the entry point.
1317 Asm->OutStreamer.EmitLabel(FunctionEndSym);
1319 SmallPtrSet<const MDNode *, 16> ProcessedVars;
1320 collectVariableInfo(MF, ProcessedVars);
1322 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1323 CompileUnit *TheCU = getCompileUnit(FnScope->getScopeNode());
1325 // Construct abstract scopes.
1326 ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1327 for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1328 LexicalScope *AScope = AList[i];
1329 DISubprogram SP(AScope->getScopeNode());
1331 // Collect info for variables that were optimized out.
1332 StringRef FName = SP.getLinkageName();
1334 FName = SP.getName();
1335 if (NamedMDNode *NMD =
1336 getFnSpecificMDNode(*(MF->getFunction()->getParent()), FName)) {
1337 for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1338 DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
1339 if (!DV || !ProcessedVars.insert(DV))
1341 if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1342 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1346 if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1347 constructScopeDIE(TheCU, AScope);
1350 DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1352 if (!DisableFramePointerElim(*MF))
1353 TheCU->addUInt(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr,
1354 dwarf::DW_FORM_flag, 1);
1356 DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1357 MMI->getFrameMoves()));
1360 for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1361 I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1362 DeleteContainerPointers(I->second);
1363 ScopeVariables.clear();
1364 DeleteContainerPointers(CurrentFnArguments);
1365 UserVariables.clear();
1367 AbstractVariables.clear();
1368 LabelsBeforeInsn.clear();
1369 LabelsAfterInsn.clear();
1373 /// recordSourceLine - Register a source line with debug info. Returns the
1374 /// unique label that was emitted and which provides correspondence to
1375 /// the source line list.
1376 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1382 DIDescriptor Scope(S);
1384 if (Scope.isCompileUnit()) {
1385 DICompileUnit CU(S);
1386 Fn = CU.getFilename();
1387 Dir = CU.getDirectory();
1388 } else if (Scope.isFile()) {
1390 Fn = F.getFilename();
1391 Dir = F.getDirectory();
1392 } else if (Scope.isSubprogram()) {
1394 Fn = SP.getFilename();
1395 Dir = SP.getDirectory();
1396 } else if (Scope.isLexicalBlock()) {
1397 DILexicalBlock DB(S);
1398 Fn = DB.getFilename();
1399 Dir = DB.getDirectory();
1401 assert(0 && "Unexpected scope info");
1403 Src = GetOrCreateSourceID(Fn, Dir);
1405 Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1408 //===----------------------------------------------------------------------===//
1410 //===----------------------------------------------------------------------===//
1412 /// computeSizeAndOffset - Compute the size and offset of a DIE.
1415 DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
1416 // Get the children.
1417 const std::vector<DIE *> &Children = Die->getChildren();
1419 // If not last sibling and has children then add sibling offset attribute.
1420 if (!Last && !Children.empty())
1421 Die->addSiblingOffset(DIEValueAllocator);
1423 // Record the abbreviation.
1424 assignAbbrevNumber(Die->getAbbrev());
1426 // Get the abbreviation for this DIE.
1427 unsigned AbbrevNumber = Die->getAbbrevNumber();
1428 const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1431 Die->setOffset(Offset);
1433 // Start the size with the size of abbreviation code.
1434 Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1436 const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1437 const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1439 // Size the DIE attribute values.
1440 for (unsigned i = 0, N = Values.size(); i < N; ++i)
1441 // Size attribute value.
1442 Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1444 // Size the DIE children if any.
1445 if (!Children.empty()) {
1446 assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1447 "Children flag not set");
1449 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1450 Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
1452 // End of children marker.
1453 Offset += sizeof(int8_t);
1456 Die->setSize(Offset - Die->getOffset());
1460 /// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
1462 void DwarfDebug::computeSizeAndOffsets() {
1463 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1464 E = CUMap.end(); I != E; ++I) {
1465 // Compute size of compile unit header.
1467 sizeof(int32_t) + // Length of Compilation Unit Info
1468 sizeof(int16_t) + // DWARF version number
1469 sizeof(int32_t) + // Offset Into Abbrev. Section
1470 sizeof(int8_t); // Pointer Size (in bytes)
1471 computeSizeAndOffset(I->second->getCUDie(), Offset, true);
1475 /// EmitSectionSym - Switch to the specified MCSection and emit an assembler
1476 /// temporary label to it if SymbolStem is specified.
1477 static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
1478 const char *SymbolStem = 0) {
1479 Asm->OutStreamer.SwitchSection(Section);
1480 if (!SymbolStem) return 0;
1482 MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
1483 Asm->OutStreamer.EmitLabel(TmpSym);
1487 /// EmitSectionLabels - Emit initial Dwarf sections with a label at
1488 /// the start of each one.
1489 void DwarfDebug::EmitSectionLabels() {
1490 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1492 // Dwarf sections base addresses.
1493 DwarfInfoSectionSym =
1494 EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1495 DwarfAbbrevSectionSym =
1496 EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1497 EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
1499 if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1500 EmitSectionSym(Asm, MacroInfo);
1502 EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1503 EmitSectionSym(Asm, TLOF.getDwarfLocSection());
1504 EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1505 EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1506 DwarfStrSectionSym =
1507 EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
1508 DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1511 DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
1512 "section_debug_loc");
1514 TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1515 EmitSectionSym(Asm, TLOF.getDataSection());
1518 /// emitDIE - Recursively emits a debug information entry.
1520 void DwarfDebug::emitDIE(DIE *Die) {
1521 // Get the abbreviation for this DIE.
1522 unsigned AbbrevNumber = Die->getAbbrevNumber();
1523 const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1525 // Emit the code (index) for the abbreviation.
1526 if (Asm->isVerbose())
1527 Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1528 Twine::utohexstr(Die->getOffset()) + ":0x" +
1529 Twine::utohexstr(Die->getSize()) + " " +
1530 dwarf::TagString(Abbrev->getTag()));
1531 Asm->EmitULEB128(AbbrevNumber);
1533 const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1534 const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1536 // Emit the DIE attribute values.
1537 for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1538 unsigned Attr = AbbrevData[i].getAttribute();
1539 unsigned Form = AbbrevData[i].getForm();
1540 assert(Form && "Too many attributes for DIE (check abbreviation)");
1542 if (Asm->isVerbose())
1543 Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1546 case dwarf::DW_AT_sibling:
1547 Asm->EmitInt32(Die->getSiblingOffset());
1549 case dwarf::DW_AT_abstract_origin: {
1550 DIEEntry *E = cast<DIEEntry>(Values[i]);
1551 DIE *Origin = E->getEntry();
1552 unsigned Addr = Origin->getOffset();
1553 Asm->EmitInt32(Addr);
1556 case dwarf::DW_AT_ranges: {
1557 // DW_AT_range Value encodes offset in debug_range section.
1558 DIEInteger *V = cast<DIEInteger>(Values[i]);
1560 if (Asm->MAI->doesDwarfUsesLabelOffsetForRanges()) {
1561 Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1565 Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1567 DwarfDebugRangeSectionSym,
1572 case dwarf::DW_AT_location: {
1573 if (DIELabel *L = dyn_cast<DIELabel>(Values[i]))
1574 Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1576 Values[i]->EmitValue(Asm, Form);
1579 case dwarf::DW_AT_accessibility: {
1580 if (Asm->isVerbose()) {
1581 DIEInteger *V = cast<DIEInteger>(Values[i]);
1582 Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1584 Values[i]->EmitValue(Asm, Form);
1588 // Emit an attribute using the defined form.
1589 Values[i]->EmitValue(Asm, Form);
1594 // Emit the DIE children if any.
1595 if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1596 const std::vector<DIE *> &Children = Die->getChildren();
1598 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1599 emitDIE(Children[j]);
1601 if (Asm->isVerbose())
1602 Asm->OutStreamer.AddComment("End Of Children Mark");
1607 /// emitDebugInfo - Emit the debug info section.
1609 void DwarfDebug::emitDebugInfo() {
1610 // Start debug info section.
1611 Asm->OutStreamer.SwitchSection(
1612 Asm->getObjFileLowering().getDwarfInfoSection());
1613 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1614 E = CUMap.end(); I != E; ++I) {
1615 CompileUnit *TheCU = I->second;
1616 DIE *Die = TheCU->getCUDie();
1618 // Emit the compile units header.
1619 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
1622 // Emit size of content not including length itself
1623 unsigned ContentSize = Die->getSize() +
1624 sizeof(int16_t) + // DWARF version number
1625 sizeof(int32_t) + // Offset Into Abbrev. Section
1626 sizeof(int8_t); // Pointer Size (in bytes)
1628 Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1629 Asm->EmitInt32(ContentSize);
1630 Asm->OutStreamer.AddComment("DWARF version number");
1631 Asm->EmitInt16(dwarf::DWARF_VERSION);
1632 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1633 Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
1634 DwarfAbbrevSectionSym);
1635 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1636 Asm->EmitInt8(Asm->getTargetData().getPointerSize());
1639 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
1643 /// emitAbbreviations - Emit the abbreviation section.
1645 void DwarfDebug::emitAbbreviations() const {
1646 // Check to see if it is worth the effort.
1647 if (!Abbreviations.empty()) {
1648 // Start the debug abbrev section.
1649 Asm->OutStreamer.SwitchSection(
1650 Asm->getObjFileLowering().getDwarfAbbrevSection());
1652 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
1654 // For each abbrevation.
1655 for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
1656 // Get abbreviation data
1657 const DIEAbbrev *Abbrev = Abbreviations[i];
1659 // Emit the abbrevations code (base 1 index.)
1660 Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1662 // Emit the abbreviations data.
1666 // Mark end of abbreviations.
1667 Asm->EmitULEB128(0, "EOM(3)");
1669 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
1673 /// emitEndOfLineMatrix - Emit the last address of the section and the end of
1674 /// the line matrix.
1676 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1677 // Define last address of section.
1678 Asm->OutStreamer.AddComment("Extended Op");
1681 Asm->OutStreamer.AddComment("Op size");
1682 Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
1683 Asm->OutStreamer.AddComment("DW_LNE_set_address");
1684 Asm->EmitInt8(dwarf::DW_LNE_set_address);
1686 Asm->OutStreamer.AddComment("Section end label");
1688 Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1689 Asm->getTargetData().getPointerSize(),
1692 // Mark end of matrix.
1693 Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1699 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
1701 void DwarfDebug::emitDebugPubNames() {
1702 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1703 E = CUMap.end(); I != E; ++I) {
1704 CompileUnit *TheCU = I->second;
1705 // Start the dwarf pubnames section.
1706 Asm->OutStreamer.SwitchSection(
1707 Asm->getObjFileLowering().getDwarfPubNamesSection());
1709 Asm->OutStreamer.AddComment("Length of Public Names Info");
1710 Asm->EmitLabelDifference(
1711 Asm->GetTempSymbol("pubnames_end", TheCU->getID()),
1712 Asm->GetTempSymbol("pubnames_begin", TheCU->getID()), 4);
1714 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin",
1717 Asm->OutStreamer.AddComment("DWARF Version");
1718 Asm->EmitInt16(dwarf::DWARF_VERSION);
1720 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1721 Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1722 DwarfInfoSectionSym);
1724 Asm->OutStreamer.AddComment("Compilation Unit Length");
1725 Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1726 Asm->GetTempSymbol("info_begin", TheCU->getID()),
1729 const StringMap<DIE*> &Globals = TheCU->getGlobals();
1730 for (StringMap<DIE*>::const_iterator
1731 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1732 const char *Name = GI->getKeyData();
1733 DIE *Entity = GI->second;
1735 Asm->OutStreamer.AddComment("DIE offset");
1736 Asm->EmitInt32(Entity->getOffset());
1738 if (Asm->isVerbose())
1739 Asm->OutStreamer.AddComment("External Name");
1740 Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
1743 Asm->OutStreamer.AddComment("End Mark");
1745 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end",
1750 void DwarfDebug::emitDebugPubTypes() {
1751 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1752 E = CUMap.end(); I != E; ++I) {
1753 CompileUnit *TheCU = I->second;
1754 // Start the dwarf pubnames section.
1755 Asm->OutStreamer.SwitchSection(
1756 Asm->getObjFileLowering().getDwarfPubTypesSection());
1757 Asm->OutStreamer.AddComment("Length of Public Types Info");
1758 Asm->EmitLabelDifference(
1759 Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
1760 Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
1762 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
1765 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
1766 Asm->EmitInt16(dwarf::DWARF_VERSION);
1768 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1769 Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1770 DwarfInfoSectionSym);
1772 Asm->OutStreamer.AddComment("Compilation Unit Length");
1773 Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1774 Asm->GetTempSymbol("info_begin", TheCU->getID()),
1777 const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
1778 for (StringMap<DIE*>::const_iterator
1779 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1780 const char *Name = GI->getKeyData();
1781 DIE *Entity = GI->second;
1783 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
1784 Asm->EmitInt32(Entity->getOffset());
1786 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
1787 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
1790 Asm->OutStreamer.AddComment("End Mark");
1792 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
1797 /// emitDebugStr - Emit visible names into a debug str section.
1799 void DwarfDebug::emitDebugStr() {
1800 // Check to see if it is worth the effort.
1801 if (StringPool.empty()) return;
1803 // Start the dwarf str section.
1804 Asm->OutStreamer.SwitchSection(
1805 Asm->getObjFileLowering().getDwarfStrSection());
1807 // Get all of the string pool entries and put them in an array by their ID so
1808 // we can sort them.
1809 SmallVector<std::pair<unsigned,
1810 StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
1812 for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
1813 I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
1814 Entries.push_back(std::make_pair(I->second.second, &*I));
1816 array_pod_sort(Entries.begin(), Entries.end());
1818 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
1819 // Emit a label for reference from debug information entries.
1820 Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
1822 // Emit the string itself.
1823 Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
1827 /// emitDebugLoc - Emit visible names into a debug loc section.
1829 void DwarfDebug::emitDebugLoc() {
1830 if (DotDebugLocEntries.empty())
1833 for (SmallVector<DotDebugLocEntry, 4>::iterator
1834 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1836 DotDebugLocEntry &Entry = *I;
1837 if (I + 1 != DotDebugLocEntries.end())
1841 // Start the dwarf loc section.
1842 Asm->OutStreamer.SwitchSection(
1843 Asm->getObjFileLowering().getDwarfLocSection());
1844 unsigned char Size = Asm->getTargetData().getPointerSize();
1845 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
1847 for (SmallVector<DotDebugLocEntry, 4>::iterator
1848 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1849 I != E; ++I, ++index) {
1850 DotDebugLocEntry &Entry = *I;
1851 if (Entry.isMerged()) continue;
1852 if (Entry.isEmpty()) {
1853 Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1854 Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1855 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
1857 Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
1858 Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
1859 DIVariable DV(Entry.Variable);
1860 Asm->OutStreamer.AddComment("Loc expr size");
1861 MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
1862 MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
1863 Asm->EmitLabelDifference(end, begin, 2);
1864 Asm->OutStreamer.EmitLabel(begin);
1865 if (Entry.isInt()) {
1866 DIBasicType BTy(DV.getType());
1868 (BTy.getEncoding() == dwarf::DW_ATE_signed
1869 || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
1870 Asm->OutStreamer.AddComment("DW_OP_consts");
1871 Asm->EmitInt8(dwarf::DW_OP_consts);
1872 Asm->EmitSLEB128(Entry.getInt());
1874 Asm->OutStreamer.AddComment("DW_OP_constu");
1875 Asm->EmitInt8(dwarf::DW_OP_constu);
1876 Asm->EmitULEB128(Entry.getInt());
1878 } else if (Entry.isLocation()) {
1879 if (!DV.hasComplexAddress())
1881 Asm->EmitDwarfRegOp(Entry.Loc);
1883 // Complex address entry.
1884 unsigned N = DV.getNumAddrElements();
1886 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
1887 if (Entry.Loc.getOffset()) {
1889 Asm->EmitDwarfRegOp(Entry.Loc);
1890 Asm->OutStreamer.AddComment("DW_OP_deref");
1891 Asm->EmitInt8(dwarf::DW_OP_deref);
1892 Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
1893 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
1894 Asm->EmitSLEB128(DV.getAddrElement(1));
1896 // If first address element is OpPlus then emit
1897 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
1898 MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
1899 Asm->EmitDwarfRegOp(Loc);
1903 Asm->EmitDwarfRegOp(Entry.Loc);
1906 // Emit remaining complex address elements.
1907 for (; i < N; ++i) {
1908 uint64_t Element = DV.getAddrElement(i);
1909 if (Element == DIBuilder::OpPlus) {
1910 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
1911 Asm->EmitULEB128(DV.getAddrElement(++i));
1912 } else if (Element == DIBuilder::OpDeref)
1913 Asm->EmitInt8(dwarf::DW_OP_deref);
1914 else llvm_unreachable("unknown Opcode found in complex address");
1918 // else ... ignore constant fp. There is not any good way to
1919 // to represent them here in dwarf.
1920 Asm->OutStreamer.EmitLabel(end);
1925 /// EmitDebugARanges - Emit visible names into a debug aranges section.
1927 void DwarfDebug::EmitDebugARanges() {
1928 // Start the dwarf aranges section.
1929 Asm->OutStreamer.SwitchSection(
1930 Asm->getObjFileLowering().getDwarfARangesSection());
1933 /// emitDebugRanges - Emit visible names into a debug ranges section.
1935 void DwarfDebug::emitDebugRanges() {
1936 // Start the dwarf ranges section.
1937 Asm->OutStreamer.SwitchSection(
1938 Asm->getObjFileLowering().getDwarfRangesSection());
1939 unsigned char Size = Asm->getTargetData().getPointerSize();
1940 for (SmallVector<const MCSymbol *, 8>::iterator
1941 I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
1944 Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
1946 Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1950 /// emitDebugMacInfo - Emit visible names into a debug macinfo section.
1952 void DwarfDebug::emitDebugMacInfo() {
1953 if (const MCSection *LineInfo =
1954 Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
1955 // Start the dwarf macinfo section.
1956 Asm->OutStreamer.SwitchSection(LineInfo);
1960 /// emitDebugInlineInfo - Emit inline info using following format.
1962 /// 1. length of section
1963 /// 2. Dwarf version number
1964 /// 3. address size.
1966 /// Entries (one "entry" for each function that was inlined):
1968 /// 1. offset into __debug_str section for MIPS linkage name, if exists;
1969 /// otherwise offset into __debug_str for regular function name.
1970 /// 2. offset into __debug_str section for regular function name.
1971 /// 3. an unsigned LEB128 number indicating the number of distinct inlining
1972 /// instances for the function.
1974 /// The rest of the entry consists of a {die_offset, low_pc} pair for each
1975 /// inlined instance; the die_offset points to the inlined_subroutine die in the
1976 /// __debug_info section, and the low_pc is the starting address for the
1977 /// inlining instance.
1978 void DwarfDebug::emitDebugInlineInfo() {
1979 if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
1985 Asm->OutStreamer.SwitchSection(
1986 Asm->getObjFileLowering().getDwarfDebugInlineSection());
1988 Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
1989 Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
1990 Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
1992 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
1994 Asm->OutStreamer.AddComment("Dwarf Version");
1995 Asm->EmitInt16(dwarf::DWARF_VERSION);
1996 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1997 Asm->EmitInt8(Asm->getTargetData().getPointerSize());
1999 for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2000 E = InlinedSPNodes.end(); I != E; ++I) {
2002 const MDNode *Node = *I;
2003 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2004 = InlineInfo.find(Node);
2005 SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2006 DISubprogram SP(Node);
2007 StringRef LName = SP.getLinkageName();
2008 StringRef Name = SP.getName();
2010 Asm->OutStreamer.AddComment("MIPS linkage name");
2011 if (LName.empty()) {
2012 Asm->OutStreamer.EmitBytes(Name, 0);
2013 Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
2015 Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2016 DwarfStrSectionSym);
2018 Asm->OutStreamer.AddComment("Function name");
2019 Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2020 Asm->EmitULEB128(Labels.size(), "Inline count");
2022 for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2023 LE = Labels.end(); LI != LE; ++LI) {
2024 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2025 Asm->EmitInt32(LI->second->getOffset());
2027 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2028 Asm->OutStreamer.EmitSymbolValue(LI->first,
2029 Asm->getTargetData().getPointerSize(),0);
2033 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));