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