1 //===-- llvm/CodeGen/DwarfDebug.cpp - Dwarf Debug Framework ---------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains support for writing dwarf debug info into asm files.
12 //===----------------------------------------------------------------------===//
14 #define DEBUG_TYPE "dwarfdebug"
15 #include "DwarfDebug.h"
17 #include "DwarfAccelTable.h"
18 #include "DwarfCompileUnit.h"
19 #include "llvm/ADT/STLExtras.h"
20 #include "llvm/ADT/Statistic.h"
21 #include "llvm/ADT/StringExtras.h"
22 #include "llvm/ADT/Triple.h"
23 #include "llvm/CodeGen/MachineFunction.h"
24 #include "llvm/CodeGen/MachineModuleInfo.h"
25 #include "llvm/DIBuilder.h"
26 #include "llvm/DebugInfo.h"
27 #include "llvm/IR/Constants.h"
28 #include "llvm/IR/DataLayout.h"
29 #include "llvm/IR/Instructions.h"
30 #include "llvm/IR/Module.h"
31 #include "llvm/MC/MCAsmInfo.h"
32 #include "llvm/MC/MCSection.h"
33 #include "llvm/MC/MCStreamer.h"
34 #include "llvm/MC/MCSymbol.h"
35 #include "llvm/Support/CommandLine.h"
36 #include "llvm/Support/Debug.h"
37 #include "llvm/Support/ErrorHandling.h"
38 #include "llvm/Support/FormattedStream.h"
39 #include "llvm/Support/Path.h"
40 #include "llvm/Support/Timer.h"
41 #include "llvm/Support/ValueHandle.h"
42 #include "llvm/Target/TargetFrameLowering.h"
43 #include "llvm/Target/TargetLoweringObjectFile.h"
44 #include "llvm/Target/TargetMachine.h"
45 #include "llvm/Target/TargetOptions.h"
46 #include "llvm/Target/TargetRegisterInfo.h"
49 static cl::opt<bool> DisableDebugInfoPrinting("disable-debug-info-print",
51 cl::desc("Disable debug info printing"));
53 static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
54 cl::desc("Make an absence of debug location information explicit."),
57 static cl::opt<bool> GenerateDwarfPubNamesSection("generate-dwarf-pubnames",
58 cl::Hidden, cl::init(false),
59 cl::desc("Generate DWARF pubnames section"));
63 Default, Enable, Disable
67 static cl::opt<DefaultOnOff> DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
68 cl::desc("Output prototype dwarf accelerator tables."),
70 clEnumVal(Default, "Default for platform"),
71 clEnumVal(Enable, "Enabled"),
72 clEnumVal(Disable, "Disabled"),
76 static cl::opt<DefaultOnOff> DarwinGDBCompat("darwin-gdb-compat", cl::Hidden,
77 cl::desc("Compatibility with Darwin gdb."),
79 clEnumVal(Default, "Default for platform"),
80 clEnumVal(Enable, "Enabled"),
81 clEnumVal(Disable, "Disabled"),
85 static cl::opt<DefaultOnOff> SplitDwarf("split-dwarf", cl::Hidden,
86 cl::desc("Output prototype dwarf split debug info."),
88 clEnumVal(Default, "Default for platform"),
89 clEnumVal(Enable, "Enabled"),
90 clEnumVal(Disable, "Disabled"),
95 const char *DWARFGroupName = "DWARF Emission";
96 const char *DbgTimerName = "DWARF Debug Writer";
99 template <typename T> bool operator()(const T &lhs, const T &rhs) const {
100 return lhs.first < rhs.first;
103 } // end anonymous namespace
105 //===----------------------------------------------------------------------===//
107 // Configuration values for initial hash set sizes (log2).
109 static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
113 DIType DbgVariable::getType() const {
114 DIType Ty = Var.getType();
115 // FIXME: isBlockByrefVariable should be reformulated in terms of complex
116 // addresses instead.
117 if (Var.isBlockByrefVariable()) {
118 /* Byref variables, in Blocks, are declared by the programmer as
119 "SomeType VarName;", but the compiler creates a
120 __Block_byref_x_VarName struct, and gives the variable VarName
121 either the struct, or a pointer to the struct, as its type. This
122 is necessary for various behind-the-scenes things the compiler
123 needs to do with by-reference variables in blocks.
125 However, as far as the original *programmer* is concerned, the
126 variable should still have type 'SomeType', as originally declared.
128 The following function dives into the __Block_byref_x_VarName
129 struct to find the original type of the variable. This will be
130 passed back to the code generating the type for the Debug
131 Information Entry for the variable 'VarName'. 'VarName' will then
132 have the original type 'SomeType' in its debug information.
134 The original type 'SomeType' will be the type of the field named
135 'VarName' inside the __Block_byref_x_VarName struct.
137 NOTE: In order for this to not completely fail on the debugger
138 side, the Debug Information Entry for the variable VarName needs to
139 have a DW_AT_location that tells the debugger how to unwind through
140 the pointers and __Block_byref_x_VarName struct to find the actual
141 value of the variable. The function addBlockByrefType does this. */
143 unsigned tag = Ty.getTag();
145 if (tag == dwarf::DW_TAG_pointer_type) {
146 DIDerivedType DTy = DIDerivedType(Ty);
147 subType = DTy.getTypeDerivedFrom();
150 DICompositeType blockStruct = DICompositeType(subType);
151 DIArray Elements = blockStruct.getTypeArray();
153 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
154 DIDescriptor Element = Elements.getElement(i);
155 DIDerivedType DT = DIDerivedType(Element);
156 if (getName() == DT.getName())
157 return (DT.getTypeDerivedFrom());
163 } // end llvm namespace
165 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
166 : Asm(A), MMI(Asm->MMI), FirstCU(0),
167 AbbreviationsSet(InitAbbreviationsSetSize),
168 SourceIdMap(DIEValueAllocator),
169 PrevLabel(NULL), GlobalCUIndexCount(0),
170 InfoHolder(A, &AbbreviationsSet, &Abbreviations, "info_string",
172 SkeletonAbbrevSet(InitAbbreviationsSetSize),
173 SkeletonHolder(A, &SkeletonAbbrevSet, &SkeletonAbbrevs, "skel_string",
176 DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
177 DwarfStrSectionSym = TextSectionSym = 0;
178 DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0;
179 DwarfAddrSectionSym = 0;
180 DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0;
181 FunctionBeginSym = FunctionEndSym = 0;
183 // Turn on accelerator tables and older gdb compatibility
185 bool IsDarwin = Triple(A->getTargetTriple()).isOSDarwin();
186 if (DarwinGDBCompat == Default) {
188 IsDarwinGDBCompat = true;
190 IsDarwinGDBCompat = false;
192 IsDarwinGDBCompat = DarwinGDBCompat == Enable ? true : false;
194 if (DwarfAccelTables == Default) {
196 HasDwarfAccelTables = true;
198 HasDwarfAccelTables = false;
200 HasDwarfAccelTables = DwarfAccelTables == Enable ? true : false;
202 if (SplitDwarf == Default)
203 HasSplitDwarf = false;
205 HasSplitDwarf = SplitDwarf == Enable ? true : false;
208 NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
212 DwarfDebug::~DwarfDebug() {
215 // Switch to the specified MCSection and emit an assembler
216 // temporary label to it if SymbolStem is specified.
217 static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section,
218 const char *SymbolStem = 0) {
219 Asm->OutStreamer.SwitchSection(Section);
220 if (!SymbolStem) return 0;
222 MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
223 Asm->OutStreamer.EmitLabel(TmpSym);
227 MCSymbol *DwarfUnits::getStringPoolSym() {
228 return Asm->GetTempSymbol(StringPref);
231 MCSymbol *DwarfUnits::getStringPoolEntry(StringRef Str) {
232 std::pair<MCSymbol*, unsigned> &Entry =
233 StringPool.GetOrCreateValue(Str).getValue();
234 if (Entry.first) return Entry.first;
236 Entry.second = NextStringPoolNumber++;
237 return Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
240 unsigned DwarfUnits::getStringPoolIndex(StringRef Str) {
241 std::pair<MCSymbol*, unsigned> &Entry =
242 StringPool.GetOrCreateValue(Str).getValue();
243 if (Entry.first) return Entry.second;
245 Entry.second = NextStringPoolNumber++;
246 Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
250 unsigned DwarfUnits::getAddrPoolIndex(MCSymbol *Sym) {
251 std::pair<MCSymbol*, unsigned> &Entry = AddressPool[Sym];
252 if (Entry.first) return Entry.second;
254 Entry.second = NextAddrPoolNumber++;
259 // Define a unique number for the abbreviation.
261 void DwarfUnits::assignAbbrevNumber(DIEAbbrev &Abbrev) {
262 // Profile the node so that we can make it unique.
266 // Check the set for priors.
267 DIEAbbrev *InSet = AbbreviationsSet->GetOrInsertNode(&Abbrev);
269 // If it's newly added.
270 if (InSet == &Abbrev) {
271 // Add to abbreviation list.
272 Abbreviations->push_back(&Abbrev);
274 // Assign the vector position + 1 as its number.
275 Abbrev.setNumber(Abbreviations->size());
277 // Assign existing abbreviation number.
278 Abbrev.setNumber(InSet->getNumber());
282 // If special LLVM prefix that is used to inform the asm
283 // printer to not emit usual symbol prefix before the symbol name is used then
284 // return linkage name after skipping this special LLVM prefix.
285 static StringRef getRealLinkageName(StringRef LinkageName) {
287 if (LinkageName.startswith(StringRef(&One, 1)))
288 return LinkageName.substr(1);
292 static bool isObjCClass(StringRef Name) {
293 return Name.startswith("+") || Name.startswith("-");
296 static bool hasObjCCategory(StringRef Name) {
297 if (!isObjCClass(Name)) return false;
299 size_t pos = Name.find(')');
300 if (pos != std::string::npos) {
301 if (Name[pos+1] != ' ') return false;
307 static void getObjCClassCategory(StringRef In, StringRef &Class,
308 StringRef &Category) {
309 if (!hasObjCCategory(In)) {
310 Class = In.slice(In.find('[') + 1, In.find(' '));
315 Class = In.slice(In.find('[') + 1, In.find('('));
316 Category = In.slice(In.find('[') + 1, In.find(' '));
320 static StringRef getObjCMethodName(StringRef In) {
321 return In.slice(In.find(' ') + 1, In.find(']'));
324 // Add the various names to the Dwarf accelerator table names.
325 static void addSubprogramNames(CompileUnit *TheCU, DISubprogram SP,
327 if (!SP.isDefinition()) return;
329 TheCU->addAccelName(SP.getName(), Die);
331 // If the linkage name is different than the name, go ahead and output
332 // that as well into the name table.
333 if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
334 TheCU->addAccelName(SP.getLinkageName(), Die);
336 // If this is an Objective-C selector name add it to the ObjC accelerator
338 if (isObjCClass(SP.getName())) {
339 StringRef Class, Category;
340 getObjCClassCategory(SP.getName(), Class, Category);
341 TheCU->addAccelObjC(Class, Die);
343 TheCU->addAccelObjC(Category, Die);
344 // Also add the base method name to the name table.
345 TheCU->addAccelName(getObjCMethodName(SP.getName()), Die);
349 // Find DIE for the given subprogram and attach appropriate DW_AT_low_pc
350 // and DW_AT_high_pc attributes. If there are global variables in this
351 // scope then create and insert DIEs for these variables.
352 DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
353 const MDNode *SPNode) {
354 DIE *SPDie = SPCU->getDIE(SPNode);
356 assert(SPDie && "Unable to find subprogram DIE!");
357 DISubprogram SP(SPNode);
359 // If we're updating an abstract DIE, then we will be adding the children and
360 // object pointer later on. But what we don't want to do is process the
361 // concrete DIE twice.
362 DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode);
364 bool InSameCU = (AbsSPDIE->getCompileUnit() == SPCU->getCUDie());
365 // Pick up abstract subprogram DIE.
366 SPDie = new DIE(dwarf::DW_TAG_subprogram);
367 // If AbsSPDIE belongs to a different CU, use DW_FORM_ref_addr instead of
369 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
370 InSameCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
374 DISubprogram SPDecl = SP.getFunctionDeclaration();
375 if (!SPDecl.isSubprogram()) {
376 // There is not any need to generate specification DIE for a function
377 // defined at compile unit level. If a function is defined inside another
378 // function then gdb prefers the definition at top level and but does not
379 // expect specification DIE in parent function. So avoid creating
380 // specification DIE for a function defined inside a function.
381 if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
382 !SP.getContext().isFile() &&
383 !isSubprogramContext(SP.getContext())) {
384 SPCU->addFlag(SPDie, dwarf::DW_AT_declaration);
387 DICompositeType SPTy = SP.getType();
388 DIArray Args = SPTy.getTypeArray();
389 unsigned SPTag = SPTy.getTag();
390 if (SPTag == dwarf::DW_TAG_subroutine_type)
391 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
392 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
393 DIType ATy = DIType(Args.getElement(i));
394 SPCU->addType(Arg, ATy);
395 if (ATy.isArtificial())
396 SPCU->addFlag(Arg, dwarf::DW_AT_artificial);
397 if (ATy.isObjectPointer())
398 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer,
399 dwarf::DW_FORM_ref4, Arg);
400 SPDie->addChild(Arg);
402 DIE *SPDeclDie = SPDie;
403 SPDie = new DIE(dwarf::DW_TAG_subprogram);
404 SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification,
405 dwarf::DW_FORM_ref4, SPDeclDie);
411 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_low_pc,
412 Asm->GetTempSymbol("func_begin",
413 Asm->getFunctionNumber()));
414 SPCU->addLabelAddress(SPDie, dwarf::DW_AT_high_pc,
415 Asm->GetTempSymbol("func_end",
416 Asm->getFunctionNumber()));
417 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
418 MachineLocation Location(RI->getFrameRegister(*Asm->MF));
419 SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
421 // Add name to the name table, we do this here because we're guaranteed
422 // to have concrete versions of our DW_TAG_subprogram nodes.
423 addSubprogramNames(SPCU, SP, SPDie);
428 // Construct new DW_TAG_lexical_block for this scope and attach
429 // DW_AT_low_pc/DW_AT_high_pc labels.
430 DIE *DwarfDebug::constructLexicalScopeDIE(CompileUnit *TheCU,
431 LexicalScope *Scope) {
432 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
433 if (Scope->isAbstractScope())
436 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
440 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
441 if (Ranges.size() > 1) {
442 // .debug_range section has not been laid out yet. Emit offset in
443 // .debug_range as a uint, size 4, for now. emitDIE will handle
444 // DW_AT_ranges appropriately.
445 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
446 DebugRangeSymbols.size()
447 * Asm->getDataLayout().getPointerSize());
448 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
449 RE = Ranges.end(); RI != RE; ++RI) {
450 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
451 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
453 DebugRangeSymbols.push_back(NULL);
454 DebugRangeSymbols.push_back(NULL);
458 MCSymbol *Start = getLabelBeforeInsn(RI->first);
459 MCSymbol *End = getLabelAfterInsn(RI->second);
461 if (End == 0) return 0;
463 assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
464 assert(End->isDefined() && "Invalid end label for an inlined scope!");
466 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, Start);
467 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, End);
472 // This scope represents inlined body of a function. Construct DIE to
473 // represent this concrete inlined copy of the function.
474 DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
475 LexicalScope *Scope) {
476 const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
477 assert(Ranges.empty() == false &&
478 "LexicalScope does not have instruction markers!");
480 if (!Scope->getScopeNode())
482 DIScope DS(Scope->getScopeNode());
483 DISubprogram InlinedSP = getDISubprogram(DS);
484 DIE *OriginDIE = TheCU->getDIE(InlinedSP);
486 DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram.");
490 SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
491 MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
492 MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
494 if (StartLabel == 0 || EndLabel == 0) {
495 llvm_unreachable("Unexpected Start and End labels for an inlined scope!");
497 assert(StartLabel->isDefined() &&
498 "Invalid starting label for an inlined scope!");
499 assert(EndLabel->isDefined() &&
500 "Invalid end label for an inlined scope!");
502 DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
503 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
504 dwarf::DW_FORM_ref4, OriginDIE);
506 if (Ranges.size() > 1) {
507 // .debug_range section has not been laid out yet. Emit offset in
508 // .debug_range as a uint, size 4, for now. emitDIE will handle
509 // DW_AT_ranges appropriately.
510 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
511 DebugRangeSymbols.size()
512 * Asm->getDataLayout().getPointerSize());
513 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
514 RE = Ranges.end(); RI != RE; ++RI) {
515 DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
516 DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
518 DebugRangeSymbols.push_back(NULL);
519 DebugRangeSymbols.push_back(NULL);
521 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, StartLabel);
522 TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, EndLabel);
525 InlinedSubprogramDIEs.insert(OriginDIE);
527 // Track the start label for this inlined function.
528 //.debug_inlined section specification does not clearly state how
529 // to emit inlined scope that is split into multiple instruction ranges.
530 // For now, use first instruction range and emit low_pc/high_pc pair and
531 // corresponding .debug_inlined section entry for this pair.
532 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
533 I = InlineInfo.find(InlinedSP);
535 if (I == InlineInfo.end()) {
536 InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel, ScopeDIE));
537 InlinedSPNodes.push_back(InlinedSP);
539 I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
541 DILocation DL(Scope->getInlinedAt());
542 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0,
543 getOrCreateSourceID(DL.getFilename(), DL.getDirectory(),
544 TheCU->getUniqueID()));
545 TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
547 // Add name to the name table, we do this here because we're guaranteed
548 // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
549 addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
554 // Construct a DIE for this scope.
555 DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
556 if (!Scope || !Scope->getScopeNode())
559 DIScope DS(Scope->getScopeNode());
560 // Early return to avoid creating dangling variable|scope DIEs.
561 if (!Scope->getInlinedAt() && DS.isSubprogram() && Scope->isAbstractScope() &&
565 SmallVector<DIE *, 8> Children;
566 DIE *ObjectPointer = NULL;
568 // Collect arguments for current function.
569 if (LScopes.isCurrentFunctionScope(Scope))
570 for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
571 if (DbgVariable *ArgDV = CurrentFnArguments[i])
573 TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope())) {
574 Children.push_back(Arg);
575 if (ArgDV->isObjectPointer()) ObjectPointer = Arg;
578 // Collect lexical scope children first.
579 const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
580 for (unsigned i = 0, N = Variables.size(); i < N; ++i)
582 TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope())) {
583 Children.push_back(Variable);
584 if (Variables[i]->isObjectPointer()) ObjectPointer = Variable;
586 const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
587 for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
588 if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
589 Children.push_back(Nested);
590 DIE *ScopeDIE = NULL;
591 if (Scope->getInlinedAt())
592 ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
593 else if (DS.isSubprogram()) {
594 ProcessedSPNodes.insert(DS);
595 if (Scope->isAbstractScope()) {
596 ScopeDIE = TheCU->getDIE(DS);
597 // Note down abstract DIE.
599 AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
602 ScopeDIE = updateSubprogramScopeDIE(TheCU, DS);
605 // There is no need to emit empty lexical block DIE.
606 std::pair<ImportedEntityMap::const_iterator,
607 ImportedEntityMap::const_iterator> Range = std::equal_range(
608 ScopesWithImportedEntities.begin(), ScopesWithImportedEntities.end(),
609 std::pair<const MDNode *, const MDNode *>(DS, 0), CompareFirst());
610 if (Children.empty() && Range.first == Range.second)
612 ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
613 for (ImportedEntityMap::const_iterator i = Range.first; i != Range.second; ++i)
614 constructImportedModuleDIE(TheCU, i->second, ScopeDIE);
617 if (!ScopeDIE) return NULL;
620 for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
621 E = Children.end(); I != E; ++I)
622 ScopeDIE->addChild(*I);
624 if (DS.isSubprogram() && ObjectPointer != NULL)
625 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer,
626 dwarf::DW_FORM_ref4, ObjectPointer);
628 if (DS.isSubprogram())
629 TheCU->addPubTypes(DISubprogram(DS));
634 // Look up the source id with the given directory and source file names.
635 // If none currently exists, create a new id and insert it in the
636 // SourceIds map. This can update DirectoryNames and SourceFileNames maps
638 unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName,
639 StringRef DirName, unsigned CUID) {
640 // If we use .loc in assembly, we can't separate .file entries according to
641 // compile units. Thus all files will belong to the default compile unit.
642 if (Asm->TM.hasMCUseLoc() &&
643 Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer)
646 // If FE did not provide a file name, then assume stdin.
647 if (FileName.empty())
648 return getOrCreateSourceID("<stdin>", StringRef(), CUID);
650 // TODO: this might not belong here. See if we can factor this better.
651 if (DirName == CompilationDir)
654 // FileIDCUMap stores the current ID for the given compile unit.
655 unsigned SrcId = FileIDCUMap[CUID] + 1;
657 // We look up the CUID/file/dir by concatenating them with a zero byte.
658 SmallString<128> NamePair;
659 NamePair += utostr(CUID);
662 NamePair += '\0'; // Zero bytes are not allowed in paths.
663 NamePair += FileName;
665 StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId);
666 if (Ent.getValue() != SrcId)
667 return Ent.getValue();
669 FileIDCUMap[CUID] = SrcId;
670 // Print out a .file directive to specify files for .loc directives.
671 Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName, CUID);
676 // Create new CompileUnit for the given metadata node with tag
677 // DW_TAG_compile_unit.
678 CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) {
679 DICompileUnit DIUnit(N);
680 StringRef FN = DIUnit.getFilename();
681 CompilationDir = DIUnit.getDirectory();
683 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
684 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
685 DIUnit.getLanguage(), Die, Asm,
688 FileIDCUMap[NewCU->getUniqueID()] = 0;
689 // Call this to emit a .file directive if it wasn't emitted for the source
690 // file this CU comes from yet.
691 getOrCreateSourceID(FN, CompilationDir, NewCU->getUniqueID());
693 NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
694 NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
695 DIUnit.getLanguage());
696 NewCU->addString(Die, dwarf::DW_AT_name, FN);
698 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
699 // into an entity. We're using 0 (or a NULL label) for this. For
700 // split dwarf it's in the skeleton CU so omit it here.
701 if (!useSplitDwarf())
702 NewCU->addLabelAddress(Die, dwarf::DW_AT_low_pc, NULL);
704 // Define start line table label for each Compile Unit.
705 MCSymbol *LineTableStartSym = Asm->GetTempSymbol("line_table_start",
706 NewCU->getUniqueID());
707 Asm->OutStreamer.getContext().setMCLineTableSymbol(LineTableStartSym,
708 NewCU->getUniqueID());
710 // DW_AT_stmt_list is a offset of line number information for this
711 // compile unit in debug_line section. For split dwarf this is
712 // left in the skeleton CU and so not included.
713 // The line table entries are not always emitted in assembly, so it
714 // is not okay to use line_table_start here.
715 if (!useSplitDwarf()) {
716 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
717 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
718 NewCU->getUniqueID() == 0 ?
719 Asm->GetTempSymbol("section_line") : LineTableStartSym);
720 else if (NewCU->getUniqueID() == 0)
721 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
723 NewCU->addDelta(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
724 LineTableStartSym, DwarfLineSectionSym);
727 // If we're using split dwarf the compilation dir is going to be in the
728 // skeleton CU and so we don't need to duplicate it here.
729 if (!useSplitDwarf() && !CompilationDir.empty())
730 NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
731 if (DIUnit.isOptimized())
732 NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized);
734 StringRef Flags = DIUnit.getFlags();
736 NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
738 if (unsigned RVer = DIUnit.getRunTimeVersion())
739 NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
740 dwarf::DW_FORM_data1, RVer);
745 InfoHolder.addUnit(NewCU);
747 CUMap.insert(std::make_pair(N, NewCU));
751 // Construct subprogram DIE.
752 void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
754 CompileUnit *&CURef = SPMap[N];
760 if (!SP.isDefinition())
761 // This is a method declaration which will be handled while constructing
765 DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
768 TheCU->insertDIE(N, SubprogramDie);
770 // Add to context owner.
771 TheCU->addToContextOwner(SubprogramDie, SP.getContext());
773 // Expose as global, if requested.
774 if (GenerateDwarfPubNamesSection)
775 TheCU->addGlobalName(SP.getName(), SubprogramDie);
778 void DwarfDebug::constructImportedModuleDIE(CompileUnit *TheCU,
780 DIImportedModule Module(N);
781 if (!Module.Verify())
783 if (DIE *D = TheCU->getOrCreateContextDIE(Module.getContext()))
784 constructImportedModuleDIE(TheCU, Module, D);
787 void DwarfDebug::constructImportedModuleDIE(CompileUnit *TheCU, const MDNode *N,
789 DIImportedModule Module(N);
790 if (!Module.Verify())
792 return constructImportedModuleDIE(TheCU, Module, Context);
795 void DwarfDebug::constructImportedModuleDIE(CompileUnit *TheCU,
796 const DIImportedModule &Module,
798 assert(Module.Verify() &&
799 "Use one of the MDNode * overloads to handle invalid metadata");
800 assert(Context && "Should always have a context for an imported_module");
801 DIE *IMDie = new DIE(dwarf::DW_TAG_imported_module);
802 TheCU->insertDIE(Module, IMDie);
803 DIE *NSDie = TheCU->getOrCreateNameSpace(Module.getNameSpace());
804 unsigned FileID = getOrCreateSourceID(Module.getContext().getFilename(),
805 Module.getContext().getDirectory(),
806 TheCU->getUniqueID());
807 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_file, 0, FileID);
808 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_line, 0, Module.getLineNumber());
809 TheCU->addDIEEntry(IMDie, dwarf::DW_AT_import, dwarf::DW_FORM_ref4, NSDie);
810 Context->addChild(IMDie);
813 // Emit all Dwarf sections that should come prior to the content. Create
814 // global DIEs and emit initial debug info sections. This is invoked by
815 // the target AsmPrinter.
816 void DwarfDebug::beginModule() {
817 if (DisableDebugInfoPrinting)
820 const Module *M = MMI->getModule();
822 // If module has named metadata anchors then use them, otherwise scan the
823 // module using debug info finder to collect debug info.
824 NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
828 // Emit initial sections so we can reference labels later.
831 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
832 DICompileUnit CUNode(CU_Nodes->getOperand(i));
833 CompileUnit *CU = constructCompileUnit(CUNode);
834 DIArray ImportedModules = CUNode.getImportedModules();
835 for (unsigned i = 0, e = ImportedModules.getNumElements(); i != e; ++i)
836 ScopesWithImportedEntities.push_back(std::make_pair(
837 DIImportedModule(ImportedModules.getElement(i)).getContext(),
838 ImportedModules.getElement(i)));
839 std::sort(ScopesWithImportedEntities.begin(),
840 ScopesWithImportedEntities.end(), CompareFirst());
841 DIArray GVs = CUNode.getGlobalVariables();
842 for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
843 CU->createGlobalVariableDIE(GVs.getElement(i));
844 DIArray SPs = CUNode.getSubprograms();
845 for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
846 constructSubprogramDIE(CU, SPs.getElement(i));
847 DIArray EnumTypes = CUNode.getEnumTypes();
848 for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
849 CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
850 DIArray RetainedTypes = CUNode.getRetainedTypes();
851 for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
852 CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
853 // Emit imported_modules last so that the relevant context is already
855 for (unsigned i = 0, e = ImportedModules.getNumElements(); i != e; ++i)
856 constructImportedModuleDIE(CU, ImportedModules.getElement(i));
857 // If we're splitting the dwarf out now that we've got the entire
858 // CU then construct a skeleton CU based upon it.
859 if (useSplitDwarf()) {
860 // This should be a unique identifier when we want to build .dwp files.
861 CU->addUInt(CU->getCUDie(), dwarf::DW_AT_GNU_dwo_id,
862 dwarf::DW_FORM_data8, 0);
863 // Now construct the skeleton CU associated.
864 constructSkeletonCU(CUNode);
868 // Tell MMI that we have debug info.
869 MMI->setDebugInfoAvailability(true);
871 // Prime section data.
872 SectionMap.insert(Asm->getObjFileLowering().getTextSection());
875 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
876 void DwarfDebug::computeInlinedDIEs() {
877 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
878 for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
879 AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
881 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
883 for (DenseMap<const MDNode *, DIE *>::iterator AI = AbstractSPDies.begin(),
884 AE = AbstractSPDies.end(); AI != AE; ++AI) {
885 DIE *ISP = AI->second;
886 if (InlinedSubprogramDIEs.count(ISP))
888 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
892 // Collect info for variables that were optimized out.
893 void DwarfDebug::collectDeadVariables() {
894 const Module *M = MMI->getModule();
895 DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
897 if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
898 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
899 DICompileUnit TheCU(CU_Nodes->getOperand(i));
900 DIArray Subprograms = TheCU.getSubprograms();
901 for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
902 DISubprogram SP(Subprograms.getElement(i));
903 if (ProcessedSPNodes.count(SP) != 0) continue;
904 if (!SP.Verify()) continue;
905 if (!SP.isDefinition()) continue;
906 DIArray Variables = SP.getVariables();
907 if (Variables.getNumElements() == 0) continue;
909 LexicalScope *Scope =
910 new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
911 DeadFnScopeMap[SP] = Scope;
913 // Construct subprogram DIE and add variables DIEs.
914 CompileUnit *SPCU = CUMap.lookup(TheCU);
915 assert(SPCU && "Unable to find Compile Unit!");
916 constructSubprogramDIE(SPCU, SP);
917 DIE *ScopeDIE = SPCU->getDIE(SP);
918 for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
919 DIVariable DV(Variables.getElement(vi));
920 if (!DV.Verify()) continue;
921 DbgVariable *NewVar = new DbgVariable(DV, NULL);
922 if (DIE *VariableDIE =
923 SPCU->constructVariableDIE(NewVar, Scope->isAbstractScope()))
924 ScopeDIE->addChild(VariableDIE);
929 DeleteContainerSeconds(DeadFnScopeMap);
932 void DwarfDebug::finalizeModuleInfo() {
933 // Collect info for variables that were optimized out.
934 collectDeadVariables();
936 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
937 computeInlinedDIEs();
939 // Emit DW_AT_containing_type attribute to connect types with their
940 // vtable holding type.
941 for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
942 CUE = CUMap.end(); CUI != CUE; ++CUI) {
943 CompileUnit *TheCU = CUI->second;
944 TheCU->constructContainingTypeDIEs();
947 // Compute DIE offsets and sizes.
948 InfoHolder.computeSizeAndOffsets();
950 SkeletonHolder.computeSizeAndOffsets();
953 void DwarfDebug::endSections() {
954 // Standard sections final addresses.
955 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
956 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
957 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
958 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
960 // End text sections.
961 for (unsigned I = 0, E = SectionMap.size(); I != E; ++I) {
962 Asm->OutStreamer.SwitchSection(SectionMap[I]);
963 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", I+1));
967 // Emit all Dwarf sections that should come after the content.
968 void DwarfDebug::endModule() {
970 if (!FirstCU) return;
972 // End any existing sections.
973 // TODO: Does this need to happen?
976 // Finalize the debug info for the module.
977 finalizeModuleInfo();
979 if (!useSplitDwarf()) {
980 // Emit all the DIEs into a debug info section.
983 // Corresponding abbreviations into a abbrev section.
986 // Emit info into a debug loc section.
989 // Emit info into a debug aranges section.
992 // Emit info into a debug ranges section.
995 // Emit info into a debug macinfo section.
999 // TODO: When we don't need the option anymore we
1000 // can remove all of the code that this section
1002 if (useDarwinGDBCompat())
1003 emitDebugInlineInfo();
1005 // TODO: Fill this in for separated debug sections and separate
1006 // out information into new sections.
1008 // Emit the debug info section and compile units.
1012 // Corresponding abbreviations into a abbrev section.
1013 emitAbbreviations();
1014 emitDebugAbbrevDWO();
1016 // Emit info into a debug loc section.
1019 // Emit info into a debug aranges section.
1022 // Emit info into a debug ranges section.
1025 // Emit info into a debug macinfo section.
1028 // Emit DWO addresses.
1029 InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1031 // Emit inline info.
1032 // TODO: When we don't need the option anymore we
1033 // can remove all of the code that this section
1035 if (useDarwinGDBCompat())
1036 emitDebugInlineInfo();
1039 // Emit info into the dwarf accelerator table sections.
1040 if (useDwarfAccelTables()) {
1043 emitAccelNamespaces();
1047 // Emit info into a debug pubnames section, if requested.
1048 if (GenerateDwarfPubNamesSection)
1049 emitDebugPubnames();
1051 // Emit info into a debug pubtypes section.
1052 // TODO: When we don't need the option anymore we can
1053 // remove all of the code that adds to the table.
1054 if (useDarwinGDBCompat())
1055 emitDebugPubTypes();
1057 // Finally emit string information into a string table.
1059 if (useSplitDwarf())
1064 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1065 E = CUMap.end(); I != E; ++I)
1068 for (SmallVector<CompileUnit *, 1>::iterator I = SkeletonCUs.begin(),
1069 E = SkeletonCUs.end(); I != E; ++I)
1072 // Reset these for the next Module if we have one.
1076 // Find abstract variable, if any, associated with Var.
1077 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1078 DebugLoc ScopeLoc) {
1079 LLVMContext &Ctx = DV->getContext();
1080 // More then one inlined variable corresponds to one abstract variable.
1081 DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1082 DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1084 return AbsDbgVariable;
1086 LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1090 AbsDbgVariable = new DbgVariable(Var, NULL);
1091 addScopeVariable(Scope, AbsDbgVariable);
1092 AbstractVariables[Var] = AbsDbgVariable;
1093 return AbsDbgVariable;
1096 // If Var is a current function argument then add it to CurrentFnArguments list.
1097 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1098 DbgVariable *Var, LexicalScope *Scope) {
1099 if (!LScopes.isCurrentFunctionScope(Scope))
1101 DIVariable DV = Var->getVariable();
1102 if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1104 unsigned ArgNo = DV.getArgNumber();
1108 size_t Size = CurrentFnArguments.size();
1110 CurrentFnArguments.resize(MF->getFunction()->arg_size());
1111 // llvm::Function argument size is not good indicator of how many
1112 // arguments does the function have at source level.
1114 CurrentFnArguments.resize(ArgNo * 2);
1115 CurrentFnArguments[ArgNo - 1] = Var;
1119 // Collect variable information from side table maintained by MMI.
1121 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
1122 SmallPtrSet<const MDNode *, 16> &Processed) {
1123 MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1124 for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1125 VE = VMap.end(); VI != VE; ++VI) {
1126 const MDNode *Var = VI->first;
1128 Processed.insert(Var);
1130 const std::pair<unsigned, DebugLoc> &VP = VI->second;
1132 LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
1134 // If variable scope is not found then skip this variable.
1138 DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1139 DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
1140 RegVar->setFrameIndex(VP.first);
1141 if (!addCurrentFnArgument(MF, RegVar, Scope))
1142 addScopeVariable(Scope, RegVar);
1144 AbsDbgVariable->setFrameIndex(VP.first);
1148 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
1150 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1151 assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1152 return MI->getNumOperands() == 3 &&
1153 MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1154 MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1157 // Get .debug_loc entry for the instruction range starting at MI.
1158 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1159 const MCSymbol *FLabel,
1160 const MCSymbol *SLabel,
1161 const MachineInstr *MI) {
1162 const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1164 if (MI->getNumOperands() != 3) {
1165 MachineLocation MLoc = Asm->getDebugValueLocation(MI);
1166 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1168 if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
1169 MachineLocation MLoc;
1170 // TODO: Currently an offset of 0 in a DBG_VALUE means
1171 // we need to generate a direct register value.
1172 // There is no way to specify an indirect value with offset 0.
1173 if (MI->getOperand(1).getImm() == 0)
1174 MLoc.set(MI->getOperand(0).getReg());
1176 MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1177 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1179 if (MI->getOperand(0).isImm())
1180 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1181 if (MI->getOperand(0).isFPImm())
1182 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1183 if (MI->getOperand(0).isCImm())
1184 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1186 llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1189 // Find variables for each lexical scope.
1191 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1192 SmallPtrSet<const MDNode *, 16> &Processed) {
1194 // collection info from MMI table.
1195 collectVariableInfoFromMMITable(MF, Processed);
1197 for (SmallVectorImpl<const MDNode*>::const_iterator
1198 UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1200 const MDNode *Var = *UVI;
1201 if (Processed.count(Var))
1204 // History contains relevant DBG_VALUE instructions for Var and instructions
1206 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1207 if (History.empty())
1209 const MachineInstr *MInsn = History.front();
1212 LexicalScope *Scope = NULL;
1213 if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1214 DISubprogram(DV.getContext()).describes(MF->getFunction()))
1215 Scope = LScopes.getCurrentFunctionScope();
1216 else if (MDNode *IA = DV.getInlinedAt())
1217 Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1219 Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1220 // If variable scope is not found then skip this variable.
1224 Processed.insert(DV);
1225 assert(MInsn->isDebugValue() && "History must begin with debug value");
1226 DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1227 DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1228 if (!addCurrentFnArgument(MF, RegVar, Scope))
1229 addScopeVariable(Scope, RegVar);
1231 AbsVar->setMInsn(MInsn);
1233 // Simplify ranges that are fully coalesced.
1234 if (History.size() <= 1 || (History.size() == 2 &&
1235 MInsn->isIdenticalTo(History.back()))) {
1236 RegVar->setMInsn(MInsn);
1240 // Handle multiple DBG_VALUE instructions describing one variable.
1241 RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1243 for (SmallVectorImpl<const MachineInstr*>::const_iterator
1244 HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1245 const MachineInstr *Begin = *HI;
1246 assert(Begin->isDebugValue() && "Invalid History entry");
1248 // Check if DBG_VALUE is truncating a range.
1249 if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1250 && !Begin->getOperand(0).getReg())
1253 // Compute the range for a register location.
1254 const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1255 const MCSymbol *SLabel = 0;
1258 // If Begin is the last instruction in History then its value is valid
1259 // until the end of the function.
1260 SLabel = FunctionEndSym;
1262 const MachineInstr *End = HI[1];
1263 DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1264 << "\t" << *Begin << "\t" << *End << "\n");
1265 if (End->isDebugValue())
1266 SLabel = getLabelBeforeInsn(End);
1268 // End is a normal instruction clobbering the range.
1269 SLabel = getLabelAfterInsn(End);
1270 assert(SLabel && "Forgot label after clobber instruction");
1275 // The value is valid until the next DBG_VALUE or clobber.
1276 DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1279 DotDebugLocEntries.push_back(DotDebugLocEntry());
1282 // Collect info for variables that were optimized out.
1283 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1284 DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1285 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1286 DIVariable DV(Variables.getElement(i));
1287 if (!DV || !DV.Verify() || !Processed.insert(DV))
1289 if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1290 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1294 // Return Label preceding the instruction.
1295 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1296 MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1297 assert(Label && "Didn't insert label before instruction");
1301 // Return Label immediately following the instruction.
1302 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1303 return LabelsAfterInsn.lookup(MI);
1306 // Process beginning of an instruction.
1307 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1308 // Check if source location changes, but ignore DBG_VALUE locations.
1309 if (!MI->isDebugValue()) {
1310 DebugLoc DL = MI->getDebugLoc();
1311 if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1314 if (DL == PrologEndLoc) {
1315 Flags |= DWARF2_FLAG_PROLOGUE_END;
1316 PrologEndLoc = DebugLoc();
1318 if (PrologEndLoc.isUnknown())
1319 Flags |= DWARF2_FLAG_IS_STMT;
1321 if (!DL.isUnknown()) {
1322 const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1323 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1325 recordSourceLine(0, 0, 0, 0);
1329 // Insert labels where requested.
1330 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1331 LabelsBeforeInsn.find(MI);
1334 if (I == LabelsBeforeInsn.end())
1337 // Label already assigned.
1342 PrevLabel = MMI->getContext().CreateTempSymbol();
1343 Asm->OutStreamer.EmitLabel(PrevLabel);
1345 I->second = PrevLabel;
1348 // Process end of an instruction.
1349 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1350 // Don't create a new label after DBG_VALUE instructions.
1351 // They don't generate code.
1352 if (!MI->isDebugValue())
1355 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1356 LabelsAfterInsn.find(MI);
1359 if (I == LabelsAfterInsn.end())
1362 // Label already assigned.
1366 // We need a label after this instruction.
1368 PrevLabel = MMI->getContext().CreateTempSymbol();
1369 Asm->OutStreamer.EmitLabel(PrevLabel);
1371 I->second = PrevLabel;
1374 // Each LexicalScope has first instruction and last instruction to mark
1375 // beginning and end of a scope respectively. Create an inverse map that list
1376 // scopes starts (and ends) with an instruction. One instruction may start (or
1377 // end) multiple scopes. Ignore scopes that are not reachable.
1378 void DwarfDebug::identifyScopeMarkers() {
1379 SmallVector<LexicalScope *, 4> WorkList;
1380 WorkList.push_back(LScopes.getCurrentFunctionScope());
1381 while (!WorkList.empty()) {
1382 LexicalScope *S = WorkList.pop_back_val();
1384 const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1385 if (!Children.empty())
1386 for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1387 SE = Children.end(); SI != SE; ++SI)
1388 WorkList.push_back(*SI);
1390 if (S->isAbstractScope())
1393 const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1396 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1397 RE = Ranges.end(); RI != RE; ++RI) {
1398 assert(RI->first && "InsnRange does not have first instruction!");
1399 assert(RI->second && "InsnRange does not have second instruction!");
1400 requestLabelBeforeInsn(RI->first);
1401 requestLabelAfterInsn(RI->second);
1406 // Get MDNode for DebugLoc's scope.
1407 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1408 if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1409 return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1410 return DL.getScope(Ctx);
1413 // Walk up the scope chain of given debug loc and find line number info
1414 // for the function.
1415 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1416 const MDNode *Scope = getScopeNode(DL, Ctx);
1417 DISubprogram SP = getDISubprogram(Scope);
1419 // Check for number of operands since the compatibility is
1421 if (SP->getNumOperands() > 19)
1422 return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1424 return DebugLoc::get(SP.getLineNumber(), 0, SP);
1430 // Gather pre-function debug information. Assumes being called immediately
1431 // after the function entry point has been emitted.
1432 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1433 if (!MMI->hasDebugInfo()) return;
1434 LScopes.initialize(*MF);
1435 if (LScopes.empty()) return;
1436 identifyScopeMarkers();
1438 // Set DwarfCompileUnitID in MCContext to the Compile Unit this function
1440 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1441 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1442 assert(TheCU && "Unable to find compile unit!");
1443 Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1445 FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1446 Asm->getFunctionNumber());
1447 // Assumes in correct section after the entry point.
1448 Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1450 assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1452 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1453 // LiveUserVar - Map physreg numbers to the MDNode they contain.
1454 std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1456 for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1458 bool AtBlockEntry = true;
1459 for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1461 const MachineInstr *MI = II;
1463 if (MI->isDebugValue()) {
1464 assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1466 // Keep track of user variables.
1468 MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1470 // Variable is in a register, we need to check for clobbers.
1471 if (isDbgValueInDefinedReg(MI))
1472 LiveUserVar[MI->getOperand(0).getReg()] = Var;
1474 // Check the history of this variable.
1475 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1476 if (History.empty()) {
1477 UserVariables.push_back(Var);
1478 // The first mention of a function argument gets the FunctionBeginSym
1479 // label, so arguments are visible when breaking at function entry.
1481 if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1482 DISubprogram(getDISubprogram(DV.getContext()))
1483 .describes(MF->getFunction()))
1484 LabelsBeforeInsn[MI] = FunctionBeginSym;
1486 // We have seen this variable before. Try to coalesce DBG_VALUEs.
1487 const MachineInstr *Prev = History.back();
1488 if (Prev->isDebugValue()) {
1489 // Coalesce identical entries at the end of History.
1490 if (History.size() >= 2 &&
1491 Prev->isIdenticalTo(History[History.size() - 2])) {
1492 DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1494 << "\t" << *History[History.size() - 2] << "\n");
1498 // Terminate old register assignments that don't reach MI;
1499 MachineFunction::const_iterator PrevMBB = Prev->getParent();
1500 if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1501 isDbgValueInDefinedReg(Prev)) {
1502 // Previous register assignment needs to terminate at the end of
1504 MachineBasicBlock::const_iterator LastMI =
1505 PrevMBB->getLastNonDebugInstr();
1506 if (LastMI == PrevMBB->end()) {
1507 // Drop DBG_VALUE for empty range.
1508 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1509 << "\t" << *Prev << "\n");
1513 // Terminate after LastMI.
1514 History.push_back(LastMI);
1519 History.push_back(MI);
1521 // Not a DBG_VALUE instruction.
1523 AtBlockEntry = false;
1525 // First known non-DBG_VALUE and non-frame setup location marks
1526 // the beginning of the function body.
1527 if (!MI->getFlag(MachineInstr::FrameSetup) &&
1528 (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1529 PrologEndLoc = MI->getDebugLoc();
1531 // Check if the instruction clobbers any registers with debug vars.
1532 for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1533 MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1534 if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1536 for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1537 AI.isValid(); ++AI) {
1539 const MDNode *Var = LiveUserVar[Reg];
1542 // Reg is now clobbered.
1543 LiveUserVar[Reg] = 0;
1545 // Was MD last defined by a DBG_VALUE referring to Reg?
1546 DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1547 if (HistI == DbgValues.end())
1549 SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1550 if (History.empty())
1552 const MachineInstr *Prev = History.back();
1553 // Sanity-check: Register assignments are terminated at the end of
1555 if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1557 // Is the variable still in Reg?
1558 if (!isDbgValueInDefinedReg(Prev) ||
1559 Prev->getOperand(0).getReg() != Reg)
1561 // Var is clobbered. Make sure the next instruction gets a label.
1562 History.push_back(MI);
1569 for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1571 SmallVectorImpl<const MachineInstr*> &History = I->second;
1572 if (History.empty())
1575 // Make sure the final register assignments are terminated.
1576 const MachineInstr *Prev = History.back();
1577 if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1578 const MachineBasicBlock *PrevMBB = Prev->getParent();
1579 MachineBasicBlock::const_iterator LastMI =
1580 PrevMBB->getLastNonDebugInstr();
1581 if (LastMI == PrevMBB->end())
1582 // Drop DBG_VALUE for empty range.
1585 // Terminate after LastMI.
1586 History.push_back(LastMI);
1589 // Request labels for the full history.
1590 for (unsigned i = 0, e = History.size(); i != e; ++i) {
1591 const MachineInstr *MI = History[i];
1592 if (MI->isDebugValue())
1593 requestLabelBeforeInsn(MI);
1595 requestLabelAfterInsn(MI);
1599 PrevInstLoc = DebugLoc();
1600 PrevLabel = FunctionBeginSym;
1602 // Record beginning of function.
1603 if (!PrologEndLoc.isUnknown()) {
1604 DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1605 MF->getFunction()->getContext());
1606 recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1607 FnStartDL.getScope(MF->getFunction()->getContext()),
1608 // We'd like to list the prologue as "not statements" but GDB behaves
1609 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1610 DWARF2_FLAG_IS_STMT);
1614 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1615 // SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1616 ScopeVariables[LS].push_back(Var);
1617 // Vars.push_back(Var);
1620 // Gather and emit post-function debug information.
1621 void DwarfDebug::endFunction(const MachineFunction *MF) {
1622 if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1624 // Define end label for subprogram.
1625 FunctionEndSym = Asm->GetTempSymbol("func_end",
1626 Asm->getFunctionNumber());
1627 // Assumes in correct section after the entry point.
1628 Asm->OutStreamer.EmitLabel(FunctionEndSym);
1629 // Set DwarfCompileUnitID in MCContext to default value.
1630 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1632 SmallPtrSet<const MDNode *, 16> ProcessedVars;
1633 collectVariableInfo(MF, ProcessedVars);
1635 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1636 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1637 assert(TheCU && "Unable to find compile unit!");
1639 // Construct abstract scopes.
1640 ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1641 for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1642 LexicalScope *AScope = AList[i];
1643 DISubprogram SP(AScope->getScopeNode());
1645 // Collect info for variables that were optimized out.
1646 DIArray Variables = SP.getVariables();
1647 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1648 DIVariable DV(Variables.getElement(i));
1649 if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1651 // Check that DbgVariable for DV wasn't created earlier, when
1652 // findAbstractVariable() was called for inlined instance of DV.
1653 LLVMContext &Ctx = DV->getContext();
1654 DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1655 if (AbstractVariables.lookup(CleanDV))
1657 if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1658 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1661 if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1662 constructScopeDIE(TheCU, AScope);
1665 DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1667 if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1668 TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1670 DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1671 MMI->getFrameMoves()));
1674 for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1675 I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1676 DeleteContainerPointers(I->second);
1677 ScopeVariables.clear();
1678 DeleteContainerPointers(CurrentFnArguments);
1679 UserVariables.clear();
1681 AbstractVariables.clear();
1682 LabelsBeforeInsn.clear();
1683 LabelsAfterInsn.clear();
1687 // Register a source line with debug info. Returns the unique label that was
1688 // emitted and which provides correspondence to the source line list.
1689 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1695 DIDescriptor Scope(S);
1697 if (Scope.isCompileUnit()) {
1698 DICompileUnit CU(S);
1699 Fn = CU.getFilename();
1700 Dir = CU.getDirectory();
1701 } else if (Scope.isFile()) {
1703 Fn = F.getFilename();
1704 Dir = F.getDirectory();
1705 } else if (Scope.isSubprogram()) {
1707 Fn = SP.getFilename();
1708 Dir = SP.getDirectory();
1709 } else if (Scope.isLexicalBlockFile()) {
1710 DILexicalBlockFile DBF(S);
1711 Fn = DBF.getFilename();
1712 Dir = DBF.getDirectory();
1713 } else if (Scope.isLexicalBlock()) {
1714 DILexicalBlock DB(S);
1715 Fn = DB.getFilename();
1716 Dir = DB.getDirectory();
1718 llvm_unreachable("Unexpected scope info");
1720 Src = getOrCreateSourceID(Fn, Dir,
1721 Asm->OutStreamer.getContext().getDwarfCompileUnitID());
1723 Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1726 //===----------------------------------------------------------------------===//
1728 //===----------------------------------------------------------------------===//
1730 // Compute the size and offset of a DIE.
1732 DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1733 // Get the children.
1734 const std::vector<DIE *> &Children = Die->getChildren();
1736 // Record the abbreviation.
1737 assignAbbrevNumber(Die->getAbbrev());
1739 // Get the abbreviation for this DIE.
1740 unsigned AbbrevNumber = Die->getAbbrevNumber();
1741 const DIEAbbrev *Abbrev = Abbreviations->at(AbbrevNumber - 1);
1744 Die->setOffset(Offset);
1746 // Start the size with the size of abbreviation code.
1747 Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1749 const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
1750 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
1752 // Size the DIE attribute values.
1753 for (unsigned i = 0, N = Values.size(); i < N; ++i)
1754 // Size attribute value.
1755 Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1757 // Size the DIE children if any.
1758 if (!Children.empty()) {
1759 assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1760 "Children flag not set");
1762 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1763 Offset = computeSizeAndOffset(Children[j], Offset);
1765 // End of children marker.
1766 Offset += sizeof(int8_t);
1769 Die->setSize(Offset - Die->getOffset());
1773 // Compute the size and offset of all the DIEs.
1774 void DwarfUnits::computeSizeAndOffsets() {
1775 // Offset from the beginning of debug info section.
1776 unsigned AccuOffset = 0;
1777 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1778 E = CUs.end(); I != E; ++I) {
1779 (*I)->setDebugInfoOffset(AccuOffset);
1781 sizeof(int32_t) + // Length of Compilation Unit Info
1782 sizeof(int16_t) + // DWARF version number
1783 sizeof(int32_t) + // Offset Into Abbrev. Section
1784 sizeof(int8_t); // Pointer Size (in bytes)
1786 unsigned EndOffset = computeSizeAndOffset((*I)->getCUDie(), Offset);
1787 AccuOffset += EndOffset;
1791 // Emit initial Dwarf sections with a label at the start of each one.
1792 void DwarfDebug::emitSectionLabels() {
1793 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1795 // Dwarf sections base addresses.
1796 DwarfInfoSectionSym =
1797 emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1798 DwarfAbbrevSectionSym =
1799 emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1800 if (useSplitDwarf())
1801 DwarfAbbrevDWOSectionSym =
1802 emitSectionSym(Asm, TLOF.getDwarfAbbrevDWOSection(),
1803 "section_abbrev_dwo");
1804 emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1806 if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1807 emitSectionSym(Asm, MacroInfo);
1809 DwarfLineSectionSym =
1810 emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1811 emitSectionSym(Asm, TLOF.getDwarfLocSection());
1812 if (GenerateDwarfPubNamesSection)
1813 emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1814 emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1815 DwarfStrSectionSym =
1816 emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
1817 if (useSplitDwarf()) {
1818 DwarfStrDWOSectionSym =
1819 emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
1820 DwarfAddrSectionSym =
1821 emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
1823 DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1826 DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
1827 "section_debug_loc");
1829 TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1830 emitSectionSym(Asm, TLOF.getDataSection());
1833 // Recursively emits a debug information entry.
1834 void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
1835 // Get the abbreviation for this DIE.
1836 unsigned AbbrevNumber = Die->getAbbrevNumber();
1837 const DIEAbbrev *Abbrev = Abbrevs->at(AbbrevNumber - 1);
1839 // Emit the code (index) for the abbreviation.
1840 if (Asm->isVerbose())
1841 Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1842 Twine::utohexstr(Die->getOffset()) + ":0x" +
1843 Twine::utohexstr(Die->getSize()) + " " +
1844 dwarf::TagString(Abbrev->getTag()));
1845 Asm->EmitULEB128(AbbrevNumber);
1847 const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
1848 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
1850 // Emit the DIE attribute values.
1851 for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1852 unsigned Attr = AbbrevData[i].getAttribute();
1853 unsigned Form = AbbrevData[i].getForm();
1854 assert(Form && "Too many attributes for DIE (check abbreviation)");
1856 if (Asm->isVerbose())
1857 Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1860 case dwarf::DW_AT_abstract_origin: {
1861 DIEEntry *E = cast<DIEEntry>(Values[i]);
1862 DIE *Origin = E->getEntry();
1863 unsigned Addr = Origin->getOffset();
1864 if (Form == dwarf::DW_FORM_ref_addr) {
1865 // For DW_FORM_ref_addr, output the offset from beginning of debug info
1866 // section. Origin->getOffset() returns the offset from start of the
1868 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1869 Addr += Holder.getCUOffset(Origin->getCompileUnit());
1871 Asm->EmitInt32(Addr);
1874 case dwarf::DW_AT_ranges: {
1875 // DW_AT_range Value encodes offset in debug_range section.
1876 DIEInteger *V = cast<DIEInteger>(Values[i]);
1878 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
1879 Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1883 Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1885 DwarfDebugRangeSectionSym,
1890 case dwarf::DW_AT_location: {
1891 if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
1892 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
1893 Asm->EmitLabelReference(L->getValue(), 4);
1895 Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1897 Values[i]->EmitValue(Asm, Form);
1901 case dwarf::DW_AT_accessibility: {
1902 if (Asm->isVerbose()) {
1903 DIEInteger *V = cast<DIEInteger>(Values[i]);
1904 Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1906 Values[i]->EmitValue(Asm, Form);
1910 // Emit an attribute using the defined form.
1911 Values[i]->EmitValue(Asm, Form);
1916 // Emit the DIE children if any.
1917 if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1918 const std::vector<DIE *> &Children = Die->getChildren();
1920 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1921 emitDIE(Children[j], Abbrevs);
1923 if (Asm->isVerbose())
1924 Asm->OutStreamer.AddComment("End Of Children Mark");
1929 // Emit the various dwarf units to the unit section USection with
1930 // the abbreviations going into ASection.
1931 void DwarfUnits::emitUnits(DwarfDebug *DD,
1932 const MCSection *USection,
1933 const MCSection *ASection,
1934 const MCSymbol *ASectionSym) {
1935 Asm->OutStreamer.SwitchSection(USection);
1936 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1937 E = CUs.end(); I != E; ++I) {
1938 CompileUnit *TheCU = *I;
1939 DIE *Die = TheCU->getCUDie();
1941 // Emit the compile units header.
1943 .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(),
1944 TheCU->getUniqueID()));
1946 // Emit size of content not including length itself
1947 unsigned ContentSize = Die->getSize() +
1948 sizeof(int16_t) + // DWARF version number
1949 sizeof(int32_t) + // Offset Into Abbrev. Section
1950 sizeof(int8_t); // Pointer Size (in bytes)
1952 Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1953 Asm->EmitInt32(ContentSize);
1954 Asm->OutStreamer.AddComment("DWARF version number");
1955 Asm->EmitInt16(dwarf::DWARF_VERSION);
1956 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1957 Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
1959 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1960 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1962 DD->emitDIE(Die, Abbreviations);
1963 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(),
1964 TheCU->getUniqueID()));
1968 /// For a given compile unit DIE, returns offset from beginning of debug info.
1969 unsigned DwarfUnits::getCUOffset(DIE *Die) {
1970 assert(Die->getTag() == dwarf::DW_TAG_compile_unit &&
1971 "Input DIE should be compile unit in getCUOffset.");
1972 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1973 E = CUs.end(); I != E; ++I) {
1974 CompileUnit *TheCU = *I;
1975 if (TheCU->getCUDie() == Die)
1976 return TheCU->getDebugInfoOffset();
1978 llvm_unreachable("The compile unit DIE should belong to CUs in DwarfUnits.");
1981 // Emit the debug info section.
1982 void DwarfDebug::emitDebugInfo() {
1983 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1985 Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(),
1986 Asm->getObjFileLowering().getDwarfAbbrevSection(),
1987 DwarfAbbrevSectionSym);
1990 // Emit the abbreviation section.
1991 void DwarfDebug::emitAbbreviations() {
1992 if (!useSplitDwarf())
1993 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
1996 emitSkeletonAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1999 void DwarfDebug::emitAbbrevs(const MCSection *Section,
2000 std::vector<DIEAbbrev *> *Abbrevs) {
2001 // Check to see if it is worth the effort.
2002 if (!Abbrevs->empty()) {
2003 // Start the debug abbrev section.
2004 Asm->OutStreamer.SwitchSection(Section);
2006 MCSymbol *Begin = Asm->GetTempSymbol(Section->getLabelBeginName());
2007 Asm->OutStreamer.EmitLabel(Begin);
2009 // For each abbrevation.
2010 for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
2011 // Get abbreviation data
2012 const DIEAbbrev *Abbrev = Abbrevs->at(i);
2014 // Emit the abbrevations code (base 1 index.)
2015 Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2017 // Emit the abbreviations data.
2021 // Mark end of abbreviations.
2022 Asm->EmitULEB128(0, "EOM(3)");
2024 MCSymbol *End = Asm->GetTempSymbol(Section->getLabelEndName());
2025 Asm->OutStreamer.EmitLabel(End);
2029 // Emit the last address of the section and the end of the line matrix.
2030 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2031 // Define last address of section.
2032 Asm->OutStreamer.AddComment("Extended Op");
2035 Asm->OutStreamer.AddComment("Op size");
2036 Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
2037 Asm->OutStreamer.AddComment("DW_LNE_set_address");
2038 Asm->EmitInt8(dwarf::DW_LNE_set_address);
2040 Asm->OutStreamer.AddComment("Section end label");
2042 Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2043 Asm->getDataLayout().getPointerSize());
2045 // Mark end of matrix.
2046 Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2052 // Emit visible names into a hashed accelerator table section.
2053 void DwarfDebug::emitAccelNames() {
2054 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2055 dwarf::DW_FORM_data4));
2056 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2057 E = CUMap.end(); I != E; ++I) {
2058 CompileUnit *TheCU = I->second;
2059 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
2060 for (StringMap<std::vector<DIE*> >::const_iterator
2061 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2062 const char *Name = GI->getKeyData();
2063 const std::vector<DIE *> &Entities = GI->second;
2064 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2065 DE = Entities.end(); DI != DE; ++DI)
2066 AT.AddName(Name, (*DI));
2070 AT.FinalizeTable(Asm, "Names");
2071 Asm->OutStreamer.SwitchSection(
2072 Asm->getObjFileLowering().getDwarfAccelNamesSection());
2073 MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2074 Asm->OutStreamer.EmitLabel(SectionBegin);
2076 // Emit the full data.
2077 AT.Emit(Asm, SectionBegin, &InfoHolder);
2080 // Emit objective C classes and categories into a hashed accelerator table
2082 void DwarfDebug::emitAccelObjC() {
2083 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2084 dwarf::DW_FORM_data4));
2085 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2086 E = CUMap.end(); I != E; ++I) {
2087 CompileUnit *TheCU = I->second;
2088 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
2089 for (StringMap<std::vector<DIE*> >::const_iterator
2090 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2091 const char *Name = GI->getKeyData();
2092 const std::vector<DIE *> &Entities = GI->second;
2093 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2094 DE = Entities.end(); DI != DE; ++DI)
2095 AT.AddName(Name, (*DI));
2099 AT.FinalizeTable(Asm, "ObjC");
2100 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2101 .getDwarfAccelObjCSection());
2102 MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2103 Asm->OutStreamer.EmitLabel(SectionBegin);
2105 // Emit the full data.
2106 AT.Emit(Asm, SectionBegin, &InfoHolder);
2109 // Emit namespace dies into a hashed accelerator table.
2110 void DwarfDebug::emitAccelNamespaces() {
2111 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2112 dwarf::DW_FORM_data4));
2113 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2114 E = CUMap.end(); I != E; ++I) {
2115 CompileUnit *TheCU = I->second;
2116 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
2117 for (StringMap<std::vector<DIE*> >::const_iterator
2118 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2119 const char *Name = GI->getKeyData();
2120 const std::vector<DIE *> &Entities = GI->second;
2121 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2122 DE = Entities.end(); DI != DE; ++DI)
2123 AT.AddName(Name, (*DI));
2127 AT.FinalizeTable(Asm, "namespac");
2128 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2129 .getDwarfAccelNamespaceSection());
2130 MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2131 Asm->OutStreamer.EmitLabel(SectionBegin);
2133 // Emit the full data.
2134 AT.Emit(Asm, SectionBegin, &InfoHolder);
2137 // Emit type dies into a hashed accelerator table.
2138 void DwarfDebug::emitAccelTypes() {
2139 std::vector<DwarfAccelTable::Atom> Atoms;
2140 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2141 dwarf::DW_FORM_data4));
2142 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
2143 dwarf::DW_FORM_data2));
2144 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
2145 dwarf::DW_FORM_data1));
2146 DwarfAccelTable AT(Atoms);
2147 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2148 E = CUMap.end(); I != E; ++I) {
2149 CompileUnit *TheCU = I->second;
2150 const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
2151 = TheCU->getAccelTypes();
2152 for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
2153 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2154 const char *Name = GI->getKeyData();
2155 const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2156 for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
2157 = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
2158 AT.AddName(Name, (*DI).first, (*DI).second);
2162 AT.FinalizeTable(Asm, "types");
2163 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2164 .getDwarfAccelTypesSection());
2165 MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2166 Asm->OutStreamer.EmitLabel(SectionBegin);
2168 // Emit the full data.
2169 AT.Emit(Asm, SectionBegin, &InfoHolder);
2172 /// emitDebugPubnames - Emit visible names into a debug pubnames section.
2174 void DwarfDebug::emitDebugPubnames() {
2175 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2177 typedef DenseMap<const MDNode*, CompileUnit*> CUMapType;
2178 for (CUMapType::iterator I = CUMap.begin(), E = CUMap.end(); I != E; ++I) {
2179 CompileUnit *TheCU = I->second;
2180 unsigned ID = TheCU->getUniqueID();
2182 if (TheCU->getGlobalNames().empty())
2185 // Start the dwarf pubnames section.
2186 Asm->OutStreamer.SwitchSection(
2187 Asm->getObjFileLowering().getDwarfPubNamesSection());
2189 Asm->OutStreamer.AddComment("Length of Public Names Info");
2190 Asm->EmitLabelDifference(Asm->GetTempSymbol("pubnames_end", ID),
2191 Asm->GetTempSymbol("pubnames_begin", ID), 4);
2193 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
2195 Asm->OutStreamer.AddComment("DWARF Version");
2196 Asm->EmitInt16(dwarf::DWARF_VERSION);
2198 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2199 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2200 DwarfInfoSectionSym);
2202 Asm->OutStreamer.AddComment("Compilation Unit Length");
2203 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(), ID),
2204 Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2207 const StringMap<DIE*> &Globals = TheCU->getGlobalNames();
2208 for (StringMap<DIE*>::const_iterator
2209 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2210 const char *Name = GI->getKeyData();
2211 const DIE *Entity = GI->second;
2213 Asm->OutStreamer.AddComment("DIE offset");
2214 Asm->EmitInt32(Entity->getOffset());
2216 if (Asm->isVerbose())
2217 Asm->OutStreamer.AddComment("External Name");
2218 Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
2221 Asm->OutStreamer.AddComment("End Mark");
2223 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end", ID));
2227 void DwarfDebug::emitDebugPubTypes() {
2228 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2229 E = CUMap.end(); I != E; ++I) {
2230 CompileUnit *TheCU = I->second;
2231 // Start the dwarf pubtypes section.
2232 Asm->OutStreamer.SwitchSection(
2233 Asm->getObjFileLowering().getDwarfPubTypesSection());
2234 Asm->OutStreamer.AddComment("Length of Public Types Info");
2235 Asm->EmitLabelDifference(
2236 Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2237 Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2239 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2240 TheCU->getUniqueID()));
2242 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2243 Asm->EmitInt16(dwarf::DWARF_VERSION);
2245 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2246 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2247 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(),
2248 TheCU->getUniqueID()),
2249 DwarfInfoSectionSym);
2251 Asm->OutStreamer.AddComment("Compilation Unit Length");
2252 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(),
2253 TheCU->getUniqueID()),
2254 Asm->GetTempSymbol(ISec->getLabelBeginName(),
2255 TheCU->getUniqueID()),
2258 const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2259 for (StringMap<DIE*>::const_iterator
2260 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2261 const char *Name = GI->getKeyData();
2262 DIE *Entity = GI->second;
2264 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2265 Asm->EmitInt32(Entity->getOffset());
2267 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2268 // Emit the name with a terminating null byte.
2269 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2272 Asm->OutStreamer.AddComment("End Mark");
2274 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2275 TheCU->getUniqueID()));
2279 // Emit strings into a string section.
2280 void DwarfUnits::emitStrings(const MCSection *StrSection,
2281 const MCSection *OffsetSection = NULL,
2282 const MCSymbol *StrSecSym = NULL) {
2284 if (StringPool.empty()) return;
2286 // Start the dwarf str section.
2287 Asm->OutStreamer.SwitchSection(StrSection);
2289 // Get all of the string pool entries and put them in an array by their ID so
2290 // we can sort them.
2291 SmallVector<std::pair<unsigned,
2292 StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2294 for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2295 I = StringPool.begin(), E = StringPool.end();
2297 Entries.push_back(std::make_pair(I->second.second, &*I));
2299 array_pod_sort(Entries.begin(), Entries.end());
2301 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2302 // Emit a label for reference from debug information entries.
2303 Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2305 // Emit the string itself with a terminating null byte.
2306 Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2307 Entries[i].second->getKeyLength()+1));
2310 // If we've got an offset section go ahead and emit that now as well.
2311 if (OffsetSection) {
2312 Asm->OutStreamer.SwitchSection(OffsetSection);
2313 unsigned offset = 0;
2314 unsigned size = 4; // FIXME: DWARF64 is 8.
2315 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2316 Asm->OutStreamer.EmitIntValue(offset, size);
2317 offset += Entries[i].second->getKeyLength() + 1;
2322 // Emit strings into a string section.
2323 void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2325 if (AddressPool.empty()) return;
2327 // Start the dwarf addr section.
2328 Asm->OutStreamer.SwitchSection(AddrSection);
2330 // Get all of the string pool entries and put them in an array by their ID so
2331 // we can sort them.
2332 SmallVector<std::pair<unsigned,
2333 std::pair<MCSymbol*, unsigned>* >, 64> Entries;
2335 for (DenseMap<MCSymbol*, std::pair<MCSymbol*, unsigned> >::iterator
2336 I = AddressPool.begin(), E = AddressPool.end();
2338 Entries.push_back(std::make_pair(I->second.second, &(I->second)));
2340 array_pod_sort(Entries.begin(), Entries.end());
2342 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2343 // Emit a label for reference from debug information entries.
2344 MCSymbol *Sym = Entries[i].second->first;
2346 Asm->EmitLabelReference(Entries[i].second->first,
2347 Asm->getDataLayout().getPointerSize());
2349 Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2354 // Emit visible names into a debug str section.
2355 void DwarfDebug::emitDebugStr() {
2356 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2357 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2360 // Emit visible names into a debug loc section.
2361 void DwarfDebug::emitDebugLoc() {
2362 if (DotDebugLocEntries.empty())
2365 for (SmallVectorImpl<DotDebugLocEntry>::iterator
2366 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2368 DotDebugLocEntry &Entry = *I;
2369 if (I + 1 != DotDebugLocEntries.end())
2373 // Start the dwarf loc section.
2374 Asm->OutStreamer.SwitchSection(
2375 Asm->getObjFileLowering().getDwarfLocSection());
2376 unsigned char Size = Asm->getDataLayout().getPointerSize();
2377 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2379 for (SmallVectorImpl<DotDebugLocEntry>::iterator
2380 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2381 I != E; ++I, ++index) {
2382 DotDebugLocEntry &Entry = *I;
2383 if (Entry.isMerged()) continue;
2384 if (Entry.isEmpty()) {
2385 Asm->OutStreamer.EmitIntValue(0, Size);
2386 Asm->OutStreamer.EmitIntValue(0, Size);
2387 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2389 Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size);
2390 Asm->OutStreamer.EmitSymbolValue(Entry.End, Size);
2391 DIVariable DV(Entry.Variable);
2392 Asm->OutStreamer.AddComment("Loc expr size");
2393 MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2394 MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2395 Asm->EmitLabelDifference(end, begin, 2);
2396 Asm->OutStreamer.EmitLabel(begin);
2397 if (Entry.isInt()) {
2398 DIBasicType BTy(DV.getType());
2400 (BTy.getEncoding() == dwarf::DW_ATE_signed
2401 || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2402 Asm->OutStreamer.AddComment("DW_OP_consts");
2403 Asm->EmitInt8(dwarf::DW_OP_consts);
2404 Asm->EmitSLEB128(Entry.getInt());
2406 Asm->OutStreamer.AddComment("DW_OP_constu");
2407 Asm->EmitInt8(dwarf::DW_OP_constu);
2408 Asm->EmitULEB128(Entry.getInt());
2410 } else if (Entry.isLocation()) {
2411 if (!DV.hasComplexAddress())
2413 Asm->EmitDwarfRegOp(Entry.Loc);
2415 // Complex address entry.
2416 unsigned N = DV.getNumAddrElements();
2418 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2419 if (Entry.Loc.getOffset()) {
2421 Asm->EmitDwarfRegOp(Entry.Loc);
2422 Asm->OutStreamer.AddComment("DW_OP_deref");
2423 Asm->EmitInt8(dwarf::DW_OP_deref);
2424 Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2425 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2426 Asm->EmitSLEB128(DV.getAddrElement(1));
2428 // If first address element is OpPlus then emit
2429 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2430 MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2431 Asm->EmitDwarfRegOp(Loc);
2435 Asm->EmitDwarfRegOp(Entry.Loc);
2438 // Emit remaining complex address elements.
2439 for (; i < N; ++i) {
2440 uint64_t Element = DV.getAddrElement(i);
2441 if (Element == DIBuilder::OpPlus) {
2442 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2443 Asm->EmitULEB128(DV.getAddrElement(++i));
2444 } else if (Element == DIBuilder::OpDeref) {
2445 if (!Entry.Loc.isReg())
2446 Asm->EmitInt8(dwarf::DW_OP_deref);
2448 llvm_unreachable("unknown Opcode found in complex address");
2452 // else ... ignore constant fp. There is not any good way to
2453 // to represent them here in dwarf.
2454 Asm->OutStreamer.EmitLabel(end);
2459 // Emit visible names into a debug aranges section.
2460 void DwarfDebug::emitDebugARanges() {
2461 // Start the dwarf aranges section.
2462 Asm->OutStreamer.SwitchSection(
2463 Asm->getObjFileLowering().getDwarfARangesSection());
2466 // Emit visible names into a debug ranges section.
2467 void DwarfDebug::emitDebugRanges() {
2468 // Start the dwarf ranges section.
2469 Asm->OutStreamer.SwitchSection(
2470 Asm->getObjFileLowering().getDwarfRangesSection());
2471 unsigned char Size = Asm->getDataLayout().getPointerSize();
2472 for (SmallVectorImpl<const MCSymbol *>::iterator
2473 I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2476 Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
2478 Asm->OutStreamer.EmitIntValue(0, Size);
2482 // Emit visible names into a debug macinfo section.
2483 void DwarfDebug::emitDebugMacInfo() {
2484 if (const MCSection *LineInfo =
2485 Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2486 // Start the dwarf macinfo section.
2487 Asm->OutStreamer.SwitchSection(LineInfo);
2491 // Emit inline info using following format.
2493 // 1. length of section
2494 // 2. Dwarf version number
2497 // Entries (one "entry" for each function that was inlined):
2499 // 1. offset into __debug_str section for MIPS linkage name, if exists;
2500 // otherwise offset into __debug_str for regular function name.
2501 // 2. offset into __debug_str section for regular function name.
2502 // 3. an unsigned LEB128 number indicating the number of distinct inlining
2503 // instances for the function.
2505 // The rest of the entry consists of a {die_offset, low_pc} pair for each
2506 // inlined instance; the die_offset points to the inlined_subroutine die in the
2507 // __debug_info section, and the low_pc is the starting address for the
2508 // inlining instance.
2509 void DwarfDebug::emitDebugInlineInfo() {
2510 if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2516 Asm->OutStreamer.SwitchSection(
2517 Asm->getObjFileLowering().getDwarfDebugInlineSection());
2519 Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2520 Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2521 Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2523 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2525 Asm->OutStreamer.AddComment("Dwarf Version");
2526 Asm->EmitInt16(dwarf::DWARF_VERSION);
2527 Asm->OutStreamer.AddComment("Address Size (in bytes)");
2528 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2530 for (SmallVectorImpl<const MDNode *>::iterator I = InlinedSPNodes.begin(),
2531 E = InlinedSPNodes.end(); I != E; ++I) {
2533 const MDNode *Node = *I;
2534 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2535 = InlineInfo.find(Node);
2536 SmallVectorImpl<InlineInfoLabels> &Labels = II->second;
2537 DISubprogram SP(Node);
2538 StringRef LName = SP.getLinkageName();
2539 StringRef Name = SP.getName();
2541 Asm->OutStreamer.AddComment("MIPS linkage name");
2543 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2544 DwarfStrSectionSym);
2546 Asm->EmitSectionOffset(InfoHolder
2547 .getStringPoolEntry(getRealLinkageName(LName)),
2548 DwarfStrSectionSym);
2550 Asm->OutStreamer.AddComment("Function name");
2551 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2552 DwarfStrSectionSym);
2553 Asm->EmitULEB128(Labels.size(), "Inline count");
2555 for (SmallVectorImpl<InlineInfoLabels>::iterator LI = Labels.begin(),
2556 LE = Labels.end(); LI != LE; ++LI) {
2557 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2558 Asm->EmitInt32(LI->second->getOffset());
2560 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2561 Asm->OutStreamer.EmitSymbolValue(LI->first,
2562 Asm->getDataLayout().getPointerSize());
2566 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2569 // DWARF5 Experimental Separate Dwarf emitters.
2571 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2572 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2573 // DW_AT_ranges_base, DW_AT_addr_base. If DW_AT_ranges is present,
2574 // DW_AT_low_pc and DW_AT_high_pc are not used, and vice versa.
2575 CompileUnit *DwarfDebug::constructSkeletonCU(const MDNode *N) {
2576 DICompileUnit DIUnit(N);
2577 CompilationDir = DIUnit.getDirectory();
2579 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2580 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
2581 DIUnit.getLanguage(), Die, Asm,
2582 this, &SkeletonHolder);
2584 NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2585 DIUnit.getSplitDebugFilename());
2587 // This should be a unique identifier when we want to build .dwp files.
2588 NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
2590 // Relocate to the beginning of the addr_base section, else 0 for the
2591 // beginning of the one for this compile unit.
2592 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2593 NewCU->addLabel(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset,
2594 DwarfAddrSectionSym);
2596 NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base,
2597 dwarf::DW_FORM_sec_offset, 0);
2599 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2600 // into an entity. We're using 0, or a NULL label for this.
2601 NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2603 // DW_AT_stmt_list is a offset of line number information for this
2604 // compile unit in debug_line section.
2605 // FIXME: Should handle multiple compile units.
2606 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2607 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2608 DwarfLineSectionSym);
2610 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2612 if (!CompilationDir.empty())
2613 NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2615 SkeletonHolder.addUnit(NewCU);
2616 SkeletonCUs.push_back(NewCU);
2621 void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
2622 assert(useSplitDwarf() && "No split dwarf debug info?");
2623 emitAbbrevs(Section, &SkeletonAbbrevs);
2626 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2627 // compile units that would normally be in debug_info.
2628 void DwarfDebug::emitDebugInfoDWO() {
2629 assert(useSplitDwarf() && "No split dwarf debug info?");
2630 InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
2631 Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2632 DwarfAbbrevDWOSectionSym);
2635 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2636 // abbreviations for the .debug_info.dwo section.
2637 void DwarfDebug::emitDebugAbbrevDWO() {
2638 assert(useSplitDwarf() && "No split dwarf?");
2639 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2643 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2644 // string section and is identical in format to traditional .debug_str
2646 void DwarfDebug::emitDebugStrDWO() {
2647 assert(useSplitDwarf() && "No split dwarf?");
2648 const MCSection *OffSec = Asm->getObjFileLowering()
2649 .getDwarfStrOffDWOSection();
2650 const MCSymbol *StrSym = DwarfStrSectionSym;
2651 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),