1 //===- llvm/CodeGen/DwarfDebug.cpp - Dwarf Debug Framework ----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains support for writing dwarf debug info into asm files.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "DwarfDebug.h"
15 #include "ByteStreamer.h"
16 #include "DIEHash.h"
17 #include "DebugLocEntry.h"
18 #include "DebugLocStream.h"
19 #include "DwarfCompileUnit.h"
20 #include "DwarfExpression.h"
21 #include "DwarfFile.h"
22 #include "DwarfUnit.h"
23 #include "llvm/ADT/APInt.h"
24 #include "llvm/ADT/DenseMap.h"
25 #include "llvm/ADT/DenseSet.h"
26 #include "llvm/ADT/MapVector.h"
27 #include "llvm/ADT/STLExtras.h"
28 #include "llvm/ADT/SmallVector.h"
29 #include "llvm/ADT/StringRef.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/TargetRegisterInfo.h"
43 #include "llvm/CodeGen/TargetSubtargetInfo.h"
44 #include "llvm/IR/Constants.h"
45 #include "llvm/IR/DebugInfoMetadata.h"
46 #include "llvm/IR/DebugLoc.h"
47 #include "llvm/IR/Function.h"
48 #include "llvm/IR/GlobalVariable.h"
49 #include "llvm/IR/Module.h"
50 #include "llvm/MC/MCAsmInfo.h"
51 #include "llvm/MC/MCContext.h"
52 #include "llvm/MC/MCDwarf.h"
53 #include "llvm/MC/MCSection.h"
54 #include "llvm/MC/MCStreamer.h"
55 #include "llvm/MC/MCSymbol.h"
56 #include "llvm/MC/MCTargetOptions.h"
57 #include "llvm/MC/MachineLocation.h"
58 #include "llvm/MC/SectionKind.h"
59 #include "llvm/Pass.h"
60 #include "llvm/Support/Casting.h"
61 #include "llvm/Support/CommandLine.h"
62 #include "llvm/Support/Debug.h"
63 #include "llvm/Support/ErrorHandling.h"
64 #include "llvm/Support/MD5.h"
65 #include "llvm/Support/MathExtras.h"
66 #include "llvm/Support/Timer.h"
67 #include "llvm/Support/raw_ostream.h"
68 #include "llvm/Target/TargetLoweringObjectFile.h"
69 #include "llvm/Target/TargetMachine.h"
70 #include "llvm/Target/TargetOptions.h"
71 #include <algorithm>
72 #include <cassert>
73 #include <cstddef>
74 #include <cstdint>
75 #include <iterator>
76 #include <string>
77 #include <utility>
78 #include <vector>
79 
80 using namespace llvm;
81 
82 #define DEBUG_TYPE "dwarfdebug"
83 
84 static cl::opt<bool>
85 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden,
86                          cl::desc("Disable debug info printing"));
87 
88 static cl::opt<bool> UseDwarfRangesBaseAddressSpecifier(
89     "use-dwarf-ranges-base-address-specifier", cl::Hidden,
90     cl::desc("Use base address specifiers in debug_ranges"), cl::init(false));
91 
92 static cl::opt<bool> GenerateARangeSection("generate-arange-section",
93                                            cl::Hidden,
94                                            cl::desc("Generate dwarf aranges"),
95                                            cl::init(false));
96 
97 static cl::opt<bool> SplitDwarfCrossCuReferences(
98     "split-dwarf-cross-cu-references", cl::Hidden,
99     cl::desc("Enable cross-cu references in DWO files"), cl::init(false));
100 
101 enum DefaultOnOff { Default, Enable, Disable };
102 
103 static cl::opt<DefaultOnOff> UnknownLocations(
104     "use-unknown-locations", cl::Hidden,
105     cl::desc("Make an absence of debug location information explicit."),
106     cl::values(clEnumVal(Default, "At top of block or after label"),
107                clEnumVal(Enable, "In all cases"), clEnumVal(Disable, "Never")),
108     cl::init(Default));
109 
110 static cl::opt<AccelTableKind> AccelTables(
111     "accel-tables", cl::Hidden, cl::desc("Output dwarf accelerator tables."),
112     cl::values(clEnumValN(AccelTableKind::Default, "Default",
113                           "Default for platform"),
114                clEnumValN(AccelTableKind::None, "Disable", "Disabled."),
115                clEnumValN(AccelTableKind::Apple, "Apple", "Apple"),
116                clEnumValN(AccelTableKind::Dwarf, "Dwarf", "DWARF")),
117     cl::init(AccelTableKind::Default));
118 
119 static cl::opt<DefaultOnOff>
120 DwarfInlinedStrings("dwarf-inlined-strings", cl::Hidden,
121                  cl::desc("Use inlined strings rather than string section."),
122                  cl::values(clEnumVal(Default, "Default for platform"),
123                             clEnumVal(Enable, "Enabled"),
124                             clEnumVal(Disable, "Disabled")),
125                  cl::init(Default));
126 
127 static cl::opt<bool>
128     NoDwarfPubSections("no-dwarf-pub-sections", cl::Hidden,
129                        cl::desc("Disable emission of DWARF pub sections."),
130                        cl::init(false));
131 
132 static cl::opt<bool>
133     NoDwarfRangesSection("no-dwarf-ranges-section", cl::Hidden,
134                          cl::desc("Disable emission .debug_ranges section."),
135                          cl::init(false));
136 
137 static cl::opt<DefaultOnOff> DwarfSectionsAsReferences(
138     "dwarf-sections-as-references", cl::Hidden,
139     cl::desc("Use sections+offset as references rather than labels."),
140     cl::values(clEnumVal(Default, "Default for platform"),
141                clEnumVal(Enable, "Enabled"), clEnumVal(Disable, "Disabled")),
142     cl::init(Default));
143 
144 enum LinkageNameOption {
145   DefaultLinkageNames,
146   AllLinkageNames,
147   AbstractLinkageNames
148 };
149 
150 static cl::opt<LinkageNameOption>
151     DwarfLinkageNames("dwarf-linkage-names", cl::Hidden,
152                       cl::desc("Which DWARF linkage-name attributes to emit."),
153                       cl::values(clEnumValN(DefaultLinkageNames, "Default",
154                                             "Default for platform"),
155                                  clEnumValN(AllLinkageNames, "All", "All"),
156                                  clEnumValN(AbstractLinkageNames, "Abstract",
157                                             "Abstract subprograms")),
158                       cl::init(DefaultLinkageNames));
159 
160 static const char *const DWARFGroupName = "dwarf";
161 static const char *const DWARFGroupDescription = "DWARF Emission";
162 static const char *const DbgTimerName = "writer";
163 static const char *const DbgTimerDescription = "DWARF Debug Writer";
164 
165 void DebugLocDwarfExpression::emitOp(uint8_t Op, const char *Comment) {
166   BS.EmitInt8(
167       Op, Comment ? Twine(Comment) + " " + dwarf::OperationEncodingString(Op)
168                   : dwarf::OperationEncodingString(Op));
169 }
170 
171 void DebugLocDwarfExpression::emitSigned(int64_t Value) {
172   BS.EmitSLEB128(Value, Twine(Value));
173 }
174 
175 void DebugLocDwarfExpression::emitUnsigned(uint64_t Value) {
176   BS.EmitULEB128(Value, Twine(Value));
177 }
178 
179 bool DebugLocDwarfExpression::isFrameRegister(const TargetRegisterInfo &TRI,
180                                               unsigned MachineReg) {
181   // This information is not available while emitting .debug_loc entries.
182   return false;
183 }
184 
185 bool DbgVariable::isBlockByrefVariable() const {
186   assert(Var && "Invalid complex DbgVariable!");
187   return Var->getType().resolve()->isBlockByrefStruct();
188 }
189 
190 const DIType *DbgVariable::getType() const {
191   DIType *Ty = Var->getType().resolve();
192   // FIXME: isBlockByrefVariable should be reformulated in terms of complex
193   // addresses instead.
194   if (Ty->isBlockByrefStruct()) {
195     /* Byref variables, in Blocks, are declared by the programmer as
196        "SomeType VarName;", but the compiler creates a
197        __Block_byref_x_VarName struct, and gives the variable VarName
198        either the struct, or a pointer to the struct, as its type.  This
199        is necessary for various behind-the-scenes things the compiler
200        needs to do with by-reference variables in blocks.
201 
202        However, as far as the original *programmer* is concerned, the
203        variable should still have type 'SomeType', as originally declared.
204 
205        The following function dives into the __Block_byref_x_VarName
206        struct to find the original type of the variable.  This will be
207        passed back to the code generating the type for the Debug
208        Information Entry for the variable 'VarName'.  'VarName' will then
209        have the original type 'SomeType' in its debug information.
210 
211        The original type 'SomeType' will be the type of the field named
212        'VarName' inside the __Block_byref_x_VarName struct.
213 
214        NOTE: In order for this to not completely fail on the debugger
215        side, the Debug Information Entry for the variable VarName needs to
216        have a DW_AT_location that tells the debugger how to unwind through
217        the pointers and __Block_byref_x_VarName struct to find the actual
218        value of the variable.  The function addBlockByrefType does this.  */
219     DIType *subType = Ty;
220     uint16_t tag = Ty->getTag();
221 
222     if (tag == dwarf::DW_TAG_pointer_type)
223       subType = resolve(cast<DIDerivedType>(Ty)->getBaseType());
224 
225     auto Elements = cast<DICompositeType>(subType)->getElements();
226     for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
227       auto *DT = cast<DIDerivedType>(Elements[i]);
228       if (getName() == DT->getName())
229         return resolve(DT->getBaseType());
230     }
231   }
232   return Ty;
233 }
234 
235 ArrayRef<DbgVariable::FrameIndexExpr> DbgVariable::getFrameIndexExprs() const {
236   if (FrameIndexExprs.size() == 1)
237     return FrameIndexExprs;
238 
239   assert(llvm::all_of(FrameIndexExprs,
240                       [](const FrameIndexExpr &A) {
241                         return A.Expr->isFragment();
242                       }) &&
243          "multiple FI expressions without DW_OP_LLVM_fragment");
244   llvm::sort(FrameIndexExprs.begin(), FrameIndexExprs.end(),
245              [](const FrameIndexExpr &A, const FrameIndexExpr &B) -> bool {
246                return A.Expr->getFragmentInfo()->OffsetInBits <
247                       B.Expr->getFragmentInfo()->OffsetInBits;
248              });
249 
250   return FrameIndexExprs;
251 }
252 
253 void DbgVariable::addMMIEntry(const DbgVariable &V) {
254   assert(DebugLocListIndex == ~0U && !MInsn && "not an MMI entry");
255   assert(V.DebugLocListIndex == ~0U && !V.MInsn && "not an MMI entry");
256   assert(V.Var == Var && "conflicting variable");
257   assert(V.IA == IA && "conflicting inlined-at location");
258 
259   assert(!FrameIndexExprs.empty() && "Expected an MMI entry");
260   assert(!V.FrameIndexExprs.empty() && "Expected an MMI entry");
261 
262   // FIXME: This logic should not be necessary anymore, as we now have proper
263   // deduplication. However, without it, we currently run into the assertion
264   // below, which means that we are likely dealing with broken input, i.e. two
265   // non-fragment entries for the same variable at different frame indices.
266   if (FrameIndexExprs.size()) {
267     auto *Expr = FrameIndexExprs.back().Expr;
268     if (!Expr || !Expr->isFragment())
269       return;
270   }
271 
272   for (const auto &FIE : V.FrameIndexExprs)
273     // Ignore duplicate entries.
274     if (llvm::none_of(FrameIndexExprs, [&](const FrameIndexExpr &Other) {
275           return FIE.FI == Other.FI && FIE.Expr == Other.Expr;
276         }))
277       FrameIndexExprs.push_back(FIE);
278 
279   assert((FrameIndexExprs.size() == 1 ||
280           llvm::all_of(FrameIndexExprs,
281                        [](FrameIndexExpr &FIE) {
282                          return FIE.Expr && FIE.Expr->isFragment();
283                        })) &&
284          "conflicting locations for variable");
285 }
286 
287 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
288     : DebugHandlerBase(A), DebugLocs(A->OutStreamer->isVerboseAsm()),
289       InfoHolder(A, "info_string", DIEValueAllocator),
290       SkeletonHolder(A, "skel_string", DIEValueAllocator),
291       IsDarwin(A->TM.getTargetTriple().isOSDarwin()) {
292   const Triple &TT = Asm->TM.getTargetTriple();
293 
294   // Make sure we know our "debugger tuning."  The target option takes
295   // precedence; fall back to triple-based defaults.
296   if (Asm->TM.Options.DebuggerTuning != DebuggerKind::Default)
297     DebuggerTuning = Asm->TM.Options.DebuggerTuning;
298   else if (IsDarwin)
299     DebuggerTuning = DebuggerKind::LLDB;
300   else if (TT.isPS4CPU())
301     DebuggerTuning = DebuggerKind::SCE;
302   else
303     DebuggerTuning = DebuggerKind::GDB;
304 
305   // Turn on accelerator tables by default, if tuning for LLDB and the target is
306   // supported.
307   if (AccelTables == AccelTableKind::Default) {
308     if (tuneForLLDB() && A->TM.getTargetTriple().isOSBinFormatMachO())
309       TheAccelTableKind = AccelTableKind::Apple;
310     else
311       TheAccelTableKind = AccelTableKind::None;
312   } else
313     TheAccelTableKind = AccelTables;
314 
315   UseInlineStrings = DwarfInlinedStrings == Enable;
316   HasAppleExtensionAttributes = tuneForLLDB();
317 
318   // Handle split DWARF.
319   HasSplitDwarf = !Asm->TM.Options.MCOptions.SplitDwarfFile.empty();
320 
321   // SCE defaults to linkage names only for abstract subprograms.
322   if (DwarfLinkageNames == DefaultLinkageNames)
323     UseAllLinkageNames = !tuneForSCE();
324   else
325     UseAllLinkageNames = DwarfLinkageNames == AllLinkageNames;
326 
327   unsigned DwarfVersionNumber = Asm->TM.Options.MCOptions.DwarfVersion;
328   unsigned DwarfVersion = DwarfVersionNumber ? DwarfVersionNumber
329                                     : MMI->getModule()->getDwarfVersion();
330   // Use dwarf 4 by default if nothing is requested.
331   DwarfVersion = DwarfVersion ? DwarfVersion : dwarf::DWARF_VERSION;
332 
333   UsePubSections = !NoDwarfPubSections;
334   UseRangesSection = !NoDwarfRangesSection;
335 
336   // Use sections as references.
337   UseSectionsAsReferences = DwarfSectionsAsReferences == Enable;
338 
339   // Work around a GDB bug. GDB doesn't support the standard opcode;
340   // SCE doesn't support GNU's; LLDB prefers the standard opcode, which
341   // is defined as of DWARF 3.
342   // See GDB bug 11616 - DW_OP_form_tls_address is unimplemented
343   // https://sourceware.org/bugzilla/show_bug.cgi?id=11616
344   UseGNUTLSOpcode = tuneForGDB() || DwarfVersion < 3;
345 
346   // GDB does not fully support the DWARF 4 representation for bitfields.
347   UseDWARF2Bitfields = (DwarfVersion < 4) || tuneForGDB();
348 
349   // The DWARF v5 string offsets table has - possibly shared - contributions
350   // from each compile and type unit each preceded by a header. The string
351   // offsets table used by the pre-DWARF v5 split-DWARF implementation uses
352   // a monolithic string offsets table without any header.
353   UseSegmentedStringOffsetsTable = DwarfVersion >= 5;
354 
355   Asm->OutStreamer->getContext().setDwarfVersion(DwarfVersion);
356 }
357 
358 // Define out of line so we don't have to include DwarfUnit.h in DwarfDebug.h.
359 DwarfDebug::~DwarfDebug() = default;
360 
361 static bool isObjCClass(StringRef Name) {
362   return Name.startswith("+") || Name.startswith("-");
363 }
364 
365 static bool hasObjCCategory(StringRef Name) {
366   if (!isObjCClass(Name))
367     return false;
368 
369   return Name.find(") ") != StringRef::npos;
370 }
371 
372 static void getObjCClassCategory(StringRef In, StringRef &Class,
373                                  StringRef &Category) {
374   if (!hasObjCCategory(In)) {
375     Class = In.slice(In.find('[') + 1, In.find(' '));
376     Category = "";
377     return;
378   }
379 
380   Class = In.slice(In.find('[') + 1, In.find('('));
381   Category = In.slice(In.find('[') + 1, In.find(' '));
382 }
383 
384 static StringRef getObjCMethodName(StringRef In) {
385   return In.slice(In.find(' ') + 1, In.find(']'));
386 }
387 
388 // Add the various names to the Dwarf accelerator table names.
389 void DwarfDebug::addSubprogramNames(const DISubprogram *SP, DIE &Die) {
390   if (!SP->isDefinition())
391     return;
392 
393   if (SP->getName() != "")
394     addAccelName(SP->getName(), Die);
395 
396   // If the linkage name is different than the name, go ahead and output
397   // that as well into the name table.
398   if (SP->getLinkageName() != "" && SP->getName() != SP->getLinkageName())
399     addAccelName(SP->getLinkageName(), Die);
400 
401   // If this is an Objective-C selector name add it to the ObjC accelerator
402   // too.
403   if (isObjCClass(SP->getName())) {
404     StringRef Class, Category;
405     getObjCClassCategory(SP->getName(), Class, Category);
406     addAccelObjC(Class, Die);
407     if (Category != "")
408       addAccelObjC(Category, Die);
409     // Also add the base method name to the name table.
410     addAccelName(getObjCMethodName(SP->getName()), Die);
411   }
412 }
413 
414 /// Check whether we should create a DIE for the given Scope, return true
415 /// if we don't create a DIE (the corresponding DIE is null).
416 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) {
417   if (Scope->isAbstractScope())
418     return false;
419 
420   // We don't create a DIE if there is no Range.
421   const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges();
422   if (Ranges.empty())
423     return true;
424 
425   if (Ranges.size() > 1)
426     return false;
427 
428   // We don't create a DIE if we have a single Range and the end label
429   // is null.
430   return !getLabelAfterInsn(Ranges.front().second);
431 }
432 
433 template <typename Func> static void forBothCUs(DwarfCompileUnit &CU, Func F) {
434   F(CU);
435   if (auto *SkelCU = CU.getSkeleton())
436     if (CU.getCUNode()->getSplitDebugInlining())
437       F(*SkelCU);
438 }
439 
440 bool DwarfDebug::shareAcrossDWOCUs() const {
441   return SplitDwarfCrossCuReferences;
442 }
443 
444 void DwarfDebug::constructAbstractSubprogramScopeDIE(DwarfCompileUnit &SrcCU,
445                                                      LexicalScope *Scope) {
446   assert(Scope && Scope->getScopeNode());
447   assert(Scope->isAbstractScope());
448   assert(!Scope->getInlinedAt());
449 
450   auto *SP = cast<DISubprogram>(Scope->getScopeNode());
451 
452   // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
453   // was inlined from another compile unit.
454   if (useSplitDwarf() && !shareAcrossDWOCUs() && !SP->getUnit()->getSplitDebugInlining())
455     // Avoid building the original CU if it won't be used
456     SrcCU.constructAbstractSubprogramScopeDIE(Scope);
457   else {
458     auto &CU = getOrCreateDwarfCompileUnit(SP->getUnit());
459     if (auto *SkelCU = CU.getSkeleton()) {
460       (shareAcrossDWOCUs() ? CU : SrcCU)
461           .constructAbstractSubprogramScopeDIE(Scope);
462       if (CU.getCUNode()->getSplitDebugInlining())
463         SkelCU->constructAbstractSubprogramScopeDIE(Scope);
464     } else
465       CU.constructAbstractSubprogramScopeDIE(Scope);
466   }
467 }
468 
469 void DwarfDebug::addGnuPubAttributes(DwarfCompileUnit &U, DIE &D) const {
470   if (!U.hasDwarfPubSections())
471     return;
472 
473   U.addFlag(D, dwarf::DW_AT_GNU_pubnames);
474 }
475 
476 // Create new DwarfCompileUnit for the given metadata node with tag
477 // DW_TAG_compile_unit.
478 DwarfCompileUnit &
479 DwarfDebug::getOrCreateDwarfCompileUnit(const DICompileUnit *DIUnit) {
480   if (auto *CU = CUMap.lookup(DIUnit))
481     return *CU;
482   StringRef FN = DIUnit->getFilename();
483   CompilationDir = DIUnit->getDirectory();
484 
485   auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>(
486       InfoHolder.getUnits().size(), DIUnit, Asm, this, &InfoHolder);
487   DwarfCompileUnit &NewCU = *OwnedUnit;
488   DIE &Die = NewCU.getUnitDie();
489   InfoHolder.addUnit(std::move(OwnedUnit));
490   if (useSplitDwarf()) {
491     NewCU.setSkeleton(constructSkeletonCU(NewCU));
492     NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name,
493                   Asm->TM.Options.MCOptions.SplitDwarfFile);
494   }
495 
496   for (auto *IE : DIUnit->getImportedEntities())
497     NewCU.addImportedEntity(IE);
498 
499   // LTO with assembly output shares a single line table amongst multiple CUs.
500   // To avoid the compilation directory being ambiguous, let the line table
501   // explicitly describe the directory of all files, never relying on the
502   // compilation directory.
503   if (!Asm->OutStreamer->hasRawTextSupport() || SingleCU)
504     Asm->OutStreamer->emitDwarfFile0Directive(
505         CompilationDir, FN, NewCU.getMD5AsBytes(DIUnit->getFile()),
506         DIUnit->getSource(), NewCU.getUniqueID());
507 
508   StringRef Producer = DIUnit->getProducer();
509   StringRef Flags = DIUnit->getFlags();
510   if (!Flags.empty()) {
511     std::string ProducerWithFlags = Producer.str() + " " + Flags.str();
512     NewCU.addString(Die, dwarf::DW_AT_producer, ProducerWithFlags);
513   } else
514     NewCU.addString(Die, dwarf::DW_AT_producer, Producer);
515 
516   NewCU.addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
517                 DIUnit->getSourceLanguage());
518   NewCU.addString(Die, dwarf::DW_AT_name, FN);
519 
520   // Add DW_str_offsets_base to the unit DIE, except for split units.
521   if (useSegmentedStringOffsetsTable() && !useSplitDwarf())
522     NewCU.addStringOffsetsStart();
523 
524   if (!useSplitDwarf()) {
525     NewCU.initStmtList();
526 
527     // If we're using split dwarf the compilation dir is going to be in the
528     // skeleton CU and so we don't need to duplicate it here.
529     if (!CompilationDir.empty())
530       NewCU.addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
531 
532     addGnuPubAttributes(NewCU, Die);
533   }
534 
535   if (useAppleExtensionAttributes()) {
536     if (DIUnit->isOptimized())
537       NewCU.addFlag(Die, dwarf::DW_AT_APPLE_optimized);
538 
539     StringRef Flags = DIUnit->getFlags();
540     if (!Flags.empty())
541       NewCU.addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
542 
543     if (unsigned RVer = DIUnit->getRuntimeVersion())
544       NewCU.addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
545                     dwarf::DW_FORM_data1, RVer);
546   }
547 
548   if (useSplitDwarf())
549     NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoDWOSection());
550   else
551     NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection());
552 
553   if (DIUnit->getDWOId()) {
554     // This CU is either a clang module DWO or a skeleton CU.
555     NewCU.addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8,
556                   DIUnit->getDWOId());
557     if (!DIUnit->getSplitDebugFilename().empty())
558       // This is a prefabricated skeleton CU.
559       NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name,
560                       DIUnit->getSplitDebugFilename());
561   }
562 
563   CUMap.insert({DIUnit, &NewCU});
564   CUDieMap.insert({&Die, &NewCU});
565   return NewCU;
566 }
567 
568 void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
569                                                   const DIImportedEntity *N) {
570   if (isa<DILocalScope>(N->getScope()))
571     return;
572   if (DIE *D = TheCU.getOrCreateContextDIE(N->getScope()))
573     D->addChild(TheCU.constructImportedEntityDIE(N));
574 }
575 
576 /// Sort and unique GVEs by comparing their fragment offset.
577 static SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &
578 sortGlobalExprs(SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &GVEs) {
579   llvm::sort(GVEs.begin(), GVEs.end(),
580              [](DwarfCompileUnit::GlobalExpr A,
581                 DwarfCompileUnit::GlobalExpr B) {
582                // Sort order: first null exprs, then exprs without fragment
583                // info, then sort by fragment offset in bits.
584                // FIXME: Come up with a more comprehensive comparator so
585                // the sorting isn't non-deterministic, and so the following
586                // std::unique call works correctly.
587                if (!A.Expr || !B.Expr)
588                  return !!B.Expr;
589                auto FragmentA = A.Expr->getFragmentInfo();
590                auto FragmentB = B.Expr->getFragmentInfo();
591                if (!FragmentA || !FragmentB)
592                  return !!FragmentB;
593                return FragmentA->OffsetInBits < FragmentB->OffsetInBits;
594              });
595   GVEs.erase(std::unique(GVEs.begin(), GVEs.end(),
596                          [](DwarfCompileUnit::GlobalExpr A,
597                             DwarfCompileUnit::GlobalExpr B) {
598                            return A.Expr == B.Expr;
599                          }),
600              GVEs.end());
601   return GVEs;
602 }
603 
604 // Emit all Dwarf sections that should come prior to the content. Create
605 // global DIEs and emit initial debug info sections. This is invoked by
606 // the target AsmPrinter.
607 void DwarfDebug::beginModule() {
608   NamedRegionTimer T(DbgTimerName, DbgTimerDescription, DWARFGroupName,
609                      DWARFGroupDescription, TimePassesIsEnabled);
610   if (DisableDebugInfoPrinting)
611     return;
612 
613   const Module *M = MMI->getModule();
614 
615   unsigned NumDebugCUs = std::distance(M->debug_compile_units_begin(),
616                                        M->debug_compile_units_end());
617   // Tell MMI whether we have debug info.
618   MMI->setDebugInfoAvailability(NumDebugCUs > 0);
619   SingleCU = NumDebugCUs == 1;
620   DenseMap<DIGlobalVariable *, SmallVector<DwarfCompileUnit::GlobalExpr, 1>>
621       GVMap;
622   for (const GlobalVariable &Global : M->globals()) {
623     SmallVector<DIGlobalVariableExpression *, 1> GVs;
624     Global.getDebugInfo(GVs);
625     for (auto *GVE : GVs)
626       GVMap[GVE->getVariable()].push_back({&Global, GVE->getExpression()});
627   }
628 
629   // Create the symbol that designates the start of the unit's contribution
630   // to the string offsets table. In a split DWARF scenario, only the skeleton
631   // unit has the DW_AT_str_offsets_base attribute (and hence needs the symbol).
632   if (useSegmentedStringOffsetsTable())
633     (useSplitDwarf() ? SkeletonHolder : InfoHolder)
634         .setStringOffsetsStartSym(Asm->createTempSymbol("str_offsets_base"));
635 
636   for (DICompileUnit *CUNode : M->debug_compile_units()) {
637     // FIXME: Move local imported entities into a list attached to the
638     // subprogram, then this search won't be needed and a
639     // getImportedEntities().empty() test should go below with the rest.
640     bool HasNonLocalImportedEntities = llvm::any_of(
641         CUNode->getImportedEntities(), [](const DIImportedEntity *IE) {
642           return !isa<DILocalScope>(IE->getScope());
643         });
644 
645     if (!HasNonLocalImportedEntities && CUNode->getEnumTypes().empty() &&
646         CUNode->getRetainedTypes().empty() &&
647         CUNode->getGlobalVariables().empty() && CUNode->getMacros().empty())
648       continue;
649 
650     DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(CUNode);
651 
652     // Global Variables.
653     for (auto *GVE : CUNode->getGlobalVariables()) {
654       // Don't bother adding DIGlobalVariableExpressions listed in the CU if we
655       // already know about the variable and it isn't adding a constant
656       // expression.
657       auto &GVMapEntry = GVMap[GVE->getVariable()];
658       auto *Expr = GVE->getExpression();
659       if (!GVMapEntry.size() || (Expr && Expr->isConstant()))
660         GVMapEntry.push_back({nullptr, Expr});
661     }
662     DenseSet<DIGlobalVariable *> Processed;
663     for (auto *GVE : CUNode->getGlobalVariables()) {
664       DIGlobalVariable *GV = GVE->getVariable();
665       if (Processed.insert(GV).second)
666         CU.getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV]));
667     }
668 
669     for (auto *Ty : CUNode->getEnumTypes()) {
670       // The enum types array by design contains pointers to
671       // MDNodes rather than DIRefs. Unique them here.
672       CU.getOrCreateTypeDIE(cast<DIType>(Ty));
673     }
674     for (auto *Ty : CUNode->getRetainedTypes()) {
675       // The retained types array by design contains pointers to
676       // MDNodes rather than DIRefs. Unique them here.
677       if (DIType *RT = dyn_cast<DIType>(Ty))
678           // There is no point in force-emitting a forward declaration.
679           CU.getOrCreateTypeDIE(RT);
680     }
681     // Emit imported_modules last so that the relevant context is already
682     // available.
683     for (auto *IE : CUNode->getImportedEntities())
684       constructAndAddImportedEntityDIE(CU, IE);
685   }
686 }
687 
688 void DwarfDebug::finishVariableDefinitions() {
689   for (const auto &Var : ConcreteVariables) {
690     DIE *VariableDie = Var->getDIE();
691     assert(VariableDie);
692     // FIXME: Consider the time-space tradeoff of just storing the unit pointer
693     // in the ConcreteVariables list, rather than looking it up again here.
694     // DIE::getUnit isn't simple - it walks parent pointers, etc.
695     DwarfCompileUnit *Unit = CUDieMap.lookup(VariableDie->getUnitDie());
696     assert(Unit);
697     Unit->finishVariableDefinition(*Var);
698   }
699 }
700 
701 void DwarfDebug::finishSubprogramDefinitions() {
702   for (const DISubprogram *SP : ProcessedSPNodes) {
703     assert(SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug);
704     forBothCUs(
705         getOrCreateDwarfCompileUnit(SP->getUnit()),
706         [&](DwarfCompileUnit &CU) { CU.finishSubprogramDefinition(SP); });
707   }
708 }
709 
710 void DwarfDebug::finalizeModuleInfo() {
711   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
712 
713   finishSubprogramDefinitions();
714 
715   finishVariableDefinitions();
716 
717   // Include the DWO file name in the hash if there's more than one CU.
718   // This handles ThinLTO's situation where imported CUs may very easily be
719   // duplicate with the same CU partially imported into another ThinLTO unit.
720   StringRef DWOName;
721   if (CUMap.size() > 1)
722     DWOName = Asm->TM.Options.MCOptions.SplitDwarfFile;
723 
724   // Handle anything that needs to be done on a per-unit basis after
725   // all other generation.
726   for (const auto &P : CUMap) {
727     auto &TheCU = *P.second;
728     // Emit DW_AT_containing_type attribute to connect types with their
729     // vtable holding type.
730     TheCU.constructContainingTypeDIEs();
731 
732     // Add CU specific attributes if we need to add any.
733     // If we're splitting the dwarf out now that we've got the entire
734     // CU then add the dwo id to it.
735     auto *SkCU = TheCU.getSkeleton();
736     if (useSplitDwarf()) {
737       // Emit a unique identifier for this CU.
738       uint64_t ID =
739           DIEHash(Asm).computeCUSignature(DWOName, TheCU.getUnitDie());
740       TheCU.addUInt(TheCU.getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
741                     dwarf::DW_FORM_data8, ID);
742       SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
743                     dwarf::DW_FORM_data8, ID);
744 
745       // We don't keep track of which addresses are used in which CU so this
746       // is a bit pessimistic under LTO.
747       if (!AddrPool.isEmpty()) {
748         const MCSymbol *Sym = TLOF.getDwarfAddrSection()->getBeginSymbol();
749         SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_addr_base,
750                               Sym, Sym);
751       }
752       if (!SkCU->getRangeLists().empty()) {
753         const MCSymbol *Sym = TLOF.getDwarfRangesSection()->getBeginSymbol();
754         SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_ranges_base,
755                               Sym, Sym);
756       }
757     }
758 
759     // If we have code split among multiple sections or non-contiguous
760     // ranges of code then emit a DW_AT_ranges attribute on the unit that will
761     // remain in the .o file, otherwise add a DW_AT_low_pc.
762     // FIXME: We should use ranges allow reordering of code ala
763     // .subsections_via_symbols in mach-o. This would mean turning on
764     // ranges for all subprogram DIEs for mach-o.
765     DwarfCompileUnit &U = SkCU ? *SkCU : TheCU;
766     if (unsigned NumRanges = TheCU.getRanges().size()) {
767       if (NumRanges > 1 && useRangesSection())
768         // A DW_AT_low_pc attribute may also be specified in combination with
769         // DW_AT_ranges to specify the default base address for use in
770         // location lists (see Section 2.6.2) and range lists (see Section
771         // 2.17.3).
772         U.addUInt(U.getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
773       else
774         U.setBaseAddress(TheCU.getRanges().front().getStart());
775       U.attachRangesOrLowHighPC(U.getUnitDie(), TheCU.takeRanges());
776     }
777 
778     auto *CUNode = cast<DICompileUnit>(P.first);
779     // If compile Unit has macros, emit "DW_AT_macro_info" attribute.
780     if (CUNode->getMacros())
781       U.addSectionLabel(U.getUnitDie(), dwarf::DW_AT_macro_info,
782                         U.getMacroLabelBegin(),
783                         TLOF.getDwarfMacinfoSection()->getBeginSymbol());
784   }
785 
786   // Emit all frontend-produced Skeleton CUs, i.e., Clang modules.
787   for (auto *CUNode : MMI->getModule()->debug_compile_units())
788     if (CUNode->getDWOId())
789       getOrCreateDwarfCompileUnit(CUNode);
790 
791   // Compute DIE offsets and sizes.
792   InfoHolder.computeSizeAndOffsets();
793   if (useSplitDwarf())
794     SkeletonHolder.computeSizeAndOffsets();
795 }
796 
797 // Emit all Dwarf sections that should come after the content.
798 void DwarfDebug::endModule() {
799   assert(CurFn == nullptr);
800   assert(CurMI == nullptr);
801 
802   // If we aren't actually generating debug info (check beginModule -
803   // conditionalized on !DisableDebugInfoPrinting and the presence of the
804   // llvm.dbg.cu metadata node)
805   if (!MMI->hasDebugInfo())
806     return;
807 
808   // Finalize the debug info for the module.
809   finalizeModuleInfo();
810 
811   emitDebugStr();
812 
813   if (useSplitDwarf())
814     emitDebugLocDWO();
815   else
816     // Emit info into a debug loc section.
817     emitDebugLoc();
818 
819   // Corresponding abbreviations into a abbrev section.
820   emitAbbreviations();
821 
822   // Emit all the DIEs into a debug info section.
823   emitDebugInfo();
824 
825   // Emit info into a debug aranges section.
826   if (GenerateARangeSection)
827     emitDebugARanges();
828 
829   // Emit info into a debug ranges section.
830   emitDebugRanges();
831 
832   // Emit info into a debug macinfo section.
833   emitDebugMacinfo();
834 
835   if (useSplitDwarf()) {
836     emitDebugStrDWO();
837     emitDebugInfoDWO();
838     emitDebugAbbrevDWO();
839     emitDebugLineDWO();
840     // Emit DWO addresses.
841     AddrPool.emit(*Asm, Asm->getObjFileLowering().getDwarfAddrSection());
842   }
843 
844   // Emit info into the dwarf accelerator table sections.
845   switch (getAccelTableKind()) {
846   case AccelTableKind::Apple:
847     emitAccelNames();
848     emitAccelObjC();
849     emitAccelNamespaces();
850     emitAccelTypes();
851     break;
852   case AccelTableKind::Dwarf:
853     emitAccelDebugNames();
854     break;
855   case AccelTableKind::None:
856     break;
857   case AccelTableKind::Default:
858     llvm_unreachable("Default should have already been resolved.");
859   }
860 
861   // Emit the pubnames and pubtypes sections if requested.
862   emitDebugPubSections();
863 
864   // clean up.
865   // FIXME: AbstractVariables.clear();
866 }
867 
868 void DwarfDebug::ensureAbstractVariableIsCreated(DwarfCompileUnit &CU, InlinedVariable IV,
869                                                  const MDNode *ScopeNode) {
870   const DILocalVariable *Cleansed = nullptr;
871   if (CU.getExistingAbstractVariable(IV, Cleansed))
872     return;
873 
874   CU.createAbstractVariable(Cleansed, LScopes.getOrCreateAbstractScope(
875                                        cast<DILocalScope>(ScopeNode)));
876 }
877 
878 void DwarfDebug::ensureAbstractVariableIsCreatedIfScoped(DwarfCompileUnit &CU,
879     InlinedVariable IV, const MDNode *ScopeNode) {
880   const DILocalVariable *Cleansed = nullptr;
881   if (CU.getExistingAbstractVariable(IV, Cleansed))
882     return;
883 
884   if (LexicalScope *Scope =
885           LScopes.findAbstractScope(cast_or_null<DILocalScope>(ScopeNode)))
886     CU.createAbstractVariable(Cleansed, Scope);
887 }
888 
889 // Collect variable information from side table maintained by MF.
890 void DwarfDebug::collectVariableInfoFromMFTable(
891     DwarfCompileUnit &TheCU, DenseSet<InlinedVariable> &Processed) {
892   SmallDenseMap<InlinedVariable, DbgVariable *> MFVars;
893   for (const auto &VI : Asm->MF->getVariableDbgInfo()) {
894     if (!VI.Var)
895       continue;
896     assert(VI.Var->isValidLocationForIntrinsic(VI.Loc) &&
897            "Expected inlined-at fields to agree");
898 
899     InlinedVariable Var(VI.Var, VI.Loc->getInlinedAt());
900     Processed.insert(Var);
901     LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc);
902 
903     // If variable scope is not found then skip this variable.
904     if (!Scope)
905       continue;
906 
907     ensureAbstractVariableIsCreatedIfScoped(TheCU, Var, Scope->getScopeNode());
908     auto RegVar = llvm::make_unique<DbgVariable>(Var.first, Var.second);
909     RegVar->initializeMMI(VI.Expr, VI.Slot);
910     if (DbgVariable *DbgVar = MFVars.lookup(Var))
911       DbgVar->addMMIEntry(*RegVar);
912     else if (InfoHolder.addScopeVariable(Scope, RegVar.get())) {
913       MFVars.insert({Var, RegVar.get()});
914       ConcreteVariables.push_back(std::move(RegVar));
915     }
916   }
917 }
918 
919 // Get .debug_loc entry for the instruction range starting at MI.
920 static DebugLocEntry::Value getDebugLocValue(const MachineInstr *MI) {
921   const DIExpression *Expr = MI->getDebugExpression();
922   assert(MI->getNumOperands() == 4);
923   if (MI->getOperand(0).isReg()) {
924     auto RegOp = MI->getOperand(0);
925     auto Op1 = MI->getOperand(1);
926     // If the second operand is an immediate, this is a
927     // register-indirect address.
928     assert((!Op1.isImm() || (Op1.getImm() == 0)) && "unexpected offset");
929     MachineLocation MLoc(RegOp.getReg(), Op1.isImm());
930     return DebugLocEntry::Value(Expr, MLoc);
931   }
932   if (MI->getOperand(0).isImm())
933     return DebugLocEntry::Value(Expr, MI->getOperand(0).getImm());
934   if (MI->getOperand(0).isFPImm())
935     return DebugLocEntry::Value(Expr, MI->getOperand(0).getFPImm());
936   if (MI->getOperand(0).isCImm())
937     return DebugLocEntry::Value(Expr, MI->getOperand(0).getCImm());
938 
939   llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!");
940 }
941 
942 /// \brief If this and Next are describing different fragments of the same
943 /// variable, merge them by appending Next's values to the current
944 /// list of values.
945 /// Return true if the merge was successful.
946 bool DebugLocEntry::MergeValues(const DebugLocEntry &Next) {
947   if (Begin == Next.Begin) {
948     auto *FirstExpr = cast<DIExpression>(Values[0].Expression);
949     auto *FirstNextExpr = cast<DIExpression>(Next.Values[0].Expression);
950     if (!FirstExpr->isFragment() || !FirstNextExpr->isFragment())
951       return false;
952 
953     // We can only merge entries if none of the fragments overlap any others.
954     // In doing so, we can take advantage of the fact that both lists are
955     // sorted.
956     for (unsigned i = 0, j = 0; i < Values.size(); ++i) {
957       for (; j < Next.Values.size(); ++j) {
958         int res = cast<DIExpression>(Values[i].Expression)->fragmentCmp(
959             cast<DIExpression>(Next.Values[j].Expression));
960         if (res == 0) // The two expressions overlap, we can't merge.
961           return false;
962         // Values[i] is entirely before Next.Values[j],
963         // so go back to the next entry of Values.
964         else if (res == -1)
965           break;
966         // Next.Values[j] is entirely before Values[i], so go on to the
967         // next entry of Next.Values.
968       }
969     }
970 
971     addValues(Next.Values);
972     End = Next.End;
973     return true;
974   }
975   return false;
976 }
977 
978 /// Build the location list for all DBG_VALUEs in the function that
979 /// describe the same variable.  If the ranges of several independent
980 /// fragments of the same variable overlap partially, split them up and
981 /// combine the ranges. The resulting DebugLocEntries are will have
982 /// strict monotonically increasing begin addresses and will never
983 /// overlap.
984 //
985 // Input:
986 //
987 //   Ranges History [var, loc, fragment ofs size]
988 // 0 |      [x, (reg0, fragment 0, 32)]
989 // 1 | |    [x, (reg1, fragment 32, 32)] <- IsFragmentOfPrevEntry
990 // 2 | |    ...
991 // 3   |    [clobber reg0]
992 // 4        [x, (mem, fragment 0, 64)] <- overlapping with both previous fragments of
993 //                                     x.
994 //
995 // Output:
996 //
997 // [0-1]    [x, (reg0, fragment  0, 32)]
998 // [1-3]    [x, (reg0, fragment  0, 32), (reg1, fragment 32, 32)]
999 // [3-4]    [x, (reg1, fragment 32, 32)]
1000 // [4- ]    [x, (mem,  fragment  0, 64)]
1001 void
1002 DwarfDebug::buildLocationList(SmallVectorImpl<DebugLocEntry> &DebugLoc,
1003                               const DbgValueHistoryMap::InstrRanges &Ranges) {
1004   SmallVector<DebugLocEntry::Value, 4> OpenRanges;
1005 
1006   for (auto I = Ranges.begin(), E = Ranges.end(); I != E; ++I) {
1007     const MachineInstr *Begin = I->first;
1008     const MachineInstr *End = I->second;
1009     assert(Begin->isDebugValue() && "Invalid History entry");
1010 
1011     // Check if a variable is inaccessible in this range.
1012     if (Begin->getNumOperands() > 1 &&
1013         Begin->getOperand(0).isReg() && !Begin->getOperand(0).getReg()) {
1014       OpenRanges.clear();
1015       continue;
1016     }
1017 
1018     // If this fragment overlaps with any open ranges, truncate them.
1019     const DIExpression *DIExpr = Begin->getDebugExpression();
1020     auto Last = remove_if(OpenRanges, [&](DebugLocEntry::Value R) {
1021       return DIExpr->fragmentsOverlap(R.getExpression());
1022     });
1023     OpenRanges.erase(Last, OpenRanges.end());
1024 
1025     const MCSymbol *StartLabel = getLabelBeforeInsn(Begin);
1026     assert(StartLabel && "Forgot label before DBG_VALUE starting a range!");
1027 
1028     const MCSymbol *EndLabel;
1029     if (End != nullptr)
1030       EndLabel = getLabelAfterInsn(End);
1031     else if (std::next(I) == Ranges.end())
1032       EndLabel = Asm->getFunctionEnd();
1033     else
1034       EndLabel = getLabelBeforeInsn(std::next(I)->first);
1035     assert(EndLabel && "Forgot label after instruction ending a range!");
1036 
1037     DEBUG(dbgs() << "DotDebugLoc: " << *Begin << "\n");
1038 
1039     auto Value = getDebugLocValue(Begin);
1040     DebugLocEntry Loc(StartLabel, EndLabel, Value);
1041     bool couldMerge = false;
1042 
1043     // If this is a fragment, it may belong to the current DebugLocEntry.
1044     if (DIExpr->isFragment()) {
1045       // Add this value to the list of open ranges.
1046       OpenRanges.push_back(Value);
1047 
1048       // Attempt to add the fragment to the last entry.
1049       if (!DebugLoc.empty())
1050         if (DebugLoc.back().MergeValues(Loc))
1051           couldMerge = true;
1052     }
1053 
1054     if (!couldMerge) {
1055       // Need to add a new DebugLocEntry. Add all values from still
1056       // valid non-overlapping fragments.
1057       if (OpenRanges.size())
1058         Loc.addValues(OpenRanges);
1059 
1060       DebugLoc.push_back(std::move(Loc));
1061     }
1062 
1063     // Attempt to coalesce the ranges of two otherwise identical
1064     // DebugLocEntries.
1065     auto CurEntry = DebugLoc.rbegin();
1066     DEBUG({
1067       dbgs() << CurEntry->getValues().size() << " Values:\n";
1068       for (auto &Value : CurEntry->getValues())
1069         Value.dump();
1070       dbgs() << "-----\n";
1071     });
1072 
1073     auto PrevEntry = std::next(CurEntry);
1074     if (PrevEntry != DebugLoc.rend() && PrevEntry->MergeRanges(*CurEntry))
1075       DebugLoc.pop_back();
1076   }
1077 }
1078 
1079 DbgVariable *DwarfDebug::createConcreteVariable(DwarfCompileUnit &TheCU,
1080                                                 LexicalScope &Scope,
1081                                                 InlinedVariable IV) {
1082   ensureAbstractVariableIsCreatedIfScoped(TheCU, IV, Scope.getScopeNode());
1083   ConcreteVariables.push_back(
1084       llvm::make_unique<DbgVariable>(IV.first, IV.second));
1085   InfoHolder.addScopeVariable(&Scope, ConcreteVariables.back().get());
1086   return ConcreteVariables.back().get();
1087 }
1088 
1089 /// Determine whether a *singular* DBG_VALUE is valid for the entirety of its
1090 /// enclosing lexical scope. The check ensures there are no other instructions
1091 /// in the same lexical scope preceding the DBG_VALUE and that its range is
1092 /// either open or otherwise rolls off the end of the scope.
1093 static bool validThroughout(LexicalScopes &LScopes,
1094                             const MachineInstr *DbgValue,
1095                             const MachineInstr *RangeEnd) {
1096   assert(DbgValue->getDebugLoc() && "DBG_VALUE without a debug location");
1097   auto MBB = DbgValue->getParent();
1098   auto DL = DbgValue->getDebugLoc();
1099   auto *LScope = LScopes.findLexicalScope(DL);
1100   // Scope doesn't exist; this is a dead DBG_VALUE.
1101   if (!LScope)
1102     return false;
1103   auto &LSRange = LScope->getRanges();
1104   if (LSRange.size() == 0)
1105     return false;
1106 
1107   // Determine if the DBG_VALUE is valid at the beginning of its lexical block.
1108   const MachineInstr *LScopeBegin = LSRange.front().first;
1109   // Early exit if the lexical scope begins outside of the current block.
1110   if (LScopeBegin->getParent() != MBB)
1111     return false;
1112   MachineBasicBlock::const_reverse_iterator Pred(DbgValue);
1113   for (++Pred; Pred != MBB->rend(); ++Pred) {
1114     if (Pred->getFlag(MachineInstr::FrameSetup))
1115       break;
1116     auto PredDL = Pred->getDebugLoc();
1117     if (!PredDL || Pred->isMetaInstruction())
1118       continue;
1119     // Check whether the instruction preceding the DBG_VALUE is in the same
1120     // (sub)scope as the DBG_VALUE.
1121     if (DL->getScope() == PredDL->getScope())
1122       return false;
1123     auto *PredScope = LScopes.findLexicalScope(PredDL);
1124     if (!PredScope || LScope->dominates(PredScope))
1125       return false;
1126   }
1127 
1128   // If the range of the DBG_VALUE is open-ended, report success.
1129   if (!RangeEnd)
1130     return true;
1131 
1132   // Fail if there are instructions belonging to our scope in another block.
1133   const MachineInstr *LScopeEnd = LSRange.back().second;
1134   if (LScopeEnd->getParent() != MBB)
1135     return false;
1136 
1137   // Single, constant DBG_VALUEs in the prologue are promoted to be live
1138   // throughout the function. This is a hack, presumably for DWARF v2 and not
1139   // necessarily correct. It would be much better to use a dbg.declare instead
1140   // if we know the constant is live throughout the scope.
1141   if (DbgValue->getOperand(0).isImm() && MBB->pred_empty())
1142     return true;
1143 
1144   return false;
1145 }
1146 
1147 // Find variables for each lexical scope.
1148 void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU,
1149                                      const DISubprogram *SP,
1150                                      DenseSet<InlinedVariable> &Processed) {
1151   // Grab the variable info that was squirreled away in the MMI side-table.
1152   collectVariableInfoFromMFTable(TheCU, Processed);
1153 
1154   for (const auto &I : DbgValues) {
1155     InlinedVariable IV = I.first;
1156     if (Processed.count(IV))
1157       continue;
1158 
1159     // Instruction ranges, specifying where IV is accessible.
1160     const auto &Ranges = I.second;
1161     if (Ranges.empty())
1162       continue;
1163 
1164     LexicalScope *Scope = nullptr;
1165     if (const DILocation *IA = IV.second)
1166       Scope = LScopes.findInlinedScope(IV.first->getScope(), IA);
1167     else
1168       Scope = LScopes.findLexicalScope(IV.first->getScope());
1169     // If variable scope is not found then skip this variable.
1170     if (!Scope)
1171       continue;
1172 
1173     Processed.insert(IV);
1174     DbgVariable *RegVar = createConcreteVariable(TheCU, *Scope, IV);
1175 
1176     const MachineInstr *MInsn = Ranges.front().first;
1177     assert(MInsn->isDebugValue() && "History must begin with debug value");
1178 
1179     // Check if there is a single DBG_VALUE, valid throughout the var's scope.
1180     if (Ranges.size() == 1 &&
1181         validThroughout(LScopes, MInsn, Ranges.front().second)) {
1182       RegVar->initializeDbgValue(MInsn);
1183       continue;
1184     }
1185 
1186     // Handle multiple DBG_VALUE instructions describing one variable.
1187     DebugLocStream::ListBuilder List(DebugLocs, TheCU, *Asm, *RegVar, *MInsn);
1188 
1189     // Build the location list for this variable.
1190     SmallVector<DebugLocEntry, 8> Entries;
1191     buildLocationList(Entries, Ranges);
1192 
1193     // If the variable has a DIBasicType, extract it.  Basic types cannot have
1194     // unique identifiers, so don't bother resolving the type with the
1195     // identifier map.
1196     const DIBasicType *BT = dyn_cast<DIBasicType>(
1197         static_cast<const Metadata *>(IV.first->getType()));
1198 
1199     // Finalize the entry by lowering it into a DWARF bytestream.
1200     for (auto &Entry : Entries)
1201       Entry.finalize(*Asm, List, BT);
1202   }
1203 
1204   // Collect info for variables that were optimized out.
1205   for (const DILocalVariable *DV : SP->getVariables()) {
1206     if (Processed.insert(InlinedVariable(DV, nullptr)).second)
1207       if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope()))
1208         createConcreteVariable(TheCU, *Scope, InlinedVariable(DV, nullptr));
1209   }
1210 }
1211 
1212 // Process beginning of an instruction.
1213 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1214   DebugHandlerBase::beginInstruction(MI);
1215   assert(CurMI);
1216 
1217   const auto *SP = MI->getMF()->getFunction().getSubprogram();
1218   if (!SP || SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug)
1219     return;
1220 
1221   // Check if source location changes, but ignore DBG_VALUE and CFI locations.
1222   // If the instruction is part of the function frame setup code, do not emit
1223   // any line record, as there is no correspondence with any user code.
1224   if (MI->isMetaInstruction() || MI->getFlag(MachineInstr::FrameSetup))
1225     return;
1226   const DebugLoc &DL = MI->getDebugLoc();
1227   // When we emit a line-0 record, we don't update PrevInstLoc; so look at
1228   // the last line number actually emitted, to see if it was line 0.
1229   unsigned LastAsmLine =
1230       Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine();
1231 
1232   if (DL == PrevInstLoc) {
1233     // If we have an ongoing unspecified location, nothing to do here.
1234     if (!DL)
1235       return;
1236     // We have an explicit location, same as the previous location.
1237     // But we might be coming back to it after a line 0 record.
1238     if (LastAsmLine == 0 && DL.getLine() != 0) {
1239       // Reinstate the source location but not marked as a statement.
1240       const MDNode *Scope = DL.getScope();
1241       recordSourceLine(DL.getLine(), DL.getCol(), Scope, /*Flags=*/0);
1242     }
1243     return;
1244   }
1245 
1246   if (!DL) {
1247     // We have an unspecified location, which might want to be line 0.
1248     // If we have already emitted a line-0 record, don't repeat it.
1249     if (LastAsmLine == 0)
1250       return;
1251     // If user said Don't Do That, don't do that.
1252     if (UnknownLocations == Disable)
1253       return;
1254     // See if we have a reason to emit a line-0 record now.
1255     // Reasons to emit a line-0 record include:
1256     // - User asked for it (UnknownLocations).
1257     // - Instruction has a label, so it's referenced from somewhere else,
1258     //   possibly debug information; we want it to have a source location.
1259     // - Instruction is at the top of a block; we don't want to inherit the
1260     //   location from the physically previous (maybe unrelated) block.
1261     if (UnknownLocations == Enable || PrevLabel ||
1262         (PrevInstBB && PrevInstBB != MI->getParent())) {
1263       // Preserve the file and column numbers, if we can, to save space in
1264       // the encoded line table.
1265       // Do not update PrevInstLoc, it remembers the last non-0 line.
1266       const MDNode *Scope = nullptr;
1267       unsigned Column = 0;
1268       if (PrevInstLoc) {
1269         Scope = PrevInstLoc.getScope();
1270         Column = PrevInstLoc.getCol();
1271       }
1272       recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0);
1273     }
1274     return;
1275   }
1276 
1277   // We have an explicit location, different from the previous location.
1278   // Don't repeat a line-0 record, but otherwise emit the new location.
1279   // (The new location might be an explicit line 0, which we do emit.)
1280   if (PrevInstLoc && DL.getLine() == 0 && LastAsmLine == 0)
1281     return;
1282   unsigned Flags = 0;
1283   if (DL == PrologEndLoc) {
1284     Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT;
1285     PrologEndLoc = DebugLoc();
1286   }
1287   // If the line changed, we call that a new statement; unless we went to
1288   // line 0 and came back, in which case it is not a new statement.
1289   unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine;
1290   if (DL.getLine() && DL.getLine() != OldLine)
1291     Flags |= DWARF2_FLAG_IS_STMT;
1292 
1293   const MDNode *Scope = DL.getScope();
1294   recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1295 
1296   // If we're not at line 0, remember this location.
1297   if (DL.getLine())
1298     PrevInstLoc = DL;
1299 }
1300 
1301 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) {
1302   // First known non-DBG_VALUE and non-frame setup location marks
1303   // the beginning of the function body.
1304   for (const auto &MBB : *MF)
1305     for (const auto &MI : MBB)
1306       if (!MI.isMetaInstruction() && !MI.getFlag(MachineInstr::FrameSetup) &&
1307           MI.getDebugLoc())
1308         return MI.getDebugLoc();
1309   return DebugLoc();
1310 }
1311 
1312 // Gather pre-function debug information.  Assumes being called immediately
1313 // after the function entry point has been emitted.
1314 void DwarfDebug::beginFunctionImpl(const MachineFunction *MF) {
1315   CurFn = MF;
1316 
1317   auto *SP = MF->getFunction().getSubprogram();
1318   assert(LScopes.empty() || SP == LScopes.getCurrentFunctionScope()->getScopeNode());
1319   if (SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug)
1320     return;
1321 
1322   DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(SP->getUnit());
1323 
1324   // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
1325   // belongs to so that we add to the correct per-cu line table in the
1326   // non-asm case.
1327   if (Asm->OutStreamer->hasRawTextSupport())
1328     // Use a single line table if we are generating assembly.
1329     Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1330   else
1331     Asm->OutStreamer->getContext().setDwarfCompileUnitID(CU.getUniqueID());
1332 
1333   // Record beginning of function.
1334   PrologEndLoc = findPrologueEndLoc(MF);
1335   if (PrologEndLoc) {
1336     // We'd like to list the prologue as "not statements" but GDB behaves
1337     // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1338     auto *SP = PrologEndLoc->getInlinedAtScope()->getSubprogram();
1339     recordSourceLine(SP->getScopeLine(), 0, SP, DWARF2_FLAG_IS_STMT);
1340   }
1341 }
1342 
1343 void DwarfDebug::skippedNonDebugFunction() {
1344   // If we don't have a subprogram for this function then there will be a hole
1345   // in the range information. Keep note of this by setting the previously used
1346   // section to nullptr.
1347   PrevCU = nullptr;
1348   CurFn = nullptr;
1349 }
1350 
1351 // Gather and emit post-function debug information.
1352 void DwarfDebug::endFunctionImpl(const MachineFunction *MF) {
1353   const DISubprogram *SP = MF->getFunction().getSubprogram();
1354 
1355   assert(CurFn == MF &&
1356       "endFunction should be called with the same function as beginFunction");
1357 
1358   // Set DwarfDwarfCompileUnitID in MCContext to default value.
1359   Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1360 
1361   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1362   assert(!FnScope || SP == FnScope->getScopeNode());
1363   DwarfCompileUnit &TheCU = *CUMap.lookup(SP->getUnit());
1364 
1365   DenseSet<InlinedVariable> ProcessedVars;
1366   collectVariableInfo(TheCU, SP, ProcessedVars);
1367 
1368   // Add the range of this function to the list of ranges for the CU.
1369   TheCU.addRange(RangeSpan(Asm->getFunctionBegin(), Asm->getFunctionEnd()));
1370 
1371   // Under -gmlt, skip building the subprogram if there are no inlined
1372   // subroutines inside it. But with -fdebug-info-for-profiling, the subprogram
1373   // is still needed as we need its source location.
1374   if (!TheCU.getCUNode()->getDebugInfoForProfiling() &&
1375       TheCU.getCUNode()->getEmissionKind() == DICompileUnit::LineTablesOnly &&
1376       LScopes.getAbstractScopesList().empty() && !IsDarwin) {
1377     assert(InfoHolder.getScopeVariables().empty());
1378     PrevLabel = nullptr;
1379     CurFn = nullptr;
1380     return;
1381   }
1382 
1383 #ifndef NDEBUG
1384   size_t NumAbstractScopes = LScopes.getAbstractScopesList().size();
1385 #endif
1386   // Construct abstract scopes.
1387   for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
1388     auto *SP = cast<DISubprogram>(AScope->getScopeNode());
1389     // Collect info for variables that were optimized out.
1390     for (const DILocalVariable *DV : SP->getVariables()) {
1391       if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second)
1392         continue;
1393       ensureAbstractVariableIsCreated(TheCU, InlinedVariable(DV, nullptr),
1394                                       DV->getScope());
1395       assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
1396              && "ensureAbstractVariableIsCreated inserted abstract scopes");
1397     }
1398     constructAbstractSubprogramScopeDIE(TheCU, AScope);
1399   }
1400 
1401   ProcessedSPNodes.insert(SP);
1402   TheCU.constructSubprogramScopeDIE(SP, FnScope);
1403   if (auto *SkelCU = TheCU.getSkeleton())
1404     if (!LScopes.getAbstractScopesList().empty() &&
1405         TheCU.getCUNode()->getSplitDebugInlining())
1406       SkelCU->constructSubprogramScopeDIE(SP, FnScope);
1407 
1408   // Clear debug info
1409   // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the
1410   // DbgVariables except those that are also in AbstractVariables (since they
1411   // can be used cross-function)
1412   InfoHolder.getScopeVariables().clear();
1413   PrevLabel = nullptr;
1414   CurFn = nullptr;
1415 }
1416 
1417 // Register a source line with debug info. Returns the  unique label that was
1418 // emitted and which provides correspondence to the source line list.
1419 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1420                                   unsigned Flags) {
1421   StringRef Fn;
1422   unsigned FileNo = 1;
1423   unsigned Discriminator = 0;
1424   if (auto *Scope = cast_or_null<DIScope>(S)) {
1425     Fn = Scope->getFilename();
1426     if (Line != 0 && getDwarfVersion() >= 4)
1427       if (auto *LBF = dyn_cast<DILexicalBlockFile>(Scope))
1428         Discriminator = LBF->getDiscriminator();
1429 
1430     unsigned CUID = Asm->OutStreamer->getContext().getDwarfCompileUnitID();
1431     FileNo = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID])
1432               .getOrCreateSourceID(Scope->getFile());
1433   }
1434   Asm->OutStreamer->EmitDwarfLocDirective(FileNo, Line, Col, Flags, 0,
1435                                           Discriminator, Fn);
1436 }
1437 
1438 //===----------------------------------------------------------------------===//
1439 // Emit Methods
1440 //===----------------------------------------------------------------------===//
1441 
1442 // Emit the debug info section.
1443 void DwarfDebug::emitDebugInfo() {
1444   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1445   Holder.emitUnits(/* UseOffsets */ false);
1446 }
1447 
1448 // Emit the abbreviation section.
1449 void DwarfDebug::emitAbbreviations() {
1450   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1451 
1452   Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1453 }
1454 
1455 void DwarfDebug::emitStringOffsetsTableHeader() {
1456   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1457   Holder.emitStringOffsetsTableHeader(
1458       Asm->getObjFileLowering().getDwarfStrOffSection());
1459 }
1460 
1461 template <typename AccelTableT>
1462 void DwarfDebug::emitAccel(AccelTableT &Accel, MCSection *Section,
1463                            StringRef TableName) {
1464   Asm->OutStreamer->SwitchSection(Section);
1465 
1466   // Emit the full data.
1467   emitAppleAccelTable(Asm, Accel, TableName, Section->getBeginSymbol());
1468 }
1469 
1470 void DwarfDebug::emitAccelDebugNames() {
1471   // Don't emit anything if we have no compilation units to index.
1472   if (getUnits().empty())
1473     return;
1474 
1475   Asm->OutStreamer->SwitchSection(
1476       Asm->getObjFileLowering().getDwarfDebugNamesSection());
1477   emitDWARF5AccelTable(Asm, AccelDebugNames, *this, getUnits());
1478 }
1479 
1480 // Emit visible names into a hashed accelerator table section.
1481 void DwarfDebug::emitAccelNames() {
1482   emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(),
1483             "Names");
1484 }
1485 
1486 // Emit objective C classes and categories into a hashed accelerator table
1487 // section.
1488 void DwarfDebug::emitAccelObjC() {
1489   emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(),
1490             "ObjC");
1491 }
1492 
1493 // Emit namespace dies into a hashed accelerator table.
1494 void DwarfDebug::emitAccelNamespaces() {
1495   emitAccel(AccelNamespace,
1496             Asm->getObjFileLowering().getDwarfAccelNamespaceSection(),
1497             "namespac");
1498 }
1499 
1500 // Emit type dies into a hashed accelerator table.
1501 void DwarfDebug::emitAccelTypes() {
1502   emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(),
1503             "types");
1504 }
1505 
1506 // Public name handling.
1507 // The format for the various pubnames:
1508 //
1509 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
1510 // for the DIE that is named.
1511 //
1512 // gnu pubnames - offset/index value/name tuples where the offset is the offset
1513 // into the CU and the index value is computed according to the type of value
1514 // for the DIE that is named.
1515 //
1516 // For type units the offset is the offset of the skeleton DIE. For split dwarf
1517 // it's the offset within the debug_info/debug_types dwo section, however, the
1518 // reference in the pubname header doesn't change.
1519 
1520 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
1521 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU,
1522                                                         const DIE *Die) {
1523   // Entities that ended up only in a Type Unit reference the CU instead (since
1524   // the pub entry has offsets within the CU there's no real offset that can be
1525   // provided anyway). As it happens all such entities (namespaces and types,
1526   // types only in C++ at that) are rendered as TYPE+EXTERNAL. If this turns out
1527   // not to be true it would be necessary to persist this information from the
1528   // point at which the entry is added to the index data structure - since by
1529   // the time the index is built from that, the original type/namespace DIE in a
1530   // type unit has already been destroyed so it can't be queried for properties
1531   // like tag, etc.
1532   if (Die->getTag() == dwarf::DW_TAG_compile_unit)
1533     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE,
1534                                           dwarf::GIEL_EXTERNAL);
1535   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
1536 
1537   // We could have a specification DIE that has our most of our knowledge,
1538   // look for that now.
1539   if (DIEValue SpecVal = Die->findAttribute(dwarf::DW_AT_specification)) {
1540     DIE &SpecDIE = SpecVal.getDIEEntry().getEntry();
1541     if (SpecDIE.findAttribute(dwarf::DW_AT_external))
1542       Linkage = dwarf::GIEL_EXTERNAL;
1543   } else if (Die->findAttribute(dwarf::DW_AT_external))
1544     Linkage = dwarf::GIEL_EXTERNAL;
1545 
1546   switch (Die->getTag()) {
1547   case dwarf::DW_TAG_class_type:
1548   case dwarf::DW_TAG_structure_type:
1549   case dwarf::DW_TAG_union_type:
1550   case dwarf::DW_TAG_enumeration_type:
1551     return dwarf::PubIndexEntryDescriptor(
1552         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
1553                               ? dwarf::GIEL_STATIC
1554                               : dwarf::GIEL_EXTERNAL);
1555   case dwarf::DW_TAG_typedef:
1556   case dwarf::DW_TAG_base_type:
1557   case dwarf::DW_TAG_subrange_type:
1558     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
1559   case dwarf::DW_TAG_namespace:
1560     return dwarf::GIEK_TYPE;
1561   case dwarf::DW_TAG_subprogram:
1562     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
1563   case dwarf::DW_TAG_variable:
1564     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
1565   case dwarf::DW_TAG_enumerator:
1566     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
1567                                           dwarf::GIEL_STATIC);
1568   default:
1569     return dwarf::GIEK_NONE;
1570   }
1571 }
1572 
1573 /// emitDebugPubSections - Emit visible names and types into debug pubnames and
1574 /// pubtypes sections.
1575 void DwarfDebug::emitDebugPubSections() {
1576   for (const auto &NU : CUMap) {
1577     DwarfCompileUnit *TheU = NU.second;
1578     if (!TheU->hasDwarfPubSections())
1579       continue;
1580 
1581     bool GnuStyle = TheU->getCUNode()->getGnuPubnames();
1582 
1583     Asm->OutStreamer->SwitchSection(
1584         GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
1585                  : Asm->getObjFileLowering().getDwarfPubNamesSection());
1586     emitDebugPubSection(GnuStyle, "Names", TheU, TheU->getGlobalNames());
1587 
1588     Asm->OutStreamer->SwitchSection(
1589         GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
1590                  : Asm->getObjFileLowering().getDwarfPubTypesSection());
1591     emitDebugPubSection(GnuStyle, "Types", TheU, TheU->getGlobalTypes());
1592   }
1593 }
1594 
1595 void DwarfDebug::emitSectionReference(const DwarfCompileUnit &CU) {
1596   if (useSectionsAsReferences())
1597     Asm->EmitDwarfOffset(CU.getSection()->getBeginSymbol(),
1598                          CU.getDebugSectionOffset());
1599   else
1600     Asm->emitDwarfSymbolReference(CU.getLabelBegin());
1601 }
1602 
1603 void DwarfDebug::emitDebugPubSection(bool GnuStyle, StringRef Name,
1604                                      DwarfCompileUnit *TheU,
1605                                      const StringMap<const DIE *> &Globals) {
1606   if (auto *Skeleton = TheU->getSkeleton())
1607     TheU = Skeleton;
1608 
1609   // Emit the header.
1610   Asm->OutStreamer->AddComment("Length of Public " + Name + " Info");
1611   MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin");
1612   MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end");
1613   Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);
1614 
1615   Asm->OutStreamer->EmitLabel(BeginLabel);
1616 
1617   Asm->OutStreamer->AddComment("DWARF Version");
1618   Asm->emitInt16(dwarf::DW_PUBNAMES_VERSION);
1619 
1620   Asm->OutStreamer->AddComment("Offset of Compilation Unit Info");
1621   emitSectionReference(*TheU);
1622 
1623   Asm->OutStreamer->AddComment("Compilation Unit Length");
1624   Asm->emitInt32(TheU->getLength());
1625 
1626   // Emit the pubnames for this compilation unit.
1627   for (const auto &GI : Globals) {
1628     const char *Name = GI.getKeyData();
1629     const DIE *Entity = GI.second;
1630 
1631     Asm->OutStreamer->AddComment("DIE offset");
1632     Asm->emitInt32(Entity->getOffset());
1633 
1634     if (GnuStyle) {
1635       dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity);
1636       Asm->OutStreamer->AddComment(
1637           Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
1638           dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
1639       Asm->emitInt8(Desc.toBits());
1640     }
1641 
1642     Asm->OutStreamer->AddComment("External Name");
1643     Asm->OutStreamer->EmitBytes(StringRef(Name, GI.getKeyLength() + 1));
1644   }
1645 
1646   Asm->OutStreamer->AddComment("End Mark");
1647   Asm->emitInt32(0);
1648   Asm->OutStreamer->EmitLabel(EndLabel);
1649 }
1650 
1651 /// Emit null-terminated strings into a debug str section.
1652 void DwarfDebug::emitDebugStr() {
1653   MCSection *StringOffsetsSection = nullptr;
1654   if (useSegmentedStringOffsetsTable()) {
1655     emitStringOffsetsTableHeader();
1656     StringOffsetsSection = Asm->getObjFileLowering().getDwarfStrOffSection();
1657   }
1658   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1659   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection(),
1660                      StringOffsetsSection, /* UseRelativeOffsets = */ true);
1661 }
1662 
1663 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer,
1664                                    const DebugLocStream::Entry &Entry) {
1665   auto &&Comments = DebugLocs.getComments(Entry);
1666   auto Comment = Comments.begin();
1667   auto End = Comments.end();
1668   for (uint8_t Byte : DebugLocs.getBytes(Entry))
1669     Streamer.EmitInt8(Byte, Comment != End ? *(Comment++) : "");
1670 }
1671 
1672 static void emitDebugLocValue(const AsmPrinter &AP, const DIBasicType *BT,
1673                               ByteStreamer &Streamer,
1674                               const DebugLocEntry::Value &Value,
1675                               DwarfExpression &DwarfExpr) {
1676   auto *DIExpr = Value.getExpression();
1677   DIExpressionCursor ExprCursor(DIExpr);
1678   DwarfExpr.addFragmentOffset(DIExpr);
1679   // Regular entry.
1680   if (Value.isInt()) {
1681     if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed ||
1682                BT->getEncoding() == dwarf::DW_ATE_signed_char))
1683       DwarfExpr.addSignedConstant(Value.getInt());
1684     else
1685       DwarfExpr.addUnsignedConstant(Value.getInt());
1686   } else if (Value.isLocation()) {
1687     MachineLocation Location = Value.getLoc();
1688     if (Location.isIndirect())
1689       DwarfExpr.setMemoryLocationKind();
1690     DIExpressionCursor Cursor(DIExpr);
1691     const TargetRegisterInfo &TRI = *AP.MF->getSubtarget().getRegisterInfo();
1692     if (!DwarfExpr.addMachineRegExpression(TRI, Cursor, Location.getReg()))
1693       return;
1694     return DwarfExpr.addExpression(std::move(Cursor));
1695   } else if (Value.isConstantFP()) {
1696     APInt RawBytes = Value.getConstantFP()->getValueAPF().bitcastToAPInt();
1697     DwarfExpr.addUnsignedConstant(RawBytes);
1698   }
1699   DwarfExpr.addExpression(std::move(ExprCursor));
1700 }
1701 
1702 void DebugLocEntry::finalize(const AsmPrinter &AP,
1703                              DebugLocStream::ListBuilder &List,
1704                              const DIBasicType *BT) {
1705   DebugLocStream::EntryBuilder Entry(List, Begin, End);
1706   BufferByteStreamer Streamer = Entry.getStreamer();
1707   DebugLocDwarfExpression DwarfExpr(AP.getDwarfVersion(), Streamer);
1708   const DebugLocEntry::Value &Value = Values[0];
1709   if (Value.isFragment()) {
1710     // Emit all fragments that belong to the same variable and range.
1711     assert(llvm::all_of(Values, [](DebugLocEntry::Value P) {
1712           return P.isFragment();
1713         }) && "all values are expected to be fragments");
1714     assert(std::is_sorted(Values.begin(), Values.end()) &&
1715            "fragments are expected to be sorted");
1716 
1717     for (auto Fragment : Values)
1718       emitDebugLocValue(AP, BT, Streamer, Fragment, DwarfExpr);
1719 
1720   } else {
1721     assert(Values.size() == 1 && "only fragments may have >1 value");
1722     emitDebugLocValue(AP, BT, Streamer, Value, DwarfExpr);
1723   }
1724   DwarfExpr.finalize();
1725 }
1726 
1727 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) {
1728   // Emit the size.
1729   Asm->OutStreamer->AddComment("Loc expr size");
1730   Asm->emitInt16(DebugLocs.getBytes(Entry).size());
1731 
1732   // Emit the entry.
1733   APByteStreamer Streamer(*Asm);
1734   emitDebugLocEntry(Streamer, Entry);
1735 }
1736 
1737 // Emit locations into the debug loc section.
1738 void DwarfDebug::emitDebugLoc() {
1739   if (DebugLocs.getLists().empty())
1740     return;
1741 
1742   // Start the dwarf loc section.
1743   Asm->OutStreamer->SwitchSection(
1744       Asm->getObjFileLowering().getDwarfLocSection());
1745   unsigned char Size = Asm->MAI->getCodePointerSize();
1746   for (const auto &List : DebugLocs.getLists()) {
1747     Asm->OutStreamer->EmitLabel(List.Label);
1748     const DwarfCompileUnit *CU = List.CU;
1749     for (const auto &Entry : DebugLocs.getEntries(List)) {
1750       // Set up the range. This range is relative to the entry point of the
1751       // compile unit. This is a hard coded 0 for low_pc when we're emitting
1752       // ranges, or the DW_AT_low_pc on the compile unit otherwise.
1753       if (auto *Base = CU->getBaseAddress()) {
1754         Asm->EmitLabelDifference(Entry.BeginSym, Base, Size);
1755         Asm->EmitLabelDifference(Entry.EndSym, Base, Size);
1756       } else {
1757         Asm->OutStreamer->EmitSymbolValue(Entry.BeginSym, Size);
1758         Asm->OutStreamer->EmitSymbolValue(Entry.EndSym, Size);
1759       }
1760 
1761       emitDebugLocEntryLocation(Entry);
1762     }
1763     Asm->OutStreamer->EmitIntValue(0, Size);
1764     Asm->OutStreamer->EmitIntValue(0, Size);
1765   }
1766 }
1767 
1768 void DwarfDebug::emitDebugLocDWO() {
1769   Asm->OutStreamer->SwitchSection(
1770       Asm->getObjFileLowering().getDwarfLocDWOSection());
1771   for (const auto &List : DebugLocs.getLists()) {
1772     Asm->OutStreamer->EmitLabel(List.Label);
1773     for (const auto &Entry : DebugLocs.getEntries(List)) {
1774       // Just always use start_length for now - at least that's one address
1775       // rather than two. We could get fancier and try to, say, reuse an
1776       // address we know we've emitted elsewhere (the start of the function?
1777       // The start of the CU or CU subrange that encloses this range?)
1778       Asm->emitInt8(dwarf::DW_LLE_startx_length);
1779       unsigned idx = AddrPool.getIndex(Entry.BeginSym);
1780       Asm->EmitULEB128(idx);
1781       Asm->EmitLabelDifference(Entry.EndSym, Entry.BeginSym, 4);
1782 
1783       emitDebugLocEntryLocation(Entry);
1784     }
1785     Asm->emitInt8(dwarf::DW_LLE_end_of_list);
1786   }
1787 }
1788 
1789 struct ArangeSpan {
1790   const MCSymbol *Start, *End;
1791 };
1792 
1793 // Emit a debug aranges section, containing a CU lookup for any
1794 // address we can tie back to a CU.
1795 void DwarfDebug::emitDebugARanges() {
1796   // Provides a unique id per text section.
1797   MapVector<MCSection *, SmallVector<SymbolCU, 8>> SectionMap;
1798 
1799   // Filter labels by section.
1800   for (const SymbolCU &SCU : ArangeLabels) {
1801     if (SCU.Sym->isInSection()) {
1802       // Make a note of this symbol and it's section.
1803       MCSection *Section = &SCU.Sym->getSection();
1804       if (!Section->getKind().isMetadata())
1805         SectionMap[Section].push_back(SCU);
1806     } else {
1807       // Some symbols (e.g. common/bss on mach-o) can have no section but still
1808       // appear in the output. This sucks as we rely on sections to build
1809       // arange spans. We can do it without, but it's icky.
1810       SectionMap[nullptr].push_back(SCU);
1811     }
1812   }
1813 
1814   DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans;
1815 
1816   for (auto &I : SectionMap) {
1817     MCSection *Section = I.first;
1818     SmallVector<SymbolCU, 8> &List = I.second;
1819     if (List.size() < 1)
1820       continue;
1821 
1822     // If we have no section (e.g. common), just write out
1823     // individual spans for each symbol.
1824     if (!Section) {
1825       for (const SymbolCU &Cur : List) {
1826         ArangeSpan Span;
1827         Span.Start = Cur.Sym;
1828         Span.End = nullptr;
1829         assert(Cur.CU);
1830         Spans[Cur.CU].push_back(Span);
1831       }
1832       continue;
1833     }
1834 
1835     // Sort the symbols by offset within the section.
1836     std::stable_sort(
1837         List.begin(), List.end(), [&](const SymbolCU &A, const SymbolCU &B) {
1838           unsigned IA = A.Sym ? Asm->OutStreamer->GetSymbolOrder(A.Sym) : 0;
1839           unsigned IB = B.Sym ? Asm->OutStreamer->GetSymbolOrder(B.Sym) : 0;
1840 
1841           // Symbols with no order assigned should be placed at the end.
1842           // (e.g. section end labels)
1843           if (IA == 0)
1844             return false;
1845           if (IB == 0)
1846             return true;
1847           return IA < IB;
1848         });
1849 
1850     // Insert a final terminator.
1851     List.push_back(SymbolCU(nullptr, Asm->OutStreamer->endSection(Section)));
1852 
1853     // Build spans between each label.
1854     const MCSymbol *StartSym = List[0].Sym;
1855     for (size_t n = 1, e = List.size(); n < e; n++) {
1856       const SymbolCU &Prev = List[n - 1];
1857       const SymbolCU &Cur = List[n];
1858 
1859       // Try and build the longest span we can within the same CU.
1860       if (Cur.CU != Prev.CU) {
1861         ArangeSpan Span;
1862         Span.Start = StartSym;
1863         Span.End = Cur.Sym;
1864         assert(Prev.CU);
1865         Spans[Prev.CU].push_back(Span);
1866         StartSym = Cur.Sym;
1867       }
1868     }
1869   }
1870 
1871   // Start the dwarf aranges section.
1872   Asm->OutStreamer->SwitchSection(
1873       Asm->getObjFileLowering().getDwarfARangesSection());
1874 
1875   unsigned PtrSize = Asm->MAI->getCodePointerSize();
1876 
1877   // Build a list of CUs used.
1878   std::vector<DwarfCompileUnit *> CUs;
1879   for (const auto &it : Spans) {
1880     DwarfCompileUnit *CU = it.first;
1881     CUs.push_back(CU);
1882   }
1883 
1884   // Sort the CU list (again, to ensure consistent output order).
1885   llvm::sort(CUs.begin(), CUs.end(),
1886              [](const DwarfCompileUnit *A, const DwarfCompileUnit *B) {
1887                return A->getUniqueID() < B->getUniqueID();
1888              });
1889 
1890   // Emit an arange table for each CU we used.
1891   for (DwarfCompileUnit *CU : CUs) {
1892     std::vector<ArangeSpan> &List = Spans[CU];
1893 
1894     // Describe the skeleton CU's offset and length, not the dwo file's.
1895     if (auto *Skel = CU->getSkeleton())
1896       CU = Skel;
1897 
1898     // Emit size of content not including length itself.
1899     unsigned ContentSize =
1900         sizeof(int16_t) + // DWARF ARange version number
1901         sizeof(int32_t) + // Offset of CU in the .debug_info section
1902         sizeof(int8_t) +  // Pointer Size (in bytes)
1903         sizeof(int8_t);   // Segment Size (in bytes)
1904 
1905     unsigned TupleSize = PtrSize * 2;
1906 
1907     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
1908     unsigned Padding =
1909         OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize);
1910 
1911     ContentSize += Padding;
1912     ContentSize += (List.size() + 1) * TupleSize;
1913 
1914     // For each compile unit, write the list of spans it covers.
1915     Asm->OutStreamer->AddComment("Length of ARange Set");
1916     Asm->emitInt32(ContentSize);
1917     Asm->OutStreamer->AddComment("DWARF Arange version number");
1918     Asm->emitInt16(dwarf::DW_ARANGES_VERSION);
1919     Asm->OutStreamer->AddComment("Offset Into Debug Info Section");
1920     emitSectionReference(*CU);
1921     Asm->OutStreamer->AddComment("Address Size (in bytes)");
1922     Asm->emitInt8(PtrSize);
1923     Asm->OutStreamer->AddComment("Segment Size (in bytes)");
1924     Asm->emitInt8(0);
1925 
1926     Asm->OutStreamer->emitFill(Padding, 0xff);
1927 
1928     for (const ArangeSpan &Span : List) {
1929       Asm->EmitLabelReference(Span.Start, PtrSize);
1930 
1931       // Calculate the size as being from the span start to it's end.
1932       if (Span.End) {
1933         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
1934       } else {
1935         // For symbols without an end marker (e.g. common), we
1936         // write a single arange entry containing just that one symbol.
1937         uint64_t Size = SymSize[Span.Start];
1938         if (Size == 0)
1939           Size = 1;
1940 
1941         Asm->OutStreamer->EmitIntValue(Size, PtrSize);
1942       }
1943     }
1944 
1945     Asm->OutStreamer->AddComment("ARange terminator");
1946     Asm->OutStreamer->EmitIntValue(0, PtrSize);
1947     Asm->OutStreamer->EmitIntValue(0, PtrSize);
1948   }
1949 }
1950 
1951 /// Emit address ranges into a debug ranges section.
1952 void DwarfDebug::emitDebugRanges() {
1953   if (CUMap.empty())
1954     return;
1955 
1956   if (!useRangesSection()) {
1957     assert(llvm::all_of(
1958                CUMap,
1959                [](const decltype(CUMap)::const_iterator::value_type &Pair) {
1960                  return Pair.second->getRangeLists().empty();
1961                }) &&
1962            "No debug ranges expected.");
1963     return;
1964   }
1965 
1966   // Start the dwarf ranges section.
1967   Asm->OutStreamer->SwitchSection(
1968       Asm->getObjFileLowering().getDwarfRangesSection());
1969 
1970   // Size for our labels.
1971   unsigned char Size = Asm->MAI->getCodePointerSize();
1972 
1973   // Grab the specific ranges for the compile units in the module.
1974   for (const auto &I : CUMap) {
1975     DwarfCompileUnit *TheCU = I.second;
1976 
1977     if (auto *Skel = TheCU->getSkeleton())
1978       TheCU = Skel;
1979 
1980     // Iterate over the misc ranges for the compile units in the module.
1981     for (const RangeSpanList &List : TheCU->getRangeLists()) {
1982       // Emit our symbol so we can find the beginning of the range.
1983       Asm->OutStreamer->EmitLabel(List.getSym());
1984 
1985       // Gather all the ranges that apply to the same section so they can share
1986       // a base address entry.
1987       MapVector<const MCSection *, std::vector<const RangeSpan *>> MV;
1988       for (const RangeSpan &Range : List.getRanges()) {
1989         MV[&Range.getStart()->getSection()].push_back(&Range);
1990       }
1991 
1992       auto *CUBase = TheCU->getBaseAddress();
1993       bool BaseIsSet = false;
1994       for (const auto &P : MV) {
1995         // Don't bother with a base address entry if there's only one range in
1996         // this section in this range list - for example ranges for a CU will
1997         // usually consist of single regions from each of many sections
1998         // (-ffunction-sections, or just C++ inline functions) except under LTO
1999         // or optnone where there may be holes in a single CU's section
2000         // contrubutions.
2001         auto *Base = CUBase;
2002         if (!Base && P.second.size() > 1 &&
2003             UseDwarfRangesBaseAddressSpecifier) {
2004           BaseIsSet = true;
2005           // FIXME/use care: This may not be a useful base address if it's not
2006           // the lowest address/range in this object.
2007           Base = P.second.front()->getStart();
2008           Asm->OutStreamer->EmitIntValue(-1, Size);
2009           Asm->OutStreamer->EmitSymbolValue(Base, Size);
2010         } else if (BaseIsSet) {
2011           BaseIsSet = false;
2012           Asm->OutStreamer->EmitIntValue(-1, Size);
2013           Asm->OutStreamer->EmitIntValue(0, Size);
2014         }
2015 
2016         for (const auto *RS : P.second) {
2017           const MCSymbol *Begin = RS->getStart();
2018           const MCSymbol *End = RS->getEnd();
2019           assert(Begin && "Range without a begin symbol?");
2020           assert(End && "Range without an end symbol?");
2021           if (Base) {
2022             Asm->EmitLabelDifference(Begin, Base, Size);
2023             Asm->EmitLabelDifference(End, Base, Size);
2024           } else {
2025             Asm->OutStreamer->EmitSymbolValue(Begin, Size);
2026             Asm->OutStreamer->EmitSymbolValue(End, Size);
2027           }
2028         }
2029       }
2030 
2031       // And terminate the list with two 0 values.
2032       Asm->OutStreamer->EmitIntValue(0, Size);
2033       Asm->OutStreamer->EmitIntValue(0, Size);
2034     }
2035   }
2036 }
2037 
2038 void DwarfDebug::handleMacroNodes(DIMacroNodeArray Nodes, DwarfCompileUnit &U) {
2039   for (auto *MN : Nodes) {
2040     if (auto *M = dyn_cast<DIMacro>(MN))
2041       emitMacro(*M);
2042     else if (auto *F = dyn_cast<DIMacroFile>(MN))
2043       emitMacroFile(*F, U);
2044     else
2045       llvm_unreachable("Unexpected DI type!");
2046   }
2047 }
2048 
2049 void DwarfDebug::emitMacro(DIMacro &M) {
2050   Asm->EmitULEB128(M.getMacinfoType());
2051   Asm->EmitULEB128(M.getLine());
2052   StringRef Name = M.getName();
2053   StringRef Value = M.getValue();
2054   Asm->OutStreamer->EmitBytes(Name);
2055   if (!Value.empty()) {
2056     // There should be one space between macro name and macro value.
2057     Asm->emitInt8(' ');
2058     Asm->OutStreamer->EmitBytes(Value);
2059   }
2060   Asm->emitInt8('\0');
2061 }
2062 
2063 void DwarfDebug::emitMacroFile(DIMacroFile &F, DwarfCompileUnit &U) {
2064   assert(F.getMacinfoType() == dwarf::DW_MACINFO_start_file);
2065   Asm->EmitULEB128(dwarf::DW_MACINFO_start_file);
2066   Asm->EmitULEB128(F.getLine());
2067   Asm->EmitULEB128(U.getOrCreateSourceID(F.getFile()));
2068   handleMacroNodes(F.getElements(), U);
2069   Asm->EmitULEB128(dwarf::DW_MACINFO_end_file);
2070 }
2071 
2072 /// Emit macros into a debug macinfo section.
2073 void DwarfDebug::emitDebugMacinfo() {
2074   if (CUMap.empty())
2075     return;
2076 
2077   // Start the dwarf macinfo section.
2078   Asm->OutStreamer->SwitchSection(
2079       Asm->getObjFileLowering().getDwarfMacinfoSection());
2080 
2081   for (const auto &P : CUMap) {
2082     auto &TheCU = *P.second;
2083     auto *SkCU = TheCU.getSkeleton();
2084     DwarfCompileUnit &U = SkCU ? *SkCU : TheCU;
2085     auto *CUNode = cast<DICompileUnit>(P.first);
2086     DIMacroNodeArray Macros = CUNode->getMacros();
2087     if (!Macros.empty()) {
2088       Asm->OutStreamer->EmitLabel(U.getMacroLabelBegin());
2089       handleMacroNodes(Macros, U);
2090     }
2091   }
2092   Asm->OutStreamer->AddComment("End Of Macro List Mark");
2093   Asm->emitInt8(0);
2094 }
2095 
2096 // DWARF5 Experimental Separate Dwarf emitters.
2097 
2098 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die,
2099                                   std::unique_ptr<DwarfCompileUnit> NewU) {
2100   NewU->addString(Die, dwarf::DW_AT_GNU_dwo_name,
2101                   Asm->TM.Options.MCOptions.SplitDwarfFile);
2102 
2103   if (!CompilationDir.empty())
2104     NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2105 
2106   addGnuPubAttributes(*NewU, Die);
2107 
2108   SkeletonHolder.addUnit(std::move(NewU));
2109 }
2110 
2111 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2112 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2113 // DW_AT_addr_base, DW_AT_ranges_base.
2114 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) {
2115 
2116   auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>(
2117       CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder);
2118   DwarfCompileUnit &NewCU = *OwnedUnit;
2119   NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection());
2120 
2121   NewCU.initStmtList();
2122 
2123   if (useSegmentedStringOffsetsTable())
2124     NewCU.addStringOffsetsStart();
2125 
2126   initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit));
2127 
2128   return NewCU;
2129 }
2130 
2131 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2132 // compile units that would normally be in debug_info.
2133 void DwarfDebug::emitDebugInfoDWO() {
2134   assert(useSplitDwarf() && "No split dwarf debug info?");
2135   // Don't emit relocations into the dwo file.
2136   InfoHolder.emitUnits(/* UseOffsets */ true);
2137 }
2138 
2139 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2140 // abbreviations for the .debug_info.dwo section.
2141 void DwarfDebug::emitDebugAbbrevDWO() {
2142   assert(useSplitDwarf() && "No split dwarf?");
2143   InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
2144 }
2145 
2146 void DwarfDebug::emitDebugLineDWO() {
2147   assert(useSplitDwarf() && "No split dwarf?");
2148   SplitTypeUnitFileTable.Emit(
2149       *Asm->OutStreamer, MCDwarfLineTableParams(),
2150       Asm->getObjFileLowering().getDwarfLineDWOSection());
2151 }
2152 
2153 void DwarfDebug::emitStringOffsetsTableHeaderDWO() {
2154   assert(useSplitDwarf() && "No split dwarf?");
2155   InfoHolder.emitStringOffsetsTableHeader(
2156       Asm->getObjFileLowering().getDwarfStrOffDWOSection());
2157 }
2158 
2159 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2160 // string section and is identical in format to traditional .debug_str
2161 // sections.
2162 void DwarfDebug::emitDebugStrDWO() {
2163   if (useSegmentedStringOffsetsTable())
2164     emitStringOffsetsTableHeaderDWO();
2165   assert(useSplitDwarf() && "No split dwarf?");
2166   MCSection *OffSec = Asm->getObjFileLowering().getDwarfStrOffDWOSection();
2167   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
2168                          OffSec, /* UseRelativeOffsets = */ false);
2169 }
2170 
2171 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) {
2172   if (!useSplitDwarf())
2173     return nullptr;
2174   const DICompileUnit *DIUnit = CU.getCUNode();
2175   SplitTypeUnitFileTable.maybeSetRootFile(
2176       DIUnit->getDirectory(), DIUnit->getFilename(),
2177       CU.getMD5AsBytes(DIUnit->getFile()), DIUnit->getSource());
2178   return &SplitTypeUnitFileTable;
2179 }
2180 
2181 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier) {
2182   MD5 Hash;
2183   Hash.update(Identifier);
2184   // ... take the least significant 8 bytes and return those. Our MD5
2185   // implementation always returns its results in little endian, so we actually
2186   // need the "high" word.
2187   MD5::MD5Result Result;
2188   Hash.final(Result);
2189   return Result.high();
2190 }
2191 
2192 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
2193                                       StringRef Identifier, DIE &RefDie,
2194                                       const DICompositeType *CTy) {
2195   // Fast path if we're building some type units and one has already used the
2196   // address pool we know we're going to throw away all this work anyway, so
2197   // don't bother building dependent types.
2198   if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed())
2199     return;
2200 
2201   auto Ins = TypeSignatures.insert(std::make_pair(CTy, 0));
2202   if (!Ins.second) {
2203     CU.addDIETypeSignature(RefDie, Ins.first->second);
2204     return;
2205   }
2206 
2207   bool TopLevelType = TypeUnitsUnderConstruction.empty();
2208   AddrPool.resetUsedFlag();
2209 
2210   auto OwnedUnit = llvm::make_unique<DwarfTypeUnit>(CU, Asm, this, &InfoHolder,
2211                                                     getDwoLineTable(CU));
2212   DwarfTypeUnit &NewTU = *OwnedUnit;
2213   DIE &UnitDie = NewTU.getUnitDie();
2214   TypeUnitsUnderConstruction.emplace_back(std::move(OwnedUnit), CTy);
2215 
2216   NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
2217                 CU.getLanguage());
2218 
2219   uint64_t Signature = makeTypeSignature(Identifier);
2220   NewTU.setTypeSignature(Signature);
2221   Ins.first->second = Signature;
2222 
2223   if (useSplitDwarf())
2224     NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesDWOSection());
2225   else {
2226     NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesSection(Signature));
2227     // Non-split type units reuse the compile unit's line table.
2228     CU.applyStmtList(UnitDie);
2229   }
2230 
2231   // Add DW_AT_str_offsets_base to the type unit DIE, but not for split type
2232   // units.
2233   if (useSegmentedStringOffsetsTable() && !useSplitDwarf())
2234     NewTU.addStringOffsetsStart();
2235 
2236   NewTU.setType(NewTU.createTypeDIE(CTy));
2237 
2238   if (TopLevelType) {
2239     auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction);
2240     TypeUnitsUnderConstruction.clear();
2241 
2242     // Types referencing entries in the address table cannot be placed in type
2243     // units.
2244     if (AddrPool.hasBeenUsed()) {
2245 
2246       // Remove all the types built while building this type.
2247       // This is pessimistic as some of these types might not be dependent on
2248       // the type that used an address.
2249       for (const auto &TU : TypeUnitsToAdd)
2250         TypeSignatures.erase(TU.second);
2251 
2252       // Construct this type in the CU directly.
2253       // This is inefficient because all the dependent types will be rebuilt
2254       // from scratch, including building them in type units, discovering that
2255       // they depend on addresses, throwing them out and rebuilding them.
2256       CU.constructTypeDIE(RefDie, cast<DICompositeType>(CTy));
2257       return;
2258     }
2259 
2260     // If the type wasn't dependent on fission addresses, finish adding the type
2261     // and all its dependent types.
2262     for (auto &TU : TypeUnitsToAdd) {
2263       InfoHolder.computeSizeAndOffsetsForUnit(TU.first.get());
2264       InfoHolder.emitUnit(TU.first.get(), useSplitDwarf());
2265     }
2266   }
2267   CU.addDIETypeSignature(RefDie, Signature);
2268 }
2269 
2270 // Accelerator table mutators - add each name along with its companion
2271 // DIE to the proper table while ensuring that the name that we're going
2272 // to reference is in the string table. We do this since the names we
2273 // add may not only be identical to the names in the DIE.
2274 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) {
2275   switch (getAccelTableKind()) {
2276   case AccelTableKind::Apple:
2277     AccelNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2278     break;
2279   case AccelTableKind::Dwarf:
2280     AccelDebugNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name),
2281                             Die);
2282     break;
2283   case AccelTableKind::None:
2284     return;
2285   case AccelTableKind::Default:
2286     llvm_unreachable("Default should have already been resolved.");
2287   }
2288 }
2289 
2290 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) {
2291   if (getAccelTableKind() != AccelTableKind::Apple)
2292     return;
2293   AccelObjC.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2294 }
2295 
2296 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) {
2297   switch (getAccelTableKind()) {
2298   case AccelTableKind::Apple:
2299     AccelNamespace.addName(InfoHolder.getStringPool().getEntry(*Asm, Name),
2300                            &Die);
2301     break;
2302   case AccelTableKind::Dwarf:
2303     AccelDebugNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name),
2304                             Die);
2305     break;
2306   case AccelTableKind::None:
2307     return;
2308   case AccelTableKind::Default:
2309     llvm_unreachable("Default should have already been resolved.");
2310   }
2311 }
2312 
2313 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) {
2314   switch (getAccelTableKind()) {
2315   case AccelTableKind::Apple:
2316     AccelTypes.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2317     break;
2318   case AccelTableKind::Dwarf:
2319     AccelDebugNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name),
2320                             Die);
2321     break;
2322   case AccelTableKind::None:
2323     return;
2324   case AccelTableKind::Default:
2325     llvm_unreachable("Default should have already been resolved.");
2326   }
2327 }
2328 
2329 uint16_t DwarfDebug::getDwarfVersion() const {
2330   return Asm->OutStreamer->getContext().getDwarfVersion();
2331 }
2332