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 /// 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 DINode *DN : SP->getRetainedNodes()) {
1206     if (auto *DV = dyn_cast<DILocalVariable>(DN)) {
1207       if (Processed.insert(InlinedVariable(DV, nullptr)).second)
1208         if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope()))
1209           createConcreteVariable(TheCU, *Scope, InlinedVariable(DV, nullptr));
1210     }
1211   }
1212 }
1213 
1214 // Process beginning of an instruction.
1215 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1216   DebugHandlerBase::beginInstruction(MI);
1217   assert(CurMI);
1218 
1219   const auto *SP = MI->getMF()->getFunction().getSubprogram();
1220   if (!SP || SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug)
1221     return;
1222 
1223   // Check if source location changes, but ignore DBG_VALUE and CFI locations.
1224   // If the instruction is part of the function frame setup code, do not emit
1225   // any line record, as there is no correspondence with any user code.
1226   if (MI->isMetaInstruction() || MI->getFlag(MachineInstr::FrameSetup))
1227     return;
1228   const DebugLoc &DL = MI->getDebugLoc();
1229   // When we emit a line-0 record, we don't update PrevInstLoc; so look at
1230   // the last line number actually emitted, to see if it was line 0.
1231   unsigned LastAsmLine =
1232       Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine();
1233 
1234   if (DL == PrevInstLoc) {
1235     // If we have an ongoing unspecified location, nothing to do here.
1236     if (!DL)
1237       return;
1238     // We have an explicit location, same as the previous location.
1239     // But we might be coming back to it after a line 0 record.
1240     if (LastAsmLine == 0 && DL.getLine() != 0) {
1241       // Reinstate the source location but not marked as a statement.
1242       const MDNode *Scope = DL.getScope();
1243       recordSourceLine(DL.getLine(), DL.getCol(), Scope, /*Flags=*/0);
1244     }
1245     return;
1246   }
1247 
1248   if (!DL) {
1249     // We have an unspecified location, which might want to be line 0.
1250     // If we have already emitted a line-0 record, don't repeat it.
1251     if (LastAsmLine == 0)
1252       return;
1253     // If user said Don't Do That, don't do that.
1254     if (UnknownLocations == Disable)
1255       return;
1256     // See if we have a reason to emit a line-0 record now.
1257     // Reasons to emit a line-0 record include:
1258     // - User asked for it (UnknownLocations).
1259     // - Instruction has a label, so it's referenced from somewhere else,
1260     //   possibly debug information; we want it to have a source location.
1261     // - Instruction is at the top of a block; we don't want to inherit the
1262     //   location from the physically previous (maybe unrelated) block.
1263     if (UnknownLocations == Enable || PrevLabel ||
1264         (PrevInstBB && PrevInstBB != MI->getParent())) {
1265       // Preserve the file and column numbers, if we can, to save space in
1266       // the encoded line table.
1267       // Do not update PrevInstLoc, it remembers the last non-0 line.
1268       const MDNode *Scope = nullptr;
1269       unsigned Column = 0;
1270       if (PrevInstLoc) {
1271         Scope = PrevInstLoc.getScope();
1272         Column = PrevInstLoc.getCol();
1273       }
1274       recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0);
1275     }
1276     return;
1277   }
1278 
1279   // We have an explicit location, different from the previous location.
1280   // Don't repeat a line-0 record, but otherwise emit the new location.
1281   // (The new location might be an explicit line 0, which we do emit.)
1282   if (PrevInstLoc && DL.getLine() == 0 && LastAsmLine == 0)
1283     return;
1284   unsigned Flags = 0;
1285   if (DL == PrologEndLoc) {
1286     Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT;
1287     PrologEndLoc = DebugLoc();
1288   }
1289   // If the line changed, we call that a new statement; unless we went to
1290   // line 0 and came back, in which case it is not a new statement.
1291   unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine;
1292   if (DL.getLine() && DL.getLine() != OldLine)
1293     Flags |= DWARF2_FLAG_IS_STMT;
1294 
1295   const MDNode *Scope = DL.getScope();
1296   recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1297 
1298   // If we're not at line 0, remember this location.
1299   if (DL.getLine())
1300     PrevInstLoc = DL;
1301 }
1302 
1303 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) {
1304   // First known non-DBG_VALUE and non-frame setup location marks
1305   // the beginning of the function body.
1306   for (const auto &MBB : *MF)
1307     for (const auto &MI : MBB)
1308       if (!MI.isMetaInstruction() && !MI.getFlag(MachineInstr::FrameSetup) &&
1309           MI.getDebugLoc())
1310         return MI.getDebugLoc();
1311   return DebugLoc();
1312 }
1313 
1314 // Gather pre-function debug information.  Assumes being called immediately
1315 // after the function entry point has been emitted.
1316 void DwarfDebug::beginFunctionImpl(const MachineFunction *MF) {
1317   CurFn = MF;
1318 
1319   auto *SP = MF->getFunction().getSubprogram();
1320   assert(LScopes.empty() || SP == LScopes.getCurrentFunctionScope()->getScopeNode());
1321   if (SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug)
1322     return;
1323 
1324   DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(SP->getUnit());
1325 
1326   // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
1327   // belongs to so that we add to the correct per-cu line table in the
1328   // non-asm case.
1329   if (Asm->OutStreamer->hasRawTextSupport())
1330     // Use a single line table if we are generating assembly.
1331     Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1332   else
1333     Asm->OutStreamer->getContext().setDwarfCompileUnitID(CU.getUniqueID());
1334 
1335   // Record beginning of function.
1336   PrologEndLoc = findPrologueEndLoc(MF);
1337   if (PrologEndLoc) {
1338     // We'd like to list the prologue as "not statements" but GDB behaves
1339     // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1340     auto *SP = PrologEndLoc->getInlinedAtScope()->getSubprogram();
1341     recordSourceLine(SP->getScopeLine(), 0, SP, DWARF2_FLAG_IS_STMT);
1342   }
1343 }
1344 
1345 void DwarfDebug::skippedNonDebugFunction() {
1346   // If we don't have a subprogram for this function then there will be a hole
1347   // in the range information. Keep note of this by setting the previously used
1348   // section to nullptr.
1349   PrevCU = nullptr;
1350   CurFn = nullptr;
1351 }
1352 
1353 // Gather and emit post-function debug information.
1354 void DwarfDebug::endFunctionImpl(const MachineFunction *MF) {
1355   const DISubprogram *SP = MF->getFunction().getSubprogram();
1356 
1357   assert(CurFn == MF &&
1358       "endFunction should be called with the same function as beginFunction");
1359 
1360   // Set DwarfDwarfCompileUnitID in MCContext to default value.
1361   Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1362 
1363   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1364   assert(!FnScope || SP == FnScope->getScopeNode());
1365   DwarfCompileUnit &TheCU = *CUMap.lookup(SP->getUnit());
1366 
1367   DenseSet<InlinedVariable> ProcessedVars;
1368   collectVariableInfo(TheCU, SP, ProcessedVars);
1369 
1370   // Add the range of this function to the list of ranges for the CU.
1371   TheCU.addRange(RangeSpan(Asm->getFunctionBegin(), Asm->getFunctionEnd()));
1372 
1373   // Under -gmlt, skip building the subprogram if there are no inlined
1374   // subroutines inside it. But with -fdebug-info-for-profiling, the subprogram
1375   // is still needed as we need its source location.
1376   if (!TheCU.getCUNode()->getDebugInfoForProfiling() &&
1377       TheCU.getCUNode()->getEmissionKind() == DICompileUnit::LineTablesOnly &&
1378       LScopes.getAbstractScopesList().empty() && !IsDarwin) {
1379     assert(InfoHolder.getScopeVariables().empty());
1380     PrevLabel = nullptr;
1381     CurFn = nullptr;
1382     return;
1383   }
1384 
1385 #ifndef NDEBUG
1386   size_t NumAbstractScopes = LScopes.getAbstractScopesList().size();
1387 #endif
1388   // Construct abstract scopes.
1389   for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
1390     auto *SP = cast<DISubprogram>(AScope->getScopeNode());
1391     for (const DINode *DN : SP->getRetainedNodes()) {
1392       if (auto *DV = dyn_cast<DILocalVariable>(DN)) {
1393         // Collect info for variables that were optimized out.
1394         if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second)
1395           continue;
1396         ensureAbstractVariableIsCreated(TheCU, InlinedVariable(DV, nullptr),
1397                                         DV->getScope());
1398         assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
1399                && "ensureAbstractVariableIsCreated inserted abstract scopes");
1400       }
1401     }
1402     constructAbstractSubprogramScopeDIE(TheCU, AScope);
1403   }
1404 
1405   ProcessedSPNodes.insert(SP);
1406   TheCU.constructSubprogramScopeDIE(SP, FnScope);
1407   if (auto *SkelCU = TheCU.getSkeleton())
1408     if (!LScopes.getAbstractScopesList().empty() &&
1409         TheCU.getCUNode()->getSplitDebugInlining())
1410       SkelCU->constructSubprogramScopeDIE(SP, FnScope);
1411 
1412   // Clear debug info
1413   // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the
1414   // DbgVariables except those that are also in AbstractVariables (since they
1415   // can be used cross-function)
1416   InfoHolder.getScopeVariables().clear();
1417   PrevLabel = nullptr;
1418   CurFn = nullptr;
1419 }
1420 
1421 // Register a source line with debug info. Returns the  unique label that was
1422 // emitted and which provides correspondence to the source line list.
1423 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1424                                   unsigned Flags) {
1425   StringRef Fn;
1426   unsigned FileNo = 1;
1427   unsigned Discriminator = 0;
1428   if (auto *Scope = cast_or_null<DIScope>(S)) {
1429     Fn = Scope->getFilename();
1430     if (Line != 0 && getDwarfVersion() >= 4)
1431       if (auto *LBF = dyn_cast<DILexicalBlockFile>(Scope))
1432         Discriminator = LBF->getDiscriminator();
1433 
1434     unsigned CUID = Asm->OutStreamer->getContext().getDwarfCompileUnitID();
1435     FileNo = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID])
1436               .getOrCreateSourceID(Scope->getFile());
1437   }
1438   Asm->OutStreamer->EmitDwarfLocDirective(FileNo, Line, Col, Flags, 0,
1439                                           Discriminator, Fn);
1440 }
1441 
1442 //===----------------------------------------------------------------------===//
1443 // Emit Methods
1444 //===----------------------------------------------------------------------===//
1445 
1446 // Emit the debug info section.
1447 void DwarfDebug::emitDebugInfo() {
1448   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1449   Holder.emitUnits(/* UseOffsets */ false);
1450 }
1451 
1452 // Emit the abbreviation section.
1453 void DwarfDebug::emitAbbreviations() {
1454   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1455 
1456   Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1457 }
1458 
1459 void DwarfDebug::emitStringOffsetsTableHeader() {
1460   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1461   Holder.emitStringOffsetsTableHeader(
1462       Asm->getObjFileLowering().getDwarfStrOffSection());
1463 }
1464 
1465 template <typename AccelTableT>
1466 void DwarfDebug::emitAccel(AccelTableT &Accel, MCSection *Section,
1467                            StringRef TableName) {
1468   Asm->OutStreamer->SwitchSection(Section);
1469 
1470   // Emit the full data.
1471   emitAppleAccelTable(Asm, Accel, TableName, Section->getBeginSymbol());
1472 }
1473 
1474 void DwarfDebug::emitAccelDebugNames() {
1475   // Don't emit anything if we have no compilation units to index.
1476   if (getUnits().empty())
1477     return;
1478 
1479   Asm->OutStreamer->SwitchSection(
1480       Asm->getObjFileLowering().getDwarfDebugNamesSection());
1481   emitDWARF5AccelTable(Asm, AccelDebugNames, *this, getUnits());
1482 }
1483 
1484 // Emit visible names into a hashed accelerator table section.
1485 void DwarfDebug::emitAccelNames() {
1486   emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(),
1487             "Names");
1488 }
1489 
1490 // Emit objective C classes and categories into a hashed accelerator table
1491 // section.
1492 void DwarfDebug::emitAccelObjC() {
1493   emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(),
1494             "ObjC");
1495 }
1496 
1497 // Emit namespace dies into a hashed accelerator table.
1498 void DwarfDebug::emitAccelNamespaces() {
1499   emitAccel(AccelNamespace,
1500             Asm->getObjFileLowering().getDwarfAccelNamespaceSection(),
1501             "namespac");
1502 }
1503 
1504 // Emit type dies into a hashed accelerator table.
1505 void DwarfDebug::emitAccelTypes() {
1506   emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(),
1507             "types");
1508 }
1509 
1510 // Public name handling.
1511 // The format for the various pubnames:
1512 //
1513 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
1514 // for the DIE that is named.
1515 //
1516 // gnu pubnames - offset/index value/name tuples where the offset is the offset
1517 // into the CU and the index value is computed according to the type of value
1518 // for the DIE that is named.
1519 //
1520 // For type units the offset is the offset of the skeleton DIE. For split dwarf
1521 // it's the offset within the debug_info/debug_types dwo section, however, the
1522 // reference in the pubname header doesn't change.
1523 
1524 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
1525 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU,
1526                                                         const DIE *Die) {
1527   // Entities that ended up only in a Type Unit reference the CU instead (since
1528   // the pub entry has offsets within the CU there's no real offset that can be
1529   // provided anyway). As it happens all such entities (namespaces and types,
1530   // types only in C++ at that) are rendered as TYPE+EXTERNAL. If this turns out
1531   // not to be true it would be necessary to persist this information from the
1532   // point at which the entry is added to the index data structure - since by
1533   // the time the index is built from that, the original type/namespace DIE in a
1534   // type unit has already been destroyed so it can't be queried for properties
1535   // like tag, etc.
1536   if (Die->getTag() == dwarf::DW_TAG_compile_unit)
1537     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE,
1538                                           dwarf::GIEL_EXTERNAL);
1539   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
1540 
1541   // We could have a specification DIE that has our most of our knowledge,
1542   // look for that now.
1543   if (DIEValue SpecVal = Die->findAttribute(dwarf::DW_AT_specification)) {
1544     DIE &SpecDIE = SpecVal.getDIEEntry().getEntry();
1545     if (SpecDIE.findAttribute(dwarf::DW_AT_external))
1546       Linkage = dwarf::GIEL_EXTERNAL;
1547   } else if (Die->findAttribute(dwarf::DW_AT_external))
1548     Linkage = dwarf::GIEL_EXTERNAL;
1549 
1550   switch (Die->getTag()) {
1551   case dwarf::DW_TAG_class_type:
1552   case dwarf::DW_TAG_structure_type:
1553   case dwarf::DW_TAG_union_type:
1554   case dwarf::DW_TAG_enumeration_type:
1555     return dwarf::PubIndexEntryDescriptor(
1556         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
1557                               ? dwarf::GIEL_STATIC
1558                               : dwarf::GIEL_EXTERNAL);
1559   case dwarf::DW_TAG_typedef:
1560   case dwarf::DW_TAG_base_type:
1561   case dwarf::DW_TAG_subrange_type:
1562     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
1563   case dwarf::DW_TAG_namespace:
1564     return dwarf::GIEK_TYPE;
1565   case dwarf::DW_TAG_subprogram:
1566     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
1567   case dwarf::DW_TAG_variable:
1568     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
1569   case dwarf::DW_TAG_enumerator:
1570     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
1571                                           dwarf::GIEL_STATIC);
1572   default:
1573     return dwarf::GIEK_NONE;
1574   }
1575 }
1576 
1577 /// emitDebugPubSections - Emit visible names and types into debug pubnames and
1578 /// pubtypes sections.
1579 void DwarfDebug::emitDebugPubSections() {
1580   for (const auto &NU : CUMap) {
1581     DwarfCompileUnit *TheU = NU.second;
1582     if (!TheU->hasDwarfPubSections())
1583       continue;
1584 
1585     bool GnuStyle = TheU->getCUNode()->getGnuPubnames();
1586 
1587     Asm->OutStreamer->SwitchSection(
1588         GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
1589                  : Asm->getObjFileLowering().getDwarfPubNamesSection());
1590     emitDebugPubSection(GnuStyle, "Names", TheU, TheU->getGlobalNames());
1591 
1592     Asm->OutStreamer->SwitchSection(
1593         GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
1594                  : Asm->getObjFileLowering().getDwarfPubTypesSection());
1595     emitDebugPubSection(GnuStyle, "Types", TheU, TheU->getGlobalTypes());
1596   }
1597 }
1598 
1599 void DwarfDebug::emitSectionReference(const DwarfCompileUnit &CU) {
1600   if (useSectionsAsReferences())
1601     Asm->EmitDwarfOffset(CU.getSection()->getBeginSymbol(),
1602                          CU.getDebugSectionOffset());
1603   else
1604     Asm->emitDwarfSymbolReference(CU.getLabelBegin());
1605 }
1606 
1607 void DwarfDebug::emitDebugPubSection(bool GnuStyle, StringRef Name,
1608                                      DwarfCompileUnit *TheU,
1609                                      const StringMap<const DIE *> &Globals) {
1610   if (auto *Skeleton = TheU->getSkeleton())
1611     TheU = Skeleton;
1612 
1613   // Emit the header.
1614   Asm->OutStreamer->AddComment("Length of Public " + Name + " Info");
1615   MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin");
1616   MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end");
1617   Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);
1618 
1619   Asm->OutStreamer->EmitLabel(BeginLabel);
1620 
1621   Asm->OutStreamer->AddComment("DWARF Version");
1622   Asm->emitInt16(dwarf::DW_PUBNAMES_VERSION);
1623 
1624   Asm->OutStreamer->AddComment("Offset of Compilation Unit Info");
1625   emitSectionReference(*TheU);
1626 
1627   Asm->OutStreamer->AddComment("Compilation Unit Length");
1628   Asm->emitInt32(TheU->getLength());
1629 
1630   // Emit the pubnames for this compilation unit.
1631   for (const auto &GI : Globals) {
1632     const char *Name = GI.getKeyData();
1633     const DIE *Entity = GI.second;
1634 
1635     Asm->OutStreamer->AddComment("DIE offset");
1636     Asm->emitInt32(Entity->getOffset());
1637 
1638     if (GnuStyle) {
1639       dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity);
1640       Asm->OutStreamer->AddComment(
1641           Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
1642           dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
1643       Asm->emitInt8(Desc.toBits());
1644     }
1645 
1646     Asm->OutStreamer->AddComment("External Name");
1647     Asm->OutStreamer->EmitBytes(StringRef(Name, GI.getKeyLength() + 1));
1648   }
1649 
1650   Asm->OutStreamer->AddComment("End Mark");
1651   Asm->emitInt32(0);
1652   Asm->OutStreamer->EmitLabel(EndLabel);
1653 }
1654 
1655 /// Emit null-terminated strings into a debug str section.
1656 void DwarfDebug::emitDebugStr() {
1657   MCSection *StringOffsetsSection = nullptr;
1658   if (useSegmentedStringOffsetsTable()) {
1659     emitStringOffsetsTableHeader();
1660     StringOffsetsSection = Asm->getObjFileLowering().getDwarfStrOffSection();
1661   }
1662   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1663   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection(),
1664                      StringOffsetsSection, /* UseRelativeOffsets = */ true);
1665 }
1666 
1667 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer,
1668                                    const DebugLocStream::Entry &Entry) {
1669   auto &&Comments = DebugLocs.getComments(Entry);
1670   auto Comment = Comments.begin();
1671   auto End = Comments.end();
1672   for (uint8_t Byte : DebugLocs.getBytes(Entry))
1673     Streamer.EmitInt8(Byte, Comment != End ? *(Comment++) : "");
1674 }
1675 
1676 static void emitDebugLocValue(const AsmPrinter &AP, const DIBasicType *BT,
1677                               ByteStreamer &Streamer,
1678                               const DebugLocEntry::Value &Value,
1679                               DwarfExpression &DwarfExpr) {
1680   auto *DIExpr = Value.getExpression();
1681   DIExpressionCursor ExprCursor(DIExpr);
1682   DwarfExpr.addFragmentOffset(DIExpr);
1683   // Regular entry.
1684   if (Value.isInt()) {
1685     if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed ||
1686                BT->getEncoding() == dwarf::DW_ATE_signed_char))
1687       DwarfExpr.addSignedConstant(Value.getInt());
1688     else
1689       DwarfExpr.addUnsignedConstant(Value.getInt());
1690   } else if (Value.isLocation()) {
1691     MachineLocation Location = Value.getLoc();
1692     if (Location.isIndirect())
1693       DwarfExpr.setMemoryLocationKind();
1694     DIExpressionCursor Cursor(DIExpr);
1695     const TargetRegisterInfo &TRI = *AP.MF->getSubtarget().getRegisterInfo();
1696     if (!DwarfExpr.addMachineRegExpression(TRI, Cursor, Location.getReg()))
1697       return;
1698     return DwarfExpr.addExpression(std::move(Cursor));
1699   } else if (Value.isConstantFP()) {
1700     APInt RawBytes = Value.getConstantFP()->getValueAPF().bitcastToAPInt();
1701     DwarfExpr.addUnsignedConstant(RawBytes);
1702   }
1703   DwarfExpr.addExpression(std::move(ExprCursor));
1704 }
1705 
1706 void DebugLocEntry::finalize(const AsmPrinter &AP,
1707                              DebugLocStream::ListBuilder &List,
1708                              const DIBasicType *BT) {
1709   DebugLocStream::EntryBuilder Entry(List, Begin, End);
1710   BufferByteStreamer Streamer = Entry.getStreamer();
1711   DebugLocDwarfExpression DwarfExpr(AP.getDwarfVersion(), Streamer);
1712   const DebugLocEntry::Value &Value = Values[0];
1713   if (Value.isFragment()) {
1714     // Emit all fragments that belong to the same variable and range.
1715     assert(llvm::all_of(Values, [](DebugLocEntry::Value P) {
1716           return P.isFragment();
1717         }) && "all values are expected to be fragments");
1718     assert(std::is_sorted(Values.begin(), Values.end()) &&
1719            "fragments are expected to be sorted");
1720 
1721     for (auto Fragment : Values)
1722       emitDebugLocValue(AP, BT, Streamer, Fragment, DwarfExpr);
1723 
1724   } else {
1725     assert(Values.size() == 1 && "only fragments may have >1 value");
1726     emitDebugLocValue(AP, BT, Streamer, Value, DwarfExpr);
1727   }
1728   DwarfExpr.finalize();
1729 }
1730 
1731 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) {
1732   // Emit the size.
1733   Asm->OutStreamer->AddComment("Loc expr size");
1734   Asm->emitInt16(DebugLocs.getBytes(Entry).size());
1735 
1736   // Emit the entry.
1737   APByteStreamer Streamer(*Asm);
1738   emitDebugLocEntry(Streamer, Entry);
1739 }
1740 
1741 // Emit locations into the debug loc section.
1742 void DwarfDebug::emitDebugLoc() {
1743   if (DebugLocs.getLists().empty())
1744     return;
1745 
1746   // Start the dwarf loc section.
1747   Asm->OutStreamer->SwitchSection(
1748       Asm->getObjFileLowering().getDwarfLocSection());
1749   unsigned char Size = Asm->MAI->getCodePointerSize();
1750   for (const auto &List : DebugLocs.getLists()) {
1751     Asm->OutStreamer->EmitLabel(List.Label);
1752     const DwarfCompileUnit *CU = List.CU;
1753     for (const auto &Entry : DebugLocs.getEntries(List)) {
1754       // Set up the range. This range is relative to the entry point of the
1755       // compile unit. This is a hard coded 0 for low_pc when we're emitting
1756       // ranges, or the DW_AT_low_pc on the compile unit otherwise.
1757       if (auto *Base = CU->getBaseAddress()) {
1758         Asm->EmitLabelDifference(Entry.BeginSym, Base, Size);
1759         Asm->EmitLabelDifference(Entry.EndSym, Base, Size);
1760       } else {
1761         Asm->OutStreamer->EmitSymbolValue(Entry.BeginSym, Size);
1762         Asm->OutStreamer->EmitSymbolValue(Entry.EndSym, Size);
1763       }
1764 
1765       emitDebugLocEntryLocation(Entry);
1766     }
1767     Asm->OutStreamer->EmitIntValue(0, Size);
1768     Asm->OutStreamer->EmitIntValue(0, Size);
1769   }
1770 }
1771 
1772 void DwarfDebug::emitDebugLocDWO() {
1773   Asm->OutStreamer->SwitchSection(
1774       Asm->getObjFileLowering().getDwarfLocDWOSection());
1775   for (const auto &List : DebugLocs.getLists()) {
1776     Asm->OutStreamer->EmitLabel(List.Label);
1777     for (const auto &Entry : DebugLocs.getEntries(List)) {
1778       // Just always use start_length for now - at least that's one address
1779       // rather than two. We could get fancier and try to, say, reuse an
1780       // address we know we've emitted elsewhere (the start of the function?
1781       // The start of the CU or CU subrange that encloses this range?)
1782       Asm->emitInt8(dwarf::DW_LLE_startx_length);
1783       unsigned idx = AddrPool.getIndex(Entry.BeginSym);
1784       Asm->EmitULEB128(idx);
1785       Asm->EmitLabelDifference(Entry.EndSym, Entry.BeginSym, 4);
1786 
1787       emitDebugLocEntryLocation(Entry);
1788     }
1789     Asm->emitInt8(dwarf::DW_LLE_end_of_list);
1790   }
1791 }
1792 
1793 struct ArangeSpan {
1794   const MCSymbol *Start, *End;
1795 };
1796 
1797 // Emit a debug aranges section, containing a CU lookup for any
1798 // address we can tie back to a CU.
1799 void DwarfDebug::emitDebugARanges() {
1800   // Provides a unique id per text section.
1801   MapVector<MCSection *, SmallVector<SymbolCU, 8>> SectionMap;
1802 
1803   // Filter labels by section.
1804   for (const SymbolCU &SCU : ArangeLabels) {
1805     if (SCU.Sym->isInSection()) {
1806       // Make a note of this symbol and it's section.
1807       MCSection *Section = &SCU.Sym->getSection();
1808       if (!Section->getKind().isMetadata())
1809         SectionMap[Section].push_back(SCU);
1810     } else {
1811       // Some symbols (e.g. common/bss on mach-o) can have no section but still
1812       // appear in the output. This sucks as we rely on sections to build
1813       // arange spans. We can do it without, but it's icky.
1814       SectionMap[nullptr].push_back(SCU);
1815     }
1816   }
1817 
1818   DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans;
1819 
1820   for (auto &I : SectionMap) {
1821     MCSection *Section = I.first;
1822     SmallVector<SymbolCU, 8> &List = I.second;
1823     if (List.size() < 1)
1824       continue;
1825 
1826     // If we have no section (e.g. common), just write out
1827     // individual spans for each symbol.
1828     if (!Section) {
1829       for (const SymbolCU &Cur : List) {
1830         ArangeSpan Span;
1831         Span.Start = Cur.Sym;
1832         Span.End = nullptr;
1833         assert(Cur.CU);
1834         Spans[Cur.CU].push_back(Span);
1835       }
1836       continue;
1837     }
1838 
1839     // Sort the symbols by offset within the section.
1840     std::stable_sort(
1841         List.begin(), List.end(), [&](const SymbolCU &A, const SymbolCU &B) {
1842           unsigned IA = A.Sym ? Asm->OutStreamer->GetSymbolOrder(A.Sym) : 0;
1843           unsigned IB = B.Sym ? Asm->OutStreamer->GetSymbolOrder(B.Sym) : 0;
1844 
1845           // Symbols with no order assigned should be placed at the end.
1846           // (e.g. section end labels)
1847           if (IA == 0)
1848             return false;
1849           if (IB == 0)
1850             return true;
1851           return IA < IB;
1852         });
1853 
1854     // Insert a final terminator.
1855     List.push_back(SymbolCU(nullptr, Asm->OutStreamer->endSection(Section)));
1856 
1857     // Build spans between each label.
1858     const MCSymbol *StartSym = List[0].Sym;
1859     for (size_t n = 1, e = List.size(); n < e; n++) {
1860       const SymbolCU &Prev = List[n - 1];
1861       const SymbolCU &Cur = List[n];
1862 
1863       // Try and build the longest span we can within the same CU.
1864       if (Cur.CU != Prev.CU) {
1865         ArangeSpan Span;
1866         Span.Start = StartSym;
1867         Span.End = Cur.Sym;
1868         assert(Prev.CU);
1869         Spans[Prev.CU].push_back(Span);
1870         StartSym = Cur.Sym;
1871       }
1872     }
1873   }
1874 
1875   // Start the dwarf aranges section.
1876   Asm->OutStreamer->SwitchSection(
1877       Asm->getObjFileLowering().getDwarfARangesSection());
1878 
1879   unsigned PtrSize = Asm->MAI->getCodePointerSize();
1880 
1881   // Build a list of CUs used.
1882   std::vector<DwarfCompileUnit *> CUs;
1883   for (const auto &it : Spans) {
1884     DwarfCompileUnit *CU = it.first;
1885     CUs.push_back(CU);
1886   }
1887 
1888   // Sort the CU list (again, to ensure consistent output order).
1889   llvm::sort(CUs.begin(), CUs.end(),
1890              [](const DwarfCompileUnit *A, const DwarfCompileUnit *B) {
1891                return A->getUniqueID() < B->getUniqueID();
1892              });
1893 
1894   // Emit an arange table for each CU we used.
1895   for (DwarfCompileUnit *CU : CUs) {
1896     std::vector<ArangeSpan> &List = Spans[CU];
1897 
1898     // Describe the skeleton CU's offset and length, not the dwo file's.
1899     if (auto *Skel = CU->getSkeleton())
1900       CU = Skel;
1901 
1902     // Emit size of content not including length itself.
1903     unsigned ContentSize =
1904         sizeof(int16_t) + // DWARF ARange version number
1905         sizeof(int32_t) + // Offset of CU in the .debug_info section
1906         sizeof(int8_t) +  // Pointer Size (in bytes)
1907         sizeof(int8_t);   // Segment Size (in bytes)
1908 
1909     unsigned TupleSize = PtrSize * 2;
1910 
1911     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
1912     unsigned Padding =
1913         OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize);
1914 
1915     ContentSize += Padding;
1916     ContentSize += (List.size() + 1) * TupleSize;
1917 
1918     // For each compile unit, write the list of spans it covers.
1919     Asm->OutStreamer->AddComment("Length of ARange Set");
1920     Asm->emitInt32(ContentSize);
1921     Asm->OutStreamer->AddComment("DWARF Arange version number");
1922     Asm->emitInt16(dwarf::DW_ARANGES_VERSION);
1923     Asm->OutStreamer->AddComment("Offset Into Debug Info Section");
1924     emitSectionReference(*CU);
1925     Asm->OutStreamer->AddComment("Address Size (in bytes)");
1926     Asm->emitInt8(PtrSize);
1927     Asm->OutStreamer->AddComment("Segment Size (in bytes)");
1928     Asm->emitInt8(0);
1929 
1930     Asm->OutStreamer->emitFill(Padding, 0xff);
1931 
1932     for (const ArangeSpan &Span : List) {
1933       Asm->EmitLabelReference(Span.Start, PtrSize);
1934 
1935       // Calculate the size as being from the span start to it's end.
1936       if (Span.End) {
1937         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
1938       } else {
1939         // For symbols without an end marker (e.g. common), we
1940         // write a single arange entry containing just that one symbol.
1941         uint64_t Size = SymSize[Span.Start];
1942         if (Size == 0)
1943           Size = 1;
1944 
1945         Asm->OutStreamer->EmitIntValue(Size, PtrSize);
1946       }
1947     }
1948 
1949     Asm->OutStreamer->AddComment("ARange terminator");
1950     Asm->OutStreamer->EmitIntValue(0, PtrSize);
1951     Asm->OutStreamer->EmitIntValue(0, PtrSize);
1952   }
1953 }
1954 
1955 /// Emit address ranges into a debug ranges section.
1956 void DwarfDebug::emitDebugRanges() {
1957   if (CUMap.empty())
1958     return;
1959 
1960   if (!useRangesSection()) {
1961     assert(llvm::all_of(
1962                CUMap,
1963                [](const decltype(CUMap)::const_iterator::value_type &Pair) {
1964                  return Pair.second->getRangeLists().empty();
1965                }) &&
1966            "No debug ranges expected.");
1967     return;
1968   }
1969 
1970   // Start the dwarf ranges section.
1971   Asm->OutStreamer->SwitchSection(
1972       Asm->getObjFileLowering().getDwarfRangesSection());
1973 
1974   // Size for our labels.
1975   unsigned char Size = Asm->MAI->getCodePointerSize();
1976 
1977   // Grab the specific ranges for the compile units in the module.
1978   for (const auto &I : CUMap) {
1979     DwarfCompileUnit *TheCU = I.second;
1980 
1981     if (auto *Skel = TheCU->getSkeleton())
1982       TheCU = Skel;
1983 
1984     // Iterate over the misc ranges for the compile units in the module.
1985     for (const RangeSpanList &List : TheCU->getRangeLists()) {
1986       // Emit our symbol so we can find the beginning of the range.
1987       Asm->OutStreamer->EmitLabel(List.getSym());
1988 
1989       // Gather all the ranges that apply to the same section so they can share
1990       // a base address entry.
1991       MapVector<const MCSection *, std::vector<const RangeSpan *>> MV;
1992       for (const RangeSpan &Range : List.getRanges()) {
1993         MV[&Range.getStart()->getSection()].push_back(&Range);
1994       }
1995 
1996       auto *CUBase = TheCU->getBaseAddress();
1997       bool BaseIsSet = false;
1998       for (const auto &P : MV) {
1999         // Don't bother with a base address entry if there's only one range in
2000         // this section in this range list - for example ranges for a CU will
2001         // usually consist of single regions from each of many sections
2002         // (-ffunction-sections, or just C++ inline functions) except under LTO
2003         // or optnone where there may be holes in a single CU's section
2004         // contrubutions.
2005         auto *Base = CUBase;
2006         if (!Base && P.second.size() > 1 &&
2007             UseDwarfRangesBaseAddressSpecifier) {
2008           BaseIsSet = true;
2009           // FIXME/use care: This may not be a useful base address if it's not
2010           // the lowest address/range in this object.
2011           Base = P.second.front()->getStart();
2012           Asm->OutStreamer->EmitIntValue(-1, Size);
2013           Asm->OutStreamer->EmitSymbolValue(Base, Size);
2014         } else if (BaseIsSet) {
2015           BaseIsSet = false;
2016           Asm->OutStreamer->EmitIntValue(-1, Size);
2017           Asm->OutStreamer->EmitIntValue(0, Size);
2018         }
2019 
2020         for (const auto *RS : P.second) {
2021           const MCSymbol *Begin = RS->getStart();
2022           const MCSymbol *End = RS->getEnd();
2023           assert(Begin && "Range without a begin symbol?");
2024           assert(End && "Range without an end symbol?");
2025           if (Base) {
2026             Asm->EmitLabelDifference(Begin, Base, Size);
2027             Asm->EmitLabelDifference(End, Base, Size);
2028           } else {
2029             Asm->OutStreamer->EmitSymbolValue(Begin, Size);
2030             Asm->OutStreamer->EmitSymbolValue(End, Size);
2031           }
2032         }
2033       }
2034 
2035       // And terminate the list with two 0 values.
2036       Asm->OutStreamer->EmitIntValue(0, Size);
2037       Asm->OutStreamer->EmitIntValue(0, Size);
2038     }
2039   }
2040 }
2041 
2042 void DwarfDebug::handleMacroNodes(DIMacroNodeArray Nodes, DwarfCompileUnit &U) {
2043   for (auto *MN : Nodes) {
2044     if (auto *M = dyn_cast<DIMacro>(MN))
2045       emitMacro(*M);
2046     else if (auto *F = dyn_cast<DIMacroFile>(MN))
2047       emitMacroFile(*F, U);
2048     else
2049       llvm_unreachable("Unexpected DI type!");
2050   }
2051 }
2052 
2053 void DwarfDebug::emitMacro(DIMacro &M) {
2054   Asm->EmitULEB128(M.getMacinfoType());
2055   Asm->EmitULEB128(M.getLine());
2056   StringRef Name = M.getName();
2057   StringRef Value = M.getValue();
2058   Asm->OutStreamer->EmitBytes(Name);
2059   if (!Value.empty()) {
2060     // There should be one space between macro name and macro value.
2061     Asm->emitInt8(' ');
2062     Asm->OutStreamer->EmitBytes(Value);
2063   }
2064   Asm->emitInt8('\0');
2065 }
2066 
2067 void DwarfDebug::emitMacroFile(DIMacroFile &F, DwarfCompileUnit &U) {
2068   assert(F.getMacinfoType() == dwarf::DW_MACINFO_start_file);
2069   Asm->EmitULEB128(dwarf::DW_MACINFO_start_file);
2070   Asm->EmitULEB128(F.getLine());
2071   Asm->EmitULEB128(U.getOrCreateSourceID(F.getFile()));
2072   handleMacroNodes(F.getElements(), U);
2073   Asm->EmitULEB128(dwarf::DW_MACINFO_end_file);
2074 }
2075 
2076 /// Emit macros into a debug macinfo section.
2077 void DwarfDebug::emitDebugMacinfo() {
2078   if (CUMap.empty())
2079     return;
2080 
2081   // Start the dwarf macinfo section.
2082   Asm->OutStreamer->SwitchSection(
2083       Asm->getObjFileLowering().getDwarfMacinfoSection());
2084 
2085   for (const auto &P : CUMap) {
2086     auto &TheCU = *P.second;
2087     auto *SkCU = TheCU.getSkeleton();
2088     DwarfCompileUnit &U = SkCU ? *SkCU : TheCU;
2089     auto *CUNode = cast<DICompileUnit>(P.first);
2090     DIMacroNodeArray Macros = CUNode->getMacros();
2091     if (!Macros.empty()) {
2092       Asm->OutStreamer->EmitLabel(U.getMacroLabelBegin());
2093       handleMacroNodes(Macros, U);
2094     }
2095   }
2096   Asm->OutStreamer->AddComment("End Of Macro List Mark");
2097   Asm->emitInt8(0);
2098 }
2099 
2100 // DWARF5 Experimental Separate Dwarf emitters.
2101 
2102 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die,
2103                                   std::unique_ptr<DwarfCompileUnit> NewU) {
2104   NewU->addString(Die, dwarf::DW_AT_GNU_dwo_name,
2105                   Asm->TM.Options.MCOptions.SplitDwarfFile);
2106 
2107   if (!CompilationDir.empty())
2108     NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2109 
2110   addGnuPubAttributes(*NewU, Die);
2111 
2112   SkeletonHolder.addUnit(std::move(NewU));
2113 }
2114 
2115 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2116 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2117 // DW_AT_addr_base, DW_AT_ranges_base.
2118 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) {
2119 
2120   auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>(
2121       CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder);
2122   DwarfCompileUnit &NewCU = *OwnedUnit;
2123   NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection());
2124 
2125   NewCU.initStmtList();
2126 
2127   if (useSegmentedStringOffsetsTable())
2128     NewCU.addStringOffsetsStart();
2129 
2130   initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit));
2131 
2132   return NewCU;
2133 }
2134 
2135 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2136 // compile units that would normally be in debug_info.
2137 void DwarfDebug::emitDebugInfoDWO() {
2138   assert(useSplitDwarf() && "No split dwarf debug info?");
2139   // Don't emit relocations into the dwo file.
2140   InfoHolder.emitUnits(/* UseOffsets */ true);
2141 }
2142 
2143 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2144 // abbreviations for the .debug_info.dwo section.
2145 void DwarfDebug::emitDebugAbbrevDWO() {
2146   assert(useSplitDwarf() && "No split dwarf?");
2147   InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
2148 }
2149 
2150 void DwarfDebug::emitDebugLineDWO() {
2151   assert(useSplitDwarf() && "No split dwarf?");
2152   SplitTypeUnitFileTable.Emit(
2153       *Asm->OutStreamer, MCDwarfLineTableParams(),
2154       Asm->getObjFileLowering().getDwarfLineDWOSection());
2155 }
2156 
2157 void DwarfDebug::emitStringOffsetsTableHeaderDWO() {
2158   assert(useSplitDwarf() && "No split dwarf?");
2159   InfoHolder.emitStringOffsetsTableHeader(
2160       Asm->getObjFileLowering().getDwarfStrOffDWOSection());
2161 }
2162 
2163 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2164 // string section and is identical in format to traditional .debug_str
2165 // sections.
2166 void DwarfDebug::emitDebugStrDWO() {
2167   if (useSegmentedStringOffsetsTable())
2168     emitStringOffsetsTableHeaderDWO();
2169   assert(useSplitDwarf() && "No split dwarf?");
2170   MCSection *OffSec = Asm->getObjFileLowering().getDwarfStrOffDWOSection();
2171   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
2172                          OffSec, /* UseRelativeOffsets = */ false);
2173 }
2174 
2175 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) {
2176   if (!useSplitDwarf())
2177     return nullptr;
2178   const DICompileUnit *DIUnit = CU.getCUNode();
2179   SplitTypeUnitFileTable.maybeSetRootFile(
2180       DIUnit->getDirectory(), DIUnit->getFilename(),
2181       CU.getMD5AsBytes(DIUnit->getFile()), DIUnit->getSource());
2182   return &SplitTypeUnitFileTable;
2183 }
2184 
2185 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier) {
2186   MD5 Hash;
2187   Hash.update(Identifier);
2188   // ... take the least significant 8 bytes and return those. Our MD5
2189   // implementation always returns its results in little endian, so we actually
2190   // need the "high" word.
2191   MD5::MD5Result Result;
2192   Hash.final(Result);
2193   return Result.high();
2194 }
2195 
2196 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
2197                                       StringRef Identifier, DIE &RefDie,
2198                                       const DICompositeType *CTy) {
2199   // Fast path if we're building some type units and one has already used the
2200   // address pool we know we're going to throw away all this work anyway, so
2201   // don't bother building dependent types.
2202   if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed())
2203     return;
2204 
2205   auto Ins = TypeSignatures.insert(std::make_pair(CTy, 0));
2206   if (!Ins.second) {
2207     CU.addDIETypeSignature(RefDie, Ins.first->second);
2208     return;
2209   }
2210 
2211   bool TopLevelType = TypeUnitsUnderConstruction.empty();
2212   AddrPool.resetUsedFlag();
2213 
2214   auto OwnedUnit = llvm::make_unique<DwarfTypeUnit>(CU, Asm, this, &InfoHolder,
2215                                                     getDwoLineTable(CU));
2216   DwarfTypeUnit &NewTU = *OwnedUnit;
2217   DIE &UnitDie = NewTU.getUnitDie();
2218   TypeUnitsUnderConstruction.emplace_back(std::move(OwnedUnit), CTy);
2219 
2220   NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
2221                 CU.getLanguage());
2222 
2223   uint64_t Signature = makeTypeSignature(Identifier);
2224   NewTU.setTypeSignature(Signature);
2225   Ins.first->second = Signature;
2226 
2227   if (useSplitDwarf())
2228     NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesDWOSection());
2229   else {
2230     NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesSection(Signature));
2231     // Non-split type units reuse the compile unit's line table.
2232     CU.applyStmtList(UnitDie);
2233   }
2234 
2235   // Add DW_AT_str_offsets_base to the type unit DIE, but not for split type
2236   // units.
2237   if (useSegmentedStringOffsetsTable() && !useSplitDwarf())
2238     NewTU.addStringOffsetsStart();
2239 
2240   NewTU.setType(NewTU.createTypeDIE(CTy));
2241 
2242   if (TopLevelType) {
2243     auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction);
2244     TypeUnitsUnderConstruction.clear();
2245 
2246     // Types referencing entries in the address table cannot be placed in type
2247     // units.
2248     if (AddrPool.hasBeenUsed()) {
2249 
2250       // Remove all the types built while building this type.
2251       // This is pessimistic as some of these types might not be dependent on
2252       // the type that used an address.
2253       for (const auto &TU : TypeUnitsToAdd)
2254         TypeSignatures.erase(TU.second);
2255 
2256       // Construct this type in the CU directly.
2257       // This is inefficient because all the dependent types will be rebuilt
2258       // from scratch, including building them in type units, discovering that
2259       // they depend on addresses, throwing them out and rebuilding them.
2260       CU.constructTypeDIE(RefDie, cast<DICompositeType>(CTy));
2261       return;
2262     }
2263 
2264     // If the type wasn't dependent on fission addresses, finish adding the type
2265     // and all its dependent types.
2266     for (auto &TU : TypeUnitsToAdd) {
2267       InfoHolder.computeSizeAndOffsetsForUnit(TU.first.get());
2268       InfoHolder.emitUnit(TU.first.get(), useSplitDwarf());
2269     }
2270   }
2271   CU.addDIETypeSignature(RefDie, Signature);
2272 }
2273 
2274 void DwarfDebug::addAccelDebugName(StringRef Name, const DIE &Die) {
2275   assert(getAccelTableKind() == AccelTableKind::Dwarf);
2276 
2277   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2278   AccelDebugNames.addName(Holder.getStringPool().getEntry(*Asm, Name), Die);
2279 }
2280 
2281 // Accelerator table mutators - add each name along with its companion
2282 // DIE to the proper table while ensuring that the name that we're going
2283 // to reference is in the string table. We do this since the names we
2284 // add may not only be identical to the names in the DIE.
2285 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) {
2286   switch (getAccelTableKind()) {
2287   case AccelTableKind::Apple:
2288     AccelNames.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2289     break;
2290   case AccelTableKind::Dwarf:
2291     addAccelDebugName(Name, Die);
2292     break;
2293   case AccelTableKind::None:
2294     return;
2295   case AccelTableKind::Default:
2296     llvm_unreachable("Default should have already been resolved.");
2297   }
2298 }
2299 
2300 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) {
2301   if (getAccelTableKind() != AccelTableKind::Apple)
2302     return;
2303   AccelObjC.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2304 }
2305 
2306 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) {
2307   switch (getAccelTableKind()) {
2308   case AccelTableKind::Apple:
2309     AccelNamespace.addName(InfoHolder.getStringPool().getEntry(*Asm, Name),
2310                            &Die);
2311     break;
2312   case AccelTableKind::Dwarf:
2313     addAccelDebugName(Name, Die);
2314     break;
2315   case AccelTableKind::None:
2316     return;
2317   case AccelTableKind::Default:
2318     llvm_unreachable("Default should have already been resolved.");
2319   }
2320 }
2321 
2322 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) {
2323   switch (getAccelTableKind()) {
2324   case AccelTableKind::Apple:
2325     AccelTypes.addName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2326     break;
2327   case AccelTableKind::Dwarf:
2328     addAccelDebugName(Name, Die);
2329     break;
2330   case AccelTableKind::None:
2331     return;
2332   case AccelTableKind::Default:
2333     llvm_unreachable("Default should have already been resolved.");
2334   }
2335 }
2336 
2337 uint16_t DwarfDebug::getDwarfVersion() const {
2338   return Asm->OutStreamer->getContext().getDwarfVersion();
2339 }
2340