1 //===- llvm/CodeGen/DwarfDebug.cpp - Dwarf Debug Framework ----------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file contains support for writing dwarf debug info into asm files.
11 //===----------------------------------------------------------------------===//
13 #include "DwarfDebug.h"
14 #include "ByteStreamer.h"
16 #include "DebugLocEntry.h"
17 #include "DebugLocStream.h"
18 #include "DwarfCompileUnit.h"
19 #include "DwarfExpression.h"
20 #include "DwarfFile.h"
21 #include "DwarfUnit.h"
22 #include "llvm/ADT/APInt.h"
23 #include "llvm/ADT/DenseMap.h"
24 #include "llvm/ADT/DenseSet.h"
25 #include "llvm/ADT/MapVector.h"
26 #include "llvm/ADT/STLExtras.h"
27 #include "llvm/ADT/SmallVector.h"
28 #include "llvm/ADT/StringRef.h"
29 #include "llvm/ADT/Statistic.h"
30 #include "llvm/ADT/Triple.h"
31 #include "llvm/ADT/Twine.h"
32 #include "llvm/BinaryFormat/Dwarf.h"
33 #include "llvm/CodeGen/AccelTable.h"
34 #include "llvm/CodeGen/AsmPrinter.h"
35 #include "llvm/CodeGen/DIE.h"
36 #include "llvm/CodeGen/LexicalScopes.h"
37 #include "llvm/CodeGen/MachineBasicBlock.h"
38 #include "llvm/CodeGen/MachineFunction.h"
39 #include "llvm/CodeGen/MachineInstr.h"
40 #include "llvm/CodeGen/MachineModuleInfo.h"
41 #include "llvm/CodeGen/MachineOperand.h"
42 #include "llvm/CodeGen/TargetInstrInfo.h"
43 #include "llvm/CodeGen/TargetLowering.h"
44 #include "llvm/CodeGen/TargetRegisterInfo.h"
45 #include "llvm/CodeGen/TargetSubtargetInfo.h"
46 #include "llvm/DebugInfo/DWARF/DWARFExpression.h"
47 #include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
48 #include "llvm/IR/Constants.h"
49 #include "llvm/IR/DebugInfoMetadata.h"
50 #include "llvm/IR/DebugLoc.h"
51 #include "llvm/IR/Function.h"
52 #include "llvm/IR/GlobalVariable.h"
53 #include "llvm/IR/Module.h"
54 #include "llvm/MC/MCAsmInfo.h"
55 #include "llvm/MC/MCContext.h"
56 #include "llvm/MC/MCDwarf.h"
57 #include "llvm/MC/MCSection.h"
58 #include "llvm/MC/MCStreamer.h"
59 #include "llvm/MC/MCSymbol.h"
60 #include "llvm/MC/MCTargetOptions.h"
61 #include "llvm/MC/MachineLocation.h"
62 #include "llvm/MC/SectionKind.h"
63 #include "llvm/Pass.h"
64 #include "llvm/Support/Casting.h"
65 #include "llvm/Support/CommandLine.h"
66 #include "llvm/Support/Debug.h"
67 #include "llvm/Support/ErrorHandling.h"
68 #include "llvm/Support/MD5.h"
69 #include "llvm/Support/MathExtras.h"
70 #include "llvm/Support/Timer.h"
71 #include "llvm/Support/raw_ostream.h"
72 #include "llvm/Target/TargetLoweringObjectFile.h"
73 #include "llvm/Target/TargetMachine.h"
74 #include "llvm/Target/TargetOptions.h"
86 #define DEBUG_TYPE "dwarfdebug"
88 STATISTIC(NumCSParams
, "Number of dbg call site params created");
91 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden
,
92 cl::desc("Disable debug info printing"));
94 static cl::opt
<bool> UseDwarfRangesBaseAddressSpecifier(
95 "use-dwarf-ranges-base-address-specifier", cl::Hidden
,
96 cl::desc("Use base address specifiers in debug_ranges"), cl::init(false));
98 static cl::opt
<bool> GenerateARangeSection("generate-arange-section",
100 cl::desc("Generate dwarf aranges"),
104 GenerateDwarfTypeUnits("generate-type-units", cl::Hidden
,
105 cl::desc("Generate DWARF4 type units."),
108 static cl::opt
<bool> SplitDwarfCrossCuReferences(
109 "split-dwarf-cross-cu-references", cl::Hidden
,
110 cl::desc("Enable cross-cu references in DWO files"), cl::init(false));
112 enum DefaultOnOff
{ Default
, Enable
, Disable
};
114 static cl::opt
<DefaultOnOff
> UnknownLocations(
115 "use-unknown-locations", cl::Hidden
,
116 cl::desc("Make an absence of debug location information explicit."),
117 cl::values(clEnumVal(Default
, "At top of block or after label"),
118 clEnumVal(Enable
, "In all cases"), clEnumVal(Disable
, "Never")),
121 static cl::opt
<AccelTableKind
> AccelTables(
122 "accel-tables", cl::Hidden
, cl::desc("Output dwarf accelerator tables."),
123 cl::values(clEnumValN(AccelTableKind::Default
, "Default",
124 "Default for platform"),
125 clEnumValN(AccelTableKind::None
, "Disable", "Disabled."),
126 clEnumValN(AccelTableKind::Apple
, "Apple", "Apple"),
127 clEnumValN(AccelTableKind::Dwarf
, "Dwarf", "DWARF")),
128 cl::init(AccelTableKind::Default
));
130 static cl::opt
<DefaultOnOff
>
131 DwarfInlinedStrings("dwarf-inlined-strings", cl::Hidden
,
132 cl::desc("Use inlined strings rather than string section."),
133 cl::values(clEnumVal(Default
, "Default for platform"),
134 clEnumVal(Enable
, "Enabled"),
135 clEnumVal(Disable
, "Disabled")),
139 NoDwarfRangesSection("no-dwarf-ranges-section", cl::Hidden
,
140 cl::desc("Disable emission .debug_ranges section."),
143 static cl::opt
<DefaultOnOff
> DwarfSectionsAsReferences(
144 "dwarf-sections-as-references", cl::Hidden
,
145 cl::desc("Use sections+offset as references rather than labels."),
146 cl::values(clEnumVal(Default
, "Default for platform"),
147 clEnumVal(Enable
, "Enabled"), clEnumVal(Disable
, "Disabled")),
150 enum LinkageNameOption
{
156 static cl::opt
<LinkageNameOption
>
157 DwarfLinkageNames("dwarf-linkage-names", cl::Hidden
,
158 cl::desc("Which DWARF linkage-name attributes to emit."),
159 cl::values(clEnumValN(DefaultLinkageNames
, "Default",
160 "Default for platform"),
161 clEnumValN(AllLinkageNames
, "All", "All"),
162 clEnumValN(AbstractLinkageNames
, "Abstract",
163 "Abstract subprograms")),
164 cl::init(DefaultLinkageNames
));
166 static const char *const DWARFGroupName
= "dwarf";
167 static const char *const DWARFGroupDescription
= "DWARF Emission";
168 static const char *const DbgTimerName
= "writer";
169 static const char *const DbgTimerDescription
= "DWARF Debug Writer";
170 static constexpr unsigned ULEB128PadSize
= 4;
172 void DebugLocDwarfExpression::emitOp(uint8_t Op
, const char *Comment
) {
174 Op
, Comment
? Twine(Comment
) + " " + dwarf::OperationEncodingString(Op
)
175 : dwarf::OperationEncodingString(Op
));
178 void DebugLocDwarfExpression::emitSigned(int64_t Value
) {
179 BS
.EmitSLEB128(Value
, Twine(Value
));
182 void DebugLocDwarfExpression::emitUnsigned(uint64_t Value
) {
183 BS
.EmitULEB128(Value
, Twine(Value
));
186 void DebugLocDwarfExpression::emitData1(uint8_t Value
) {
187 BS
.EmitInt8(Value
, Twine(Value
));
190 void DebugLocDwarfExpression::emitBaseTypeRef(uint64_t Idx
) {
191 assert(Idx
< (1ULL << (ULEB128PadSize
* 7)) && "Idx wont fit");
192 BS
.EmitULEB128(Idx
, Twine(Idx
), ULEB128PadSize
);
195 bool DebugLocDwarfExpression::isFrameRegister(const TargetRegisterInfo
&TRI
,
196 unsigned MachineReg
) {
197 // This information is not available while emitting .debug_loc entries.
201 bool DbgVariable::isBlockByrefVariable() const {
202 assert(getVariable() && "Invalid complex DbgVariable!");
203 return getVariable()->getType()->isBlockByrefStruct();
206 const DIType
*DbgVariable::getType() const {
207 DIType
*Ty
= getVariable()->getType();
208 // FIXME: isBlockByrefVariable should be reformulated in terms of complex
209 // addresses instead.
210 if (Ty
->isBlockByrefStruct()) {
211 /* Byref variables, in Blocks, are declared by the programmer as
212 "SomeType VarName;", but the compiler creates a
213 __Block_byref_x_VarName struct, and gives the variable VarName
214 either the struct, or a pointer to the struct, as its type. This
215 is necessary for various behind-the-scenes things the compiler
216 needs to do with by-reference variables in blocks.
218 However, as far as the original *programmer* is concerned, the
219 variable should still have type 'SomeType', as originally declared.
221 The following function dives into the __Block_byref_x_VarName
222 struct to find the original type of the variable. This will be
223 passed back to the code generating the type for the Debug
224 Information Entry for the variable 'VarName'. 'VarName' will then
225 have the original type 'SomeType' in its debug information.
227 The original type 'SomeType' will be the type of the field named
228 'VarName' inside the __Block_byref_x_VarName struct.
230 NOTE: In order for this to not completely fail on the debugger
231 side, the Debug Information Entry for the variable VarName needs to
232 have a DW_AT_location that tells the debugger how to unwind through
233 the pointers and __Block_byref_x_VarName struct to find the actual
234 value of the variable. The function addBlockByrefType does this. */
235 DIType
*subType
= Ty
;
236 uint16_t tag
= Ty
->getTag();
238 if (tag
== dwarf::DW_TAG_pointer_type
)
239 subType
= cast
<DIDerivedType
>(Ty
)->getBaseType();
241 auto Elements
= cast
<DICompositeType
>(subType
)->getElements();
242 for (unsigned i
= 0, N
= Elements
.size(); i
< N
; ++i
) {
243 auto *DT
= cast
<DIDerivedType
>(Elements
[i
]);
244 if (getName() == DT
->getName())
245 return DT
->getBaseType();
251 /// Get .debug_loc entry for the instruction range starting at MI.
252 static DbgValueLoc
getDebugLocValue(const MachineInstr
*MI
) {
253 const DIExpression
*Expr
= MI
->getDebugExpression();
254 assert(MI
->getNumOperands() == 4);
255 if (MI
->getOperand(0).isReg()) {
256 auto RegOp
= MI
->getOperand(0);
257 auto Op1
= MI
->getOperand(1);
258 // If the second operand is an immediate, this is a
259 // register-indirect address.
260 assert((!Op1
.isImm() || (Op1
.getImm() == 0)) && "unexpected offset");
261 MachineLocation
MLoc(RegOp
.getReg(), Op1
.isImm());
262 return DbgValueLoc(Expr
, MLoc
);
264 if (MI
->getOperand(0).isImm())
265 return DbgValueLoc(Expr
, MI
->getOperand(0).getImm());
266 if (MI
->getOperand(0).isFPImm())
267 return DbgValueLoc(Expr
, MI
->getOperand(0).getFPImm());
268 if (MI
->getOperand(0).isCImm())
269 return DbgValueLoc(Expr
, MI
->getOperand(0).getCImm());
271 llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!");
274 void DbgVariable::initializeDbgValue(const MachineInstr
*DbgValue
) {
275 assert(FrameIndexExprs
.empty() && "Already initialized?");
276 assert(!ValueLoc
.get() && "Already initialized?");
278 assert(getVariable() == DbgValue
->getDebugVariable() && "Wrong variable");
279 assert(getInlinedAt() == DbgValue
->getDebugLoc()->getInlinedAt() &&
282 ValueLoc
= llvm::make_unique
<DbgValueLoc
>(getDebugLocValue(DbgValue
));
283 if (auto *E
= DbgValue
->getDebugExpression())
284 if (E
->getNumElements())
285 FrameIndexExprs
.push_back({0, E
});
288 ArrayRef
<DbgVariable::FrameIndexExpr
> DbgVariable::getFrameIndexExprs() const {
289 if (FrameIndexExprs
.size() == 1)
290 return FrameIndexExprs
;
292 assert(llvm::all_of(FrameIndexExprs
,
293 [](const FrameIndexExpr
&A
) {
294 return A
.Expr
->isFragment();
296 "multiple FI expressions without DW_OP_LLVM_fragment");
297 llvm::sort(FrameIndexExprs
,
298 [](const FrameIndexExpr
&A
, const FrameIndexExpr
&B
) -> bool {
299 return A
.Expr
->getFragmentInfo()->OffsetInBits
<
300 B
.Expr
->getFragmentInfo()->OffsetInBits
;
303 return FrameIndexExprs
;
306 void DbgVariable::addMMIEntry(const DbgVariable
&V
) {
307 assert(DebugLocListIndex
== ~0U && !ValueLoc
.get() && "not an MMI entry");
308 assert(V
.DebugLocListIndex
== ~0U && !V
.ValueLoc
.get() && "not an MMI entry");
309 assert(V
.getVariable() == getVariable() && "conflicting variable");
310 assert(V
.getInlinedAt() == getInlinedAt() && "conflicting inlined-at location");
312 assert(!FrameIndexExprs
.empty() && "Expected an MMI entry");
313 assert(!V
.FrameIndexExprs
.empty() && "Expected an MMI entry");
315 // FIXME: This logic should not be necessary anymore, as we now have proper
316 // deduplication. However, without it, we currently run into the assertion
317 // below, which means that we are likely dealing with broken input, i.e. two
318 // non-fragment entries for the same variable at different frame indices.
319 if (FrameIndexExprs
.size()) {
320 auto *Expr
= FrameIndexExprs
.back().Expr
;
321 if (!Expr
|| !Expr
->isFragment())
325 for (const auto &FIE
: V
.FrameIndexExprs
)
326 // Ignore duplicate entries.
327 if (llvm::none_of(FrameIndexExprs
, [&](const FrameIndexExpr
&Other
) {
328 return FIE
.FI
== Other
.FI
&& FIE
.Expr
== Other
.Expr
;
330 FrameIndexExprs
.push_back(FIE
);
332 assert((FrameIndexExprs
.size() == 1 ||
333 llvm::all_of(FrameIndexExprs
,
334 [](FrameIndexExpr
&FIE
) {
335 return FIE
.Expr
&& FIE
.Expr
->isFragment();
337 "conflicting locations for variable");
340 static AccelTableKind
computeAccelTableKind(unsigned DwarfVersion
,
341 bool GenerateTypeUnits
,
344 // Honor an explicit request.
345 if (AccelTables
!= AccelTableKind::Default
)
348 // Accelerator tables with type units are currently not supported.
349 if (GenerateTypeUnits
)
350 return AccelTableKind::None
;
352 // Accelerator tables get emitted if targetting DWARF v5 or LLDB. DWARF v5
353 // always implies debug_names. For lower standard versions we use apple
354 // accelerator tables on apple platforms and debug_names elsewhere.
355 if (DwarfVersion
>= 5)
356 return AccelTableKind::Dwarf
;
357 if (Tuning
== DebuggerKind::LLDB
)
358 return TT
.isOSBinFormatMachO() ? AccelTableKind::Apple
359 : AccelTableKind::Dwarf
;
360 return AccelTableKind::None
;
363 DwarfDebug::DwarfDebug(AsmPrinter
*A
, Module
*M
)
364 : DebugHandlerBase(A
), DebugLocs(A
->OutStreamer
->isVerboseAsm()),
365 InfoHolder(A
, "info_string", DIEValueAllocator
),
366 SkeletonHolder(A
, "skel_string", DIEValueAllocator
),
367 IsDarwin(A
->TM
.getTargetTriple().isOSDarwin()) {
368 const Triple
&TT
= Asm
->TM
.getTargetTriple();
370 // Make sure we know our "debugger tuning". The target option takes
371 // precedence; fall back to triple-based defaults.
372 if (Asm
->TM
.Options
.DebuggerTuning
!= DebuggerKind::Default
)
373 DebuggerTuning
= Asm
->TM
.Options
.DebuggerTuning
;
375 DebuggerTuning
= DebuggerKind::LLDB
;
376 else if (TT
.isPS4CPU())
377 DebuggerTuning
= DebuggerKind::SCE
;
379 DebuggerTuning
= DebuggerKind::GDB
;
381 if (DwarfInlinedStrings
== Default
)
382 UseInlineStrings
= TT
.isNVPTX();
384 UseInlineStrings
= DwarfInlinedStrings
== Enable
;
386 UseLocSection
= !TT
.isNVPTX();
388 HasAppleExtensionAttributes
= tuneForLLDB();
390 // Handle split DWARF.
391 HasSplitDwarf
= !Asm
->TM
.Options
.MCOptions
.SplitDwarfFile
.empty();
393 // SCE defaults to linkage names only for abstract subprograms.
394 if (DwarfLinkageNames
== DefaultLinkageNames
)
395 UseAllLinkageNames
= !tuneForSCE();
397 UseAllLinkageNames
= DwarfLinkageNames
== AllLinkageNames
;
399 unsigned DwarfVersionNumber
= Asm
->TM
.Options
.MCOptions
.DwarfVersion
;
400 unsigned DwarfVersion
= DwarfVersionNumber
? DwarfVersionNumber
401 : MMI
->getModule()->getDwarfVersion();
402 // Use dwarf 4 by default if nothing is requested. For NVPTX, use dwarf 2.
404 TT
.isNVPTX() ? 2 : (DwarfVersion
? DwarfVersion
: dwarf::DWARF_VERSION
);
406 UseRangesSection
= !NoDwarfRangesSection
&& !TT
.isNVPTX();
408 // Use sections as references. Force for NVPTX.
409 if (DwarfSectionsAsReferences
== Default
)
410 UseSectionsAsReferences
= TT
.isNVPTX();
412 UseSectionsAsReferences
= DwarfSectionsAsReferences
== Enable
;
414 // Don't generate type units for unsupported object file formats.
416 A
->TM
.getTargetTriple().isOSBinFormatELF() && GenerateDwarfTypeUnits
;
418 TheAccelTableKind
= computeAccelTableKind(
419 DwarfVersion
, GenerateTypeUnits
, DebuggerTuning
, A
->TM
.getTargetTriple());
421 // Work around a GDB bug. GDB doesn't support the standard opcode;
422 // SCE doesn't support GNU's; LLDB prefers the standard opcode, which
423 // is defined as of DWARF 3.
424 // See GDB bug 11616 - DW_OP_form_tls_address is unimplemented
425 // https://sourceware.org/bugzilla/show_bug.cgi?id=11616
426 UseGNUTLSOpcode
= tuneForGDB() || DwarfVersion
< 3;
428 // GDB does not fully support the DWARF 4 representation for bitfields.
429 UseDWARF2Bitfields
= (DwarfVersion
< 4) || tuneForGDB();
431 // The DWARF v5 string offsets table has - possibly shared - contributions
432 // from each compile and type unit each preceded by a header. The string
433 // offsets table used by the pre-DWARF v5 split-DWARF implementation uses
434 // a monolithic string offsets table without any header.
435 UseSegmentedStringOffsetsTable
= DwarfVersion
>= 5;
437 Asm
->OutStreamer
->getContext().setDwarfVersion(DwarfVersion
);
440 // Define out of line so we don't have to include DwarfUnit.h in DwarfDebug.h.
441 DwarfDebug::~DwarfDebug() = default;
443 static bool isObjCClass(StringRef Name
) {
444 return Name
.startswith("+") || Name
.startswith("-");
447 static bool hasObjCCategory(StringRef Name
) {
448 if (!isObjCClass(Name
))
451 return Name
.find(") ") != StringRef::npos
;
454 static void getObjCClassCategory(StringRef In
, StringRef
&Class
,
455 StringRef
&Category
) {
456 if (!hasObjCCategory(In
)) {
457 Class
= In
.slice(In
.find('[') + 1, In
.find(' '));
462 Class
= In
.slice(In
.find('[') + 1, In
.find('('));
463 Category
= In
.slice(In
.find('[') + 1, In
.find(' '));
466 static StringRef
getObjCMethodName(StringRef In
) {
467 return In
.slice(In
.find(' ') + 1, In
.find(']'));
470 // Add the various names to the Dwarf accelerator table names.
471 void DwarfDebug::addSubprogramNames(const DICompileUnit
&CU
,
472 const DISubprogram
*SP
, DIE
&Die
) {
473 if (getAccelTableKind() != AccelTableKind::Apple
&&
474 CU
.getNameTableKind() == DICompileUnit::DebugNameTableKind::None
)
477 if (!SP
->isDefinition())
480 if (SP
->getName() != "")
481 addAccelName(CU
, SP
->getName(), Die
);
483 // If the linkage name is different than the name, go ahead and output that as
484 // well into the name table. Only do that if we are going to actually emit
486 if (SP
->getLinkageName() != "" && SP
->getName() != SP
->getLinkageName() &&
487 (useAllLinkageNames() || InfoHolder
.getAbstractSPDies().lookup(SP
)))
488 addAccelName(CU
, SP
->getLinkageName(), Die
);
490 // If this is an Objective-C selector name add it to the ObjC accelerator
492 if (isObjCClass(SP
->getName())) {
493 StringRef Class
, Category
;
494 getObjCClassCategory(SP
->getName(), Class
, Category
);
495 addAccelObjC(CU
, Class
, Die
);
497 addAccelObjC(CU
, Category
, Die
);
498 // Also add the base method name to the name table.
499 addAccelName(CU
, getObjCMethodName(SP
->getName()), Die
);
503 /// Check whether we should create a DIE for the given Scope, return true
504 /// if we don't create a DIE (the corresponding DIE is null).
505 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope
*Scope
) {
506 if (Scope
->isAbstractScope())
509 // We don't create a DIE if there is no Range.
510 const SmallVectorImpl
<InsnRange
> &Ranges
= Scope
->getRanges();
514 if (Ranges
.size() > 1)
517 // We don't create a DIE if we have a single Range and the end label
519 return !getLabelAfterInsn(Ranges
.front().second
);
522 template <typename Func
> static void forBothCUs(DwarfCompileUnit
&CU
, Func F
) {
524 if (auto *SkelCU
= CU
.getSkeleton())
525 if (CU
.getCUNode()->getSplitDebugInlining())
529 bool DwarfDebug::shareAcrossDWOCUs() const {
530 return SplitDwarfCrossCuReferences
;
533 void DwarfDebug::constructAbstractSubprogramScopeDIE(DwarfCompileUnit
&SrcCU
,
534 LexicalScope
*Scope
) {
535 assert(Scope
&& Scope
->getScopeNode());
536 assert(Scope
->isAbstractScope());
537 assert(!Scope
->getInlinedAt());
539 auto *SP
= cast
<DISubprogram
>(Scope
->getScopeNode());
541 // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
542 // was inlined from another compile unit.
543 if (useSplitDwarf() && !shareAcrossDWOCUs() && !SP
->getUnit()->getSplitDebugInlining())
544 // Avoid building the original CU if it won't be used
545 SrcCU
.constructAbstractSubprogramScopeDIE(Scope
);
547 auto &CU
= getOrCreateDwarfCompileUnit(SP
->getUnit());
548 if (auto *SkelCU
= CU
.getSkeleton()) {
549 (shareAcrossDWOCUs() ? CU
: SrcCU
)
550 .constructAbstractSubprogramScopeDIE(Scope
);
551 if (CU
.getCUNode()->getSplitDebugInlining())
552 SkelCU
->constructAbstractSubprogramScopeDIE(Scope
);
554 CU
.constructAbstractSubprogramScopeDIE(Scope
);
558 /// Try to interpret values loaded into registers that forward parameters
559 /// for \p CallMI. Store parameters with interpreted value into \p Params.
560 static void collectCallSiteParameters(const MachineInstr
*CallMI
,
562 auto *MF
= CallMI
->getMF();
563 auto CalleesMap
= MF
->getCallSitesInfo();
564 auto CallFwdRegsInfo
= CalleesMap
.find(CallMI
);
566 // There is no information for the call instruction.
567 if (CallFwdRegsInfo
== CalleesMap
.end())
570 auto *MBB
= CallMI
->getParent();
571 const auto &TRI
= MF
->getSubtarget().getRegisterInfo();
572 const auto &TII
= MF
->getSubtarget().getInstrInfo();
573 const auto &TLI
= MF
->getSubtarget().getTargetLowering();
575 // Skip the call instruction.
576 auto I
= std::next(CallMI
->getReverseIterator());
578 DenseSet
<unsigned> ForwardedRegWorklist
;
579 // Add all the forwarding registers into the ForwardedRegWorklist.
580 for (auto ArgReg
: CallFwdRegsInfo
->second
) {
581 bool InsertedReg
= ForwardedRegWorklist
.insert(ArgReg
.Reg
).second
;
582 assert(InsertedReg
&& "Single register used to forward two arguments?");
586 // We erase, from the ForwardedRegWorklist, those forwarding registers for
587 // which we successfully describe a loaded value (by using
588 // the describeLoadedValue()). For those remaining arguments in the working
589 // list, for which we do not describe a loaded value by
590 // the describeLoadedValue(), we try to generate an entry value expression
591 // for their call site value desctipion, if the call is within the entry MBB.
592 // The RegsForEntryValues maps a forwarding register into the register holding
594 // TODO: Handle situations when call site parameter value can be described
595 // as the entry value within basic blocks other then the first one.
596 bool ShouldTryEmitEntryVals
= MBB
->getIterator() == MF
->begin();
597 DenseMap
<unsigned, unsigned> RegsForEntryValues
;
599 // If the MI is an instruction defining a parameter's forwarding register,
600 // add it into the Defs. If the MI clobbers more then one register, we use
601 // the Defs in order to remove all the registers from
602 // the ForwardedRegWorklist, since we do not support such situations now.
603 auto getForwardingRegsDefinedByMI
= [&](const MachineInstr
&MI
,
604 SmallVectorImpl
<unsigned> &Defs
) {
605 if (MI
.isDebugInstr())
608 for (const MachineOperand
&MO
: MI
.operands()) {
609 if (MO
.isReg() && MO
.isDef() &&
610 Register::isPhysicalRegister(MO
.getReg())) {
611 for (auto FwdReg
: ForwardedRegWorklist
) {
612 if (TRI
->regsOverlap(FwdReg
, MO
.getReg())) {
613 Defs
.push_back(FwdReg
);
621 auto finishCallSiteParam
= [&](DbgValueLoc DbgLocVal
, unsigned Reg
) {
622 unsigned FwdReg
= Reg
;
623 if (ShouldTryEmitEntryVals
) {
624 auto EntryValReg
= RegsForEntryValues
.find(Reg
);
625 if (EntryValReg
!= RegsForEntryValues
.end())
626 FwdReg
= EntryValReg
->second
;
629 DbgCallSiteParam
CSParm(FwdReg
, DbgLocVal
);
630 Params
.push_back(CSParm
);
634 // Search for a loading value in forwaring registers.
635 for (; I
!= MBB
->rend(); ++I
) {
636 // If the next instruction is a call we can not interpret parameter's
637 // forwarding registers or we finished the interpretation of all parameters.
641 if (ForwardedRegWorklist
.empty())
644 SmallVector
<unsigned, 4> Defs
;
645 getForwardingRegsDefinedByMI(*I
, Defs
);
649 // If the MI clobbers more then one forwarding register we must remove
650 // all of them from the working list.
651 for (auto Reg
: Defs
)
652 ForwardedRegWorklist
.erase(Reg
);
653 if (I
->getNumDefs() != 1)
655 unsigned Reg
= Defs
[0];
657 if (auto ParamValue
= TII
->describeLoadedValue(*I
)) {
658 if (ParamValue
->first
->isImm()) {
659 unsigned Val
= ParamValue
->first
->getImm();
660 DbgValueLoc
DbgLocVal(ParamValue
->second
, Val
);
661 finishCallSiteParam(DbgLocVal
, Reg
);
662 } else if (ParamValue
->first
->isReg()) {
663 unsigned RegLoc
= ParamValue
->first
->getReg();
664 unsigned SP
= TLI
->getStackPointerRegisterToSaveRestore();
665 unsigned FP
= TRI
->getFrameRegister(*MF
);
666 bool IsSPorFP
= (RegLoc
== SP
) || (RegLoc
== FP
);
667 if (TRI
->isCalleeSavedPhysReg(RegLoc
, *MF
) || IsSPorFP
) {
668 DbgValueLoc
DbgLocVal(ParamValue
->second
,
669 MachineLocation(RegLoc
,
670 /*IsIndirect=*/IsSPorFP
));
671 finishCallSiteParam(DbgLocVal
, Reg
);
672 } else if (ShouldTryEmitEntryVals
) {
673 ForwardedRegWorklist
.insert(RegLoc
);
674 RegsForEntryValues
[RegLoc
] = Reg
;
680 // Emit the call site parameter's value as an entry value.
681 if (ShouldTryEmitEntryVals
) {
682 // Create an entry value expression where the expression following
683 // the 'DW_OP_entry_value' will be the size of 1 (a register operation).
684 DIExpression
*EntryExpr
= DIExpression::get(MF
->getFunction().getContext(),
685 {dwarf::DW_OP_entry_value
, 1});
686 for (auto RegEntry
: ForwardedRegWorklist
) {
687 unsigned FwdReg
= RegEntry
;
688 auto EntryValReg
= RegsForEntryValues
.find(RegEntry
);
689 if (EntryValReg
!= RegsForEntryValues
.end())
690 FwdReg
= EntryValReg
->second
;
692 DbgValueLoc
DbgLocVal(EntryExpr
, MachineLocation(RegEntry
));
693 DbgCallSiteParam
CSParm(FwdReg
, DbgLocVal
);
694 Params
.push_back(CSParm
);
700 void DwarfDebug::constructCallSiteEntryDIEs(const DISubprogram
&SP
,
701 DwarfCompileUnit
&CU
, DIE
&ScopeDIE
,
702 const MachineFunction
&MF
) {
703 // Add a call site-related attribute (DWARF5, Sec. 3.3.1.3). Do this only if
704 // the subprogram is required to have one.
705 if (!SP
.areAllCallsDescribed() || !SP
.isDefinition())
708 // Use DW_AT_call_all_calls to express that call site entries are present
709 // for both tail and non-tail calls. Don't use DW_AT_call_all_source_calls
710 // because one of its requirements is not met: call site entries for
711 // optimized-out calls are elided.
713 CU
.getDwarf5OrGNUCallSiteAttr(dwarf::DW_AT_call_all_calls
));
715 const TargetInstrInfo
*TII
= MF
.getSubtarget().getInstrInfo();
716 assert(TII
&& "TargetInstrInfo not found: cannot label tail calls");
717 bool ApplyGNUExtensions
= getDwarfVersion() == 4 && tuneForGDB();
719 // Emit call site entries for each call or tail call in the function.
720 for (const MachineBasicBlock
&MBB
: MF
) {
721 for (const MachineInstr
&MI
: MBB
.instrs()) {
722 // Skip instructions which aren't calls. Both calls and tail-calling jump
723 // instructions (e.g TAILJMPd64) are classified correctly here.
727 // TODO: Add support for targets with delay slots (see: beginInstruction).
728 if (MI
.hasDelaySlot())
731 // If this is a direct call, find the callee's subprogram.
732 // In the case of an indirect call find the register that holds
734 const MachineOperand
&CalleeOp
= MI
.getOperand(0);
735 if (!CalleeOp
.isGlobal() && !CalleeOp
.isReg())
738 unsigned CallReg
= 0;
739 const DISubprogram
*CalleeSP
= nullptr;
740 const Function
*CalleeDecl
= nullptr;
741 if (CalleeOp
.isReg()) {
742 CallReg
= CalleeOp
.getReg();
746 CalleeDecl
= dyn_cast
<Function
>(CalleeOp
.getGlobal());
747 if (!CalleeDecl
|| !CalleeDecl
->getSubprogram())
749 CalleeSP
= CalleeDecl
->getSubprogram();
752 // TODO: Omit call site entries for runtime calls (objc_msgSend, etc).
754 bool IsTail
= TII
->isTailCall(MI
);
756 // For tail calls, for non-gdb tuning, no return PC information is needed.
757 // For regular calls (and tail calls in GDB tuning), the return PC
758 // is needed to disambiguate paths in the call graph which could lead to
759 // some target function.
760 const MCExpr
*PCOffset
=
761 (IsTail
&& !tuneForGDB()) ? nullptr
762 : getFunctionLocalOffsetAfterInsn(&MI
);
764 // Address of a call-like instruction for a normal call or a jump-like
765 // instruction for a tail call. This is needed for GDB + DWARF 4 tuning.
766 const MCSymbol
*PCAddr
=
767 ApplyGNUExtensions
? const_cast<MCSymbol
*>(getLabelAfterInsn(&MI
))
770 assert((IsTail
|| PCOffset
|| PCAddr
) &&
771 "Call without return PC information");
773 LLVM_DEBUG(dbgs() << "CallSiteEntry: " << MF
.getName() << " -> "
774 << (CalleeDecl
? CalleeDecl
->getName()
775 : StringRef(MF
.getSubtarget()
778 << (IsTail
? " [IsTail]" : "") << "\n");
781 CU
.constructCallSiteEntryDIE(ScopeDIE
, CalleeSP
, IsTail
, PCAddr
,
784 // For now only GDB supports call site parameter debug info.
785 if (Asm
->TM
.Options
.EnableDebugEntryValues
&&
788 // Try to interpret values of call site parameters.
789 collectCallSiteParameters(&MI
, Params
);
790 CU
.constructCallSiteParmEntryDIEs(CallSiteDIE
, Params
);
796 void DwarfDebug::addGnuPubAttributes(DwarfCompileUnit
&U
, DIE
&D
) const {
797 if (!U
.hasDwarfPubSections())
800 U
.addFlag(D
, dwarf::DW_AT_GNU_pubnames
);
803 void DwarfDebug::finishUnitAttributes(const DICompileUnit
*DIUnit
,
804 DwarfCompileUnit
&NewCU
) {
805 DIE
&Die
= NewCU
.getUnitDie();
806 StringRef FN
= DIUnit
->getFilename();
808 StringRef Producer
= DIUnit
->getProducer();
809 StringRef Flags
= DIUnit
->getFlags();
810 if (!Flags
.empty() && !useAppleExtensionAttributes()) {
811 std::string ProducerWithFlags
= Producer
.str() + " " + Flags
.str();
812 NewCU
.addString(Die
, dwarf::DW_AT_producer
, ProducerWithFlags
);
814 NewCU
.addString(Die
, dwarf::DW_AT_producer
, Producer
);
816 NewCU
.addUInt(Die
, dwarf::DW_AT_language
, dwarf::DW_FORM_data2
,
817 DIUnit
->getSourceLanguage());
818 NewCU
.addString(Die
, dwarf::DW_AT_name
, FN
);
820 // Add DW_str_offsets_base to the unit DIE, except for split units.
821 if (useSegmentedStringOffsetsTable() && !useSplitDwarf())
822 NewCU
.addStringOffsetsStart();
824 if (!useSplitDwarf()) {
825 NewCU
.initStmtList();
827 // If we're using split dwarf the compilation dir is going to be in the
828 // skeleton CU and so we don't need to duplicate it here.
829 if (!CompilationDir
.empty())
830 NewCU
.addString(Die
, dwarf::DW_AT_comp_dir
, CompilationDir
);
832 addGnuPubAttributes(NewCU
, Die
);
835 if (useAppleExtensionAttributes()) {
836 if (DIUnit
->isOptimized())
837 NewCU
.addFlag(Die
, dwarf::DW_AT_APPLE_optimized
);
839 StringRef Flags
= DIUnit
->getFlags();
841 NewCU
.addString(Die
, dwarf::DW_AT_APPLE_flags
, Flags
);
843 if (unsigned RVer
= DIUnit
->getRuntimeVersion())
844 NewCU
.addUInt(Die
, dwarf::DW_AT_APPLE_major_runtime_vers
,
845 dwarf::DW_FORM_data1
, RVer
);
848 if (DIUnit
->getDWOId()) {
849 // This CU is either a clang module DWO or a skeleton CU.
850 NewCU
.addUInt(Die
, dwarf::DW_AT_GNU_dwo_id
, dwarf::DW_FORM_data8
,
852 if (!DIUnit
->getSplitDebugFilename().empty())
853 // This is a prefabricated skeleton CU.
854 NewCU
.addString(Die
, dwarf::DW_AT_GNU_dwo_name
,
855 DIUnit
->getSplitDebugFilename());
858 // Create new DwarfCompileUnit for the given metadata node with tag
859 // DW_TAG_compile_unit.
861 DwarfDebug::getOrCreateDwarfCompileUnit(const DICompileUnit
*DIUnit
) {
862 if (auto *CU
= CUMap
.lookup(DIUnit
))
865 CompilationDir
= DIUnit
->getDirectory();
867 auto OwnedUnit
= llvm::make_unique
<DwarfCompileUnit
>(
868 InfoHolder
.getUnits().size(), DIUnit
, Asm
, this, &InfoHolder
);
869 DwarfCompileUnit
&NewCU
= *OwnedUnit
;
870 InfoHolder
.addUnit(std::move(OwnedUnit
));
872 for (auto *IE
: DIUnit
->getImportedEntities())
873 NewCU
.addImportedEntity(IE
);
875 // LTO with assembly output shares a single line table amongst multiple CUs.
876 // To avoid the compilation directory being ambiguous, let the line table
877 // explicitly describe the directory of all files, never relying on the
878 // compilation directory.
879 if (!Asm
->OutStreamer
->hasRawTextSupport() || SingleCU
)
880 Asm
->OutStreamer
->emitDwarfFile0Directive(
881 CompilationDir
, DIUnit
->getFilename(),
882 NewCU
.getMD5AsBytes(DIUnit
->getFile()), DIUnit
->getSource(),
883 NewCU
.getUniqueID());
885 if (useSplitDwarf()) {
886 NewCU
.setSkeleton(constructSkeletonCU(NewCU
));
887 NewCU
.setSection(Asm
->getObjFileLowering().getDwarfInfoDWOSection());
889 finishUnitAttributes(DIUnit
, NewCU
);
890 NewCU
.setSection(Asm
->getObjFileLowering().getDwarfInfoSection());
893 // Create DIEs for function declarations used for call site debug info.
894 for (auto Scope
: DIUnit
->getRetainedTypes())
895 if (auto *SP
= dyn_cast_or_null
<DISubprogram
>(Scope
))
896 NewCU
.getOrCreateSubprogramDIE(SP
);
898 CUMap
.insert({DIUnit
, &NewCU
});
899 CUDieMap
.insert({&NewCU
.getUnitDie(), &NewCU
});
903 void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit
&TheCU
,
904 const DIImportedEntity
*N
) {
905 if (isa
<DILocalScope
>(N
->getScope()))
907 if (DIE
*D
= TheCU
.getOrCreateContextDIE(N
->getScope()))
908 D
->addChild(TheCU
.constructImportedEntityDIE(N
));
911 /// Sort and unique GVEs by comparing their fragment offset.
912 static SmallVectorImpl
<DwarfCompileUnit::GlobalExpr
> &
913 sortGlobalExprs(SmallVectorImpl
<DwarfCompileUnit::GlobalExpr
> &GVEs
) {
915 GVEs
, [](DwarfCompileUnit::GlobalExpr A
, DwarfCompileUnit::GlobalExpr B
) {
916 // Sort order: first null exprs, then exprs without fragment
917 // info, then sort by fragment offset in bits.
918 // FIXME: Come up with a more comprehensive comparator so
919 // the sorting isn't non-deterministic, and so the following
920 // std::unique call works correctly.
921 if (!A
.Expr
|| !B
.Expr
)
923 auto FragmentA
= A
.Expr
->getFragmentInfo();
924 auto FragmentB
= B
.Expr
->getFragmentInfo();
925 if (!FragmentA
|| !FragmentB
)
927 return FragmentA
->OffsetInBits
< FragmentB
->OffsetInBits
;
929 GVEs
.erase(std::unique(GVEs
.begin(), GVEs
.end(),
930 [](DwarfCompileUnit::GlobalExpr A
,
931 DwarfCompileUnit::GlobalExpr B
) {
932 return A
.Expr
== B
.Expr
;
938 // Emit all Dwarf sections that should come prior to the content. Create
939 // global DIEs and emit initial debug info sections. This is invoked by
940 // the target AsmPrinter.
941 void DwarfDebug::beginModule() {
942 NamedRegionTimer
T(DbgTimerName
, DbgTimerDescription
, DWARFGroupName
,
943 DWARFGroupDescription
, TimePassesIsEnabled
);
944 if (DisableDebugInfoPrinting
) {
945 MMI
->setDebugInfoAvailability(false);
949 const Module
*M
= MMI
->getModule();
951 unsigned NumDebugCUs
= std::distance(M
->debug_compile_units_begin(),
952 M
->debug_compile_units_end());
953 // Tell MMI whether we have debug info.
954 assert(MMI
->hasDebugInfo() == (NumDebugCUs
> 0) &&
955 "DebugInfoAvailabilty initialized unexpectedly");
956 SingleCU
= NumDebugCUs
== 1;
957 DenseMap
<DIGlobalVariable
*, SmallVector
<DwarfCompileUnit::GlobalExpr
, 1>>
959 for (const GlobalVariable
&Global
: M
->globals()) {
960 SmallVector
<DIGlobalVariableExpression
*, 1> GVs
;
961 Global
.getDebugInfo(GVs
);
962 for (auto *GVE
: GVs
)
963 GVMap
[GVE
->getVariable()].push_back({&Global
, GVE
->getExpression()});
966 // Create the symbol that designates the start of the unit's contribution
967 // to the string offsets table. In a split DWARF scenario, only the skeleton
968 // unit has the DW_AT_str_offsets_base attribute (and hence needs the symbol).
969 if (useSegmentedStringOffsetsTable())
970 (useSplitDwarf() ? SkeletonHolder
: InfoHolder
)
971 .setStringOffsetsStartSym(Asm
->createTempSymbol("str_offsets_base"));
974 // Create the symbols that designates the start of the DWARF v5 range list
975 // and locations list tables. They are located past the table headers.
976 if (getDwarfVersion() >= 5) {
977 DwarfFile
&Holder
= useSplitDwarf() ? SkeletonHolder
: InfoHolder
;
978 Holder
.setRnglistsTableBaseSym(
979 Asm
->createTempSymbol("rnglists_table_base"));
980 Holder
.setLoclistsTableBaseSym(
981 Asm
->createTempSymbol("loclists_table_base"));
984 InfoHolder
.setRnglistsTableBaseSym(
985 Asm
->createTempSymbol("rnglists_dwo_table_base"));
988 // Create the symbol that points to the first entry following the debug
989 // address table (.debug_addr) header.
990 AddrPool
.setLabel(Asm
->createTempSymbol("addr_table_base"));
992 for (DICompileUnit
*CUNode
: M
->debug_compile_units()) {
993 // FIXME: Move local imported entities into a list attached to the
994 // subprogram, then this search won't be needed and a
995 // getImportedEntities().empty() test should go below with the rest.
996 bool HasNonLocalImportedEntities
= llvm::any_of(
997 CUNode
->getImportedEntities(), [](const DIImportedEntity
*IE
) {
998 return !isa
<DILocalScope
>(IE
->getScope());
1001 if (!HasNonLocalImportedEntities
&& CUNode
->getEnumTypes().empty() &&
1002 CUNode
->getRetainedTypes().empty() &&
1003 CUNode
->getGlobalVariables().empty() && CUNode
->getMacros().empty())
1006 DwarfCompileUnit
&CU
= getOrCreateDwarfCompileUnit(CUNode
);
1008 // Global Variables.
1009 for (auto *GVE
: CUNode
->getGlobalVariables()) {
1010 // Don't bother adding DIGlobalVariableExpressions listed in the CU if we
1011 // already know about the variable and it isn't adding a constant
1013 auto &GVMapEntry
= GVMap
[GVE
->getVariable()];
1014 auto *Expr
= GVE
->getExpression();
1015 if (!GVMapEntry
.size() || (Expr
&& Expr
->isConstant()))
1016 GVMapEntry
.push_back({nullptr, Expr
});
1018 DenseSet
<DIGlobalVariable
*> Processed
;
1019 for (auto *GVE
: CUNode
->getGlobalVariables()) {
1020 DIGlobalVariable
*GV
= GVE
->getVariable();
1021 if (Processed
.insert(GV
).second
)
1022 CU
.getOrCreateGlobalVariableDIE(GV
, sortGlobalExprs(GVMap
[GV
]));
1025 for (auto *Ty
: CUNode
->getEnumTypes()) {
1026 // The enum types array by design contains pointers to
1027 // MDNodes rather than DIRefs. Unique them here.
1028 CU
.getOrCreateTypeDIE(cast
<DIType
>(Ty
));
1030 for (auto *Ty
: CUNode
->getRetainedTypes()) {
1031 // The retained types array by design contains pointers to
1032 // MDNodes rather than DIRefs. Unique them here.
1033 if (DIType
*RT
= dyn_cast
<DIType
>(Ty
))
1034 // There is no point in force-emitting a forward declaration.
1035 CU
.getOrCreateTypeDIE(RT
);
1037 // Emit imported_modules last so that the relevant context is already
1039 for (auto *IE
: CUNode
->getImportedEntities())
1040 constructAndAddImportedEntityDIE(CU
, IE
);
1044 void DwarfDebug::finishEntityDefinitions() {
1045 for (const auto &Entity
: ConcreteEntities
) {
1046 DIE
*Die
= Entity
->getDIE();
1048 // FIXME: Consider the time-space tradeoff of just storing the unit pointer
1049 // in the ConcreteEntities list, rather than looking it up again here.
1050 // DIE::getUnit isn't simple - it walks parent pointers, etc.
1051 DwarfCompileUnit
*Unit
= CUDieMap
.lookup(Die
->getUnitDie());
1053 Unit
->finishEntityDefinition(Entity
.get());
1057 void DwarfDebug::finishSubprogramDefinitions() {
1058 for (const DISubprogram
*SP
: ProcessedSPNodes
) {
1059 assert(SP
->getUnit()->getEmissionKind() != DICompileUnit::NoDebug
);
1061 getOrCreateDwarfCompileUnit(SP
->getUnit()),
1062 [&](DwarfCompileUnit
&CU
) { CU
.finishSubprogramDefinition(SP
); });
1066 void DwarfDebug::finalizeModuleInfo() {
1067 const TargetLoweringObjectFile
&TLOF
= Asm
->getObjFileLowering();
1069 finishSubprogramDefinitions();
1071 finishEntityDefinitions();
1073 // Include the DWO file name in the hash if there's more than one CU.
1074 // This handles ThinLTO's situation where imported CUs may very easily be
1075 // duplicate with the same CU partially imported into another ThinLTO unit.
1077 if (CUMap
.size() > 1)
1078 DWOName
= Asm
->TM
.Options
.MCOptions
.SplitDwarfFile
;
1080 // Handle anything that needs to be done on a per-unit basis after
1081 // all other generation.
1082 for (const auto &P
: CUMap
) {
1083 auto &TheCU
= *P
.second
;
1084 if (TheCU
.getCUNode()->isDebugDirectivesOnly())
1086 // Emit DW_AT_containing_type attribute to connect types with their
1087 // vtable holding type.
1088 TheCU
.constructContainingTypeDIEs();
1090 // Add CU specific attributes if we need to add any.
1091 // If we're splitting the dwarf out now that we've got the entire
1092 // CU then add the dwo id to it.
1093 auto *SkCU
= TheCU
.getSkeleton();
1094 if (useSplitDwarf() && !empty(TheCU
.getUnitDie().children())) {
1095 finishUnitAttributes(TheCU
.getCUNode(), TheCU
);
1096 TheCU
.addString(TheCU
.getUnitDie(), dwarf::DW_AT_GNU_dwo_name
,
1097 Asm
->TM
.Options
.MCOptions
.SplitDwarfFile
);
1098 SkCU
->addString(SkCU
->getUnitDie(), dwarf::DW_AT_GNU_dwo_name
,
1099 Asm
->TM
.Options
.MCOptions
.SplitDwarfFile
);
1100 // Emit a unique identifier for this CU.
1102 DIEHash(Asm
).computeCUSignature(DWOName
, TheCU
.getUnitDie());
1103 if (getDwarfVersion() >= 5) {
1107 TheCU
.addUInt(TheCU
.getUnitDie(), dwarf::DW_AT_GNU_dwo_id
,
1108 dwarf::DW_FORM_data8
, ID
);
1109 SkCU
->addUInt(SkCU
->getUnitDie(), dwarf::DW_AT_GNU_dwo_id
,
1110 dwarf::DW_FORM_data8
, ID
);
1113 if (getDwarfVersion() < 5 && !SkeletonHolder
.getRangeLists().empty()) {
1114 const MCSymbol
*Sym
= TLOF
.getDwarfRangesSection()->getBeginSymbol();
1115 SkCU
->addSectionLabel(SkCU
->getUnitDie(), dwarf::DW_AT_GNU_ranges_base
,
1119 finishUnitAttributes(SkCU
->getCUNode(), *SkCU
);
1122 // If we have code split among multiple sections or non-contiguous
1123 // ranges of code then emit a DW_AT_ranges attribute on the unit that will
1124 // remain in the .o file, otherwise add a DW_AT_low_pc.
1125 // FIXME: We should use ranges allow reordering of code ala
1126 // .subsections_via_symbols in mach-o. This would mean turning on
1127 // ranges for all subprogram DIEs for mach-o.
1128 DwarfCompileUnit
&U
= SkCU
? *SkCU
: TheCU
;
1130 if (unsigned NumRanges
= TheCU
.getRanges().size()) {
1131 if (NumRanges
> 1 && useRangesSection())
1132 // A DW_AT_low_pc attribute may also be specified in combination with
1133 // DW_AT_ranges to specify the default base address for use in
1134 // location lists (see Section 2.6.2) and range lists (see Section
1136 U
.addUInt(U
.getUnitDie(), dwarf::DW_AT_low_pc
, dwarf::DW_FORM_addr
, 0);
1138 U
.setBaseAddress(TheCU
.getRanges().front().getStart());
1139 U
.attachRangesOrLowHighPC(U
.getUnitDie(), TheCU
.takeRanges());
1142 // We don't keep track of which addresses are used in which CU so this
1143 // is a bit pessimistic under LTO.
1144 if (!AddrPool
.isEmpty() &&
1145 (getDwarfVersion() >= 5 ||
1146 (SkCU
&& !empty(TheCU
.getUnitDie().children()))))
1147 U
.addAddrTableBase();
1149 if (getDwarfVersion() >= 5) {
1150 if (U
.hasRangeLists())
1151 U
.addRnglistsBase();
1153 if (!DebugLocs
.getLists().empty() && !useSplitDwarf())
1154 U
.addLoclistsBase();
1157 auto *CUNode
= cast
<DICompileUnit
>(P
.first
);
1158 // If compile Unit has macros, emit "DW_AT_macro_info" attribute.
1159 if (CUNode
->getMacros())
1160 U
.addSectionLabel(U
.getUnitDie(), dwarf::DW_AT_macro_info
,
1161 U
.getMacroLabelBegin(),
1162 TLOF
.getDwarfMacinfoSection()->getBeginSymbol());
1165 // Emit all frontend-produced Skeleton CUs, i.e., Clang modules.
1166 for (auto *CUNode
: MMI
->getModule()->debug_compile_units())
1167 if (CUNode
->getDWOId())
1168 getOrCreateDwarfCompileUnit(CUNode
);
1170 // Compute DIE offsets and sizes.
1171 InfoHolder
.computeSizeAndOffsets();
1172 if (useSplitDwarf())
1173 SkeletonHolder
.computeSizeAndOffsets();
1176 // Emit all Dwarf sections that should come after the content.
1177 void DwarfDebug::endModule() {
1178 assert(CurFn
== nullptr);
1179 assert(CurMI
== nullptr);
1181 for (const auto &P
: CUMap
) {
1182 auto &CU
= *P
.second
;
1183 CU
.createBaseTypeDIEs();
1186 // If we aren't actually generating debug info (check beginModule -
1187 // conditionalized on !DisableDebugInfoPrinting and the presence of the
1188 // llvm.dbg.cu metadata node)
1189 if (!MMI
->hasDebugInfo())
1192 // Finalize the debug info for the module.
1193 finalizeModuleInfo();
1197 if (useSplitDwarf())
1200 // Emit info into a debug loc section.
1203 // Corresponding abbreviations into a abbrev section.
1204 emitAbbreviations();
1206 // Emit all the DIEs into a debug info section.
1209 // Emit info into a debug aranges section.
1210 if (GenerateARangeSection
)
1213 // Emit info into a debug ranges section.
1216 // Emit info into a debug macinfo section.
1219 if (useSplitDwarf()) {
1222 emitDebugAbbrevDWO();
1224 emitDebugRangesDWO();
1229 // Emit info into the dwarf accelerator table sections.
1230 switch (getAccelTableKind()) {
1231 case AccelTableKind::Apple
:
1234 emitAccelNamespaces();
1237 case AccelTableKind::Dwarf
:
1238 emitAccelDebugNames();
1240 case AccelTableKind::None
:
1242 case AccelTableKind::Default
:
1243 llvm_unreachable("Default should have already been resolved.");
1246 // Emit the pubnames and pubtypes sections if requested.
1247 emitDebugPubSections();
1250 // FIXME: AbstractVariables.clear();
1253 void DwarfDebug::ensureAbstractEntityIsCreated(DwarfCompileUnit
&CU
,
1255 const MDNode
*ScopeNode
) {
1256 if (CU
.getExistingAbstractEntity(Node
))
1259 CU
.createAbstractEntity(Node
, LScopes
.getOrCreateAbstractScope(
1260 cast
<DILocalScope
>(ScopeNode
)));
1263 void DwarfDebug::ensureAbstractEntityIsCreatedIfScoped(DwarfCompileUnit
&CU
,
1264 const DINode
*Node
, const MDNode
*ScopeNode
) {
1265 if (CU
.getExistingAbstractEntity(Node
))
1268 if (LexicalScope
*Scope
=
1269 LScopes
.findAbstractScope(cast_or_null
<DILocalScope
>(ScopeNode
)))
1270 CU
.createAbstractEntity(Node
, Scope
);
1273 // Collect variable information from side table maintained by MF.
1274 void DwarfDebug::collectVariableInfoFromMFTable(
1275 DwarfCompileUnit
&TheCU
, DenseSet
<InlinedEntity
> &Processed
) {
1276 SmallDenseMap
<InlinedEntity
, DbgVariable
*> MFVars
;
1277 for (const auto &VI
: Asm
->MF
->getVariableDbgInfo()) {
1280 assert(VI
.Var
->isValidLocationForIntrinsic(VI
.Loc
) &&
1281 "Expected inlined-at fields to agree");
1283 InlinedEntity
Var(VI
.Var
, VI
.Loc
->getInlinedAt());
1284 Processed
.insert(Var
);
1285 LexicalScope
*Scope
= LScopes
.findLexicalScope(VI
.Loc
);
1287 // If variable scope is not found then skip this variable.
1291 ensureAbstractEntityIsCreatedIfScoped(TheCU
, Var
.first
, Scope
->getScopeNode());
1292 auto RegVar
= llvm::make_unique
<DbgVariable
>(
1293 cast
<DILocalVariable
>(Var
.first
), Var
.second
);
1294 RegVar
->initializeMMI(VI
.Expr
, VI
.Slot
);
1295 if (DbgVariable
*DbgVar
= MFVars
.lookup(Var
))
1296 DbgVar
->addMMIEntry(*RegVar
);
1297 else if (InfoHolder
.addScopeVariable(Scope
, RegVar
.get())) {
1298 MFVars
.insert({Var
, RegVar
.get()});
1299 ConcreteEntities
.push_back(std::move(RegVar
));
1304 /// Determine whether a *singular* DBG_VALUE is valid for the entirety of its
1305 /// enclosing lexical scope. The check ensures there are no other instructions
1306 /// in the same lexical scope preceding the DBG_VALUE and that its range is
1307 /// either open or otherwise rolls off the end of the scope.
1308 static bool validThroughout(LexicalScopes
&LScopes
,
1309 const MachineInstr
*DbgValue
,
1310 const MachineInstr
*RangeEnd
) {
1311 assert(DbgValue
->getDebugLoc() && "DBG_VALUE without a debug location");
1312 auto MBB
= DbgValue
->getParent();
1313 auto DL
= DbgValue
->getDebugLoc();
1314 auto *LScope
= LScopes
.findLexicalScope(DL
);
1315 // Scope doesn't exist; this is a dead DBG_VALUE.
1318 auto &LSRange
= LScope
->getRanges();
1319 if (LSRange
.size() == 0)
1322 // Determine if the DBG_VALUE is valid at the beginning of its lexical block.
1323 const MachineInstr
*LScopeBegin
= LSRange
.front().first
;
1324 // Early exit if the lexical scope begins outside of the current block.
1325 if (LScopeBegin
->getParent() != MBB
)
1327 MachineBasicBlock::const_reverse_iterator
Pred(DbgValue
);
1328 for (++Pred
; Pred
!= MBB
->rend(); ++Pred
) {
1329 if (Pred
->getFlag(MachineInstr::FrameSetup
))
1331 auto PredDL
= Pred
->getDebugLoc();
1332 if (!PredDL
|| Pred
->isMetaInstruction())
1334 // Check whether the instruction preceding the DBG_VALUE is in the same
1335 // (sub)scope as the DBG_VALUE.
1336 if (DL
->getScope() == PredDL
->getScope())
1338 auto *PredScope
= LScopes
.findLexicalScope(PredDL
);
1339 if (!PredScope
|| LScope
->dominates(PredScope
))
1343 // If the range of the DBG_VALUE is open-ended, report success.
1347 // Fail if there are instructions belonging to our scope in another block.
1348 const MachineInstr
*LScopeEnd
= LSRange
.back().second
;
1349 if (LScopeEnd
->getParent() != MBB
)
1352 // Single, constant DBG_VALUEs in the prologue are promoted to be live
1353 // throughout the function. This is a hack, presumably for DWARF v2 and not
1354 // necessarily correct. It would be much better to use a dbg.declare instead
1355 // if we know the constant is live throughout the scope.
1356 if (DbgValue
->getOperand(0).isImm() && MBB
->pred_empty())
1362 /// Build the location list for all DBG_VALUEs in the function that
1363 /// describe the same variable. The resulting DebugLocEntries will have
1364 /// strict monotonically increasing begin addresses and will never
1365 /// overlap. If the resulting list has only one entry that is valid
1366 /// throughout variable's scope return true.
1368 // See the definition of DbgValueHistoryMap::Entry for an explanation of the
1369 // different kinds of history map entries. One thing to be aware of is that if
1370 // a debug value is ended by another entry (rather than being valid until the
1371 // end of the function), that entry's instruction may or may not be included in
1372 // the range, depending on if the entry is a clobbering entry (it has an
1373 // instruction that clobbers one or more preceding locations), or if it is an
1374 // (overlapping) debug value entry. This distinction can be seen in the example
1375 // below. The first debug value is ended by the clobbering entry 2, and the
1376 // second and third debug values are ended by the overlapping debug value entry
1381 // History map entries [type, end index, mi]
1383 // 0 | [DbgValue, 2, DBG_VALUE $reg0, [...] (fragment 0, 32)]
1384 // 1 | | [DbgValue, 4, DBG_VALUE $reg1, [...] (fragment 32, 32)]
1385 // 2 | | [Clobber, $reg0 = [...], -, -]
1386 // 3 | | [DbgValue, 4, DBG_VALUE 123, [...] (fragment 64, 32)]
1387 // 4 [DbgValue, ~0, DBG_VALUE @g, [...] (fragment 0, 96)]
1389 // Output [start, end) [Value...]:
1391 // [0-1) [(reg0, fragment 0, 32)]
1392 // [1-3) [(reg0, fragment 0, 32), (reg1, fragment 32, 32)]
1393 // [3-4) [(reg1, fragment 32, 32), (123, fragment 64, 32)]
1394 // [4-) [(@g, fragment 0, 96)]
1395 bool DwarfDebug::buildLocationList(SmallVectorImpl
<DebugLocEntry
> &DebugLoc
,
1396 const DbgValueHistoryMap::Entries
&Entries
) {
1398 std::pair
<DbgValueHistoryMap::EntryIndex
, DbgValueLoc
>;
1399 SmallVector
<OpenRange
, 4> OpenRanges
;
1400 bool isSafeForSingleLocation
= true;
1401 const MachineInstr
*StartDebugMI
= nullptr;
1402 const MachineInstr
*EndMI
= nullptr;
1404 for (auto EB
= Entries
.begin(), EI
= EB
, EE
= Entries
.end(); EI
!= EE
; ++EI
) {
1405 const MachineInstr
*Instr
= EI
->getInstr();
1407 // Remove all values that are no longer live.
1408 size_t Index
= std::distance(EB
, EI
);
1410 remove_if(OpenRanges
, [&](OpenRange
&R
) { return R
.first
<= Index
; });
1411 OpenRanges
.erase(Last
, OpenRanges
.end());
1413 // If we are dealing with a clobbering entry, this iteration will result in
1414 // a location list entry starting after the clobbering instruction.
1415 const MCSymbol
*StartLabel
=
1416 EI
->isClobber() ? getLabelAfterInsn(Instr
) : getLabelBeforeInsn(Instr
);
1417 assert(StartLabel
&&
1418 "Forgot label before/after instruction starting a range!");
1420 const MCSymbol
*EndLabel
;
1421 if (std::next(EI
) == Entries
.end()) {
1422 EndLabel
= Asm
->getFunctionEnd();
1423 if (EI
->isClobber())
1424 EndMI
= EI
->getInstr();
1426 else if (std::next(EI
)->isClobber())
1427 EndLabel
= getLabelAfterInsn(std::next(EI
)->getInstr());
1429 EndLabel
= getLabelBeforeInsn(std::next(EI
)->getInstr());
1430 assert(EndLabel
&& "Forgot label after instruction ending a range!");
1432 if (EI
->isDbgValue())
1433 LLVM_DEBUG(dbgs() << "DotDebugLoc: " << *Instr
<< "\n");
1435 // If this history map entry has a debug value, add that to the list of
1436 // open ranges and check if its location is valid for a single value
1438 if (EI
->isDbgValue()) {
1439 // Do not add undef debug values, as they are redundant information in
1440 // the location list entries. An undef debug results in an empty location
1441 // description. If there are any non-undef fragments then padding pieces
1442 // with empty location descriptions will automatically be inserted, and if
1443 // all fragments are undef then the whole location list entry is
1445 if (!Instr
->isUndefDebugValue()) {
1446 auto Value
= getDebugLocValue(Instr
);
1447 OpenRanges
.emplace_back(EI
->getEndIndex(), Value
);
1449 // TODO: Add support for single value fragment locations.
1450 if (Instr
->getDebugExpression()->isFragment())
1451 isSafeForSingleLocation
= false;
1454 StartDebugMI
= Instr
;
1456 isSafeForSingleLocation
= false;
1460 // Location list entries with empty location descriptions are redundant
1461 // information in DWARF, so do not emit those.
1462 if (OpenRanges
.empty())
1465 // Omit entries with empty ranges as they do not have any effect in DWARF.
1466 if (StartLabel
== EndLabel
) {
1467 LLVM_DEBUG(dbgs() << "Omitting location list entry with empty range.\n");
1471 SmallVector
<DbgValueLoc
, 4> Values
;
1472 for (auto &R
: OpenRanges
)
1473 Values
.push_back(R
.second
);
1474 DebugLoc
.emplace_back(StartLabel
, EndLabel
, Values
);
1476 // Attempt to coalesce the ranges of two otherwise identical
1478 auto CurEntry
= DebugLoc
.rbegin();
1480 dbgs() << CurEntry
->getValues().size() << " Values:\n";
1481 for (auto &Value
: CurEntry
->getValues())
1483 dbgs() << "-----\n";
1486 auto PrevEntry
= std::next(CurEntry
);
1487 if (PrevEntry
!= DebugLoc
.rend() && PrevEntry
->MergeRanges(*CurEntry
))
1488 DebugLoc
.pop_back();
1491 return DebugLoc
.size() == 1 && isSafeForSingleLocation
&&
1492 validThroughout(LScopes
, StartDebugMI
, EndMI
);
1495 DbgEntity
*DwarfDebug::createConcreteEntity(DwarfCompileUnit
&TheCU
,
1496 LexicalScope
&Scope
,
1498 const DILocation
*Location
,
1499 const MCSymbol
*Sym
) {
1500 ensureAbstractEntityIsCreatedIfScoped(TheCU
, Node
, Scope
.getScopeNode());
1501 if (isa
<const DILocalVariable
>(Node
)) {
1502 ConcreteEntities
.push_back(
1503 llvm::make_unique
<DbgVariable
>(cast
<const DILocalVariable
>(Node
),
1505 InfoHolder
.addScopeVariable(&Scope
,
1506 cast
<DbgVariable
>(ConcreteEntities
.back().get()));
1507 } else if (isa
<const DILabel
>(Node
)) {
1508 ConcreteEntities
.push_back(
1509 llvm::make_unique
<DbgLabel
>(cast
<const DILabel
>(Node
),
1511 InfoHolder
.addScopeLabel(&Scope
,
1512 cast
<DbgLabel
>(ConcreteEntities
.back().get()));
1514 return ConcreteEntities
.back().get();
1517 // Find variables for each lexical scope.
1518 void DwarfDebug::collectEntityInfo(DwarfCompileUnit
&TheCU
,
1519 const DISubprogram
*SP
,
1520 DenseSet
<InlinedEntity
> &Processed
) {
1521 // Grab the variable info that was squirreled away in the MMI side-table.
1522 collectVariableInfoFromMFTable(TheCU
, Processed
);
1524 for (const auto &I
: DbgValues
) {
1525 InlinedEntity IV
= I
.first
;
1526 if (Processed
.count(IV
))
1529 // Instruction ranges, specifying where IV is accessible.
1530 const auto &HistoryMapEntries
= I
.second
;
1531 if (HistoryMapEntries
.empty())
1534 LexicalScope
*Scope
= nullptr;
1535 const DILocalVariable
*LocalVar
= cast
<DILocalVariable
>(IV
.first
);
1536 if (const DILocation
*IA
= IV
.second
)
1537 Scope
= LScopes
.findInlinedScope(LocalVar
->getScope(), IA
);
1539 Scope
= LScopes
.findLexicalScope(LocalVar
->getScope());
1540 // If variable scope is not found then skip this variable.
1544 Processed
.insert(IV
);
1545 DbgVariable
*RegVar
= cast
<DbgVariable
>(createConcreteEntity(TheCU
,
1546 *Scope
, LocalVar
, IV
.second
));
1548 const MachineInstr
*MInsn
= HistoryMapEntries
.front().getInstr();
1549 assert(MInsn
->isDebugValue() && "History must begin with debug value");
1551 // Check if there is a single DBG_VALUE, valid throughout the var's scope.
1552 // If the history map contains a single debug value, there may be an
1553 // additional entry which clobbers the debug value.
1554 size_t HistSize
= HistoryMapEntries
.size();
1555 bool SingleValueWithClobber
=
1556 HistSize
== 2 && HistoryMapEntries
[1].isClobber();
1557 if (HistSize
== 1 || SingleValueWithClobber
) {
1559 SingleValueWithClobber
? HistoryMapEntries
[1].getInstr() : nullptr;
1560 if (validThroughout(LScopes
, MInsn
, End
)) {
1561 RegVar
->initializeDbgValue(MInsn
);
1566 // Do not emit location lists if .debug_loc secton is disabled.
1567 if (!useLocSection())
1570 // Handle multiple DBG_VALUE instructions describing one variable.
1571 DebugLocStream::ListBuilder
List(DebugLocs
, TheCU
, *Asm
, *RegVar
, *MInsn
);
1573 // Build the location list for this variable.
1574 SmallVector
<DebugLocEntry
, 8> Entries
;
1575 bool isValidSingleLocation
= buildLocationList(Entries
, HistoryMapEntries
);
1577 // Check whether buildLocationList managed to merge all locations to one
1578 // that is valid throughout the variable's scope. If so, produce single
1580 if (isValidSingleLocation
) {
1581 RegVar
->initializeDbgValue(Entries
[0].getValues()[0]);
1585 // If the variable has a DIBasicType, extract it. Basic types cannot have
1586 // unique identifiers, so don't bother resolving the type with the
1588 const DIBasicType
*BT
= dyn_cast
<DIBasicType
>(
1589 static_cast<const Metadata
*>(LocalVar
->getType()));
1591 // Finalize the entry by lowering it into a DWARF bytestream.
1592 for (auto &Entry
: Entries
)
1593 Entry
.finalize(*Asm
, List
, BT
, TheCU
);
1596 // For each InlinedEntity collected from DBG_LABEL instructions, convert to
1597 // DWARF-related DbgLabel.
1598 for (const auto &I
: DbgLabels
) {
1599 InlinedEntity IL
= I
.first
;
1600 const MachineInstr
*MI
= I
.second
;
1604 LexicalScope
*Scope
= nullptr;
1605 const DILabel
*Label
= cast
<DILabel
>(IL
.first
);
1606 // Get inlined DILocation if it is inlined label.
1607 if (const DILocation
*IA
= IL
.second
)
1608 Scope
= LScopes
.findInlinedScope(Label
->getScope(), IA
);
1610 Scope
= LScopes
.findLexicalScope(Label
->getScope());
1611 // If label scope is not found then skip this label.
1615 Processed
.insert(IL
);
1616 /// At this point, the temporary label is created.
1617 /// Save the temporary label to DbgLabel entity to get the
1618 /// actually address when generating Dwarf DIE.
1619 MCSymbol
*Sym
= getLabelBeforeInsn(MI
);
1620 createConcreteEntity(TheCU
, *Scope
, Label
, IL
.second
, Sym
);
1623 // Collect info for variables/labels that were optimized out.
1624 for (const DINode
*DN
: SP
->getRetainedNodes()) {
1625 if (!Processed
.insert(InlinedEntity(DN
, nullptr)).second
)
1627 LexicalScope
*Scope
= nullptr;
1628 if (auto *DV
= dyn_cast
<DILocalVariable
>(DN
)) {
1629 Scope
= LScopes
.findLexicalScope(DV
->getScope());
1630 } else if (auto *DL
= dyn_cast
<DILabel
>(DN
)) {
1631 Scope
= LScopes
.findLexicalScope(DL
->getScope());
1635 createConcreteEntity(TheCU
, *Scope
, DN
, nullptr);
1639 // Process beginning of an instruction.
1640 void DwarfDebug::beginInstruction(const MachineInstr
*MI
) {
1641 DebugHandlerBase::beginInstruction(MI
);
1644 const auto *SP
= MI
->getMF()->getFunction().getSubprogram();
1645 if (!SP
|| SP
->getUnit()->getEmissionKind() == DICompileUnit::NoDebug
)
1648 // Check if source location changes, but ignore DBG_VALUE and CFI locations.
1649 // If the instruction is part of the function frame setup code, do not emit
1650 // any line record, as there is no correspondence with any user code.
1651 if (MI
->isMetaInstruction() || MI
->getFlag(MachineInstr::FrameSetup
))
1653 const DebugLoc
&DL
= MI
->getDebugLoc();
1654 // When we emit a line-0 record, we don't update PrevInstLoc; so look at
1655 // the last line number actually emitted, to see if it was line 0.
1656 unsigned LastAsmLine
=
1657 Asm
->OutStreamer
->getContext().getCurrentDwarfLoc().getLine();
1659 // Request a label after the call in order to emit AT_return_pc information
1660 // in call site entries. TODO: Add support for targets with delay slots.
1661 if (SP
->areAllCallsDescribed() && MI
->isCall() && !MI
->hasDelaySlot())
1662 requestLabelAfterInsn(MI
);
1664 if (DL
== PrevInstLoc
) {
1665 // If we have an ongoing unspecified location, nothing to do here.
1668 // We have an explicit location, same as the previous location.
1669 // But we might be coming back to it after a line 0 record.
1670 if (LastAsmLine
== 0 && DL
.getLine() != 0) {
1671 // Reinstate the source location but not marked as a statement.
1672 const MDNode
*Scope
= DL
.getScope();
1673 recordSourceLine(DL
.getLine(), DL
.getCol(), Scope
, /*Flags=*/0);
1679 // We have an unspecified location, which might want to be line 0.
1680 // If we have already emitted a line-0 record, don't repeat it.
1681 if (LastAsmLine
== 0)
1683 // If user said Don't Do That, don't do that.
1684 if (UnknownLocations
== Disable
)
1686 // See if we have a reason to emit a line-0 record now.
1687 // Reasons to emit a line-0 record include:
1688 // - User asked for it (UnknownLocations).
1689 // - Instruction has a label, so it's referenced from somewhere else,
1690 // possibly debug information; we want it to have a source location.
1691 // - Instruction is at the top of a block; we don't want to inherit the
1692 // location from the physically previous (maybe unrelated) block.
1693 if (UnknownLocations
== Enable
|| PrevLabel
||
1694 (PrevInstBB
&& PrevInstBB
!= MI
->getParent())) {
1695 // Preserve the file and column numbers, if we can, to save space in
1696 // the encoded line table.
1697 // Do not update PrevInstLoc, it remembers the last non-0 line.
1698 const MDNode
*Scope
= nullptr;
1699 unsigned Column
= 0;
1701 Scope
= PrevInstLoc
.getScope();
1702 Column
= PrevInstLoc
.getCol();
1704 recordSourceLine(/*Line=*/0, Column
, Scope
, /*Flags=*/0);
1709 // We have an explicit location, different from the previous location.
1710 // Don't repeat a line-0 record, but otherwise emit the new location.
1711 // (The new location might be an explicit line 0, which we do emit.)
1712 if (DL
.getLine() == 0 && LastAsmLine
== 0)
1715 if (DL
== PrologEndLoc
) {
1716 Flags
|= DWARF2_FLAG_PROLOGUE_END
| DWARF2_FLAG_IS_STMT
;
1717 PrologEndLoc
= DebugLoc();
1719 // If the line changed, we call that a new statement; unless we went to
1720 // line 0 and came back, in which case it is not a new statement.
1721 unsigned OldLine
= PrevInstLoc
? PrevInstLoc
.getLine() : LastAsmLine
;
1722 if (DL
.getLine() && DL
.getLine() != OldLine
)
1723 Flags
|= DWARF2_FLAG_IS_STMT
;
1725 const MDNode
*Scope
= DL
.getScope();
1726 recordSourceLine(DL
.getLine(), DL
.getCol(), Scope
, Flags
);
1728 // If we're not at line 0, remember this location.
1733 static DebugLoc
findPrologueEndLoc(const MachineFunction
*MF
) {
1734 // First known non-DBG_VALUE and non-frame setup location marks
1735 // the beginning of the function body.
1736 for (const auto &MBB
: *MF
)
1737 for (const auto &MI
: MBB
)
1738 if (!MI
.isMetaInstruction() && !MI
.getFlag(MachineInstr::FrameSetup
) &&
1740 return MI
.getDebugLoc();
1744 /// Register a source line with debug info. Returns the unique label that was
1745 /// emitted and which provides correspondence to the source line list.
1746 static void recordSourceLine(AsmPrinter
&Asm
, unsigned Line
, unsigned Col
,
1747 const MDNode
*S
, unsigned Flags
, unsigned CUID
,
1748 uint16_t DwarfVersion
,
1749 ArrayRef
<std::unique_ptr
<DwarfCompileUnit
>> DCUs
) {
1751 unsigned FileNo
= 1;
1752 unsigned Discriminator
= 0;
1753 if (auto *Scope
= cast_or_null
<DIScope
>(S
)) {
1754 Fn
= Scope
->getFilename();
1755 if (Line
!= 0 && DwarfVersion
>= 4)
1756 if (auto *LBF
= dyn_cast
<DILexicalBlockFile
>(Scope
))
1757 Discriminator
= LBF
->getDiscriminator();
1759 FileNo
= static_cast<DwarfCompileUnit
&>(*DCUs
[CUID
])
1760 .getOrCreateSourceID(Scope
->getFile());
1762 Asm
.OutStreamer
->EmitDwarfLocDirective(FileNo
, Line
, Col
, Flags
, 0,
1766 DebugLoc
DwarfDebug::emitInitialLocDirective(const MachineFunction
&MF
,
1768 // Get beginning of function.
1769 if (DebugLoc PrologEndLoc
= findPrologueEndLoc(&MF
)) {
1770 // Ensure the compile unit is created if the function is called before
1772 (void)getOrCreateDwarfCompileUnit(
1773 MF
.getFunction().getSubprogram()->getUnit());
1774 // We'd like to list the prologue as "not statements" but GDB behaves
1775 // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1776 const DISubprogram
*SP
= PrologEndLoc
->getInlinedAtScope()->getSubprogram();
1777 ::recordSourceLine(*Asm
, SP
->getScopeLine(), 0, SP
, DWARF2_FLAG_IS_STMT
,
1778 CUID
, getDwarfVersion(), getUnits());
1779 return PrologEndLoc
;
1784 // Gather pre-function debug information. Assumes being called immediately
1785 // after the function entry point has been emitted.
1786 void DwarfDebug::beginFunctionImpl(const MachineFunction
*MF
) {
1789 auto *SP
= MF
->getFunction().getSubprogram();
1790 assert(LScopes
.empty() || SP
== LScopes
.getCurrentFunctionScope()->getScopeNode());
1791 if (SP
->getUnit()->getEmissionKind() == DICompileUnit::NoDebug
)
1794 DwarfCompileUnit
&CU
= getOrCreateDwarfCompileUnit(SP
->getUnit());
1796 // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
1797 // belongs to so that we add to the correct per-cu line table in the
1799 if (Asm
->OutStreamer
->hasRawTextSupport())
1800 // Use a single line table if we are generating assembly.
1801 Asm
->OutStreamer
->getContext().setDwarfCompileUnitID(0);
1803 Asm
->OutStreamer
->getContext().setDwarfCompileUnitID(CU
.getUniqueID());
1805 // Record beginning of function.
1806 PrologEndLoc
= emitInitialLocDirective(
1807 *MF
, Asm
->OutStreamer
->getContext().getDwarfCompileUnitID());
1810 void DwarfDebug::skippedNonDebugFunction() {
1811 // If we don't have a subprogram for this function then there will be a hole
1812 // in the range information. Keep note of this by setting the previously used
1813 // section to nullptr.
1818 // Gather and emit post-function debug information.
1819 void DwarfDebug::endFunctionImpl(const MachineFunction
*MF
) {
1820 const DISubprogram
*SP
= MF
->getFunction().getSubprogram();
1822 assert(CurFn
== MF
&&
1823 "endFunction should be called with the same function as beginFunction");
1825 // Set DwarfDwarfCompileUnitID in MCContext to default value.
1826 Asm
->OutStreamer
->getContext().setDwarfCompileUnitID(0);
1828 LexicalScope
*FnScope
= LScopes
.getCurrentFunctionScope();
1829 assert(!FnScope
|| SP
== FnScope
->getScopeNode());
1830 DwarfCompileUnit
&TheCU
= *CUMap
.lookup(SP
->getUnit());
1831 if (TheCU
.getCUNode()->isDebugDirectivesOnly()) {
1832 PrevLabel
= nullptr;
1837 DenseSet
<InlinedEntity
> Processed
;
1838 collectEntityInfo(TheCU
, SP
, Processed
);
1840 // Add the range of this function to the list of ranges for the CU.
1841 TheCU
.addRange(RangeSpan(Asm
->getFunctionBegin(), Asm
->getFunctionEnd()));
1843 // Under -gmlt, skip building the subprogram if there are no inlined
1844 // subroutines inside it. But with -fdebug-info-for-profiling, the subprogram
1845 // is still needed as we need its source location.
1846 if (!TheCU
.getCUNode()->getDebugInfoForProfiling() &&
1847 TheCU
.getCUNode()->getEmissionKind() == DICompileUnit::LineTablesOnly
&&
1848 LScopes
.getAbstractScopesList().empty() && !IsDarwin
) {
1849 assert(InfoHolder
.getScopeVariables().empty());
1850 PrevLabel
= nullptr;
1856 size_t NumAbstractScopes
= LScopes
.getAbstractScopesList().size();
1858 // Construct abstract scopes.
1859 for (LexicalScope
*AScope
: LScopes
.getAbstractScopesList()) {
1860 auto *SP
= cast
<DISubprogram
>(AScope
->getScopeNode());
1861 for (const DINode
*DN
: SP
->getRetainedNodes()) {
1862 if (!Processed
.insert(InlinedEntity(DN
, nullptr)).second
)
1865 const MDNode
*Scope
= nullptr;
1866 if (auto *DV
= dyn_cast
<DILocalVariable
>(DN
))
1867 Scope
= DV
->getScope();
1868 else if (auto *DL
= dyn_cast
<DILabel
>(DN
))
1869 Scope
= DL
->getScope();
1871 llvm_unreachable("Unexpected DI type!");
1873 // Collect info for variables/labels that were optimized out.
1874 ensureAbstractEntityIsCreated(TheCU
, DN
, Scope
);
1875 assert(LScopes
.getAbstractScopesList().size() == NumAbstractScopes
1876 && "ensureAbstractEntityIsCreated inserted abstract scopes");
1878 constructAbstractSubprogramScopeDIE(TheCU
, AScope
);
1881 ProcessedSPNodes
.insert(SP
);
1882 DIE
&ScopeDIE
= TheCU
.constructSubprogramScopeDIE(SP
, FnScope
);
1883 if (auto *SkelCU
= TheCU
.getSkeleton())
1884 if (!LScopes
.getAbstractScopesList().empty() &&
1885 TheCU
.getCUNode()->getSplitDebugInlining())
1886 SkelCU
->constructSubprogramScopeDIE(SP
, FnScope
);
1888 // Construct call site entries.
1889 constructCallSiteEntryDIEs(*SP
, TheCU
, ScopeDIE
, *MF
);
1892 // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the
1893 // DbgVariables except those that are also in AbstractVariables (since they
1894 // can be used cross-function)
1895 InfoHolder
.getScopeVariables().clear();
1896 InfoHolder
.getScopeLabels().clear();
1897 PrevLabel
= nullptr;
1901 // Register a source line with debug info. Returns the unique label that was
1902 // emitted and which provides correspondence to the source line list.
1903 void DwarfDebug::recordSourceLine(unsigned Line
, unsigned Col
, const MDNode
*S
,
1905 ::recordSourceLine(*Asm
, Line
, Col
, S
, Flags
,
1906 Asm
->OutStreamer
->getContext().getDwarfCompileUnitID(),
1907 getDwarfVersion(), getUnits());
1910 //===----------------------------------------------------------------------===//
1912 //===----------------------------------------------------------------------===//
1914 // Emit the debug info section.
1915 void DwarfDebug::emitDebugInfo() {
1916 DwarfFile
&Holder
= useSplitDwarf() ? SkeletonHolder
: InfoHolder
;
1917 Holder
.emitUnits(/* UseOffsets */ false);
1920 // Emit the abbreviation section.
1921 void DwarfDebug::emitAbbreviations() {
1922 DwarfFile
&Holder
= useSplitDwarf() ? SkeletonHolder
: InfoHolder
;
1924 Holder
.emitAbbrevs(Asm
->getObjFileLowering().getDwarfAbbrevSection());
1927 void DwarfDebug::emitStringOffsetsTableHeader() {
1928 DwarfFile
&Holder
= useSplitDwarf() ? SkeletonHolder
: InfoHolder
;
1929 Holder
.getStringPool().emitStringOffsetsTableHeader(
1930 *Asm
, Asm
->getObjFileLowering().getDwarfStrOffSection(),
1931 Holder
.getStringOffsetsStartSym());
1934 template <typename AccelTableT
>
1935 void DwarfDebug::emitAccel(AccelTableT
&Accel
, MCSection
*Section
,
1936 StringRef TableName
) {
1937 Asm
->OutStreamer
->SwitchSection(Section
);
1939 // Emit the full data.
1940 emitAppleAccelTable(Asm
, Accel
, TableName
, Section
->getBeginSymbol());
1943 void DwarfDebug::emitAccelDebugNames() {
1944 // Don't emit anything if we have no compilation units to index.
1945 if (getUnits().empty())
1948 emitDWARF5AccelTable(Asm
, AccelDebugNames
, *this, getUnits());
1951 // Emit visible names into a hashed accelerator table section.
1952 void DwarfDebug::emitAccelNames() {
1953 emitAccel(AccelNames
, Asm
->getObjFileLowering().getDwarfAccelNamesSection(),
1957 // Emit objective C classes and categories into a hashed accelerator table
1959 void DwarfDebug::emitAccelObjC() {
1960 emitAccel(AccelObjC
, Asm
->getObjFileLowering().getDwarfAccelObjCSection(),
1964 // Emit namespace dies into a hashed accelerator table.
1965 void DwarfDebug::emitAccelNamespaces() {
1966 emitAccel(AccelNamespace
,
1967 Asm
->getObjFileLowering().getDwarfAccelNamespaceSection(),
1971 // Emit type dies into a hashed accelerator table.
1972 void DwarfDebug::emitAccelTypes() {
1973 emitAccel(AccelTypes
, Asm
->getObjFileLowering().getDwarfAccelTypesSection(),
1977 // Public name handling.
1978 // The format for the various pubnames:
1980 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
1981 // for the DIE that is named.
1983 // gnu pubnames - offset/index value/name tuples where the offset is the offset
1984 // into the CU and the index value is computed according to the type of value
1985 // for the DIE that is named.
1987 // For type units the offset is the offset of the skeleton DIE. For split dwarf
1988 // it's the offset within the debug_info/debug_types dwo section, however, the
1989 // reference in the pubname header doesn't change.
1991 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
1992 static dwarf::PubIndexEntryDescriptor
computeIndexValue(DwarfUnit
*CU
,
1994 // Entities that ended up only in a Type Unit reference the CU instead (since
1995 // the pub entry has offsets within the CU there's no real offset that can be
1996 // provided anyway). As it happens all such entities (namespaces and types,
1997 // types only in C++ at that) are rendered as TYPE+EXTERNAL. If this turns out
1998 // not to be true it would be necessary to persist this information from the
1999 // point at which the entry is added to the index data structure - since by
2000 // the time the index is built from that, the original type/namespace DIE in a
2001 // type unit has already been destroyed so it can't be queried for properties
2003 if (Die
->getTag() == dwarf::DW_TAG_compile_unit
)
2004 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE
,
2005 dwarf::GIEL_EXTERNAL
);
2006 dwarf::GDBIndexEntryLinkage Linkage
= dwarf::GIEL_STATIC
;
2008 // We could have a specification DIE that has our most of our knowledge,
2009 // look for that now.
2010 if (DIEValue SpecVal
= Die
->findAttribute(dwarf::DW_AT_specification
)) {
2011 DIE
&SpecDIE
= SpecVal
.getDIEEntry().getEntry();
2012 if (SpecDIE
.findAttribute(dwarf::DW_AT_external
))
2013 Linkage
= dwarf::GIEL_EXTERNAL
;
2014 } else if (Die
->findAttribute(dwarf::DW_AT_external
))
2015 Linkage
= dwarf::GIEL_EXTERNAL
;
2017 switch (Die
->getTag()) {
2018 case dwarf::DW_TAG_class_type
:
2019 case dwarf::DW_TAG_structure_type
:
2020 case dwarf::DW_TAG_union_type
:
2021 case dwarf::DW_TAG_enumeration_type
:
2022 return dwarf::PubIndexEntryDescriptor(
2023 dwarf::GIEK_TYPE
, CU
->getLanguage() != dwarf::DW_LANG_C_plus_plus
2024 ? dwarf::GIEL_STATIC
2025 : dwarf::GIEL_EXTERNAL
);
2026 case dwarf::DW_TAG_typedef
:
2027 case dwarf::DW_TAG_base_type
:
2028 case dwarf::DW_TAG_subrange_type
:
2029 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE
, dwarf::GIEL_STATIC
);
2030 case dwarf::DW_TAG_namespace
:
2031 return dwarf::GIEK_TYPE
;
2032 case dwarf::DW_TAG_subprogram
:
2033 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION
, Linkage
);
2034 case dwarf::DW_TAG_variable
:
2035 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE
, Linkage
);
2036 case dwarf::DW_TAG_enumerator
:
2037 return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE
,
2038 dwarf::GIEL_STATIC
);
2040 return dwarf::GIEK_NONE
;
2044 /// emitDebugPubSections - Emit visible names and types into debug pubnames and
2045 /// pubtypes sections.
2046 void DwarfDebug::emitDebugPubSections() {
2047 for (const auto &NU
: CUMap
) {
2048 DwarfCompileUnit
*TheU
= NU
.second
;
2049 if (!TheU
->hasDwarfPubSections())
2052 bool GnuStyle
= TheU
->getCUNode()->getNameTableKind() ==
2053 DICompileUnit::DebugNameTableKind::GNU
;
2055 Asm
->OutStreamer
->SwitchSection(
2056 GnuStyle
? Asm
->getObjFileLowering().getDwarfGnuPubNamesSection()
2057 : Asm
->getObjFileLowering().getDwarfPubNamesSection());
2058 emitDebugPubSection(GnuStyle
, "Names", TheU
, TheU
->getGlobalNames());
2060 Asm
->OutStreamer
->SwitchSection(
2061 GnuStyle
? Asm
->getObjFileLowering().getDwarfGnuPubTypesSection()
2062 : Asm
->getObjFileLowering().getDwarfPubTypesSection());
2063 emitDebugPubSection(GnuStyle
, "Types", TheU
, TheU
->getGlobalTypes());
2067 void DwarfDebug::emitSectionReference(const DwarfCompileUnit
&CU
) {
2068 if (useSectionsAsReferences())
2069 Asm
->EmitDwarfOffset(CU
.getSection()->getBeginSymbol(),
2070 CU
.getDebugSectionOffset());
2072 Asm
->emitDwarfSymbolReference(CU
.getLabelBegin());
2075 void DwarfDebug::emitDebugPubSection(bool GnuStyle
, StringRef Name
,
2076 DwarfCompileUnit
*TheU
,
2077 const StringMap
<const DIE
*> &Globals
) {
2078 if (auto *Skeleton
= TheU
->getSkeleton())
2082 Asm
->OutStreamer
->AddComment("Length of Public " + Name
+ " Info");
2083 MCSymbol
*BeginLabel
= Asm
->createTempSymbol("pub" + Name
+ "_begin");
2084 MCSymbol
*EndLabel
= Asm
->createTempSymbol("pub" + Name
+ "_end");
2085 Asm
->EmitLabelDifference(EndLabel
, BeginLabel
, 4);
2087 Asm
->OutStreamer
->EmitLabel(BeginLabel
);
2089 Asm
->OutStreamer
->AddComment("DWARF Version");
2090 Asm
->emitInt16(dwarf::DW_PUBNAMES_VERSION
);
2092 Asm
->OutStreamer
->AddComment("Offset of Compilation Unit Info");
2093 emitSectionReference(*TheU
);
2095 Asm
->OutStreamer
->AddComment("Compilation Unit Length");
2096 Asm
->emitInt32(TheU
->getLength());
2098 // Emit the pubnames for this compilation unit.
2099 for (const auto &GI
: Globals
) {
2100 const char *Name
= GI
.getKeyData();
2101 const DIE
*Entity
= GI
.second
;
2103 Asm
->OutStreamer
->AddComment("DIE offset");
2104 Asm
->emitInt32(Entity
->getOffset());
2107 dwarf::PubIndexEntryDescriptor Desc
= computeIndexValue(TheU
, Entity
);
2108 Asm
->OutStreamer
->AddComment(
2109 Twine("Attributes: ") + dwarf::GDBIndexEntryKindString(Desc
.Kind
) +
2110 ", " + dwarf::GDBIndexEntryLinkageString(Desc
.Linkage
));
2111 Asm
->emitInt8(Desc
.toBits());
2114 Asm
->OutStreamer
->AddComment("External Name");
2115 Asm
->OutStreamer
->EmitBytes(StringRef(Name
, GI
.getKeyLength() + 1));
2118 Asm
->OutStreamer
->AddComment("End Mark");
2120 Asm
->OutStreamer
->EmitLabel(EndLabel
);
2123 /// Emit null-terminated strings into a debug str section.
2124 void DwarfDebug::emitDebugStr() {
2125 MCSection
*StringOffsetsSection
= nullptr;
2126 if (useSegmentedStringOffsetsTable()) {
2127 emitStringOffsetsTableHeader();
2128 StringOffsetsSection
= Asm
->getObjFileLowering().getDwarfStrOffSection();
2130 DwarfFile
&Holder
= useSplitDwarf() ? SkeletonHolder
: InfoHolder
;
2131 Holder
.emitStrings(Asm
->getObjFileLowering().getDwarfStrSection(),
2132 StringOffsetsSection
, /* UseRelativeOffsets = */ true);
2135 void DwarfDebug::emitDebugLocEntry(ByteStreamer
&Streamer
,
2136 const DebugLocStream::Entry
&Entry
,
2137 const DwarfCompileUnit
*CU
) {
2138 auto &&Comments
= DebugLocs
.getComments(Entry
);
2139 auto Comment
= Comments
.begin();
2140 auto End
= Comments
.end();
2142 // The expressions are inserted into a byte stream rather early (see
2143 // DwarfExpression::addExpression) so for those ops (e.g. DW_OP_convert) that
2144 // need to reference a base_type DIE the offset of that DIE is not yet known.
2145 // To deal with this we instead insert a placeholder early and then extract
2146 // it here and replace it with the real reference.
2147 unsigned PtrSize
= Asm
->MAI
->getCodePointerSize();
2148 DWARFDataExtractor
Data(StringRef(DebugLocs
.getBytes(Entry
).data(),
2149 DebugLocs
.getBytes(Entry
).size()),
2150 Asm
->getDataLayout().isLittleEndian(), PtrSize
);
2151 DWARFExpression
Expr(Data
, getDwarfVersion(), PtrSize
);
2153 using Encoding
= DWARFExpression::Operation::Encoding
;
2154 uint64_t Offset
= 0;
2155 for (auto &Op
: Expr
) {
2156 assert(Op
.getCode() != dwarf::DW_OP_const_type
&&
2157 "3 operand ops not yet supported");
2158 Streamer
.EmitInt8(Op
.getCode(), Comment
!= End
? *(Comment
++) : "");
2160 for (unsigned I
= 0; I
< 2; ++I
) {
2161 if (Op
.getDescription().Op
[I
] == Encoding::SizeNA
)
2163 if (Op
.getDescription().Op
[I
] == Encoding::BaseTypeRef
) {
2165 uint64_t Offset
= CU
->ExprRefedBaseTypes
[Op
.getRawOperand(I
)].Die
->getOffset();
2166 assert(Offset
< (1ULL << (ULEB128PadSize
* 7)) && "Offset wont fit");
2167 Asm
->EmitULEB128(Offset
, nullptr, ULEB128PadSize
);
2169 // Emit a reference to the 'generic type'.
2170 Asm
->EmitULEB128(0, nullptr, ULEB128PadSize
);
2172 // Make sure comments stay aligned.
2173 for (unsigned J
= 0; J
< ULEB128PadSize
; ++J
)
2177 for (uint64_t J
= Offset
; J
< Op
.getOperandEndOffset(I
); ++J
)
2178 Streamer
.EmitInt8(Data
.getData()[J
], Comment
!= End
? *(Comment
++) : "");
2180 Offset
= Op
.getOperandEndOffset(I
);
2182 assert(Offset
== Op
.getEndOffset());
2186 void DwarfDebug::emitDebugLocValue(const AsmPrinter
&AP
, const DIBasicType
*BT
,
2187 const DbgValueLoc
&Value
,
2188 DwarfExpression
&DwarfExpr
) {
2189 auto *DIExpr
= Value
.getExpression();
2190 DIExpressionCursor
ExprCursor(DIExpr
);
2191 DwarfExpr
.addFragmentOffset(DIExpr
);
2193 if (Value
.isInt()) {
2194 if (BT
&& (BT
->getEncoding() == dwarf::DW_ATE_signed
||
2195 BT
->getEncoding() == dwarf::DW_ATE_signed_char
))
2196 DwarfExpr
.addSignedConstant(Value
.getInt());
2198 DwarfExpr
.addUnsignedConstant(Value
.getInt());
2199 } else if (Value
.isLocation()) {
2200 MachineLocation Location
= Value
.getLoc();
2201 if (Location
.isIndirect())
2202 DwarfExpr
.setMemoryLocationKind();
2203 DIExpressionCursor
Cursor(DIExpr
);
2205 if (DIExpr
->isEntryValue()) {
2206 DwarfExpr
.setEntryValueFlag();
2207 DwarfExpr
.addEntryValueExpression(Cursor
);
2210 const TargetRegisterInfo
&TRI
= *AP
.MF
->getSubtarget().getRegisterInfo();
2211 if (!DwarfExpr
.addMachineRegExpression(TRI
, Cursor
, Location
.getReg()))
2213 return DwarfExpr
.addExpression(std::move(Cursor
));
2214 } else if (Value
.isConstantFP()) {
2215 APInt RawBytes
= Value
.getConstantFP()->getValueAPF().bitcastToAPInt();
2216 DwarfExpr
.addUnsignedConstant(RawBytes
);
2218 DwarfExpr
.addExpression(std::move(ExprCursor
));
2221 void DebugLocEntry::finalize(const AsmPrinter
&AP
,
2222 DebugLocStream::ListBuilder
&List
,
2223 const DIBasicType
*BT
,
2224 DwarfCompileUnit
&TheCU
) {
2225 assert(!Values
.empty() &&
2226 "location list entries without values are redundant");
2227 assert(Begin
!= End
&& "unexpected location list entry with empty range");
2228 DebugLocStream::EntryBuilder
Entry(List
, Begin
, End
);
2229 BufferByteStreamer Streamer
= Entry
.getStreamer();
2230 DebugLocDwarfExpression
DwarfExpr(AP
.getDwarfVersion(), Streamer
, TheCU
);
2231 const DbgValueLoc
&Value
= Values
[0];
2232 if (Value
.isFragment()) {
2233 // Emit all fragments that belong to the same variable and range.
2234 assert(llvm::all_of(Values
, [](DbgValueLoc P
) {
2235 return P
.isFragment();
2236 }) && "all values are expected to be fragments");
2237 assert(std::is_sorted(Values
.begin(), Values
.end()) &&
2238 "fragments are expected to be sorted");
2240 for (auto Fragment
: Values
)
2241 DwarfDebug::emitDebugLocValue(AP
, BT
, Fragment
, DwarfExpr
);
2244 assert(Values
.size() == 1 && "only fragments may have >1 value");
2245 DwarfDebug::emitDebugLocValue(AP
, BT
, Value
, DwarfExpr
);
2247 DwarfExpr
.finalize();
2250 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry
&Entry
,
2251 const DwarfCompileUnit
*CU
) {
2253 Asm
->OutStreamer
->AddComment("Loc expr size");
2254 if (getDwarfVersion() >= 5)
2255 Asm
->EmitULEB128(DebugLocs
.getBytes(Entry
).size());
2256 else if (DebugLocs
.getBytes(Entry
).size() <= std::numeric_limits
<uint16_t>::max())
2257 Asm
->emitInt16(DebugLocs
.getBytes(Entry
).size());
2259 // The entry is too big to fit into 16 bit, drop it as there is nothing we
2265 APByteStreamer
Streamer(*Asm
);
2266 emitDebugLocEntry(Streamer
, Entry
, CU
);
2269 // Emit the common part of the DWARF 5 range/locations list tables header.
2270 static void emitListsTableHeaderStart(AsmPrinter
*Asm
, const DwarfFile
&Holder
,
2271 MCSymbol
*TableStart
,
2272 MCSymbol
*TableEnd
) {
2273 // Build the table header, which starts with the length field.
2274 Asm
->OutStreamer
->AddComment("Length");
2275 Asm
->EmitLabelDifference(TableEnd
, TableStart
, 4);
2276 Asm
->OutStreamer
->EmitLabel(TableStart
);
2277 // Version number (DWARF v5 and later).
2278 Asm
->OutStreamer
->AddComment("Version");
2279 Asm
->emitInt16(Asm
->OutStreamer
->getContext().getDwarfVersion());
2281 Asm
->OutStreamer
->AddComment("Address size");
2282 Asm
->emitInt8(Asm
->MAI
->getCodePointerSize());
2283 // Segment selector size.
2284 Asm
->OutStreamer
->AddComment("Segment selector size");
2288 // Emit the header of a DWARF 5 range list table list table. Returns the symbol
2289 // that designates the end of the table for the caller to emit when the table is
2291 static MCSymbol
*emitRnglistsTableHeader(AsmPrinter
*Asm
,
2292 const DwarfFile
&Holder
) {
2293 MCSymbol
*TableStart
= Asm
->createTempSymbol("debug_rnglist_table_start");
2294 MCSymbol
*TableEnd
= Asm
->createTempSymbol("debug_rnglist_table_end");
2295 emitListsTableHeaderStart(Asm
, Holder
, TableStart
, TableEnd
);
2297 Asm
->OutStreamer
->AddComment("Offset entry count");
2298 Asm
->emitInt32(Holder
.getRangeLists().size());
2299 Asm
->OutStreamer
->EmitLabel(Holder
.getRnglistsTableBaseSym());
2301 for (const RangeSpanList
&List
: Holder
.getRangeLists())
2302 Asm
->EmitLabelDifference(List
.getSym(), Holder
.getRnglistsTableBaseSym(),
2308 // Emit the header of a DWARF 5 locations list table. Returns the symbol that
2309 // designates the end of the table for the caller to emit when the table is
2311 static MCSymbol
*emitLoclistsTableHeader(AsmPrinter
*Asm
,
2312 const DwarfFile
&Holder
) {
2313 MCSymbol
*TableStart
= Asm
->createTempSymbol("debug_loclist_table_start");
2314 MCSymbol
*TableEnd
= Asm
->createTempSymbol("debug_loclist_table_end");
2315 emitListsTableHeaderStart(Asm
, Holder
, TableStart
, TableEnd
);
2317 // FIXME: Generate the offsets table and use DW_FORM_loclistx with the
2318 // DW_AT_loclists_base attribute. Until then set the number of offsets to 0.
2319 Asm
->OutStreamer
->AddComment("Offset entry count");
2321 Asm
->OutStreamer
->EmitLabel(Holder
.getLoclistsTableBaseSym());
2326 // Emit locations into the .debug_loc/.debug_rnglists section.
2327 void DwarfDebug::emitDebugLoc() {
2328 if (DebugLocs
.getLists().empty())
2331 bool IsLocLists
= getDwarfVersion() >= 5;
2332 MCSymbol
*TableEnd
= nullptr;
2334 Asm
->OutStreamer
->SwitchSection(
2335 Asm
->getObjFileLowering().getDwarfLoclistsSection());
2336 TableEnd
= emitLoclistsTableHeader(Asm
, useSplitDwarf() ? SkeletonHolder
2339 Asm
->OutStreamer
->SwitchSection(
2340 Asm
->getObjFileLowering().getDwarfLocSection());
2343 unsigned char Size
= Asm
->MAI
->getCodePointerSize();
2344 for (const auto &List
: DebugLocs
.getLists()) {
2345 Asm
->OutStreamer
->EmitLabel(List
.Label
);
2347 const DwarfCompileUnit
*CU
= List
.CU
;
2348 const MCSymbol
*Base
= CU
->getBaseAddress();
2349 for (const auto &Entry
: DebugLocs
.getEntries(List
)) {
2351 // Set up the range. This range is relative to the entry point of the
2352 // compile unit. This is a hard coded 0 for low_pc when we're emitting
2353 // ranges, or the DW_AT_low_pc on the compile unit otherwise.
2355 Asm
->OutStreamer
->AddComment("DW_LLE_offset_pair");
2356 Asm
->OutStreamer
->EmitIntValue(dwarf::DW_LLE_offset_pair
, 1);
2357 Asm
->OutStreamer
->AddComment(" starting offset");
2358 Asm
->EmitLabelDifferenceAsULEB128(Entry
.BeginSym
, Base
);
2359 Asm
->OutStreamer
->AddComment(" ending offset");
2360 Asm
->EmitLabelDifferenceAsULEB128(Entry
.EndSym
, Base
);
2362 Asm
->EmitLabelDifference(Entry
.BeginSym
, Base
, Size
);
2363 Asm
->EmitLabelDifference(Entry
.EndSym
, Base
, Size
);
2366 emitDebugLocEntryLocation(Entry
, CU
);
2370 // We have no base address.
2372 // TODO: Use DW_LLE_base_addressx + DW_LLE_offset_pair, or
2373 // DW_LLE_startx_length in case if there is only a single range.
2374 // That should reduce the size of the debug data emited.
2375 // For now just use the DW_LLE_startx_length for all cases.
2376 Asm
->OutStreamer
->AddComment("DW_LLE_startx_length");
2377 Asm
->emitInt8(dwarf::DW_LLE_startx_length
);
2378 Asm
->OutStreamer
->AddComment(" start idx");
2379 Asm
->EmitULEB128(AddrPool
.getIndex(Entry
.BeginSym
));
2380 Asm
->OutStreamer
->AddComment(" length");
2381 Asm
->EmitLabelDifferenceAsULEB128(Entry
.EndSym
, Entry
.BeginSym
);
2383 Asm
->OutStreamer
->EmitSymbolValue(Entry
.BeginSym
, Size
);
2384 Asm
->OutStreamer
->EmitSymbolValue(Entry
.EndSym
, Size
);
2387 emitDebugLocEntryLocation(Entry
, CU
);
2391 // .debug_loclists section ends with DW_LLE_end_of_list.
2392 Asm
->OutStreamer
->AddComment("DW_LLE_end_of_list");
2393 Asm
->OutStreamer
->EmitIntValue(dwarf::DW_LLE_end_of_list
, 1);
2395 // Terminate the .debug_loc list with two 0 values.
2396 Asm
->OutStreamer
->EmitIntValue(0, Size
);
2397 Asm
->OutStreamer
->EmitIntValue(0, Size
);
2402 Asm
->OutStreamer
->EmitLabel(TableEnd
);
2405 void DwarfDebug::emitDebugLocDWO() {
2406 for (const auto &List
: DebugLocs
.getLists()) {
2407 Asm
->OutStreamer
->SwitchSection(
2408 Asm
->getObjFileLowering().getDwarfLocDWOSection());
2409 Asm
->OutStreamer
->EmitLabel(List
.Label
);
2410 for (const auto &Entry
: DebugLocs
.getEntries(List
)) {
2411 // GDB only supports startx_length in pre-standard split-DWARF.
2412 // (in v5 standard loclists, it currently* /only/ supports base_address +
2413 // offset_pair, so the implementations can't really share much since they
2414 // need to use different representations)
2415 // * as of October 2018, at least
2416 // Ideally/in v5, this could use SectionLabels to reuse existing addresses
2417 // in the address pool to minimize object size/relocations.
2418 Asm
->emitInt8(dwarf::DW_LLE_startx_length
);
2419 unsigned idx
= AddrPool
.getIndex(Entry
.BeginSym
);
2420 Asm
->EmitULEB128(idx
);
2421 Asm
->EmitLabelDifference(Entry
.EndSym
, Entry
.BeginSym
, 4);
2423 emitDebugLocEntryLocation(Entry
, List
.CU
);
2425 Asm
->emitInt8(dwarf::DW_LLE_end_of_list
);
2430 const MCSymbol
*Start
, *End
;
2433 // Emit a debug aranges section, containing a CU lookup for any
2434 // address we can tie back to a CU.
2435 void DwarfDebug::emitDebugARanges() {
2436 // Provides a unique id per text section.
2437 MapVector
<MCSection
*, SmallVector
<SymbolCU
, 8>> SectionMap
;
2439 // Filter labels by section.
2440 for (const SymbolCU
&SCU
: ArangeLabels
) {
2441 if (SCU
.Sym
->isInSection()) {
2442 // Make a note of this symbol and it's section.
2443 MCSection
*Section
= &SCU
.Sym
->getSection();
2444 if (!Section
->getKind().isMetadata())
2445 SectionMap
[Section
].push_back(SCU
);
2447 // Some symbols (e.g. common/bss on mach-o) can have no section but still
2448 // appear in the output. This sucks as we rely on sections to build
2449 // arange spans. We can do it without, but it's icky.
2450 SectionMap
[nullptr].push_back(SCU
);
2454 DenseMap
<DwarfCompileUnit
*, std::vector
<ArangeSpan
>> Spans
;
2456 for (auto &I
: SectionMap
) {
2457 MCSection
*Section
= I
.first
;
2458 SmallVector
<SymbolCU
, 8> &List
= I
.second
;
2459 if (List
.size() < 1)
2462 // If we have no section (e.g. common), just write out
2463 // individual spans for each symbol.
2465 for (const SymbolCU
&Cur
: List
) {
2467 Span
.Start
= Cur
.Sym
;
2470 Spans
[Cur
.CU
].push_back(Span
);
2475 // Sort the symbols by offset within the section.
2476 llvm::stable_sort(List
, [&](const SymbolCU
&A
, const SymbolCU
&B
) {
2477 unsigned IA
= A
.Sym
? Asm
->OutStreamer
->GetSymbolOrder(A
.Sym
) : 0;
2478 unsigned IB
= B
.Sym
? Asm
->OutStreamer
->GetSymbolOrder(B
.Sym
) : 0;
2480 // Symbols with no order assigned should be placed at the end.
2481 // (e.g. section end labels)
2489 // Insert a final terminator.
2490 List
.push_back(SymbolCU(nullptr, Asm
->OutStreamer
->endSection(Section
)));
2492 // Build spans between each label.
2493 const MCSymbol
*StartSym
= List
[0].Sym
;
2494 for (size_t n
= 1, e
= List
.size(); n
< e
; n
++) {
2495 const SymbolCU
&Prev
= List
[n
- 1];
2496 const SymbolCU
&Cur
= List
[n
];
2498 // Try and build the longest span we can within the same CU.
2499 if (Cur
.CU
!= Prev
.CU
) {
2501 Span
.Start
= StartSym
;
2504 Spans
[Prev
.CU
].push_back(Span
);
2510 // Start the dwarf aranges section.
2511 Asm
->OutStreamer
->SwitchSection(
2512 Asm
->getObjFileLowering().getDwarfARangesSection());
2514 unsigned PtrSize
= Asm
->MAI
->getCodePointerSize();
2516 // Build a list of CUs used.
2517 std::vector
<DwarfCompileUnit
*> CUs
;
2518 for (const auto &it
: Spans
) {
2519 DwarfCompileUnit
*CU
= it
.first
;
2523 // Sort the CU list (again, to ensure consistent output order).
2524 llvm::sort(CUs
, [](const DwarfCompileUnit
*A
, const DwarfCompileUnit
*B
) {
2525 return A
->getUniqueID() < B
->getUniqueID();
2528 // Emit an arange table for each CU we used.
2529 for (DwarfCompileUnit
*CU
: CUs
) {
2530 std::vector
<ArangeSpan
> &List
= Spans
[CU
];
2532 // Describe the skeleton CU's offset and length, not the dwo file's.
2533 if (auto *Skel
= CU
->getSkeleton())
2536 // Emit size of content not including length itself.
2537 unsigned ContentSize
=
2538 sizeof(int16_t) + // DWARF ARange version number
2539 sizeof(int32_t) + // Offset of CU in the .debug_info section
2540 sizeof(int8_t) + // Pointer Size (in bytes)
2541 sizeof(int8_t); // Segment Size (in bytes)
2543 unsigned TupleSize
= PtrSize
* 2;
2545 // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
2547 OffsetToAlignment(sizeof(int32_t) + ContentSize
, TupleSize
);
2549 ContentSize
+= Padding
;
2550 ContentSize
+= (List
.size() + 1) * TupleSize
;
2552 // For each compile unit, write the list of spans it covers.
2553 Asm
->OutStreamer
->AddComment("Length of ARange Set");
2554 Asm
->emitInt32(ContentSize
);
2555 Asm
->OutStreamer
->AddComment("DWARF Arange version number");
2556 Asm
->emitInt16(dwarf::DW_ARANGES_VERSION
);
2557 Asm
->OutStreamer
->AddComment("Offset Into Debug Info Section");
2558 emitSectionReference(*CU
);
2559 Asm
->OutStreamer
->AddComment("Address Size (in bytes)");
2560 Asm
->emitInt8(PtrSize
);
2561 Asm
->OutStreamer
->AddComment("Segment Size (in bytes)");
2564 Asm
->OutStreamer
->emitFill(Padding
, 0xff);
2566 for (const ArangeSpan
&Span
: List
) {
2567 Asm
->EmitLabelReference(Span
.Start
, PtrSize
);
2569 // Calculate the size as being from the span start to it's end.
2571 Asm
->EmitLabelDifference(Span
.End
, Span
.Start
, PtrSize
);
2573 // For symbols without an end marker (e.g. common), we
2574 // write a single arange entry containing just that one symbol.
2575 uint64_t Size
= SymSize
[Span
.Start
];
2579 Asm
->OutStreamer
->EmitIntValue(Size
, PtrSize
);
2583 Asm
->OutStreamer
->AddComment("ARange terminator");
2584 Asm
->OutStreamer
->EmitIntValue(0, PtrSize
);
2585 Asm
->OutStreamer
->EmitIntValue(0, PtrSize
);
2589 /// Emit a single range list. We handle both DWARF v5 and earlier.
2590 static void emitRangeList(DwarfDebug
&DD
, AsmPrinter
*Asm
,
2591 const RangeSpanList
&List
) {
2593 auto DwarfVersion
= DD
.getDwarfVersion();
2594 // Emit our symbol so we can find the beginning of the range.
2595 Asm
->OutStreamer
->EmitLabel(List
.getSym());
2596 // Gather all the ranges that apply to the same section so they can share
2597 // a base address entry.
2598 MapVector
<const MCSection
*, std::vector
<const RangeSpan
*>> SectionRanges
;
2599 // Size for our labels.
2600 auto Size
= Asm
->MAI
->getCodePointerSize();
2602 for (const RangeSpan
&Range
: List
.getRanges())
2603 SectionRanges
[&Range
.getStart()->getSection()].push_back(&Range
);
2605 const DwarfCompileUnit
&CU
= List
.getCU();
2606 const MCSymbol
*CUBase
= CU
.getBaseAddress();
2607 bool BaseIsSet
= false;
2608 for (const auto &P
: SectionRanges
) {
2609 // Don't bother with a base address entry if there's only one range in
2610 // this section in this range list - for example ranges for a CU will
2611 // usually consist of single regions from each of many sections
2612 // (-ffunction-sections, or just C++ inline functions) except under LTO
2613 // or optnone where there may be holes in a single CU's section
2615 auto *Base
= CUBase
;
2616 if (!Base
&& (P
.second
.size() > 1 || DwarfVersion
< 5) &&
2617 (CU
.getCUNode()->getRangesBaseAddress() || DwarfVersion
>= 5)) {
2619 // FIXME/use care: This may not be a useful base address if it's not
2620 // the lowest address/range in this object.
2621 Base
= P
.second
.front()->getStart();
2622 if (DwarfVersion
>= 5) {
2623 Base
= DD
.getSectionLabel(&Base
->getSection());
2624 Asm
->OutStreamer
->AddComment("DW_RLE_base_addressx");
2625 Asm
->OutStreamer
->EmitIntValue(dwarf::DW_RLE_base_addressx
, 1);
2626 Asm
->OutStreamer
->AddComment(" base address index");
2627 Asm
->EmitULEB128(DD
.getAddressPool().getIndex(Base
));
2629 Asm
->OutStreamer
->EmitIntValue(-1, Size
);
2630 Asm
->OutStreamer
->AddComment(" base address");
2631 Asm
->OutStreamer
->EmitSymbolValue(Base
, Size
);
2633 } else if (BaseIsSet
&& DwarfVersion
< 5) {
2636 Asm
->OutStreamer
->EmitIntValue(-1, Size
);
2637 Asm
->OutStreamer
->EmitIntValue(0, Size
);
2640 for (const auto *RS
: P
.second
) {
2641 const MCSymbol
*Begin
= RS
->getStart();
2642 const MCSymbol
*End
= RS
->getEnd();
2643 assert(Begin
&& "Range without a begin symbol?");
2644 assert(End
&& "Range without an end symbol?");
2646 if (DwarfVersion
>= 5) {
2647 // Emit DW_RLE_offset_pair when we have a base.
2648 Asm
->OutStreamer
->AddComment("DW_RLE_offset_pair");
2649 Asm
->OutStreamer
->EmitIntValue(dwarf::DW_RLE_offset_pair
, 1);
2650 Asm
->OutStreamer
->AddComment(" starting offset");
2651 Asm
->EmitLabelDifferenceAsULEB128(Begin
, Base
);
2652 Asm
->OutStreamer
->AddComment(" ending offset");
2653 Asm
->EmitLabelDifferenceAsULEB128(End
, Base
);
2655 Asm
->EmitLabelDifference(Begin
, Base
, Size
);
2656 Asm
->EmitLabelDifference(End
, Base
, Size
);
2658 } else if (DwarfVersion
>= 5) {
2659 Asm
->OutStreamer
->AddComment("DW_RLE_startx_length");
2660 Asm
->OutStreamer
->EmitIntValue(dwarf::DW_RLE_startx_length
, 1);
2661 Asm
->OutStreamer
->AddComment(" start index");
2662 Asm
->EmitULEB128(DD
.getAddressPool().getIndex(Begin
));
2663 Asm
->OutStreamer
->AddComment(" length");
2664 Asm
->EmitLabelDifferenceAsULEB128(End
, Begin
);
2666 Asm
->OutStreamer
->EmitSymbolValue(Begin
, Size
);
2667 Asm
->OutStreamer
->EmitSymbolValue(End
, Size
);
2671 if (DwarfVersion
>= 5) {
2672 Asm
->OutStreamer
->AddComment("DW_RLE_end_of_list");
2673 Asm
->OutStreamer
->EmitIntValue(dwarf::DW_RLE_end_of_list
, 1);
2675 // Terminate the list with two 0 values.
2676 Asm
->OutStreamer
->EmitIntValue(0, Size
);
2677 Asm
->OutStreamer
->EmitIntValue(0, Size
);
2681 static void emitDebugRangesImpl(DwarfDebug
&DD
, AsmPrinter
*Asm
,
2682 const DwarfFile
&Holder
, MCSymbol
*TableEnd
) {
2683 for (const RangeSpanList
&List
: Holder
.getRangeLists())
2684 emitRangeList(DD
, Asm
, List
);
2687 Asm
->OutStreamer
->EmitLabel(TableEnd
);
2690 /// Emit address ranges into the .debug_ranges section or into the DWARF v5
2691 /// .debug_rnglists section.
2692 void DwarfDebug::emitDebugRanges() {
2696 const auto &Holder
= useSplitDwarf() ? SkeletonHolder
: InfoHolder
;
2698 if (Holder
.getRangeLists().empty())
2701 assert(useRangesSection());
2702 assert(llvm::none_of(CUMap
, [](const decltype(CUMap
)::value_type
&Pair
) {
2703 return Pair
.second
->getCUNode()->isDebugDirectivesOnly();
2706 // Start the dwarf ranges section.
2707 MCSymbol
*TableEnd
= nullptr;
2708 if (getDwarfVersion() >= 5) {
2709 Asm
->OutStreamer
->SwitchSection(
2710 Asm
->getObjFileLowering().getDwarfRnglistsSection());
2711 TableEnd
= emitRnglistsTableHeader(Asm
, Holder
);
2713 Asm
->OutStreamer
->SwitchSection(
2714 Asm
->getObjFileLowering().getDwarfRangesSection());
2716 emitDebugRangesImpl(*this, Asm
, Holder
, TableEnd
);
2719 void DwarfDebug::emitDebugRangesDWO() {
2720 assert(useSplitDwarf());
2725 const auto &Holder
= InfoHolder
;
2727 if (Holder
.getRangeLists().empty())
2730 assert(getDwarfVersion() >= 5);
2731 assert(useRangesSection());
2732 assert(llvm::none_of(CUMap
, [](const decltype(CUMap
)::value_type
&Pair
) {
2733 return Pair
.second
->getCUNode()->isDebugDirectivesOnly();
2736 // Start the dwarf ranges section.
2737 Asm
->OutStreamer
->SwitchSection(
2738 Asm
->getObjFileLowering().getDwarfRnglistsDWOSection());
2739 MCSymbol
*TableEnd
= emitRnglistsTableHeader(Asm
, Holder
);
2741 emitDebugRangesImpl(*this, Asm
, Holder
, TableEnd
);
2744 void DwarfDebug::handleMacroNodes(DIMacroNodeArray Nodes
, DwarfCompileUnit
&U
) {
2745 for (auto *MN
: Nodes
) {
2746 if (auto *M
= dyn_cast
<DIMacro
>(MN
))
2748 else if (auto *F
= dyn_cast
<DIMacroFile
>(MN
))
2749 emitMacroFile(*F
, U
);
2751 llvm_unreachable("Unexpected DI type!");
2755 void DwarfDebug::emitMacro(DIMacro
&M
) {
2756 Asm
->EmitULEB128(M
.getMacinfoType());
2757 Asm
->EmitULEB128(M
.getLine());
2758 StringRef Name
= M
.getName();
2759 StringRef Value
= M
.getValue();
2760 Asm
->OutStreamer
->EmitBytes(Name
);
2761 if (!Value
.empty()) {
2762 // There should be one space between macro name and macro value.
2764 Asm
->OutStreamer
->EmitBytes(Value
);
2766 Asm
->emitInt8('\0');
2769 void DwarfDebug::emitMacroFile(DIMacroFile
&F
, DwarfCompileUnit
&U
) {
2770 assert(F
.getMacinfoType() == dwarf::DW_MACINFO_start_file
);
2771 Asm
->EmitULEB128(dwarf::DW_MACINFO_start_file
);
2772 Asm
->EmitULEB128(F
.getLine());
2773 Asm
->EmitULEB128(U
.getOrCreateSourceID(F
.getFile()));
2774 handleMacroNodes(F
.getElements(), U
);
2775 Asm
->EmitULEB128(dwarf::DW_MACINFO_end_file
);
2778 /// Emit macros into a debug macinfo section.
2779 void DwarfDebug::emitDebugMacinfo() {
2783 if (llvm::all_of(CUMap
, [](const decltype(CUMap
)::value_type
&Pair
) {
2784 return Pair
.second
->getCUNode()->isDebugDirectivesOnly();
2788 // Start the dwarf macinfo section.
2789 Asm
->OutStreamer
->SwitchSection(
2790 Asm
->getObjFileLowering().getDwarfMacinfoSection());
2792 for (const auto &P
: CUMap
) {
2793 auto &TheCU
= *P
.second
;
2794 if (TheCU
.getCUNode()->isDebugDirectivesOnly())
2796 auto *SkCU
= TheCU
.getSkeleton();
2797 DwarfCompileUnit
&U
= SkCU
? *SkCU
: TheCU
;
2798 auto *CUNode
= cast
<DICompileUnit
>(P
.first
);
2799 DIMacroNodeArray Macros
= CUNode
->getMacros();
2800 if (!Macros
.empty()) {
2801 Asm
->OutStreamer
->EmitLabel(U
.getMacroLabelBegin());
2802 handleMacroNodes(Macros
, U
);
2805 Asm
->OutStreamer
->AddComment("End Of Macro List Mark");
2809 // DWARF5 Experimental Separate Dwarf emitters.
2811 void DwarfDebug::initSkeletonUnit(const DwarfUnit
&U
, DIE
&Die
,
2812 std::unique_ptr
<DwarfCompileUnit
> NewU
) {
2814 if (!CompilationDir
.empty())
2815 NewU
->addString(Die
, dwarf::DW_AT_comp_dir
, CompilationDir
);
2817 addGnuPubAttributes(*NewU
, Die
);
2819 SkeletonHolder
.addUnit(std::move(NewU
));
2822 DwarfCompileUnit
&DwarfDebug::constructSkeletonCU(const DwarfCompileUnit
&CU
) {
2824 auto OwnedUnit
= llvm::make_unique
<DwarfCompileUnit
>(
2825 CU
.getUniqueID(), CU
.getCUNode(), Asm
, this, &SkeletonHolder
);
2826 DwarfCompileUnit
&NewCU
= *OwnedUnit
;
2827 NewCU
.setSection(Asm
->getObjFileLowering().getDwarfInfoSection());
2829 NewCU
.initStmtList();
2831 if (useSegmentedStringOffsetsTable())
2832 NewCU
.addStringOffsetsStart();
2834 initSkeletonUnit(CU
, NewCU
.getUnitDie(), std::move(OwnedUnit
));
2839 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2840 // compile units that would normally be in debug_info.
2841 void DwarfDebug::emitDebugInfoDWO() {
2842 assert(useSplitDwarf() && "No split dwarf debug info?");
2843 // Don't emit relocations into the dwo file.
2844 InfoHolder
.emitUnits(/* UseOffsets */ true);
2847 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2848 // abbreviations for the .debug_info.dwo section.
2849 void DwarfDebug::emitDebugAbbrevDWO() {
2850 assert(useSplitDwarf() && "No split dwarf?");
2851 InfoHolder
.emitAbbrevs(Asm
->getObjFileLowering().getDwarfAbbrevDWOSection());
2854 void DwarfDebug::emitDebugLineDWO() {
2855 assert(useSplitDwarf() && "No split dwarf?");
2856 SplitTypeUnitFileTable
.Emit(
2857 *Asm
->OutStreamer
, MCDwarfLineTableParams(),
2858 Asm
->getObjFileLowering().getDwarfLineDWOSection());
2861 void DwarfDebug::emitStringOffsetsTableHeaderDWO() {
2862 assert(useSplitDwarf() && "No split dwarf?");
2863 InfoHolder
.getStringPool().emitStringOffsetsTableHeader(
2864 *Asm
, Asm
->getObjFileLowering().getDwarfStrOffDWOSection(),
2865 InfoHolder
.getStringOffsetsStartSym());
2868 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2869 // string section and is identical in format to traditional .debug_str
2871 void DwarfDebug::emitDebugStrDWO() {
2872 if (useSegmentedStringOffsetsTable())
2873 emitStringOffsetsTableHeaderDWO();
2874 assert(useSplitDwarf() && "No split dwarf?");
2875 MCSection
*OffSec
= Asm
->getObjFileLowering().getDwarfStrOffDWOSection();
2876 InfoHolder
.emitStrings(Asm
->getObjFileLowering().getDwarfStrDWOSection(),
2877 OffSec
, /* UseRelativeOffsets = */ false);
2880 // Emit address pool.
2881 void DwarfDebug::emitDebugAddr() {
2882 AddrPool
.emit(*Asm
, Asm
->getObjFileLowering().getDwarfAddrSection());
2885 MCDwarfDwoLineTable
*DwarfDebug::getDwoLineTable(const DwarfCompileUnit
&CU
) {
2886 if (!useSplitDwarf())
2888 const DICompileUnit
*DIUnit
= CU
.getCUNode();
2889 SplitTypeUnitFileTable
.maybeSetRootFile(
2890 DIUnit
->getDirectory(), DIUnit
->getFilename(),
2891 CU
.getMD5AsBytes(DIUnit
->getFile()), DIUnit
->getSource());
2892 return &SplitTypeUnitFileTable
;
2895 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier
) {
2897 Hash
.update(Identifier
);
2898 // ... take the least significant 8 bytes and return those. Our MD5
2899 // implementation always returns its results in little endian, so we actually
2900 // need the "high" word.
2901 MD5::MD5Result Result
;
2903 return Result
.high();
2906 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit
&CU
,
2907 StringRef Identifier
, DIE
&RefDie
,
2908 const DICompositeType
*CTy
) {
2909 // Fast path if we're building some type units and one has already used the
2910 // address pool we know we're going to throw away all this work anyway, so
2911 // don't bother building dependent types.
2912 if (!TypeUnitsUnderConstruction
.empty() && AddrPool
.hasBeenUsed())
2915 auto Ins
= TypeSignatures
.insert(std::make_pair(CTy
, 0));
2917 CU
.addDIETypeSignature(RefDie
, Ins
.first
->second
);
2921 bool TopLevelType
= TypeUnitsUnderConstruction
.empty();
2922 AddrPool
.resetUsedFlag();
2924 auto OwnedUnit
= llvm::make_unique
<DwarfTypeUnit
>(CU
, Asm
, this, &InfoHolder
,
2925 getDwoLineTable(CU
));
2926 DwarfTypeUnit
&NewTU
= *OwnedUnit
;
2927 DIE
&UnitDie
= NewTU
.getUnitDie();
2928 TypeUnitsUnderConstruction
.emplace_back(std::move(OwnedUnit
), CTy
);
2930 NewTU
.addUInt(UnitDie
, dwarf::DW_AT_language
, dwarf::DW_FORM_data2
,
2933 uint64_t Signature
= makeTypeSignature(Identifier
);
2934 NewTU
.setTypeSignature(Signature
);
2935 Ins
.first
->second
= Signature
;
2937 if (useSplitDwarf()) {
2938 MCSection
*Section
=
2939 getDwarfVersion() <= 4
2940 ? Asm
->getObjFileLowering().getDwarfTypesDWOSection()
2941 : Asm
->getObjFileLowering().getDwarfInfoDWOSection();
2942 NewTU
.setSection(Section
);
2944 MCSection
*Section
=
2945 getDwarfVersion() <= 4
2946 ? Asm
->getObjFileLowering().getDwarfTypesSection(Signature
)
2947 : Asm
->getObjFileLowering().getDwarfInfoSection(Signature
);
2948 NewTU
.setSection(Section
);
2949 // Non-split type units reuse the compile unit's line table.
2950 CU
.applyStmtList(UnitDie
);
2953 // Add DW_AT_str_offsets_base to the type unit DIE, but not for split type
2955 if (useSegmentedStringOffsetsTable() && !useSplitDwarf())
2956 NewTU
.addStringOffsetsStart();
2958 NewTU
.setType(NewTU
.createTypeDIE(CTy
));
2961 auto TypeUnitsToAdd
= std::move(TypeUnitsUnderConstruction
);
2962 TypeUnitsUnderConstruction
.clear();
2964 // Types referencing entries in the address table cannot be placed in type
2966 if (AddrPool
.hasBeenUsed()) {
2968 // Remove all the types built while building this type.
2969 // This is pessimistic as some of these types might not be dependent on
2970 // the type that used an address.
2971 for (const auto &TU
: TypeUnitsToAdd
)
2972 TypeSignatures
.erase(TU
.second
);
2974 // Construct this type in the CU directly.
2975 // This is inefficient because all the dependent types will be rebuilt
2976 // from scratch, including building them in type units, discovering that
2977 // they depend on addresses, throwing them out and rebuilding them.
2978 CU
.constructTypeDIE(RefDie
, cast
<DICompositeType
>(CTy
));
2982 // If the type wasn't dependent on fission addresses, finish adding the type
2983 // and all its dependent types.
2984 for (auto &TU
: TypeUnitsToAdd
) {
2985 InfoHolder
.computeSizeAndOffsetsForUnit(TU
.first
.get());
2986 InfoHolder
.emitUnit(TU
.first
.get(), useSplitDwarf());
2989 CU
.addDIETypeSignature(RefDie
, Signature
);
2992 DwarfDebug::NonTypeUnitContext::NonTypeUnitContext(DwarfDebug
*DD
)
2994 TypeUnitsUnderConstruction(std::move(DD
->TypeUnitsUnderConstruction
)) {
2995 DD
->TypeUnitsUnderConstruction
.clear();
2996 assert(TypeUnitsUnderConstruction
.empty() || !DD
->AddrPool
.hasBeenUsed());
2999 DwarfDebug::NonTypeUnitContext::~NonTypeUnitContext() {
3000 DD
->TypeUnitsUnderConstruction
= std::move(TypeUnitsUnderConstruction
);
3001 DD
->AddrPool
.resetUsedFlag();
3004 DwarfDebug::NonTypeUnitContext
DwarfDebug::enterNonTypeUnitContext() {
3005 return NonTypeUnitContext(this);
3008 // Add the Name along with its companion DIE to the appropriate accelerator
3009 // table (for AccelTableKind::Dwarf it's always AccelDebugNames, for
3010 // AccelTableKind::Apple, we use the table we got as an argument). If
3011 // accelerator tables are disabled, this function does nothing.
3012 template <typename DataT
>
3013 void DwarfDebug::addAccelNameImpl(const DICompileUnit
&CU
,
3014 AccelTable
<DataT
> &AppleAccel
, StringRef Name
,
3016 if (getAccelTableKind() == AccelTableKind::None
)
3019 if (getAccelTableKind() != AccelTableKind::Apple
&&
3020 CU
.getNameTableKind() != DICompileUnit::DebugNameTableKind::Default
)
3023 DwarfFile
&Holder
= useSplitDwarf() ? SkeletonHolder
: InfoHolder
;
3024 DwarfStringPoolEntryRef Ref
= Holder
.getStringPool().getEntry(*Asm
, Name
);
3026 switch (getAccelTableKind()) {
3027 case AccelTableKind::Apple
:
3028 AppleAccel
.addName(Ref
, Die
);
3030 case AccelTableKind::Dwarf
:
3031 AccelDebugNames
.addName(Ref
, Die
);
3033 case AccelTableKind::Default
:
3034 llvm_unreachable("Default should have already been resolved.");
3035 case AccelTableKind::None
:
3036 llvm_unreachable("None handled above");
3040 void DwarfDebug::addAccelName(const DICompileUnit
&CU
, StringRef Name
,
3042 addAccelNameImpl(CU
, AccelNames
, Name
, Die
);
3045 void DwarfDebug::addAccelObjC(const DICompileUnit
&CU
, StringRef Name
,
3047 // ObjC names go only into the Apple accelerator tables.
3048 if (getAccelTableKind() == AccelTableKind::Apple
)
3049 addAccelNameImpl(CU
, AccelObjC
, Name
, Die
);
3052 void DwarfDebug::addAccelNamespace(const DICompileUnit
&CU
, StringRef Name
,
3054 addAccelNameImpl(CU
, AccelNamespace
, Name
, Die
);
3057 void DwarfDebug::addAccelType(const DICompileUnit
&CU
, StringRef Name
,
3058 const DIE
&Die
, char Flags
) {
3059 addAccelNameImpl(CU
, AccelTypes
, Name
, Die
);
3062 uint16_t DwarfDebug::getDwarfVersion() const {
3063 return Asm
->OutStreamer
->getContext().getDwarfVersion();
3066 void DwarfDebug::addSectionLabel(const MCSymbol
*Sym
) {
3067 SectionLabels
.insert(std::make_pair(&Sym
->getSection(), Sym
));
3070 const MCSymbol
*DwarfDebug::getSectionLabel(const MCSection
*S
) {
3071 return SectionLabels
.find(S
)->second
;