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, (const MDNode*)0),
611 if (Children.empty() && Range.first == Range.second)
613 ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
614 for (ImportedEntityMap::const_iterator i = Range.first; i != Range.second; ++i)
615 constructImportedModuleDIE(TheCU, i->second, ScopeDIE);
618 if (!ScopeDIE) return NULL;
621 for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
622 E = Children.end(); I != E; ++I)
623 ScopeDIE->addChild(*I);
625 if (DS.isSubprogram() && ObjectPointer != NULL)
626 TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer,
627 dwarf::DW_FORM_ref4, ObjectPointer);
629 if (DS.isSubprogram())
630 TheCU->addPubTypes(DISubprogram(DS));
635 // Look up the source id with the given directory and source file names.
636 // If none currently exists, create a new id and insert it in the
637 // SourceIds map. This can update DirectoryNames and SourceFileNames maps
639 unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName,
640 StringRef DirName, unsigned CUID) {
641 // If we use .loc in assembly, we can't separate .file entries according to
642 // compile units. Thus all files will belong to the default compile unit.
643 if (Asm->TM.hasMCUseLoc() &&
644 Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer)
647 // If FE did not provide a file name, then assume stdin.
648 if (FileName.empty())
649 return getOrCreateSourceID("<stdin>", StringRef(), CUID);
651 // TODO: this might not belong here. See if we can factor this better.
652 if (DirName == CompilationDir)
655 // FileIDCUMap stores the current ID for the given compile unit.
656 unsigned SrcId = FileIDCUMap[CUID] + 1;
658 // We look up the CUID/file/dir by concatenating them with a zero byte.
659 SmallString<128> NamePair;
660 NamePair += utostr(CUID);
663 NamePair += '\0'; // Zero bytes are not allowed in paths.
664 NamePair += FileName;
666 StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId);
667 if (Ent.getValue() != SrcId)
668 return Ent.getValue();
670 FileIDCUMap[CUID] = SrcId;
671 // Print out a .file directive to specify files for .loc directives.
672 Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName, CUID);
677 // Create new CompileUnit for the given metadata node with tag
678 // DW_TAG_compile_unit.
679 CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) {
680 DICompileUnit DIUnit(N);
681 StringRef FN = DIUnit.getFilename();
682 CompilationDir = DIUnit.getDirectory();
684 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
685 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
686 DIUnit.getLanguage(), Die, N, Asm,
689 FileIDCUMap[NewCU->getUniqueID()] = 0;
690 // Call this to emit a .file directive if it wasn't emitted for the source
691 // file this CU comes from yet.
692 getOrCreateSourceID(FN, CompilationDir, NewCU->getUniqueID());
694 NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
695 NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
696 DIUnit.getLanguage());
697 NewCU->addString(Die, dwarf::DW_AT_name, FN);
699 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
700 // into an entity. We're using 0 (or a NULL label) for this. For
701 // split dwarf it's in the skeleton CU so omit it here.
702 if (!useSplitDwarf())
703 NewCU->addLabelAddress(Die, dwarf::DW_AT_low_pc, NULL);
705 // Define start line table label for each Compile Unit.
706 MCSymbol *LineTableStartSym = Asm->GetTempSymbol("line_table_start",
707 NewCU->getUniqueID());
708 Asm->OutStreamer.getContext().setMCLineTableSymbol(LineTableStartSym,
709 NewCU->getUniqueID());
711 // DW_AT_stmt_list is a offset of line number information for this
712 // compile unit in debug_line section. For split dwarf this is
713 // left in the skeleton CU and so not included.
714 // The line table entries are not always emitted in assembly, so it
715 // is not okay to use line_table_start here.
716 if (!useSplitDwarf()) {
717 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
718 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
719 NewCU->getUniqueID() == 0 ?
720 Asm->GetTempSymbol("section_line") : LineTableStartSym);
721 else if (NewCU->getUniqueID() == 0)
722 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
724 NewCU->addDelta(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
725 LineTableStartSym, DwarfLineSectionSym);
728 // If we're using split dwarf the compilation dir is going to be in the
729 // skeleton CU and so we don't need to duplicate it here.
730 if (!useSplitDwarf() && !CompilationDir.empty())
731 NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
732 if (DIUnit.isOptimized())
733 NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized);
735 StringRef Flags = DIUnit.getFlags();
737 NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
739 if (unsigned RVer = DIUnit.getRunTimeVersion())
740 NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
741 dwarf::DW_FORM_data1, RVer);
746 InfoHolder.addUnit(NewCU);
748 CUMap.insert(std::make_pair(N, NewCU));
752 // Construct subprogram DIE.
753 void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
755 CompileUnit *&CURef = SPMap[N];
761 if (!SP.isDefinition())
762 // This is a method declaration which will be handled while constructing
766 DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
769 TheCU->insertDIE(N, SubprogramDie);
771 // Add to context owner.
772 TheCU->addToContextOwner(SubprogramDie, SP.getContext());
774 // Expose as global, if requested.
775 if (GenerateDwarfPubNamesSection)
776 TheCU->addGlobalName(SP.getName(), SubprogramDie);
779 void DwarfDebug::constructImportedEntityDIE(CompileUnit *TheCU,
781 DIImportedEntity Module(N);
782 if (!Module.Verify())
784 if (DIE *D = TheCU->getOrCreateContextDIE(Module.getContext()))
785 constructImportedModuleDIE(TheCU, Module, D);
788 void DwarfDebug::constructImportedModuleDIE(CompileUnit *TheCU, const MDNode *N,
790 DIImportedEntity Module(N);
791 if (!Module.Verify())
793 return constructImportedModuleDIE(TheCU, Module, Context);
796 void DwarfDebug::constructImportedModuleDIE(CompileUnit *TheCU,
797 const DIImportedEntity &Module,
799 assert(Module.Verify() &&
800 "Use one of the MDNode * overloads to handle invalid metadata");
801 assert(Context && "Should always have a context for an imported_module");
802 DIE *IMDie = new DIE(Module.getTag());
803 TheCU->insertDIE(Module, IMDie);
805 DIDescriptor Entity = Module.getEntity();
806 if (Entity.isNameSpace())
807 EntityDie = TheCU->getOrCreateNameSpace(DINameSpace(Entity));
808 else if (Entity.isSubprogram())
809 EntityDie = TheCU->getOrCreateSubprogramDIE(DISubprogram(Entity));
812 unsigned FileID = getOrCreateSourceID(Module.getContext().getFilename(),
813 Module.getContext().getDirectory(),
814 TheCU->getUniqueID());
815 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_file, 0, FileID);
816 TheCU->addUInt(IMDie, dwarf::DW_AT_decl_line, 0, Module.getLineNumber());
817 TheCU->addDIEEntry(IMDie, dwarf::DW_AT_import, dwarf::DW_FORM_ref4, EntityDie);
818 Context->addChild(IMDie);
821 // Emit all Dwarf sections that should come prior to the content. Create
822 // global DIEs and emit initial debug info sections. This is invoked by
823 // the target AsmPrinter.
824 void DwarfDebug::beginModule() {
825 if (DisableDebugInfoPrinting)
828 const Module *M = MMI->getModule();
830 // If module has named metadata anchors then use them, otherwise scan the
831 // module using debug info finder to collect debug info.
832 NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
836 // Emit initial sections so we can reference labels later.
839 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
840 DICompileUnit CUNode(CU_Nodes->getOperand(i));
841 CompileUnit *CU = constructCompileUnit(CUNode);
842 DIArray ImportedEntities = CUNode.getImportedEntities();
843 for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
844 ScopesWithImportedEntities.push_back(std::make_pair(
845 DIImportedEntity(ImportedEntities.getElement(i)).getContext(),
846 ImportedEntities.getElement(i)));
847 std::sort(ScopesWithImportedEntities.begin(),
848 ScopesWithImportedEntities.end(), CompareFirst());
849 DIArray GVs = CUNode.getGlobalVariables();
850 for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
851 CU->createGlobalVariableDIE(GVs.getElement(i));
852 DIArray SPs = CUNode.getSubprograms();
853 for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
854 constructSubprogramDIE(CU, SPs.getElement(i));
855 DIArray EnumTypes = CUNode.getEnumTypes();
856 for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
857 CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
858 DIArray RetainedTypes = CUNode.getRetainedTypes();
859 for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
860 CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
861 // Emit imported_modules last so that the relevant context is already
863 for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
864 constructImportedEntityDIE(CU, ImportedEntities.getElement(i));
865 // If we're splitting the dwarf out now that we've got the entire
866 // CU then construct a skeleton CU based upon it.
867 if (useSplitDwarf()) {
868 // This should be a unique identifier when we want to build .dwp files.
869 CU->addUInt(CU->getCUDie(), dwarf::DW_AT_GNU_dwo_id,
870 dwarf::DW_FORM_data8, 0);
871 // Now construct the skeleton CU associated.
872 constructSkeletonCU(CUNode);
876 // Tell MMI that we have debug info.
877 MMI->setDebugInfoAvailability(true);
879 // Prime section data.
880 SectionMap.insert(Asm->getObjFileLowering().getTextSection());
883 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
884 void DwarfDebug::computeInlinedDIEs() {
885 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
886 for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
887 AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
889 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
891 for (DenseMap<const MDNode *, DIE *>::iterator AI = AbstractSPDies.begin(),
892 AE = AbstractSPDies.end(); AI != AE; ++AI) {
893 DIE *ISP = AI->second;
894 if (InlinedSubprogramDIEs.count(ISP))
896 FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
900 // Collect info for variables that were optimized out.
901 void DwarfDebug::collectDeadVariables() {
902 const Module *M = MMI->getModule();
903 DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
905 if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
906 for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
907 DICompileUnit TheCU(CU_Nodes->getOperand(i));
908 DIArray Subprograms = TheCU.getSubprograms();
909 for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
910 DISubprogram SP(Subprograms.getElement(i));
911 if (ProcessedSPNodes.count(SP) != 0) continue;
912 if (!SP.Verify()) continue;
913 if (!SP.isDefinition()) continue;
914 DIArray Variables = SP.getVariables();
915 if (Variables.getNumElements() == 0) continue;
917 LexicalScope *Scope =
918 new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
919 DeadFnScopeMap[SP] = Scope;
921 // Construct subprogram DIE and add variables DIEs.
922 CompileUnit *SPCU = CUMap.lookup(TheCU);
923 assert(SPCU && "Unable to find Compile Unit!");
924 constructSubprogramDIE(SPCU, SP);
925 DIE *ScopeDIE = SPCU->getDIE(SP);
926 for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
927 DIVariable DV(Variables.getElement(vi));
928 if (!DV.Verify()) continue;
929 DbgVariable *NewVar = new DbgVariable(DV, NULL);
930 if (DIE *VariableDIE =
931 SPCU->constructVariableDIE(NewVar, Scope->isAbstractScope()))
932 ScopeDIE->addChild(VariableDIE);
937 DeleteContainerSeconds(DeadFnScopeMap);
940 void DwarfDebug::finalizeModuleInfo() {
941 // Collect info for variables that were optimized out.
942 collectDeadVariables();
944 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
945 computeInlinedDIEs();
947 // Emit DW_AT_containing_type attribute to connect types with their
948 // vtable holding type.
949 for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
950 CUE = CUMap.end(); CUI != CUE; ++CUI) {
951 CompileUnit *TheCU = CUI->second;
952 TheCU->constructContainingTypeDIEs();
955 // Compute DIE offsets and sizes.
956 InfoHolder.computeSizeAndOffsets();
958 SkeletonHolder.computeSizeAndOffsets();
961 void DwarfDebug::endSections() {
962 // Standard sections final addresses.
963 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
964 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
965 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
966 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
968 // End text sections.
969 for (unsigned I = 0, E = SectionMap.size(); I != E; ++I) {
970 Asm->OutStreamer.SwitchSection(SectionMap[I]);
971 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", I+1));
975 // Emit all Dwarf sections that should come after the content.
976 void DwarfDebug::endModule() {
978 if (!FirstCU) return;
980 // End any existing sections.
981 // TODO: Does this need to happen?
984 // Finalize the debug info for the module.
985 finalizeModuleInfo();
987 if (!useSplitDwarf()) {
988 // Emit all the DIEs into a debug info section.
991 // Corresponding abbreviations into a abbrev section.
994 // Emit info into a debug loc section.
997 // Emit info into a debug aranges section.
1000 // Emit info into a debug ranges section.
1003 // Emit info into a debug macinfo section.
1006 // Emit inline info.
1007 // TODO: When we don't need the option anymore we
1008 // can remove all of the code that this section
1010 if (useDarwinGDBCompat())
1011 emitDebugInlineInfo();
1013 // TODO: Fill this in for separated debug sections and separate
1014 // out information into new sections.
1016 // Emit the debug info section and compile units.
1020 // Corresponding abbreviations into a abbrev section.
1021 emitAbbreviations();
1022 emitDebugAbbrevDWO();
1024 // Emit info into a debug loc section.
1027 // Emit info into a debug aranges section.
1030 // Emit info into a debug ranges section.
1033 // Emit info into a debug macinfo section.
1036 // Emit DWO addresses.
1037 InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1039 // Emit inline info.
1040 // TODO: When we don't need the option anymore we
1041 // can remove all of the code that this section
1043 if (useDarwinGDBCompat())
1044 emitDebugInlineInfo();
1047 // Emit info into the dwarf accelerator table sections.
1048 if (useDwarfAccelTables()) {
1051 emitAccelNamespaces();
1055 // Emit info into a debug pubnames section, if requested.
1056 if (GenerateDwarfPubNamesSection)
1057 emitDebugPubnames();
1059 // Emit info into a debug pubtypes section.
1060 // TODO: When we don't need the option anymore we can
1061 // remove all of the code that adds to the table.
1062 if (useDarwinGDBCompat())
1063 emitDebugPubTypes();
1065 // Finally emit string information into a string table.
1067 if (useSplitDwarf())
1072 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1073 E = CUMap.end(); I != E; ++I)
1076 for (SmallVector<CompileUnit *, 1>::iterator I = SkeletonCUs.begin(),
1077 E = SkeletonCUs.end(); I != E; ++I)
1080 // Reset these for the next Module if we have one.
1084 // Find abstract variable, if any, associated with Var.
1085 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1086 DebugLoc ScopeLoc) {
1087 LLVMContext &Ctx = DV->getContext();
1088 // More then one inlined variable corresponds to one abstract variable.
1089 DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1090 DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1092 return AbsDbgVariable;
1094 LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1098 AbsDbgVariable = new DbgVariable(Var, NULL);
1099 addScopeVariable(Scope, AbsDbgVariable);
1100 AbstractVariables[Var] = AbsDbgVariable;
1101 return AbsDbgVariable;
1104 // If Var is a current function argument then add it to CurrentFnArguments list.
1105 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1106 DbgVariable *Var, LexicalScope *Scope) {
1107 if (!LScopes.isCurrentFunctionScope(Scope))
1109 DIVariable DV = Var->getVariable();
1110 if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1112 unsigned ArgNo = DV.getArgNumber();
1116 size_t Size = CurrentFnArguments.size();
1118 CurrentFnArguments.resize(MF->getFunction()->arg_size());
1119 // llvm::Function argument size is not good indicator of how many
1120 // arguments does the function have at source level.
1122 CurrentFnArguments.resize(ArgNo * 2);
1123 CurrentFnArguments[ArgNo - 1] = Var;
1127 // Collect variable information from side table maintained by MMI.
1129 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
1130 SmallPtrSet<const MDNode *, 16> &Processed) {
1131 MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1132 for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1133 VE = VMap.end(); VI != VE; ++VI) {
1134 const MDNode *Var = VI->first;
1136 Processed.insert(Var);
1138 const std::pair<unsigned, DebugLoc> &VP = VI->second;
1140 LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
1142 // If variable scope is not found then skip this variable.
1146 DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1147 DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
1148 RegVar->setFrameIndex(VP.first);
1149 if (!addCurrentFnArgument(MF, RegVar, Scope))
1150 addScopeVariable(Scope, RegVar);
1152 AbsDbgVariable->setFrameIndex(VP.first);
1156 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
1158 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1159 assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1160 return MI->getNumOperands() == 3 &&
1161 MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1162 MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
1165 // Get .debug_loc entry for the instruction range starting at MI.
1166 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1167 const MCSymbol *FLabel,
1168 const MCSymbol *SLabel,
1169 const MachineInstr *MI) {
1170 const MDNode *Var = MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1172 if (MI->getNumOperands() != 3) {
1173 MachineLocation MLoc = Asm->getDebugValueLocation(MI);
1174 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1176 if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
1177 MachineLocation MLoc;
1178 // TODO: Currently an offset of 0 in a DBG_VALUE means
1179 // we need to generate a direct register value.
1180 // There is no way to specify an indirect value with offset 0.
1181 if (MI->getOperand(1).getImm() == 0)
1182 MLoc.set(MI->getOperand(0).getReg());
1184 MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1185 return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1187 if (MI->getOperand(0).isImm())
1188 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1189 if (MI->getOperand(0).isFPImm())
1190 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1191 if (MI->getOperand(0).isCImm())
1192 return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1194 llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1197 // Find variables for each lexical scope.
1199 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1200 SmallPtrSet<const MDNode *, 16> &Processed) {
1202 // collection info from MMI table.
1203 collectVariableInfoFromMMITable(MF, Processed);
1205 for (SmallVectorImpl<const MDNode*>::const_iterator
1206 UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1208 const MDNode *Var = *UVI;
1209 if (Processed.count(Var))
1212 // History contains relevant DBG_VALUE instructions for Var and instructions
1214 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1215 if (History.empty())
1217 const MachineInstr *MInsn = History.front();
1220 LexicalScope *Scope = NULL;
1221 if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1222 DISubprogram(DV.getContext()).describes(MF->getFunction()))
1223 Scope = LScopes.getCurrentFunctionScope();
1224 else if (MDNode *IA = DV.getInlinedAt())
1225 Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1227 Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1228 // If variable scope is not found then skip this variable.
1232 Processed.insert(DV);
1233 assert(MInsn->isDebugValue() && "History must begin with debug value");
1234 DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1235 DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
1236 if (!addCurrentFnArgument(MF, RegVar, Scope))
1237 addScopeVariable(Scope, RegVar);
1239 AbsVar->setMInsn(MInsn);
1241 // Simplify ranges that are fully coalesced.
1242 if (History.size() <= 1 || (History.size() == 2 &&
1243 MInsn->isIdenticalTo(History.back()))) {
1244 RegVar->setMInsn(MInsn);
1248 // Handle multiple DBG_VALUE instructions describing one variable.
1249 RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1251 for (SmallVectorImpl<const MachineInstr*>::const_iterator
1252 HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1253 const MachineInstr *Begin = *HI;
1254 assert(Begin->isDebugValue() && "Invalid History entry");
1256 // Check if DBG_VALUE is truncating a range.
1257 if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1258 && !Begin->getOperand(0).getReg())
1261 // Compute the range for a register location.
1262 const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1263 const MCSymbol *SLabel = 0;
1266 // If Begin is the last instruction in History then its value is valid
1267 // until the end of the function.
1268 SLabel = FunctionEndSym;
1270 const MachineInstr *End = HI[1];
1271 DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1272 << "\t" << *Begin << "\t" << *End << "\n");
1273 if (End->isDebugValue())
1274 SLabel = getLabelBeforeInsn(End);
1276 // End is a normal instruction clobbering the range.
1277 SLabel = getLabelAfterInsn(End);
1278 assert(SLabel && "Forgot label after clobber instruction");
1283 // The value is valid until the next DBG_VALUE or clobber.
1284 DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1287 DotDebugLocEntries.push_back(DotDebugLocEntry());
1290 // Collect info for variables that were optimized out.
1291 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1292 DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1293 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1294 DIVariable DV(Variables.getElement(i));
1295 if (!DV || !DV.Verify() || !Processed.insert(DV))
1297 if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1298 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1302 // Return Label preceding the instruction.
1303 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1304 MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1305 assert(Label && "Didn't insert label before instruction");
1309 // Return Label immediately following the instruction.
1310 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1311 return LabelsAfterInsn.lookup(MI);
1314 // Process beginning of an instruction.
1315 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1316 // Check if source location changes, but ignore DBG_VALUE locations.
1317 if (!MI->isDebugValue()) {
1318 DebugLoc DL = MI->getDebugLoc();
1319 if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1322 if (DL == PrologEndLoc) {
1323 Flags |= DWARF2_FLAG_PROLOGUE_END;
1324 PrologEndLoc = DebugLoc();
1326 if (PrologEndLoc.isUnknown())
1327 Flags |= DWARF2_FLAG_IS_STMT;
1329 if (!DL.isUnknown()) {
1330 const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1331 recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1333 recordSourceLine(0, 0, 0, 0);
1337 // Insert labels where requested.
1338 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1339 LabelsBeforeInsn.find(MI);
1342 if (I == LabelsBeforeInsn.end())
1345 // Label already assigned.
1350 PrevLabel = MMI->getContext().CreateTempSymbol();
1351 Asm->OutStreamer.EmitLabel(PrevLabel);
1353 I->second = PrevLabel;
1356 // Process end of an instruction.
1357 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1358 // Don't create a new label after DBG_VALUE instructions.
1359 // They don't generate code.
1360 if (!MI->isDebugValue())
1363 DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1364 LabelsAfterInsn.find(MI);
1367 if (I == LabelsAfterInsn.end())
1370 // Label already assigned.
1374 // We need a label after this instruction.
1376 PrevLabel = MMI->getContext().CreateTempSymbol();
1377 Asm->OutStreamer.EmitLabel(PrevLabel);
1379 I->second = PrevLabel;
1382 // Each LexicalScope has first instruction and last instruction to mark
1383 // beginning and end of a scope respectively. Create an inverse map that list
1384 // scopes starts (and ends) with an instruction. One instruction may start (or
1385 // end) multiple scopes. Ignore scopes that are not reachable.
1386 void DwarfDebug::identifyScopeMarkers() {
1387 SmallVector<LexicalScope *, 4> WorkList;
1388 WorkList.push_back(LScopes.getCurrentFunctionScope());
1389 while (!WorkList.empty()) {
1390 LexicalScope *S = WorkList.pop_back_val();
1392 const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1393 if (!Children.empty())
1394 for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1395 SE = Children.end(); SI != SE; ++SI)
1396 WorkList.push_back(*SI);
1398 if (S->isAbstractScope())
1401 const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1404 for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1405 RE = Ranges.end(); RI != RE; ++RI) {
1406 assert(RI->first && "InsnRange does not have first instruction!");
1407 assert(RI->second && "InsnRange does not have second instruction!");
1408 requestLabelBeforeInsn(RI->first);
1409 requestLabelAfterInsn(RI->second);
1414 // Get MDNode for DebugLoc's scope.
1415 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1416 if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1417 return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1418 return DL.getScope(Ctx);
1421 // Walk up the scope chain of given debug loc and find line number info
1422 // for the function.
1423 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1424 const MDNode *Scope = getScopeNode(DL, Ctx);
1425 DISubprogram SP = getDISubprogram(Scope);
1427 // Check for number of operands since the compatibility is
1429 if (SP->getNumOperands() > 19)
1430 return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1432 return DebugLoc::get(SP.getLineNumber(), 0, SP);
1438 // Gather pre-function debug information. Assumes being called immediately
1439 // after the function entry point has been emitted.
1440 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1441 if (!MMI->hasDebugInfo()) return;
1442 LScopes.initialize(*MF);
1443 if (LScopes.empty()) return;
1444 identifyScopeMarkers();
1446 // Set DwarfCompileUnitID in MCContext to the Compile Unit this function
1448 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1449 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1450 assert(TheCU && "Unable to find compile unit!");
1451 Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1453 FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1454 Asm->getFunctionNumber());
1455 // Assumes in correct section after the entry point.
1456 Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1458 assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1460 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1461 // LiveUserVar - Map physreg numbers to the MDNode they contain.
1462 std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1464 for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1466 bool AtBlockEntry = true;
1467 for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1469 const MachineInstr *MI = II;
1471 if (MI->isDebugValue()) {
1472 assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1474 // Keep track of user variables.
1476 MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1478 // Variable is in a register, we need to check for clobbers.
1479 if (isDbgValueInDefinedReg(MI))
1480 LiveUserVar[MI->getOperand(0).getReg()] = Var;
1482 // Check the history of this variable.
1483 SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1484 if (History.empty()) {
1485 UserVariables.push_back(Var);
1486 // The first mention of a function argument gets the FunctionBeginSym
1487 // label, so arguments are visible when breaking at function entry.
1489 if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1490 DISubprogram(getDISubprogram(DV.getContext()))
1491 .describes(MF->getFunction()))
1492 LabelsBeforeInsn[MI] = FunctionBeginSym;
1494 // We have seen this variable before. Try to coalesce DBG_VALUEs.
1495 const MachineInstr *Prev = History.back();
1496 if (Prev->isDebugValue()) {
1497 // Coalesce identical entries at the end of History.
1498 if (History.size() >= 2 &&
1499 Prev->isIdenticalTo(History[History.size() - 2])) {
1500 DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1502 << "\t" << *History[History.size() - 2] << "\n");
1506 // Terminate old register assignments that don't reach MI;
1507 MachineFunction::const_iterator PrevMBB = Prev->getParent();
1508 if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1509 isDbgValueInDefinedReg(Prev)) {
1510 // Previous register assignment needs to terminate at the end of
1512 MachineBasicBlock::const_iterator LastMI =
1513 PrevMBB->getLastNonDebugInstr();
1514 if (LastMI == PrevMBB->end()) {
1515 // Drop DBG_VALUE for empty range.
1516 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1517 << "\t" << *Prev << "\n");
1521 // Terminate after LastMI.
1522 History.push_back(LastMI);
1527 History.push_back(MI);
1529 // Not a DBG_VALUE instruction.
1531 AtBlockEntry = false;
1533 // First known non-DBG_VALUE and non-frame setup location marks
1534 // the beginning of the function body.
1535 if (!MI->getFlag(MachineInstr::FrameSetup) &&
1536 (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1537 PrologEndLoc = MI->getDebugLoc();
1539 // Check if the instruction clobbers any registers with debug vars.
1540 for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1541 MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1542 if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1544 for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1545 AI.isValid(); ++AI) {
1547 const MDNode *Var = LiveUserVar[Reg];
1550 // Reg is now clobbered.
1551 LiveUserVar[Reg] = 0;
1553 // Was MD last defined by a DBG_VALUE referring to Reg?
1554 DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1555 if (HistI == DbgValues.end())
1557 SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1558 if (History.empty())
1560 const MachineInstr *Prev = History.back();
1561 // Sanity-check: Register assignments are terminated at the end of
1563 if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1565 // Is the variable still in Reg?
1566 if (!isDbgValueInDefinedReg(Prev) ||
1567 Prev->getOperand(0).getReg() != Reg)
1569 // Var is clobbered. Make sure the next instruction gets a label.
1570 History.push_back(MI);
1577 for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1579 SmallVectorImpl<const MachineInstr*> &History = I->second;
1580 if (History.empty())
1583 // Make sure the final register assignments are terminated.
1584 const MachineInstr *Prev = History.back();
1585 if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1586 const MachineBasicBlock *PrevMBB = Prev->getParent();
1587 MachineBasicBlock::const_iterator LastMI =
1588 PrevMBB->getLastNonDebugInstr();
1589 if (LastMI == PrevMBB->end())
1590 // Drop DBG_VALUE for empty range.
1593 // Terminate after LastMI.
1594 History.push_back(LastMI);
1597 // Request labels for the full history.
1598 for (unsigned i = 0, e = History.size(); i != e; ++i) {
1599 const MachineInstr *MI = History[i];
1600 if (MI->isDebugValue())
1601 requestLabelBeforeInsn(MI);
1603 requestLabelAfterInsn(MI);
1607 PrevInstLoc = DebugLoc();
1608 PrevLabel = FunctionBeginSym;
1610 // Record beginning of function.
1611 if (!PrologEndLoc.isUnknown()) {
1612 DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1613 MF->getFunction()->getContext());
1614 recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1615 FnStartDL.getScope(MF->getFunction()->getContext()),
1616 // We'd like to list the prologue as "not statements" but GDB behaves
1617 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1618 DWARF2_FLAG_IS_STMT);
1622 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1623 // SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1624 ScopeVariables[LS].push_back(Var);
1625 // Vars.push_back(Var);
1628 // Gather and emit post-function debug information.
1629 void DwarfDebug::endFunction(const MachineFunction *MF) {
1630 if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1632 // Define end label for subprogram.
1633 FunctionEndSym = Asm->GetTempSymbol("func_end",
1634 Asm->getFunctionNumber());
1635 // Assumes in correct section after the entry point.
1636 Asm->OutStreamer.EmitLabel(FunctionEndSym);
1637 // Set DwarfCompileUnitID in MCContext to default value.
1638 Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1640 SmallPtrSet<const MDNode *, 16> ProcessedVars;
1641 collectVariableInfo(MF, ProcessedVars);
1643 LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1644 CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1645 assert(TheCU && "Unable to find compile unit!");
1647 // Construct abstract scopes.
1648 ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1649 for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1650 LexicalScope *AScope = AList[i];
1651 DISubprogram SP(AScope->getScopeNode());
1653 // Collect info for variables that were optimized out.
1654 DIArray Variables = SP.getVariables();
1655 for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1656 DIVariable DV(Variables.getElement(i));
1657 if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
1659 // Check that DbgVariable for DV wasn't created earlier, when
1660 // findAbstractVariable() was called for inlined instance of DV.
1661 LLVMContext &Ctx = DV->getContext();
1662 DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1663 if (AbstractVariables.lookup(CleanDV))
1665 if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1666 addScopeVariable(Scope, new DbgVariable(DV, NULL));
1669 if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1670 constructScopeDIE(TheCU, AScope);
1673 DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1675 if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1676 TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1678 DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1679 MMI->getFrameMoves()));
1682 for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1683 I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1684 DeleteContainerPointers(I->second);
1685 ScopeVariables.clear();
1686 DeleteContainerPointers(CurrentFnArguments);
1687 UserVariables.clear();
1689 AbstractVariables.clear();
1690 LabelsBeforeInsn.clear();
1691 LabelsAfterInsn.clear();
1695 // Register a source line with debug info. Returns the unique label that was
1696 // emitted and which provides correspondence to the source line list.
1697 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1703 DIDescriptor Scope(S);
1705 if (Scope.isCompileUnit()) {
1706 DICompileUnit CU(S);
1707 Fn = CU.getFilename();
1708 Dir = CU.getDirectory();
1709 } else if (Scope.isFile()) {
1711 Fn = F.getFilename();
1712 Dir = F.getDirectory();
1713 } else if (Scope.isSubprogram()) {
1715 Fn = SP.getFilename();
1716 Dir = SP.getDirectory();
1717 } else if (Scope.isLexicalBlockFile()) {
1718 DILexicalBlockFile DBF(S);
1719 Fn = DBF.getFilename();
1720 Dir = DBF.getDirectory();
1721 } else if (Scope.isLexicalBlock()) {
1722 DILexicalBlock DB(S);
1723 Fn = DB.getFilename();
1724 Dir = DB.getDirectory();
1726 llvm_unreachable("Unexpected scope info");
1728 Src = getOrCreateSourceID(Fn, Dir,
1729 Asm->OutStreamer.getContext().getDwarfCompileUnitID());
1731 Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1734 //===----------------------------------------------------------------------===//
1736 //===----------------------------------------------------------------------===//
1738 // Compute the size and offset of a DIE.
1740 DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1741 // Get the children.
1742 const std::vector<DIE *> &Children = Die->getChildren();
1744 // Record the abbreviation.
1745 assignAbbrevNumber(Die->getAbbrev());
1747 // Get the abbreviation for this DIE.
1748 unsigned AbbrevNumber = Die->getAbbrevNumber();
1749 const DIEAbbrev *Abbrev = Abbreviations->at(AbbrevNumber - 1);
1752 Die->setOffset(Offset);
1754 // Start the size with the size of abbreviation code.
1755 Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1757 const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
1758 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
1760 // Size the DIE attribute values.
1761 for (unsigned i = 0, N = Values.size(); i < N; ++i)
1762 // Size attribute value.
1763 Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1765 // Size the DIE children if any.
1766 if (!Children.empty()) {
1767 assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1768 "Children flag not set");
1770 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1771 Offset = computeSizeAndOffset(Children[j], Offset);
1773 // End of children marker.
1774 Offset += sizeof(int8_t);
1777 Die->setSize(Offset - Die->getOffset());
1781 // Compute the size and offset of all the DIEs.
1782 void DwarfUnits::computeSizeAndOffsets() {
1783 // Offset from the beginning of debug info section.
1784 unsigned AccuOffset = 0;
1785 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1786 E = CUs.end(); I != E; ++I) {
1787 (*I)->setDebugInfoOffset(AccuOffset);
1789 sizeof(int32_t) + // Length of Compilation Unit Info
1790 sizeof(int16_t) + // DWARF version number
1791 sizeof(int32_t) + // Offset Into Abbrev. Section
1792 sizeof(int8_t); // Pointer Size (in bytes)
1794 unsigned EndOffset = computeSizeAndOffset((*I)->getCUDie(), Offset);
1795 AccuOffset += EndOffset;
1799 // Emit initial Dwarf sections with a label at the start of each one.
1800 void DwarfDebug::emitSectionLabels() {
1801 const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1803 // Dwarf sections base addresses.
1804 DwarfInfoSectionSym =
1805 emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1806 DwarfAbbrevSectionSym =
1807 emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1808 if (useSplitDwarf())
1809 DwarfAbbrevDWOSectionSym =
1810 emitSectionSym(Asm, TLOF.getDwarfAbbrevDWOSection(),
1811 "section_abbrev_dwo");
1812 emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1814 if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1815 emitSectionSym(Asm, MacroInfo);
1817 DwarfLineSectionSym =
1818 emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1819 emitSectionSym(Asm, TLOF.getDwarfLocSection());
1820 if (GenerateDwarfPubNamesSection)
1821 emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1822 emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1823 DwarfStrSectionSym =
1824 emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
1825 if (useSplitDwarf()) {
1826 DwarfStrDWOSectionSym =
1827 emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
1828 DwarfAddrSectionSym =
1829 emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
1831 DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1834 DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
1835 "section_debug_loc");
1837 TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1838 emitSectionSym(Asm, TLOF.getDataSection());
1841 // Recursively emits a debug information entry.
1842 void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
1843 // Get the abbreviation for this DIE.
1844 unsigned AbbrevNumber = Die->getAbbrevNumber();
1845 const DIEAbbrev *Abbrev = Abbrevs->at(AbbrevNumber - 1);
1847 // Emit the code (index) for the abbreviation.
1848 if (Asm->isVerbose())
1849 Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1850 Twine::utohexstr(Die->getOffset()) + ":0x" +
1851 Twine::utohexstr(Die->getSize()) + " " +
1852 dwarf::TagString(Abbrev->getTag()));
1853 Asm->EmitULEB128(AbbrevNumber);
1855 const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
1856 const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
1858 // Emit the DIE attribute values.
1859 for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1860 unsigned Attr = AbbrevData[i].getAttribute();
1861 unsigned Form = AbbrevData[i].getForm();
1862 assert(Form && "Too many attributes for DIE (check abbreviation)");
1864 if (Asm->isVerbose())
1865 Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1868 case dwarf::DW_AT_abstract_origin: {
1869 DIEEntry *E = cast<DIEEntry>(Values[i]);
1870 DIE *Origin = E->getEntry();
1871 unsigned Addr = Origin->getOffset();
1872 if (Form == dwarf::DW_FORM_ref_addr) {
1873 // For DW_FORM_ref_addr, output the offset from beginning of debug info
1874 // section. Origin->getOffset() returns the offset from start of the
1876 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1877 Addr += Holder.getCUOffset(Origin->getCompileUnit());
1879 Asm->EmitInt32(Addr);
1882 case dwarf::DW_AT_ranges: {
1883 // DW_AT_range Value encodes offset in debug_range section.
1884 DIEInteger *V = cast<DIEInteger>(Values[i]);
1886 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
1887 Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1891 Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1893 DwarfDebugRangeSectionSym,
1898 case dwarf::DW_AT_location: {
1899 if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
1900 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
1901 Asm->EmitLabelReference(L->getValue(), 4);
1903 Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1905 Values[i]->EmitValue(Asm, Form);
1909 case dwarf::DW_AT_accessibility: {
1910 if (Asm->isVerbose()) {
1911 DIEInteger *V = cast<DIEInteger>(Values[i]);
1912 Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1914 Values[i]->EmitValue(Asm, Form);
1918 // Emit an attribute using the defined form.
1919 Values[i]->EmitValue(Asm, Form);
1924 // Emit the DIE children if any.
1925 if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1926 const std::vector<DIE *> &Children = Die->getChildren();
1928 for (unsigned j = 0, M = Children.size(); j < M; ++j)
1929 emitDIE(Children[j], Abbrevs);
1931 if (Asm->isVerbose())
1932 Asm->OutStreamer.AddComment("End Of Children Mark");
1937 // Emit the various dwarf units to the unit section USection with
1938 // the abbreviations going into ASection.
1939 void DwarfUnits::emitUnits(DwarfDebug *DD,
1940 const MCSection *USection,
1941 const MCSection *ASection,
1942 const MCSymbol *ASectionSym) {
1943 Asm->OutStreamer.SwitchSection(USection);
1944 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1945 E = CUs.end(); I != E; ++I) {
1946 CompileUnit *TheCU = *I;
1947 DIE *Die = TheCU->getCUDie();
1949 // Emit the compile units header.
1951 .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(),
1952 TheCU->getUniqueID()));
1954 // Emit size of content not including length itself
1955 unsigned ContentSize = Die->getSize() +
1956 sizeof(int16_t) + // DWARF version number
1957 sizeof(int32_t) + // Offset Into Abbrev. Section
1958 sizeof(int8_t); // Pointer Size (in bytes)
1960 Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1961 Asm->EmitInt32(ContentSize);
1962 Asm->OutStreamer.AddComment("DWARF version number");
1963 Asm->EmitInt16(dwarf::DWARF_VERSION);
1964 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1965 Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
1967 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1968 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1970 DD->emitDIE(Die, Abbreviations);
1971 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(),
1972 TheCU->getUniqueID()));
1976 /// For a given compile unit DIE, returns offset from beginning of debug info.
1977 unsigned DwarfUnits::getCUOffset(DIE *Die) {
1978 assert(Die->getTag() == dwarf::DW_TAG_compile_unit &&
1979 "Input DIE should be compile unit in getCUOffset.");
1980 for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1981 E = CUs.end(); I != E; ++I) {
1982 CompileUnit *TheCU = *I;
1983 if (TheCU->getCUDie() == Die)
1984 return TheCU->getDebugInfoOffset();
1986 llvm_unreachable("The compile unit DIE should belong to CUs in DwarfUnits.");
1989 // Emit the debug info section.
1990 void DwarfDebug::emitDebugInfo() {
1991 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1993 Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(),
1994 Asm->getObjFileLowering().getDwarfAbbrevSection(),
1995 DwarfAbbrevSectionSym);
1998 // Emit the abbreviation section.
1999 void DwarfDebug::emitAbbreviations() {
2000 if (!useSplitDwarf())
2001 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
2004 emitSkeletonAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
2007 void DwarfDebug::emitAbbrevs(const MCSection *Section,
2008 std::vector<DIEAbbrev *> *Abbrevs) {
2009 // Check to see if it is worth the effort.
2010 if (!Abbrevs->empty()) {
2011 // Start the debug abbrev section.
2012 Asm->OutStreamer.SwitchSection(Section);
2014 MCSymbol *Begin = Asm->GetTempSymbol(Section->getLabelBeginName());
2015 Asm->OutStreamer.EmitLabel(Begin);
2017 // For each abbrevation.
2018 for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
2019 // Get abbreviation data
2020 const DIEAbbrev *Abbrev = Abbrevs->at(i);
2022 // Emit the abbrevations code (base 1 index.)
2023 Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2025 // Emit the abbreviations data.
2029 // Mark end of abbreviations.
2030 Asm->EmitULEB128(0, "EOM(3)");
2032 MCSymbol *End = Asm->GetTempSymbol(Section->getLabelEndName());
2033 Asm->OutStreamer.EmitLabel(End);
2037 // Emit the last address of the section and the end of the line matrix.
2038 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2039 // Define last address of section.
2040 Asm->OutStreamer.AddComment("Extended Op");
2043 Asm->OutStreamer.AddComment("Op size");
2044 Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
2045 Asm->OutStreamer.AddComment("DW_LNE_set_address");
2046 Asm->EmitInt8(dwarf::DW_LNE_set_address);
2048 Asm->OutStreamer.AddComment("Section end label");
2050 Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2051 Asm->getDataLayout().getPointerSize());
2053 // Mark end of matrix.
2054 Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2060 // Emit visible names into a hashed accelerator table section.
2061 void DwarfDebug::emitAccelNames() {
2062 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2063 dwarf::DW_FORM_data4));
2064 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2065 E = CUMap.end(); I != E; ++I) {
2066 CompileUnit *TheCU = I->second;
2067 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
2068 for (StringMap<std::vector<DIE*> >::const_iterator
2069 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2070 const char *Name = GI->getKeyData();
2071 const std::vector<DIE *> &Entities = GI->second;
2072 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2073 DE = Entities.end(); DI != DE; ++DI)
2074 AT.AddName(Name, (*DI));
2078 AT.FinalizeTable(Asm, "Names");
2079 Asm->OutStreamer.SwitchSection(
2080 Asm->getObjFileLowering().getDwarfAccelNamesSection());
2081 MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2082 Asm->OutStreamer.EmitLabel(SectionBegin);
2084 // Emit the full data.
2085 AT.Emit(Asm, SectionBegin, &InfoHolder);
2088 // Emit objective C classes and categories into a hashed accelerator table
2090 void DwarfDebug::emitAccelObjC() {
2091 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2092 dwarf::DW_FORM_data4));
2093 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2094 E = CUMap.end(); I != E; ++I) {
2095 CompileUnit *TheCU = I->second;
2096 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
2097 for (StringMap<std::vector<DIE*> >::const_iterator
2098 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2099 const char *Name = GI->getKeyData();
2100 const std::vector<DIE *> &Entities = GI->second;
2101 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2102 DE = Entities.end(); DI != DE; ++DI)
2103 AT.AddName(Name, (*DI));
2107 AT.FinalizeTable(Asm, "ObjC");
2108 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2109 .getDwarfAccelObjCSection());
2110 MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2111 Asm->OutStreamer.EmitLabel(SectionBegin);
2113 // Emit the full data.
2114 AT.Emit(Asm, SectionBegin, &InfoHolder);
2117 // Emit namespace dies into a hashed accelerator table.
2118 void DwarfDebug::emitAccelNamespaces() {
2119 DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2120 dwarf::DW_FORM_data4));
2121 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2122 E = CUMap.end(); I != E; ++I) {
2123 CompileUnit *TheCU = I->second;
2124 const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
2125 for (StringMap<std::vector<DIE*> >::const_iterator
2126 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2127 const char *Name = GI->getKeyData();
2128 const std::vector<DIE *> &Entities = GI->second;
2129 for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2130 DE = Entities.end(); DI != DE; ++DI)
2131 AT.AddName(Name, (*DI));
2135 AT.FinalizeTable(Asm, "namespac");
2136 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2137 .getDwarfAccelNamespaceSection());
2138 MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2139 Asm->OutStreamer.EmitLabel(SectionBegin);
2141 // Emit the full data.
2142 AT.Emit(Asm, SectionBegin, &InfoHolder);
2145 // Emit type dies into a hashed accelerator table.
2146 void DwarfDebug::emitAccelTypes() {
2147 std::vector<DwarfAccelTable::Atom> Atoms;
2148 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
2149 dwarf::DW_FORM_data4));
2150 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
2151 dwarf::DW_FORM_data2));
2152 Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
2153 dwarf::DW_FORM_data1));
2154 DwarfAccelTable AT(Atoms);
2155 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2156 E = CUMap.end(); I != E; ++I) {
2157 CompileUnit *TheCU = I->second;
2158 const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
2159 = TheCU->getAccelTypes();
2160 for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
2161 GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2162 const char *Name = GI->getKeyData();
2163 const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2164 for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
2165 = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
2166 AT.AddName(Name, (*DI).first, (*DI).second);
2170 AT.FinalizeTable(Asm, "types");
2171 Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2172 .getDwarfAccelTypesSection());
2173 MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2174 Asm->OutStreamer.EmitLabel(SectionBegin);
2176 // Emit the full data.
2177 AT.Emit(Asm, SectionBegin, &InfoHolder);
2180 /// emitDebugPubnames - Emit visible names into a debug pubnames section.
2182 void DwarfDebug::emitDebugPubnames() {
2183 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2185 typedef DenseMap<const MDNode*, CompileUnit*> CUMapType;
2186 for (CUMapType::iterator I = CUMap.begin(), E = CUMap.end(); I != E; ++I) {
2187 CompileUnit *TheCU = I->second;
2188 unsigned ID = TheCU->getUniqueID();
2190 if (TheCU->getGlobalNames().empty())
2193 // Start the dwarf pubnames section.
2194 Asm->OutStreamer.SwitchSection(
2195 Asm->getObjFileLowering().getDwarfPubNamesSection());
2197 Asm->OutStreamer.AddComment("Length of Public Names Info");
2198 Asm->EmitLabelDifference(Asm->GetTempSymbol("pubnames_end", ID),
2199 Asm->GetTempSymbol("pubnames_begin", ID), 4);
2201 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
2203 Asm->OutStreamer.AddComment("DWARF Version");
2204 Asm->EmitInt16(dwarf::DWARF_VERSION);
2206 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2207 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2208 DwarfInfoSectionSym);
2210 Asm->OutStreamer.AddComment("Compilation Unit Length");
2211 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(), ID),
2212 Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2215 const StringMap<DIE*> &Globals = TheCU->getGlobalNames();
2216 for (StringMap<DIE*>::const_iterator
2217 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2218 const char *Name = GI->getKeyData();
2219 const DIE *Entity = GI->second;
2221 Asm->OutStreamer.AddComment("DIE offset");
2222 Asm->EmitInt32(Entity->getOffset());
2224 if (Asm->isVerbose())
2225 Asm->OutStreamer.AddComment("External Name");
2226 Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
2229 Asm->OutStreamer.AddComment("End Mark");
2231 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end", ID));
2235 void DwarfDebug::emitDebugPubTypes() {
2236 for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2237 E = CUMap.end(); I != E; ++I) {
2238 CompileUnit *TheCU = I->second;
2239 // Start the dwarf pubtypes section.
2240 Asm->OutStreamer.SwitchSection(
2241 Asm->getObjFileLowering().getDwarfPubTypesSection());
2242 Asm->OutStreamer.AddComment("Length of Public Types Info");
2243 Asm->EmitLabelDifference(
2244 Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2245 Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2247 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
2248 TheCU->getUniqueID()));
2250 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
2251 Asm->EmitInt16(dwarf::DWARF_VERSION);
2253 Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2254 const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2255 Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(),
2256 TheCU->getUniqueID()),
2257 DwarfInfoSectionSym);
2259 Asm->OutStreamer.AddComment("Compilation Unit Length");
2260 Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(),
2261 TheCU->getUniqueID()),
2262 Asm->GetTempSymbol(ISec->getLabelBeginName(),
2263 TheCU->getUniqueID()),
2266 const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
2267 for (StringMap<DIE*>::const_iterator
2268 GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2269 const char *Name = GI->getKeyData();
2270 DIE *Entity = GI->second;
2272 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2273 Asm->EmitInt32(Entity->getOffset());
2275 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
2276 // Emit the name with a terminating null byte.
2277 Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2280 Asm->OutStreamer.AddComment("End Mark");
2282 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
2283 TheCU->getUniqueID()));
2287 // Emit strings into a string section.
2288 void DwarfUnits::emitStrings(const MCSection *StrSection,
2289 const MCSection *OffsetSection = NULL,
2290 const MCSymbol *StrSecSym = NULL) {
2292 if (StringPool.empty()) return;
2294 // Start the dwarf str section.
2295 Asm->OutStreamer.SwitchSection(StrSection);
2297 // Get all of the string pool entries and put them in an array by their ID so
2298 // we can sort them.
2299 SmallVector<std::pair<unsigned,
2300 StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2302 for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2303 I = StringPool.begin(), E = StringPool.end();
2305 Entries.push_back(std::make_pair(I->second.second, &*I));
2307 array_pod_sort(Entries.begin(), Entries.end());
2309 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2310 // Emit a label for reference from debug information entries.
2311 Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2313 // Emit the string itself with a terminating null byte.
2314 Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2315 Entries[i].second->getKeyLength()+1));
2318 // If we've got an offset section go ahead and emit that now as well.
2319 if (OffsetSection) {
2320 Asm->OutStreamer.SwitchSection(OffsetSection);
2321 unsigned offset = 0;
2322 unsigned size = 4; // FIXME: DWARF64 is 8.
2323 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2324 Asm->OutStreamer.EmitIntValue(offset, size);
2325 offset += Entries[i].second->getKeyLength() + 1;
2330 // Emit strings into a string section.
2331 void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2333 if (AddressPool.empty()) return;
2335 // Start the dwarf addr section.
2336 Asm->OutStreamer.SwitchSection(AddrSection);
2338 // Get all of the string pool entries and put them in an array by their ID so
2339 // we can sort them.
2340 SmallVector<std::pair<unsigned,
2341 std::pair<MCSymbol*, unsigned>* >, 64> Entries;
2343 for (DenseMap<MCSymbol*, std::pair<MCSymbol*, unsigned> >::iterator
2344 I = AddressPool.begin(), E = AddressPool.end();
2346 Entries.push_back(std::make_pair(I->second.second, &(I->second)));
2348 array_pod_sort(Entries.begin(), Entries.end());
2350 for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2351 // Emit a label for reference from debug information entries.
2352 MCSymbol *Sym = Entries[i].second->first;
2354 Asm->EmitLabelReference(Entries[i].second->first,
2355 Asm->getDataLayout().getPointerSize());
2357 Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2362 // Emit visible names into a debug str section.
2363 void DwarfDebug::emitDebugStr() {
2364 DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2365 Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2368 // Emit visible names into a debug loc section.
2369 void DwarfDebug::emitDebugLoc() {
2370 if (DotDebugLocEntries.empty())
2373 for (SmallVectorImpl<DotDebugLocEntry>::iterator
2374 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2376 DotDebugLocEntry &Entry = *I;
2377 if (I + 1 != DotDebugLocEntries.end())
2381 // Start the dwarf loc section.
2382 Asm->OutStreamer.SwitchSection(
2383 Asm->getObjFileLowering().getDwarfLocSection());
2384 unsigned char Size = Asm->getDataLayout().getPointerSize();
2385 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2387 for (SmallVectorImpl<DotDebugLocEntry>::iterator
2388 I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2389 I != E; ++I, ++index) {
2390 DotDebugLocEntry &Entry = *I;
2391 if (Entry.isMerged()) continue;
2392 if (Entry.isEmpty()) {
2393 Asm->OutStreamer.EmitIntValue(0, Size);
2394 Asm->OutStreamer.EmitIntValue(0, Size);
2395 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2397 Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size);
2398 Asm->OutStreamer.EmitSymbolValue(Entry.End, Size);
2399 DIVariable DV(Entry.Variable);
2400 Asm->OutStreamer.AddComment("Loc expr size");
2401 MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2402 MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2403 Asm->EmitLabelDifference(end, begin, 2);
2404 Asm->OutStreamer.EmitLabel(begin);
2405 if (Entry.isInt()) {
2406 DIBasicType BTy(DV.getType());
2408 (BTy.getEncoding() == dwarf::DW_ATE_signed
2409 || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2410 Asm->OutStreamer.AddComment("DW_OP_consts");
2411 Asm->EmitInt8(dwarf::DW_OP_consts);
2412 Asm->EmitSLEB128(Entry.getInt());
2414 Asm->OutStreamer.AddComment("DW_OP_constu");
2415 Asm->EmitInt8(dwarf::DW_OP_constu);
2416 Asm->EmitULEB128(Entry.getInt());
2418 } else if (Entry.isLocation()) {
2419 if (!DV.hasComplexAddress())
2421 Asm->EmitDwarfRegOp(Entry.Loc);
2423 // Complex address entry.
2424 unsigned N = DV.getNumAddrElements();
2426 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2427 if (Entry.Loc.getOffset()) {
2429 Asm->EmitDwarfRegOp(Entry.Loc);
2430 Asm->OutStreamer.AddComment("DW_OP_deref");
2431 Asm->EmitInt8(dwarf::DW_OP_deref);
2432 Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2433 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2434 Asm->EmitSLEB128(DV.getAddrElement(1));
2436 // If first address element is OpPlus then emit
2437 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2438 MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2439 Asm->EmitDwarfRegOp(Loc);
2443 Asm->EmitDwarfRegOp(Entry.Loc);
2446 // Emit remaining complex address elements.
2447 for (; i < N; ++i) {
2448 uint64_t Element = DV.getAddrElement(i);
2449 if (Element == DIBuilder::OpPlus) {
2450 Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2451 Asm->EmitULEB128(DV.getAddrElement(++i));
2452 } else if (Element == DIBuilder::OpDeref) {
2453 if (!Entry.Loc.isReg())
2454 Asm->EmitInt8(dwarf::DW_OP_deref);
2456 llvm_unreachable("unknown Opcode found in complex address");
2460 // else ... ignore constant fp. There is not any good way to
2461 // to represent them here in dwarf.
2462 Asm->OutStreamer.EmitLabel(end);
2467 // Emit visible names into a debug aranges section.
2468 void DwarfDebug::emitDebugARanges() {
2469 // Start the dwarf aranges section.
2470 Asm->OutStreamer.SwitchSection(
2471 Asm->getObjFileLowering().getDwarfARangesSection());
2474 // Emit visible names into a debug ranges section.
2475 void DwarfDebug::emitDebugRanges() {
2476 // Start the dwarf ranges section.
2477 Asm->OutStreamer.SwitchSection(
2478 Asm->getObjFileLowering().getDwarfRangesSection());
2479 unsigned char Size = Asm->getDataLayout().getPointerSize();
2480 for (SmallVectorImpl<const MCSymbol *>::iterator
2481 I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2484 Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
2486 Asm->OutStreamer.EmitIntValue(0, Size);
2490 // Emit visible names into a debug macinfo section.
2491 void DwarfDebug::emitDebugMacInfo() {
2492 if (const MCSection *LineInfo =
2493 Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2494 // Start the dwarf macinfo section.
2495 Asm->OutStreamer.SwitchSection(LineInfo);
2499 // Emit inline info using following format.
2501 // 1. length of section
2502 // 2. Dwarf version number
2505 // Entries (one "entry" for each function that was inlined):
2507 // 1. offset into __debug_str section for MIPS linkage name, if exists;
2508 // otherwise offset into __debug_str for regular function name.
2509 // 2. offset into __debug_str section for regular function name.
2510 // 3. an unsigned LEB128 number indicating the number of distinct inlining
2511 // instances for the function.
2513 // The rest of the entry consists of a {die_offset, low_pc} pair for each
2514 // inlined instance; the die_offset points to the inlined_subroutine die in the
2515 // __debug_info section, and the low_pc is the starting address for the
2516 // inlining instance.
2517 void DwarfDebug::emitDebugInlineInfo() {
2518 if (!Asm->MAI->doesDwarfUseInlineInfoSection())
2524 Asm->OutStreamer.SwitchSection(
2525 Asm->getObjFileLowering().getDwarfDebugInlineSection());
2527 Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2528 Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2529 Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2531 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2533 Asm->OutStreamer.AddComment("Dwarf Version");
2534 Asm->EmitInt16(dwarf::DWARF_VERSION);
2535 Asm->OutStreamer.AddComment("Address Size (in bytes)");
2536 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2538 for (SmallVectorImpl<const MDNode *>::iterator I = InlinedSPNodes.begin(),
2539 E = InlinedSPNodes.end(); I != E; ++I) {
2541 const MDNode *Node = *I;
2542 DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2543 = InlineInfo.find(Node);
2544 SmallVectorImpl<InlineInfoLabels> &Labels = II->second;
2545 DISubprogram SP(Node);
2546 StringRef LName = SP.getLinkageName();
2547 StringRef Name = SP.getName();
2549 Asm->OutStreamer.AddComment("MIPS linkage name");
2551 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2552 DwarfStrSectionSym);
2554 Asm->EmitSectionOffset(InfoHolder
2555 .getStringPoolEntry(getRealLinkageName(LName)),
2556 DwarfStrSectionSym);
2558 Asm->OutStreamer.AddComment("Function name");
2559 Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
2560 DwarfStrSectionSym);
2561 Asm->EmitULEB128(Labels.size(), "Inline count");
2563 for (SmallVectorImpl<InlineInfoLabels>::iterator LI = Labels.begin(),
2564 LE = Labels.end(); LI != LE; ++LI) {
2565 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2566 Asm->EmitInt32(LI->second->getOffset());
2568 if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2569 Asm->OutStreamer.EmitSymbolValue(LI->first,
2570 Asm->getDataLayout().getPointerSize());
2574 Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2577 // DWARF5 Experimental Separate Dwarf emitters.
2579 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2580 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2581 // DW_AT_ranges_base, DW_AT_addr_base. If DW_AT_ranges is present,
2582 // DW_AT_low_pc and DW_AT_high_pc are not used, and vice versa.
2583 CompileUnit *DwarfDebug::constructSkeletonCU(const MDNode *N) {
2584 DICompileUnit DIUnit(N);
2585 CompilationDir = DIUnit.getDirectory();
2587 DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2588 CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
2589 DIUnit.getLanguage(), Die, N, Asm,
2590 this, &SkeletonHolder);
2592 NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2593 DIUnit.getSplitDebugFilename());
2595 // This should be a unique identifier when we want to build .dwp files.
2596 NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
2598 // Relocate to the beginning of the addr_base section, else 0 for the
2599 // beginning of the one for this compile unit.
2600 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2601 NewCU->addLabel(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset,
2602 DwarfAddrSectionSym);
2604 NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base,
2605 dwarf::DW_FORM_sec_offset, 0);
2607 // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2608 // into an entity. We're using 0, or a NULL label for this.
2609 NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2611 // DW_AT_stmt_list is a offset of line number information for this
2612 // compile unit in debug_line section.
2613 // FIXME: Should handle multiple compile units.
2614 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2615 NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2616 DwarfLineSectionSym);
2618 NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2620 if (!CompilationDir.empty())
2621 NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2623 SkeletonHolder.addUnit(NewCU);
2624 SkeletonCUs.push_back(NewCU);
2629 void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
2630 assert(useSplitDwarf() && "No split dwarf debug info?");
2631 emitAbbrevs(Section, &SkeletonAbbrevs);
2634 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2635 // compile units that would normally be in debug_info.
2636 void DwarfDebug::emitDebugInfoDWO() {
2637 assert(useSplitDwarf() && "No split dwarf debug info?");
2638 InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
2639 Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2640 DwarfAbbrevDWOSectionSym);
2643 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2644 // abbreviations for the .debug_info.dwo section.
2645 void DwarfDebug::emitDebugAbbrevDWO() {
2646 assert(useSplitDwarf() && "No split dwarf?");
2647 emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2651 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2652 // string section and is identical in format to traditional .debug_str
2654 void DwarfDebug::emitDebugStrDWO() {
2655 assert(useSplitDwarf() && "No split dwarf?");
2656 const MCSection *OffSec = Asm->getObjFileLowering()
2657 .getDwarfStrOffDWOSection();
2658 const MCSymbol *StrSym = DwarfStrSectionSym;
2659 InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),