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