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     // Emit DWO addresses.
890     AddrPool.emit(*Asm, Asm->getObjFileLowering().getDwarfAddrSection());
891   }
892 
893   // Emit info into the dwarf accelerator table sections.
894   switch (getAccelTableKind()) {
895   case AccelTableKind::Apple:
896     emitAccelNames();
897     emitAccelObjC();
898     emitAccelNamespaces();
899     emitAccelTypes();
900     break;
901   case AccelTableKind::Dwarf:
902     emitAccelDebugNames();
903     break;
904   case AccelTableKind::None:
905     break;
906   case AccelTableKind::Default:
907     llvm_unreachable("Default should have already been resolved.");
908   }
909 
910   // Emit the pubnames and pubtypes sections if requested.
911   emitDebugPubSections();
912 
913   // clean up.
914   // FIXME: AbstractVariables.clear();
915 }
916 
917 void DwarfDebug::ensureAbstractVariableIsCreated(DwarfCompileUnit &CU, InlinedVariable IV,
918                                                  const MDNode *ScopeNode) {
919   const DILocalVariable *Cleansed = nullptr;
920   if (CU.getExistingAbstractVariable(IV, Cleansed))
921     return;
922 
923   CU.createAbstractVariable(Cleansed, LScopes.getOrCreateAbstractScope(
924                                        cast<DILocalScope>(ScopeNode)));
925 }
926 
927 void DwarfDebug::ensureAbstractVariableIsCreatedIfScoped(DwarfCompileUnit &CU,
928     InlinedVariable IV, const MDNode *ScopeNode) {
929   const DILocalVariable *Cleansed = nullptr;
930   if (CU.getExistingAbstractVariable(IV, Cleansed))
931     return;
932 
933   if (LexicalScope *Scope =
934           LScopes.findAbstractScope(cast_or_null<DILocalScope>(ScopeNode)))
935     CU.createAbstractVariable(Cleansed, Scope);
936 }
937 
938 // Collect variable information from side table maintained by MF.
939 void DwarfDebug::collectVariableInfoFromMFTable(
940     DwarfCompileUnit &TheCU, DenseSet<InlinedVariable> &Processed) {
941   SmallDenseMap<InlinedVariable, DbgVariable *> MFVars;
942   for (const auto &VI : Asm->MF->getVariableDbgInfo()) {
943     if (!VI.Var)
944       continue;
945     assert(VI.Var->isValidLocationForIntrinsic(VI.Loc) &&
946            "Expected inlined-at fields to agree");
947 
948     InlinedVariable Var(VI.Var, VI.Loc->getInlinedAt());
949     Processed.insert(Var);
950     LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc);
951 
952     // If variable scope is not found then skip this variable.
953     if (!Scope)
954       continue;
955 
956     ensureAbstractVariableIsCreatedIfScoped(TheCU, Var, Scope->getScopeNode());
957     auto RegVar = llvm::make_unique<DbgVariable>(Var.first, Var.second);
958     RegVar->initializeMMI(VI.Expr, VI.Slot);
959     if (DbgVariable *DbgVar = MFVars.lookup(Var))
960       DbgVar->addMMIEntry(*RegVar);
961     else if (InfoHolder.addScopeVariable(Scope, RegVar.get())) {
962       MFVars.insert({Var, RegVar.get()});
963       ConcreteVariables.push_back(std::move(RegVar));
964     }
965   }
966 }
967 
968 // Get .debug_loc entry for the instruction range starting at MI.
969 static DebugLocEntry::Value getDebugLocValue(const MachineInstr *MI) {
970   const DIExpression *Expr = MI->getDebugExpression();
971   assert(MI->getNumOperands() == 4);
972   if (MI->getOperand(0).isReg()) {
973     auto RegOp = MI->getOperand(0);
974     auto Op1 = MI->getOperand(1);
975     // If the second operand is an immediate, this is a
976     // register-indirect address.
977     assert((!Op1.isImm() || (Op1.getImm() == 0)) && "unexpected offset");
978     MachineLocation MLoc(RegOp.getReg(), Op1.isImm());
979     return DebugLocEntry::Value(Expr, MLoc);
980   }
981   if (MI->getOperand(0).isImm())
982     return DebugLocEntry::Value(Expr, MI->getOperand(0).getImm());
983   if (MI->getOperand(0).isFPImm())
984     return DebugLocEntry::Value(Expr, MI->getOperand(0).getFPImm());
985   if (MI->getOperand(0).isCImm())
986     return DebugLocEntry::Value(Expr, MI->getOperand(0).getCImm());
987 
988   llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!");
989 }
990 
991 /// If this and Next are describing different fragments of the same
992 /// variable, merge them by appending Next's values to the current
993 /// list of values.
994 /// Return true if the merge was successful.
995 bool DebugLocEntry::MergeValues(const DebugLocEntry &Next) {
996   if (Begin == Next.Begin) {
997     auto *FirstExpr = cast<DIExpression>(Values[0].Expression);
998     auto *FirstNextExpr = cast<DIExpression>(Next.Values[0].Expression);
999     if (!FirstExpr->isFragment() || !FirstNextExpr->isFragment())
1000       return false;
1001 
1002     // We can only merge entries if none of the fragments overlap any others.
1003     // In doing so, we can take advantage of the fact that both lists are
1004     // sorted.
1005     for (unsigned i = 0, j = 0; i < Values.size(); ++i) {
1006       for (; j < Next.Values.size(); ++j) {
1007         int res = cast<DIExpression>(Values[i].Expression)->fragmentCmp(
1008             cast<DIExpression>(Next.Values[j].Expression));
1009         if (res == 0) // The two expressions overlap, we can't merge.
1010           return false;
1011         // Values[i] is entirely before Next.Values[j],
1012         // so go back to the next entry of Values.
1013         else if (res == -1)
1014           break;
1015         // Next.Values[j] is entirely before Values[i], so go on to the
1016         // next entry of Next.Values.
1017       }
1018     }
1019 
1020     addValues(Next.Values);
1021     End = Next.End;
1022     return true;
1023   }
1024   return false;
1025 }
1026 
1027 /// Build the location list for all DBG_VALUEs in the function that
1028 /// describe the same variable.  If the ranges of several independent
1029 /// fragments of the same variable overlap partially, split them up and
1030 /// combine the ranges. The resulting DebugLocEntries are will have
1031 /// strict monotonically increasing begin addresses and will never
1032 /// overlap.
1033 //
1034 // Input:
1035 //
1036 //   Ranges History [var, loc, fragment ofs size]
1037 // 0 |      [x, (reg0, fragment 0, 32)]
1038 // 1 | |    [x, (reg1, fragment 32, 32)] <- IsFragmentOfPrevEntry
1039 // 2 | |    ...
1040 // 3   |    [clobber reg0]
1041 // 4        [x, (mem, fragment 0, 64)] <- overlapping with both previous fragments of
1042 //                                     x.
1043 //
1044 // Output:
1045 //
1046 // [0-1]    [x, (reg0, fragment  0, 32)]
1047 // [1-3]    [x, (reg0, fragment  0, 32), (reg1, fragment 32, 32)]
1048 // [3-4]    [x, (reg1, fragment 32, 32)]
1049 // [4- ]    [x, (mem,  fragment  0, 64)]
1050 void
1051 DwarfDebug::buildLocationList(SmallVectorImpl<DebugLocEntry> &DebugLoc,
1052                               const DbgValueHistoryMap::InstrRanges &Ranges) {
1053   SmallVector<DebugLocEntry::Value, 4> OpenRanges;
1054 
1055   for (auto I = Ranges.begin(), E = Ranges.end(); I != E; ++I) {
1056     const MachineInstr *Begin = I->first;
1057     const MachineInstr *End = I->second;
1058     assert(Begin->isDebugValue() && "Invalid History entry");
1059 
1060     // Check if a variable is inaccessible in this range.
1061     if (Begin->getNumOperands() > 1 &&
1062         Begin->getOperand(0).isReg() && !Begin->getOperand(0).getReg()) {
1063       OpenRanges.clear();
1064       continue;
1065     }
1066 
1067     // If this fragment overlaps with any open ranges, truncate them.
1068     const DIExpression *DIExpr = Begin->getDebugExpression();
1069     auto Last = remove_if(OpenRanges, [&](DebugLocEntry::Value R) {
1070       return DIExpr->fragmentsOverlap(R.getExpression());
1071     });
1072     OpenRanges.erase(Last, OpenRanges.end());
1073 
1074     const MCSymbol *StartLabel = getLabelBeforeInsn(Begin);
1075     assert(StartLabel && "Forgot label before DBG_VALUE starting a range!");
1076 
1077     const MCSymbol *EndLabel;
1078     if (End != nullptr)
1079       EndLabel = getLabelAfterInsn(End);
1080     else if (std::next(I) == Ranges.end())
1081       EndLabel = Asm->getFunctionEnd();
1082     else
1083       EndLabel = getLabelBeforeInsn(std::next(I)->first);
1084     assert(EndLabel && "Forgot label after instruction ending a range!");
1085 
1086     LLVM_DEBUG(dbgs() << "DotDebugLoc: " << *Begin << "\n");
1087 
1088     auto Value = getDebugLocValue(Begin);
1089     DebugLocEntry Loc(StartLabel, EndLabel, Value);
1090     bool couldMerge = false;
1091 
1092     // If this is a fragment, it may belong to the current DebugLocEntry.
1093     if (DIExpr->isFragment()) {
1094       // Add this value to the list of open ranges.
1095       OpenRanges.push_back(Value);
1096 
1097       // Attempt to add the fragment to the last entry.
1098       if (!DebugLoc.empty())
1099         if (DebugLoc.back().MergeValues(Loc))
1100           couldMerge = true;
1101     }
1102 
1103     if (!couldMerge) {
1104       // Need to add a new DebugLocEntry. Add all values from still
1105       // valid non-overlapping fragments.
1106       if (OpenRanges.size())
1107         Loc.addValues(OpenRanges);
1108 
1109       DebugLoc.push_back(std::move(Loc));
1110     }
1111 
1112     // Attempt to coalesce the ranges of two otherwise identical
1113     // DebugLocEntries.
1114     auto CurEntry = DebugLoc.rbegin();
1115     LLVM_DEBUG({
1116       dbgs() << CurEntry->getValues().size() << " Values:\n";
1117       for (auto &Value : CurEntry->getValues())
1118         Value.dump();
1119       dbgs() << "-----\n";
1120     });
1121 
1122     auto PrevEntry = std::next(CurEntry);
1123     if (PrevEntry != DebugLoc.rend() && PrevEntry->MergeRanges(*CurEntry))
1124       DebugLoc.pop_back();
1125   }
1126 }
1127 
1128 DbgVariable *DwarfDebug::createConcreteVariable(DwarfCompileUnit &TheCU,
1129                                                 LexicalScope &Scope,
1130                                                 InlinedVariable IV) {
1131   ensureAbstractVariableIsCreatedIfScoped(TheCU, IV, Scope.getScopeNode());
1132   ConcreteVariables.push_back(
1133       llvm::make_unique<DbgVariable>(IV.first, IV.second));
1134   InfoHolder.addScopeVariable(&Scope, ConcreteVariables.back().get());
1135   return ConcreteVariables.back().get();
1136 }
1137 
1138 /// Determine whether a *singular* DBG_VALUE is valid for the entirety of its
1139 /// enclosing lexical scope. The check ensures there are no other instructions
1140 /// in the same lexical scope preceding the DBG_VALUE and that its range is
1141 /// either open or otherwise rolls off the end of the scope.
1142 static bool validThroughout(LexicalScopes &LScopes,
1143                             const MachineInstr *DbgValue,
1144                             const MachineInstr *RangeEnd) {
1145   assert(DbgValue->getDebugLoc() && "DBG_VALUE without a debug location");
1146   auto MBB = DbgValue->getParent();
1147   auto DL = DbgValue->getDebugLoc();
1148   auto *LScope = LScopes.findLexicalScope(DL);
1149   // Scope doesn't exist; this is a dead DBG_VALUE.
1150   if (!LScope)
1151     return false;
1152   auto &LSRange = LScope->getRanges();
1153   if (LSRange.size() == 0)
1154     return false;
1155 
1156   // Determine if the DBG_VALUE is valid at the beginning of its lexical block.
1157   const MachineInstr *LScopeBegin = LSRange.front().first;
1158   // Early exit if the lexical scope begins outside of the current block.
1159   if (LScopeBegin->getParent() != MBB)
1160     return false;
1161   MachineBasicBlock::const_reverse_iterator Pred(DbgValue);
1162   for (++Pred; Pred != MBB->rend(); ++Pred) {
1163     if (Pred->getFlag(MachineInstr::FrameSetup))
1164       break;
1165     auto PredDL = Pred->getDebugLoc();
1166     if (!PredDL || Pred->isMetaInstruction())
1167       continue;
1168     // Check whether the instruction preceding the DBG_VALUE is in the same
1169     // (sub)scope as the DBG_VALUE.
1170     if (DL->getScope() == PredDL->getScope())
1171       return false;
1172     auto *PredScope = LScopes.findLexicalScope(PredDL);
1173     if (!PredScope || LScope->dominates(PredScope))
1174       return false;
1175   }
1176 
1177   // If the range of the DBG_VALUE is open-ended, report success.
1178   if (!RangeEnd)
1179     return true;
1180 
1181   // Fail if there are instructions belonging to our scope in another block.
1182   const MachineInstr *LScopeEnd = LSRange.back().second;
1183   if (LScopeEnd->getParent() != MBB)
1184     return false;
1185 
1186   // Single, constant DBG_VALUEs in the prologue are promoted to be live
1187   // throughout the function. This is a hack, presumably for DWARF v2 and not
1188   // necessarily correct. It would be much better to use a dbg.declare instead
1189   // if we know the constant is live throughout the scope.
1190   if (DbgValue->getOperand(0).isImm() && MBB->pred_empty())
1191     return true;
1192 
1193   return false;
1194 }
1195 
1196 // Find variables for each lexical scope.
1197 void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU,
1198                                      const DISubprogram *SP,
1199                                      DenseSet<InlinedVariable> &Processed) {
1200   // Grab the variable info that was squirreled away in the MMI side-table.
1201   collectVariableInfoFromMFTable(TheCU, Processed);
1202 
1203   for (const auto &I : DbgValues) {
1204     InlinedVariable IV = I.first;
1205     if (Processed.count(IV))
1206       continue;
1207 
1208     // Instruction ranges, specifying where IV is accessible.
1209     const auto &Ranges = I.second;
1210     if (Ranges.empty())
1211       continue;
1212 
1213     LexicalScope *Scope = nullptr;
1214     if (const DILocation *IA = IV.second)
1215       Scope = LScopes.findInlinedScope(IV.first->getScope(), IA);
1216     else
1217       Scope = LScopes.findLexicalScope(IV.first->getScope());
1218     // If variable scope is not found then skip this variable.
1219     if (!Scope)
1220       continue;
1221 
1222     Processed.insert(IV);
1223     DbgVariable *RegVar = createConcreteVariable(TheCU, *Scope, IV);
1224 
1225     const MachineInstr *MInsn = Ranges.front().first;
1226     assert(MInsn->isDebugValue() && "History must begin with debug value");
1227 
1228     // Check if there is a single DBG_VALUE, valid throughout the var's scope.
1229     if (Ranges.size() == 1 &&
1230         validThroughout(LScopes, MInsn, Ranges.front().second)) {
1231       RegVar->initializeDbgValue(MInsn);
1232       continue;
1233     }
1234     // Do not emit location lists if .debug_loc secton is disabled.
1235     if (!useLocSection())
1236       continue;
1237 
1238     // Handle multiple DBG_VALUE instructions describing one variable.
1239     DebugLocStream::ListBuilder List(DebugLocs, TheCU, *Asm, *RegVar, *MInsn);
1240 
1241     // Build the location list for this variable.
1242     SmallVector<DebugLocEntry, 8> Entries;
1243     buildLocationList(Entries, Ranges);
1244 
1245     // If the variable has a DIBasicType, extract it.  Basic types cannot have
1246     // unique identifiers, so don't bother resolving the type with the
1247     // identifier map.
1248     const DIBasicType *BT = dyn_cast<DIBasicType>(
1249         static_cast<const Metadata *>(IV.first->getType()));
1250 
1251     // Finalize the entry by lowering it into a DWARF bytestream.
1252     for (auto &Entry : Entries)
1253       Entry.finalize(*Asm, List, BT);
1254   }
1255 
1256   // Collect info for variables that were optimized out.
1257   for (const DINode *DN : SP->getRetainedNodes()) {
1258     if (auto *DV = dyn_cast<DILocalVariable>(DN)) {
1259       if (Processed.insert(InlinedVariable(DV, nullptr)).second)
1260         if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope()))
1261           createConcreteVariable(TheCU, *Scope, InlinedVariable(DV, nullptr));
1262     }
1263   }
1264 }
1265 
1266 // Process beginning of an instruction.
1267 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1268   DebugHandlerBase::beginInstruction(MI);
1269   assert(CurMI);
1270 
1271   const auto *SP = MI->getMF()->getFunction().getSubprogram();
1272   if (!SP || SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug)
1273     return;
1274 
1275   // Check if source location changes, but ignore DBG_VALUE and CFI locations.
1276   // If the instruction is part of the function frame setup code, do not emit
1277   // any line record, as there is no correspondence with any user code.
1278   if (MI->isMetaInstruction() || MI->getFlag(MachineInstr::FrameSetup))
1279     return;
1280   const DebugLoc &DL = MI->getDebugLoc();
1281   // When we emit a line-0 record, we don't update PrevInstLoc; so look at
1282   // the last line number actually emitted, to see if it was line 0.
1283   unsigned LastAsmLine =
1284       Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine();
1285 
1286   if (DL == PrevInstLoc) {
1287     // If we have an ongoing unspecified location, nothing to do here.
1288     if (!DL)
1289       return;
1290     // We have an explicit location, same as the previous location.
1291     // But we might be coming back to it after a line 0 record.
1292     if (LastAsmLine == 0 && DL.getLine() != 0) {
1293       // Reinstate the source location but not marked as a statement.
1294       const MDNode *Scope = DL.getScope();
1295       recordSourceLine(DL.getLine(), DL.getCol(), Scope, /*Flags=*/0);
1296     }
1297     return;
1298   }
1299 
1300   if (!DL) {
1301     // We have an unspecified location, which might want to be line 0.
1302     // If we have already emitted a line-0 record, don't repeat it.
1303     if (LastAsmLine == 0)
1304       return;
1305     // If user said Don't Do That, don't do that.
1306     if (UnknownLocations == Disable)
1307       return;
1308     // See if we have a reason to emit a line-0 record now.
1309     // Reasons to emit a line-0 record include:
1310     // - User asked for it (UnknownLocations).
1311     // - Instruction has a label, so it's referenced from somewhere else,
1312     //   possibly debug information; we want it to have a source location.
1313     // - Instruction is at the top of a block; we don't want to inherit the
1314     //   location from the physically previous (maybe unrelated) block.
1315     if (UnknownLocations == Enable || PrevLabel ||
1316         (PrevInstBB && PrevInstBB != MI->getParent())) {
1317       // Preserve the file and column numbers, if we can, to save space in
1318       // the encoded line table.
1319       // Do not update PrevInstLoc, it remembers the last non-0 line.
1320       const MDNode *Scope = nullptr;
1321       unsigned Column = 0;
1322       if (PrevInstLoc) {
1323         Scope = PrevInstLoc.getScope();
1324         Column = PrevInstLoc.getCol();
1325       }
1326       recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0);
1327     }
1328     return;
1329   }
1330 
1331   // We have an explicit location, different from the previous location.
1332   // Don't repeat a line-0 record, but otherwise emit the new location.
1333   // (The new location might be an explicit line 0, which we do emit.)
1334   if (PrevInstLoc && DL.getLine() == 0 && LastAsmLine == 0)
1335     return;
1336   unsigned Flags = 0;
1337   if (DL == PrologEndLoc) {
1338     Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT;
1339     PrologEndLoc = DebugLoc();
1340   }
1341   // If the line changed, we call that a new statement; unless we went to
1342   // line 0 and came back, in which case it is not a new statement.
1343   unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() : LastAsmLine;
1344   if (DL.getLine() && DL.getLine() != OldLine)
1345     Flags |= DWARF2_FLAG_IS_STMT;
1346 
1347   const MDNode *Scope = DL.getScope();
1348   recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1349 
1350   // If we're not at line 0, remember this location.
1351   if (DL.getLine())
1352     PrevInstLoc = DL;
1353 }
1354 
1355 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) {
1356   // First known non-DBG_VALUE and non-frame setup location marks
1357   // the beginning of the function body.
1358   for (const auto &MBB : *MF)
1359     for (const auto &MI : MBB)
1360       if (!MI.isMetaInstruction() && !MI.getFlag(MachineInstr::FrameSetup) &&
1361           MI.getDebugLoc())
1362         return MI.getDebugLoc();
1363   return DebugLoc();
1364 }
1365 
1366 // Gather pre-function debug information.  Assumes being called immediately
1367 // after the function entry point has been emitted.
1368 void DwarfDebug::beginFunctionImpl(const MachineFunction *MF) {
1369   CurFn = MF;
1370 
1371   auto *SP = MF->getFunction().getSubprogram();
1372   assert(LScopes.empty() || SP == LScopes.getCurrentFunctionScope()->getScopeNode());
1373   if (SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug)
1374     return;
1375 
1376   DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(SP->getUnit());
1377 
1378   // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
1379   // belongs to so that we add to the correct per-cu line table in the
1380   // non-asm case.
1381   if (Asm->OutStreamer->hasRawTextSupport())
1382     // Use a single line table if we are generating assembly.
1383     Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1384   else
1385     Asm->OutStreamer->getContext().setDwarfCompileUnitID(CU.getUniqueID());
1386 
1387   // Record beginning of function.
1388   PrologEndLoc = findPrologueEndLoc(MF);
1389   if (PrologEndLoc) {
1390     // We'd like to list the prologue as "not statements" but GDB behaves
1391     // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1392     auto *SP = PrologEndLoc->getInlinedAtScope()->getSubprogram();
1393     recordSourceLine(SP->getScopeLine(), 0, SP, DWARF2_FLAG_IS_STMT);
1394   }
1395 }
1396 
1397 void DwarfDebug::skippedNonDebugFunction() {
1398   // If we don't have a subprogram for this function then there will be a hole
1399   // in the range information. Keep note of this by setting the previously used
1400   // section to nullptr.
1401   PrevCU = nullptr;
1402   CurFn = nullptr;
1403 }
1404 
1405 // Gather and emit post-function debug information.
1406 void DwarfDebug::endFunctionImpl(const MachineFunction *MF) {
1407   const DISubprogram *SP = MF->getFunction().getSubprogram();
1408 
1409   assert(CurFn == MF &&
1410       "endFunction should be called with the same function as beginFunction");
1411 
1412   // Set DwarfDwarfCompileUnitID in MCContext to default value.
1413   Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1414 
1415   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1416   assert(!FnScope || SP == FnScope->getScopeNode());
1417   DwarfCompileUnit &TheCU = *CUMap.lookup(SP->getUnit());
1418 
1419   DenseSet<InlinedVariable> ProcessedVars;
1420   collectVariableInfo(TheCU, SP, ProcessedVars);
1421 
1422   // Add the range of this function to the list of ranges for the CU.
1423   TheCU.addRange(RangeSpan(Asm->getFunctionBegin(), Asm->getFunctionEnd()));
1424 
1425   // Under -gmlt, skip building the subprogram if there are no inlined
1426   // subroutines inside it. But with -fdebug-info-for-profiling, the subprogram
1427   // is still needed as we need its source location.
1428   if (!TheCU.getCUNode()->getDebugInfoForProfiling() &&
1429       TheCU.getCUNode()->getEmissionKind() == DICompileUnit::LineTablesOnly &&
1430       LScopes.getAbstractScopesList().empty() && !IsDarwin) {
1431     assert(InfoHolder.getScopeVariables().empty());
1432     PrevLabel = nullptr;
1433     CurFn = nullptr;
1434     return;
1435   }
1436 
1437 #ifndef NDEBUG
1438   size_t NumAbstractScopes = LScopes.getAbstractScopesList().size();
1439 #endif
1440   // Construct abstract scopes.
1441   for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
1442     auto *SP = cast<DISubprogram>(AScope->getScopeNode());
1443     for (const DINode *DN : SP->getRetainedNodes()) {
1444       if (auto *DV = dyn_cast<DILocalVariable>(DN)) {
1445         // Collect info for variables that were optimized out.
1446         if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second)
1447           continue;
1448         ensureAbstractVariableIsCreated(TheCU, InlinedVariable(DV, nullptr),
1449                                         DV->getScope());
1450         assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
1451                && "ensureAbstractVariableIsCreated inserted abstract scopes");
1452       }
1453     }
1454     constructAbstractSubprogramScopeDIE(TheCU, AScope);
1455   }
1456 
1457   ProcessedSPNodes.insert(SP);
1458   TheCU.constructSubprogramScopeDIE(SP, FnScope);
1459   if (auto *SkelCU = TheCU.getSkeleton())
1460     if (!LScopes.getAbstractScopesList().empty() &&
1461         TheCU.getCUNode()->getSplitDebugInlining())
1462       SkelCU->constructSubprogramScopeDIE(SP, FnScope);
1463 
1464   // Clear debug info
1465   // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the
1466   // DbgVariables except those that are also in AbstractVariables (since they
1467   // can be used cross-function)
1468   InfoHolder.getScopeVariables().clear();
1469   PrevLabel = nullptr;
1470   CurFn = nullptr;
1471 }
1472 
1473 // Register a source line with debug info. Returns the  unique label that was
1474 // emitted and which provides correspondence to the source line list.
1475 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1476                                   unsigned Flags) {
1477   StringRef Fn;
1478   unsigned FileNo = 1;
1479   unsigned Discriminator = 0;
1480   if (auto *Scope = cast_or_null<DIScope>(S)) {
1481     Fn = Scope->getFilename();
1482     if (Line != 0 && getDwarfVersion() >= 4)
1483       if (auto *LBF = dyn_cast<DILexicalBlockFile>(Scope))
1484         Discriminator = LBF->getDiscriminator();
1485 
1486     unsigned CUID = Asm->OutStreamer->getContext().getDwarfCompileUnitID();
1487     FileNo = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID])
1488               .getOrCreateSourceID(Scope->getFile());
1489   }
1490   Asm->OutStreamer->EmitDwarfLocDirective(FileNo, Line, Col, Flags, 0,
1491                                           Discriminator, Fn);
1492 }
1493 
1494 //===----------------------------------------------------------------------===//
1495 // Emit Methods
1496 //===----------------------------------------------------------------------===//
1497 
1498 // Emit the debug info section.
1499 void DwarfDebug::emitDebugInfo() {
1500   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1501   Holder.emitUnits(/* UseOffsets */ false);
1502 }
1503 
1504 // Emit the abbreviation section.
1505 void DwarfDebug::emitAbbreviations() {
1506   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1507 
1508   Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1509 }
1510 
1511 void DwarfDebug::emitStringOffsetsTableHeader() {
1512   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1513   Holder.getStringPool().emitStringOffsetsTableHeader(
1514       *Asm, Asm->getObjFileLowering().getDwarfStrOffSection(),
1515       Holder.getStringOffsetsStartSym());
1516 }
1517 
1518 template <typename AccelTableT>
1519 void DwarfDebug::emitAccel(AccelTableT &Accel, MCSection *Section,
1520                            StringRef TableName) {
1521   Asm->OutStreamer->SwitchSection(Section);
1522 
1523   // Emit the full data.
1524   emitAppleAccelTable(Asm, Accel, TableName, Section->getBeginSymbol());
1525 }
1526 
1527 void DwarfDebug::emitAccelDebugNames() {
1528   // Don't emit anything if we have no compilation units to index.
1529   if (getUnits().empty())
1530     return;
1531 
1532   Asm->OutStreamer->SwitchSection(
1533       Asm->getObjFileLowering().getDwarfDebugNamesSection());
1534   emitDWARF5AccelTable(Asm, AccelDebugNames, *this, getUnits());
1535 }
1536 
1537 // Emit visible names into a hashed accelerator table section.
1538 void DwarfDebug::emitAccelNames() {
1539   emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(),
1540             "Names");
1541 }
1542 
1543 // Emit objective C classes and categories into a hashed accelerator table
1544 // section.
1545 void DwarfDebug::emitAccelObjC() {
1546   emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(),
1547             "ObjC");
1548 }
1549 
1550 // Emit namespace dies into a hashed accelerator table.
1551 void DwarfDebug::emitAccelNamespaces() {
1552   emitAccel(AccelNamespace,
1553             Asm->getObjFileLowering().getDwarfAccelNamespaceSection(),
1554             "namespac");
1555 }
1556 
1557 // Emit type dies into a hashed accelerator table.
1558 void DwarfDebug::emitAccelTypes() {
1559   emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(),
1560             "types");
1561 }
1562 
1563 // Public name handling.
1564 // The format for the various pubnames:
1565 //
1566 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
1567 // for the DIE that is named.
1568 //
1569 // gnu pubnames - offset/index value/name tuples where the offset is the offset
1570 // into the CU and the index value is computed according to the type of value
1571 // for the DIE that is named.
1572 //
1573 // For type units the offset is the offset of the skeleton DIE. For split dwarf
1574 // it's the offset within the debug_info/debug_types dwo section, however, the
1575 // reference in the pubname header doesn't change.
1576 
1577 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
1578 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU,
1579                                                         const DIE *Die) {
1580   // Entities that ended up only in a Type Unit reference the CU instead (since
1581   // the pub entry has offsets within the CU there's no real offset that can be
1582   // provided anyway). As it happens all such entities (namespaces and types,
1583   // types only in C++ at that) are rendered as TYPE+EXTERNAL. If this turns out
1584   // not to be true it would be necessary to persist this information from the
1585   // point at which the entry is added to the index data structure - since by
1586   // the time the index is built from that, the original type/namespace DIE in a
1587   // type unit has already been destroyed so it can't be queried for properties
1588   // like tag, etc.
1589   if (Die->getTag() == dwarf::DW_TAG_compile_unit)
1590     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE,
1591                                           dwarf::GIEL_EXTERNAL);
1592   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
1593 
1594   // We could have a specification DIE that has our most of our knowledge,
1595   // look for that now.
1596   if (DIEValue SpecVal = Die->findAttribute(dwarf::DW_AT_specification)) {
1597     DIE &SpecDIE = SpecVal.getDIEEntry().getEntry();
1598     if (SpecDIE.findAttribute(dwarf::DW_AT_external))
1599       Linkage = dwarf::GIEL_EXTERNAL;
1600   } else if (Die->findAttribute(dwarf::DW_AT_external))
1601     Linkage = dwarf::GIEL_EXTERNAL;
1602 
1603   switch (Die->getTag()) {
1604   case dwarf::DW_TAG_class_type:
1605   case dwarf::DW_TAG_structure_type:
1606   case dwarf::DW_TAG_union_type:
1607   case dwarf::DW_TAG_enumeration_type:
1608     return dwarf::PubIndexEntryDescriptor(
1609         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
1610                               ? dwarf::GIEL_STATIC
1611                               : dwarf::GIEL_EXTERNAL);
1612   case dwarf::DW_TAG_typedef:
1613   case dwarf::DW_TAG_base_type:
1614   case dwarf::DW_TAG_subrange_type:
1615     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
1616   case dwarf::DW_TAG_namespace:
1617     return dwarf::GIEK_TYPE;
1618   case dwarf::DW_TAG_subprogram:
1619     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
1620   case dwarf::DW_TAG_variable:
1621     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
1622   case dwarf::DW_TAG_enumerator:
1623     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
1624                                           dwarf::GIEL_STATIC);
1625   default:
1626     return dwarf::GIEK_NONE;
1627   }
1628 }
1629 
1630 /// emitDebugPubSections - Emit visible names and types into debug pubnames and
1631 /// pubtypes sections.
1632 void DwarfDebug::emitDebugPubSections() {
1633   for (const auto &NU : CUMap) {
1634     DwarfCompileUnit *TheU = NU.second;
1635     if (!TheU->hasDwarfPubSections())
1636       continue;
1637 
1638     bool GnuStyle = TheU->getCUNode()->getGnuPubnames();
1639 
1640     Asm->OutStreamer->SwitchSection(
1641         GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
1642                  : Asm->getObjFileLowering().getDwarfPubNamesSection());
1643     emitDebugPubSection(GnuStyle, "Names", TheU, TheU->getGlobalNames());
1644 
1645     Asm->OutStreamer->SwitchSection(
1646         GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
1647                  : Asm->getObjFileLowering().getDwarfPubTypesSection());
1648     emitDebugPubSection(GnuStyle, "Types", TheU, TheU->getGlobalTypes());
1649   }
1650 }
1651 
1652 void DwarfDebug::emitSectionReference(const DwarfCompileUnit &CU) {
1653   if (useSectionsAsReferences())
1654     Asm->EmitDwarfOffset(CU.getSection()->getBeginSymbol(),
1655                          CU.getDebugSectionOffset());
1656   else
1657     Asm->emitDwarfSymbolReference(CU.getLabelBegin());
1658 }
1659 
1660 void DwarfDebug::emitDebugPubSection(bool GnuStyle, StringRef Name,
1661                                      DwarfCompileUnit *TheU,
1662                                      const StringMap<const DIE *> &Globals) {
1663   if (auto *Skeleton = TheU->getSkeleton())
1664     TheU = Skeleton;
1665 
1666   // Emit the header.
1667   Asm->OutStreamer->AddComment("Length of Public " + Name + " Info");
1668   MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin");
1669   MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end");
1670   Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);
1671 
1672   Asm->OutStreamer->EmitLabel(BeginLabel);
1673 
1674   Asm->OutStreamer->AddComment("DWARF Version");
1675   Asm->emitInt16(dwarf::DW_PUBNAMES_VERSION);
1676 
1677   Asm->OutStreamer->AddComment("Offset of Compilation Unit Info");
1678   emitSectionReference(*TheU);
1679 
1680   Asm->OutStreamer->AddComment("Compilation Unit Length");
1681   Asm->emitInt32(TheU->getLength());
1682 
1683   // Emit the pubnames for this compilation unit.
1684   for (const auto &GI : Globals) {
1685     const char *Name = GI.getKeyData();
1686     const DIE *Entity = GI.second;
1687 
1688     Asm->OutStreamer->AddComment("DIE offset");
1689     Asm->emitInt32(Entity->getOffset());
1690 
1691     if (GnuStyle) {
1692       dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity);
1693       Asm->OutStreamer->AddComment(
1694           Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
1695           dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
1696       Asm->emitInt8(Desc.toBits());
1697     }
1698 
1699     Asm->OutStreamer->AddComment("External Name");
1700     Asm->OutStreamer->EmitBytes(StringRef(Name, GI.getKeyLength() + 1));
1701   }
1702 
1703   Asm->OutStreamer->AddComment("End Mark");
1704   Asm->emitInt32(0);
1705   Asm->OutStreamer->EmitLabel(EndLabel);
1706 }
1707 
1708 /// Emit null-terminated strings into a debug str section.
1709 void DwarfDebug::emitDebugStr() {
1710   MCSection *StringOffsetsSection = nullptr;
1711   if (useSegmentedStringOffsetsTable()) {
1712     emitStringOffsetsTableHeader();
1713     StringOffsetsSection = Asm->getObjFileLowering().getDwarfStrOffSection();
1714   }
1715   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1716   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection(),
1717                      StringOffsetsSection, /* UseRelativeOffsets = */ true);
1718 }
1719 
1720 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer,
1721                                    const DebugLocStream::Entry &Entry) {
1722   auto &&Comments = DebugLocs.getComments(Entry);
1723   auto Comment = Comments.begin();
1724   auto End = Comments.end();
1725   for (uint8_t Byte : DebugLocs.getBytes(Entry))
1726     Streamer.EmitInt8(Byte, Comment != End ? *(Comment++) : "");
1727 }
1728 
1729 static void emitDebugLocValue(const AsmPrinter &AP, const DIBasicType *BT,
1730                               const DebugLocEntry::Value &Value,
1731                               DwarfExpression &DwarfExpr) {
1732   auto *DIExpr = Value.getExpression();
1733   DIExpressionCursor ExprCursor(DIExpr);
1734   DwarfExpr.addFragmentOffset(DIExpr);
1735   // Regular entry.
1736   if (Value.isInt()) {
1737     if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed ||
1738                BT->getEncoding() == dwarf::DW_ATE_signed_char))
1739       DwarfExpr.addSignedConstant(Value.getInt());
1740     else
1741       DwarfExpr.addUnsignedConstant(Value.getInt());
1742   } else if (Value.isLocation()) {
1743     MachineLocation Location = Value.getLoc();
1744     if (Location.isIndirect())
1745       DwarfExpr.setMemoryLocationKind();
1746     DIExpressionCursor Cursor(DIExpr);
1747     const TargetRegisterInfo &TRI = *AP.MF->getSubtarget().getRegisterInfo();
1748     if (!DwarfExpr.addMachineRegExpression(TRI, Cursor, Location.getReg()))
1749       return;
1750     return DwarfExpr.addExpression(std::move(Cursor));
1751   } else if (Value.isConstantFP()) {
1752     APInt RawBytes = Value.getConstantFP()->getValueAPF().bitcastToAPInt();
1753     DwarfExpr.addUnsignedConstant(RawBytes);
1754   }
1755   DwarfExpr.addExpression(std::move(ExprCursor));
1756 }
1757 
1758 void DebugLocEntry::finalize(const AsmPrinter &AP,
1759                              DebugLocStream::ListBuilder &List,
1760                              const DIBasicType *BT) {
1761   DebugLocStream::EntryBuilder Entry(List, Begin, End);
1762   BufferByteStreamer Streamer = Entry.getStreamer();
1763   DebugLocDwarfExpression DwarfExpr(AP.getDwarfVersion(), Streamer);
1764   const DebugLocEntry::Value &Value = Values[0];
1765   if (Value.isFragment()) {
1766     // Emit all fragments that belong to the same variable and range.
1767     assert(llvm::all_of(Values, [](DebugLocEntry::Value P) {
1768           return P.isFragment();
1769         }) && "all values are expected to be fragments");
1770     assert(std::is_sorted(Values.begin(), Values.end()) &&
1771            "fragments are expected to be sorted");
1772 
1773     for (auto Fragment : Values)
1774       emitDebugLocValue(AP, BT, Fragment, DwarfExpr);
1775 
1776   } else {
1777     assert(Values.size() == 1 && "only fragments may have >1 value");
1778     emitDebugLocValue(AP, BT, Value, DwarfExpr);
1779   }
1780   DwarfExpr.finalize();
1781 }
1782 
1783 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) {
1784   // Emit the size.
1785   Asm->OutStreamer->AddComment("Loc expr size");
1786   Asm->emitInt16(DebugLocs.getBytes(Entry).size());
1787 
1788   // Emit the entry.
1789   APByteStreamer Streamer(*Asm);
1790   emitDebugLocEntry(Streamer, Entry);
1791 }
1792 
1793 // Emit locations into the debug loc section.
1794 void DwarfDebug::emitDebugLoc() {
1795   if (DebugLocs.getLists().empty())
1796     return;
1797 
1798   // Start the dwarf loc section.
1799   Asm->OutStreamer->SwitchSection(
1800       Asm->getObjFileLowering().getDwarfLocSection());
1801   unsigned char Size = Asm->MAI->getCodePointerSize();
1802   for (const auto &List : DebugLocs.getLists()) {
1803     Asm->OutStreamer->EmitLabel(List.Label);
1804     const DwarfCompileUnit *CU = List.CU;
1805     for (const auto &Entry : DebugLocs.getEntries(List)) {
1806       // Set up the range. This range is relative to the entry point of the
1807       // compile unit. This is a hard coded 0 for low_pc when we're emitting
1808       // ranges, or the DW_AT_low_pc on the compile unit otherwise.
1809       if (auto *Base = CU->getBaseAddress()) {
1810         Asm->EmitLabelDifference(Entry.BeginSym, Base, Size);
1811         Asm->EmitLabelDifference(Entry.EndSym, Base, Size);
1812       } else {
1813         Asm->OutStreamer->EmitSymbolValue(Entry.BeginSym, Size);
1814         Asm->OutStreamer->EmitSymbolValue(Entry.EndSym, Size);
1815       }
1816 
1817       emitDebugLocEntryLocation(Entry);
1818     }
1819     Asm->OutStreamer->EmitIntValue(0, Size);
1820     Asm->OutStreamer->EmitIntValue(0, Size);
1821   }
1822 }
1823 
1824 void DwarfDebug::emitDebugLocDWO() {
1825   Asm->OutStreamer->SwitchSection(
1826       Asm->getObjFileLowering().getDwarfLocDWOSection());
1827   for (const auto &List : DebugLocs.getLists()) {
1828     Asm->OutStreamer->EmitLabel(List.Label);
1829     for (const auto &Entry : DebugLocs.getEntries(List)) {
1830       // Just always use start_length for now - at least that's one address
1831       // rather than two. We could get fancier and try to, say, reuse an
1832       // address we know we've emitted elsewhere (the start of the function?
1833       // The start of the CU or CU subrange that encloses this range?)
1834       Asm->emitInt8(dwarf::DW_LLE_startx_length);
1835       unsigned idx = AddrPool.getIndex(Entry.BeginSym);
1836       Asm->EmitULEB128(idx);
1837       Asm->EmitLabelDifference(Entry.EndSym, Entry.BeginSym, 4);
1838 
1839       emitDebugLocEntryLocation(Entry);
1840     }
1841     Asm->emitInt8(dwarf::DW_LLE_end_of_list);
1842   }
1843 }
1844 
1845 struct ArangeSpan {
1846   const MCSymbol *Start, *End;
1847 };
1848 
1849 // Emit a debug aranges section, containing a CU lookup for any
1850 // address we can tie back to a CU.
1851 void DwarfDebug::emitDebugARanges() {
1852   // Provides a unique id per text section.
1853   MapVector<MCSection *, SmallVector<SymbolCU, 8>> SectionMap;
1854 
1855   // Filter labels by section.
1856   for (const SymbolCU &SCU : ArangeLabels) {
1857     if (SCU.Sym->isInSection()) {
1858       // Make a note of this symbol and it's section.
1859       MCSection *Section = &SCU.Sym->getSection();
1860       if (!Section->getKind().isMetadata())
1861         SectionMap[Section].push_back(SCU);
1862     } else {
1863       // Some symbols (e.g. common/bss on mach-o) can have no section but still
1864       // appear in the output. This sucks as we rely on sections to build
1865       // arange spans. We can do it without, but it's icky.
1866       SectionMap[nullptr].push_back(SCU);
1867     }
1868   }
1869 
1870   DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans;
1871 
1872   for (auto &I : SectionMap) {
1873     MCSection *Section = I.first;
1874     SmallVector<SymbolCU, 8> &List = I.second;
1875     if (List.size() < 1)
1876       continue;
1877 
1878     // If we have no section (e.g. common), just write out
1879     // individual spans for each symbol.
1880     if (!Section) {
1881       for (const SymbolCU &Cur : List) {
1882         ArangeSpan Span;
1883         Span.Start = Cur.Sym;
1884         Span.End = nullptr;
1885         assert(Cur.CU);
1886         Spans[Cur.CU].push_back(Span);
1887       }
1888       continue;
1889     }
1890 
1891     // Sort the symbols by offset within the section.
1892     std::stable_sort(
1893         List.begin(), List.end(), [&](const SymbolCU &A, const SymbolCU &B) {
1894           unsigned IA = A.Sym ? Asm->OutStreamer->GetSymbolOrder(A.Sym) : 0;
1895           unsigned IB = B.Sym ? Asm->OutStreamer->GetSymbolOrder(B.Sym) : 0;
1896 
1897           // Symbols with no order assigned should be placed at the end.
1898           // (e.g. section end labels)
1899           if (IA == 0)
1900             return false;
1901           if (IB == 0)
1902             return true;
1903           return IA < IB;
1904         });
1905 
1906     // Insert a final terminator.
1907     List.push_back(SymbolCU(nullptr, Asm->OutStreamer->endSection(Section)));
1908 
1909     // Build spans between each label.
1910     const MCSymbol *StartSym = List[0].Sym;
1911     for (size_t n = 1, e = List.size(); n < e; n++) {
1912       const SymbolCU &Prev = List[n - 1];
1913       const SymbolCU &Cur = List[n];
1914 
1915       // Try and build the longest span we can within the same CU.
1916       if (Cur.CU != Prev.CU) {
1917         ArangeSpan Span;
1918         Span.Start = StartSym;
1919         Span.End = Cur.Sym;
1920         assert(Prev.CU);
1921         Spans[Prev.CU].push_back(Span);
1922         StartSym = Cur.Sym;
1923       }
1924     }
1925   }
1926 
1927   // Start the dwarf aranges section.
1928   Asm->OutStreamer->SwitchSection(
1929       Asm->getObjFileLowering().getDwarfARangesSection());
1930 
1931   unsigned PtrSize = Asm->MAI->getCodePointerSize();
1932 
1933   // Build a list of CUs used.
1934   std::vector<DwarfCompileUnit *> CUs;
1935   for (const auto &it : Spans) {
1936     DwarfCompileUnit *CU = it.first;
1937     CUs.push_back(CU);
1938   }
1939 
1940   // Sort the CU list (again, to ensure consistent output order).
1941   llvm::sort(CUs.begin(), CUs.end(),
1942              [](const DwarfCompileUnit *A, const DwarfCompileUnit *B) {
1943                return A->getUniqueID() < B->getUniqueID();
1944              });
1945 
1946   // Emit an arange table for each CU we used.
1947   for (DwarfCompileUnit *CU : CUs) {
1948     std::vector<ArangeSpan> &List = Spans[CU];
1949 
1950     // Describe the skeleton CU's offset and length, not the dwo file's.
1951     if (auto *Skel = CU->getSkeleton())
1952       CU = Skel;
1953 
1954     // Emit size of content not including length itself.
1955     unsigned ContentSize =
1956         sizeof(int16_t) + // DWARF ARange version number
1957         sizeof(int32_t) + // Offset of CU in the .debug_info section
1958         sizeof(int8_t) +  // Pointer Size (in bytes)
1959         sizeof(int8_t);   // Segment Size (in bytes)
1960 
1961     unsigned TupleSize = PtrSize * 2;
1962 
1963     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
1964     unsigned Padding =
1965         OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize);
1966 
1967     ContentSize += Padding;
1968     ContentSize += (List.size() + 1) * TupleSize;
1969 
1970     // For each compile unit, write the list of spans it covers.
1971     Asm->OutStreamer->AddComment("Length of ARange Set");
1972     Asm->emitInt32(ContentSize);
1973     Asm->OutStreamer->AddComment("DWARF Arange version number");
1974     Asm->emitInt16(dwarf::DW_ARANGES_VERSION);
1975     Asm->OutStreamer->AddComment("Offset Into Debug Info Section");
1976     emitSectionReference(*CU);
1977     Asm->OutStreamer->AddComment("Address Size (in bytes)");
1978     Asm->emitInt8(PtrSize);
1979     Asm->OutStreamer->AddComment("Segment Size (in bytes)");
1980     Asm->emitInt8(0);
1981 
1982     Asm->OutStreamer->emitFill(Padding, 0xff);
1983 
1984     for (const ArangeSpan &Span : List) {
1985       Asm->EmitLabelReference(Span.Start, PtrSize);
1986 
1987       // Calculate the size as being from the span start to it's end.
1988       if (Span.End) {
1989         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
1990       } else {
1991         // For symbols without an end marker (e.g. common), we
1992         // write a single arange entry containing just that one symbol.
1993         uint64_t Size = SymSize[Span.Start];
1994         if (Size == 0)
1995           Size = 1;
1996 
1997         Asm->OutStreamer->EmitIntValue(Size, PtrSize);
1998       }
1999     }
2000 
2001     Asm->OutStreamer->AddComment("ARange terminator");
2002     Asm->OutStreamer->EmitIntValue(0, PtrSize);
2003     Asm->OutStreamer->EmitIntValue(0, PtrSize);
2004   }
2005 }
2006 
2007 /// Emit a single range list. We handle both DWARF v5 and earlier.
2008 static void emitRangeList(AsmPrinter *Asm, DwarfCompileUnit *CU,
2009                           const RangeSpanList &List) {
2010 
2011   auto DwarfVersion = CU->getDwarfVersion();
2012   // Emit our symbol so we can find the beginning of the range.
2013   Asm->OutStreamer->EmitLabel(List.getSym());
2014   // Gather all the ranges that apply to the same section so they can share
2015   // a base address entry.
2016   MapVector<const MCSection *, std::vector<const RangeSpan *>> SectionRanges;
2017   // Size for our labels.
2018   auto Size = Asm->MAI->getCodePointerSize();
2019 
2020   for (const RangeSpan &Range : List.getRanges())
2021     SectionRanges[&Range.getStart()->getSection()].push_back(&Range);
2022 
2023   auto *CUBase = CU->getBaseAddress();
2024   bool BaseIsSet = false;
2025   for (const auto &P : SectionRanges) {
2026     // Don't bother with a base address entry if there's only one range in
2027     // this section in this range list - for example ranges for a CU will
2028     // usually consist of single regions from each of many sections
2029     // (-ffunction-sections, or just C++ inline functions) except under LTO
2030     // or optnone where there may be holes in a single CU's section
2031     // contributions.
2032     auto *Base = CUBase;
2033     if (!Base && P.second.size() > 1 &&
2034         (UseDwarfRangesBaseAddressSpecifier || DwarfVersion >= 5)) {
2035       BaseIsSet = true;
2036       // FIXME/use care: This may not be a useful base address if it's not
2037       // the lowest address/range in this object.
2038       Base = P.second.front()->getStart();
2039       if (DwarfVersion >= 5) {
2040         Asm->OutStreamer->AddComment("DW_RLE_base_address");
2041         Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_base_address, 1);
2042       } else
2043         Asm->OutStreamer->EmitIntValue(-1, Size);
2044       Asm->OutStreamer->AddComment("  base address");
2045       Asm->OutStreamer->EmitSymbolValue(Base, Size);
2046     } else if (BaseIsSet && DwarfVersion < 5) {
2047       BaseIsSet = false;
2048       assert(!Base);
2049       Asm->OutStreamer->EmitIntValue(-1, Size);
2050       Asm->OutStreamer->EmitIntValue(0, Size);
2051     }
2052 
2053     for (const auto *RS : P.second) {
2054       const MCSymbol *Begin = RS->getStart();
2055       const MCSymbol *End = RS->getEnd();
2056       assert(Begin && "Range without a begin symbol?");
2057       assert(End && "Range without an end symbol?");
2058       if (Base) {
2059         if (DwarfVersion >= 5) {
2060           // Emit DW_RLE_offset_pair when we have a base.
2061           Asm->OutStreamer->AddComment("DW_RLE_offset_pair");
2062           Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_offset_pair, 1);
2063           Asm->OutStreamer->AddComment("  starting offset");
2064           Asm->EmitLabelDifferenceAsULEB128(Begin, Base);
2065           Asm->OutStreamer->AddComment("  ending offset");
2066           Asm->EmitLabelDifferenceAsULEB128(End, Base);
2067         } else {
2068           Asm->EmitLabelDifference(Begin, Base, Size);
2069           Asm->EmitLabelDifference(End, Base, Size);
2070         }
2071       } else if (DwarfVersion >= 5) {
2072         Asm->OutStreamer->AddComment("DW_RLE_start_length");
2073         Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_start_length, 1);
2074         Asm->OutStreamer->AddComment("  start");
2075         Asm->OutStreamer->EmitSymbolValue(Begin, Size);
2076         Asm->OutStreamer->AddComment("  length");
2077         Asm->EmitLabelDifferenceAsULEB128(End, Begin);
2078       } else {
2079         Asm->OutStreamer->EmitSymbolValue(Begin, Size);
2080         Asm->OutStreamer->EmitSymbolValue(End, Size);
2081       }
2082     }
2083   }
2084   if (DwarfVersion >= 5) {
2085     Asm->OutStreamer->AddComment("DW_RLE_end_of_list");
2086     Asm->OutStreamer->EmitIntValue(dwarf::DW_RLE_end_of_list, 1);
2087   } else {
2088     // Terminate the list with two 0 values.
2089     Asm->OutStreamer->EmitIntValue(0, Size);
2090     Asm->OutStreamer->EmitIntValue(0, Size);
2091   }
2092 }
2093 
2094 // Emit the header of a DWARF 5 range list table. Returns the symbol that
2095 // designates the end of the table for the caller to emit when the table is
2096 // complete.
2097 static MCSymbol *emitRnglistsTableHeader(AsmPrinter *Asm, DwarfFile &Holder) {
2098   // The length is described by a starting label right after the length field
2099   // and an end label.
2100   MCSymbol *TableStart = Asm->createTempSymbol("debug_rnglist_table_start");
2101   MCSymbol *TableEnd = Asm->createTempSymbol("debug_rnglist_table_end");
2102   // Build the range table header, which starts with the length field.
2103   Asm->EmitLabelDifference(TableEnd, TableStart, 4);
2104   Asm->OutStreamer->EmitLabel(TableStart);
2105   // Version number (DWARF v5 and later).
2106   Asm->emitInt16(Asm->OutStreamer->getContext().getDwarfVersion());
2107   // Address size.
2108   Asm->emitInt8(Asm->MAI->getCodePointerSize());
2109   // Segment selector size.
2110   Asm->emitInt8(0);
2111 
2112   MCSymbol *RnglistTableBaseSym = Holder.getRnglistsTableBaseSym();
2113 
2114   // FIXME: Generate the offsets table and use DW_FORM_rnglistx with the
2115   // DW_AT_ranges attribute. Until then set the number of offsets to 0.
2116   Asm->emitInt32(0);
2117   Asm->OutStreamer->EmitLabel(RnglistTableBaseSym);
2118   return TableEnd;
2119 }
2120 
2121 /// Emit address ranges into the .debug_ranges section or into the DWARF v5
2122 /// .debug_rnglists section.
2123 void DwarfDebug::emitDebugRanges() {
2124   if (CUMap.empty())
2125     return;
2126 
2127   auto NoRangesPresent = [this]() {
2128     return llvm::all_of(
2129         CUMap, [](const decltype(CUMap)::const_iterator::value_type &Pair) {
2130           return Pair.second->getRangeLists().empty();
2131         });
2132   };
2133 
2134   if (!useRangesSection()) {
2135     assert(NoRangesPresent() && "No debug ranges expected.");
2136     return;
2137   }
2138 
2139   if (NoRangesPresent())
2140     return;
2141 
2142   // Start the dwarf ranges section.
2143   MCSymbol *TableEnd = nullptr;
2144   if (getDwarfVersion() >= 5) {
2145     Asm->OutStreamer->SwitchSection(
2146         Asm->getObjFileLowering().getDwarfRnglistsSection());
2147     TableEnd = emitRnglistsTableHeader(Asm, useSplitDwarf() ? SkeletonHolder
2148                                                             : InfoHolder);
2149   } else
2150     Asm->OutStreamer->SwitchSection(
2151         Asm->getObjFileLowering().getDwarfRangesSection());
2152 
2153   // Grab the specific ranges for the compile units in the module.
2154   for (const auto &I : CUMap) {
2155     DwarfCompileUnit *TheCU = I.second;
2156 
2157     if (auto *Skel = TheCU->getSkeleton())
2158       TheCU = Skel;
2159 
2160     // Iterate over the misc ranges for the compile units in the module.
2161     for (const RangeSpanList &List : TheCU->getRangeLists())
2162       emitRangeList(Asm, TheCU, List);
2163   }
2164 
2165   if (TableEnd)
2166     Asm->OutStreamer->EmitLabel(TableEnd);
2167 }
2168 
2169 void DwarfDebug::handleMacroNodes(DIMacroNodeArray Nodes, DwarfCompileUnit &U) {
2170   for (auto *MN : Nodes) {
2171     if (auto *M = dyn_cast<DIMacro>(MN))
2172       emitMacro(*M);
2173     else if (auto *F = dyn_cast<DIMacroFile>(MN))
2174       emitMacroFile(*F, U);
2175     else
2176       llvm_unreachable("Unexpected DI type!");
2177   }
2178 }
2179 
2180 void DwarfDebug::emitMacro(DIMacro &M) {
2181   Asm->EmitULEB128(M.getMacinfoType());
2182   Asm->EmitULEB128(M.getLine());
2183   StringRef Name = M.getName();
2184   StringRef Value = M.getValue();
2185   Asm->OutStreamer->EmitBytes(Name);
2186   if (!Value.empty()) {
2187     // There should be one space between macro name and macro value.
2188     Asm->emitInt8(' ');
2189     Asm->OutStreamer->EmitBytes(Value);
2190   }
2191   Asm->emitInt8('\0');
2192 }
2193 
2194 void DwarfDebug::emitMacroFile(DIMacroFile &F, DwarfCompileUnit &U) {
2195   assert(F.getMacinfoType() == dwarf::DW_MACINFO_start_file);
2196   Asm->EmitULEB128(dwarf::DW_MACINFO_start_file);
2197   Asm->EmitULEB128(F.getLine());
2198   Asm->EmitULEB128(U.getOrCreateSourceID(F.getFile()));
2199   handleMacroNodes(F.getElements(), U);
2200   Asm->EmitULEB128(dwarf::DW_MACINFO_end_file);
2201 }
2202 
2203 /// Emit macros into a debug macinfo section.
2204 void DwarfDebug::emitDebugMacinfo() {
2205   if (CUMap.empty())
2206     return;
2207 
2208   // Start the dwarf macinfo section.
2209   Asm->OutStreamer->SwitchSection(
2210       Asm->getObjFileLowering().getDwarfMacinfoSection());
2211 
2212   for (const auto &P : CUMap) {
2213     auto &TheCU = *P.second;
2214     auto *SkCU = TheCU.getSkeleton();
2215     DwarfCompileUnit &U = SkCU ? *SkCU : TheCU;
2216     auto *CUNode = cast<DICompileUnit>(P.first);
2217     DIMacroNodeArray Macros = CUNode->getMacros();
2218     if (!Macros.empty()) {
2219       Asm->OutStreamer->EmitLabel(U.getMacroLabelBegin());
2220       handleMacroNodes(Macros, U);
2221     }
2222   }
2223   Asm->OutStreamer->AddComment("End Of Macro List Mark");
2224   Asm->emitInt8(0);
2225 }
2226 
2227 // DWARF5 Experimental Separate Dwarf emitters.
2228 
2229 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die,
2230                                   std::unique_ptr<DwarfCompileUnit> NewU) {
2231   NewU->addString(Die, dwarf::DW_AT_GNU_dwo_name,
2232                   Asm->TM.Options.MCOptions.SplitDwarfFile);
2233 
2234   if (!CompilationDir.empty())
2235     NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2236 
2237   addGnuPubAttributes(*NewU, Die);
2238 
2239   SkeletonHolder.addUnit(std::move(NewU));
2240 }
2241 
2242 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) {
2243 
2244   auto OwnedUnit = llvm::make_unique<DwarfCompileUnit>(
2245       CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder);
2246   DwarfCompileUnit &NewCU = *OwnedUnit;
2247   NewCU.setSection(Asm->getObjFileLowering().getDwarfInfoSection());
2248 
2249   NewCU.initStmtList();
2250 
2251   if (useSegmentedStringOffsetsTable())
2252     NewCU.addStringOffsetsStart();
2253 
2254   initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit));
2255 
2256   return NewCU;
2257 }
2258 
2259 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2260 // compile units that would normally be in debug_info.
2261 void DwarfDebug::emitDebugInfoDWO() {
2262   assert(useSplitDwarf() && "No split dwarf debug info?");
2263   // Don't emit relocations into the dwo file.
2264   InfoHolder.emitUnits(/* UseOffsets */ true);
2265 }
2266 
2267 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
2268 // abbreviations for the .debug_info.dwo section.
2269 void DwarfDebug::emitDebugAbbrevDWO() {
2270   assert(useSplitDwarf() && "No split dwarf?");
2271   InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
2272 }
2273 
2274 void DwarfDebug::emitDebugLineDWO() {
2275   assert(useSplitDwarf() && "No split dwarf?");
2276   SplitTypeUnitFileTable.Emit(
2277       *Asm->OutStreamer, MCDwarfLineTableParams(),
2278       Asm->getObjFileLowering().getDwarfLineDWOSection());
2279 }
2280 
2281 void DwarfDebug::emitStringOffsetsTableHeaderDWO() {
2282   assert(useSplitDwarf() && "No split dwarf?");
2283   InfoHolder.getStringPool().emitStringOffsetsTableHeader(
2284       *Asm, Asm->getObjFileLowering().getDwarfStrOffDWOSection(),
2285       InfoHolder.getStringOffsetsStartSym());
2286 }
2287 
2288 // Emit the .debug_str.dwo section for separated dwarf. This contains the
2289 // string section and is identical in format to traditional .debug_str
2290 // sections.
2291 void DwarfDebug::emitDebugStrDWO() {
2292   if (useSegmentedStringOffsetsTable())
2293     emitStringOffsetsTableHeaderDWO();
2294   assert(useSplitDwarf() && "No split dwarf?");
2295   MCSection *OffSec = Asm->getObjFileLowering().getDwarfStrOffDWOSection();
2296   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
2297                          OffSec, /* UseRelativeOffsets = */ false);
2298 }
2299 
2300 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) {
2301   if (!useSplitDwarf())
2302     return nullptr;
2303   const DICompileUnit *DIUnit = CU.getCUNode();
2304   SplitTypeUnitFileTable.maybeSetRootFile(
2305       DIUnit->getDirectory(), DIUnit->getFilename(),
2306       CU.getMD5AsBytes(DIUnit->getFile()), DIUnit->getSource());
2307   return &SplitTypeUnitFileTable;
2308 }
2309 
2310 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier) {
2311   MD5 Hash;
2312   Hash.update(Identifier);
2313   // ... take the least significant 8 bytes and return those. Our MD5
2314   // implementation always returns its results in little endian, so we actually
2315   // need the "high" word.
2316   MD5::MD5Result Result;
2317   Hash.final(Result);
2318   return Result.high();
2319 }
2320 
2321 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
2322                                       StringRef Identifier, DIE &RefDie,
2323                                       const DICompositeType *CTy) {
2324   // Fast path if we're building some type units and one has already used the
2325   // address pool we know we're going to throw away all this work anyway, so
2326   // don't bother building dependent types.
2327   if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed())
2328     return;
2329 
2330   auto Ins = TypeSignatures.insert(std::make_pair(CTy, 0));
2331   if (!Ins.second) {
2332     CU.addDIETypeSignature(RefDie, Ins.first->second);
2333     return;
2334   }
2335 
2336   bool TopLevelType = TypeUnitsUnderConstruction.empty();
2337   AddrPool.resetUsedFlag();
2338 
2339   auto OwnedUnit = llvm::make_unique<DwarfTypeUnit>(CU, Asm, this, &InfoHolder,
2340                                                     getDwoLineTable(CU));
2341   DwarfTypeUnit &NewTU = *OwnedUnit;
2342   DIE &UnitDie = NewTU.getUnitDie();
2343   TypeUnitsUnderConstruction.emplace_back(std::move(OwnedUnit), CTy);
2344 
2345   NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
2346                 CU.getLanguage());
2347 
2348   uint64_t Signature = makeTypeSignature(Identifier);
2349   NewTU.setTypeSignature(Signature);
2350   Ins.first->second = Signature;
2351 
2352   if (useSplitDwarf())
2353     NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesDWOSection());
2354   else {
2355     NewTU.setSection(Asm->getObjFileLowering().getDwarfTypesSection(Signature));
2356     // Non-split type units reuse the compile unit's line table.
2357     CU.applyStmtList(UnitDie);
2358   }
2359 
2360   // Add DW_AT_str_offsets_base to the type unit DIE, but not for split type
2361   // units.
2362   if (useSegmentedStringOffsetsTable() && !useSplitDwarf())
2363     NewTU.addStringOffsetsStart();
2364 
2365   NewTU.setType(NewTU.createTypeDIE(CTy));
2366 
2367   if (TopLevelType) {
2368     auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction);
2369     TypeUnitsUnderConstruction.clear();
2370 
2371     // Types referencing entries in the address table cannot be placed in type
2372     // units.
2373     if (AddrPool.hasBeenUsed()) {
2374 
2375       // Remove all the types built while building this type.
2376       // This is pessimistic as some of these types might not be dependent on
2377       // the type that used an address.
2378       for (const auto &TU : TypeUnitsToAdd)
2379         TypeSignatures.erase(TU.second);
2380 
2381       // Construct this type in the CU directly.
2382       // This is inefficient because all the dependent types will be rebuilt
2383       // from scratch, including building them in type units, discovering that
2384       // they depend on addresses, throwing them out and rebuilding them.
2385       CU.constructTypeDIE(RefDie, cast<DICompositeType>(CTy));
2386       return;
2387     }
2388 
2389     // If the type wasn't dependent on fission addresses, finish adding the type
2390     // and all its dependent types.
2391     for (auto &TU : TypeUnitsToAdd) {
2392       InfoHolder.computeSizeAndOffsetsForUnit(TU.first.get());
2393       InfoHolder.emitUnit(TU.first.get(), useSplitDwarf());
2394     }
2395   }
2396   CU.addDIETypeSignature(RefDie, Signature);
2397 }
2398 
2399 // Add the Name along with its companion DIE to the appropriate accelerator
2400 // table (for AccelTableKind::Dwarf it's always AccelDebugNames, for
2401 // AccelTableKind::Apple, we use the table we got as an argument). If
2402 // accelerator tables are disabled, this function does nothing.
2403 template <typename DataT>
2404 void DwarfDebug::addAccelNameImpl(AccelTable<DataT> &AppleAccel, StringRef Name,
2405                                   const DIE &Die) {
2406   if (getAccelTableKind() == AccelTableKind::None)
2407     return;
2408 
2409   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2410   DwarfStringPoolEntryRef Ref =
2411       Holder.getStringPool().getEntry(*Asm, Name);
2412 
2413   switch (getAccelTableKind()) {
2414   case AccelTableKind::Apple:
2415     AppleAccel.addName(Ref, Die);
2416     break;
2417   case AccelTableKind::Dwarf:
2418     AccelDebugNames.addName(Ref, Die);
2419     break;
2420   case AccelTableKind::Default:
2421     llvm_unreachable("Default should have already been resolved.");
2422   case AccelTableKind::None:
2423     llvm_unreachable("None handled above");
2424   }
2425 }
2426 
2427 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) {
2428   addAccelNameImpl(AccelNames, Name, Die);
2429 }
2430 
2431 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) {
2432   // ObjC names go only into the Apple accelerator tables.
2433   if (getAccelTableKind() == AccelTableKind::Apple)
2434     addAccelNameImpl(AccelObjC, Name, Die);
2435 }
2436 
2437 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) {
2438   addAccelNameImpl(AccelNamespace, Name, Die);
2439 }
2440 
2441 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) {
2442   addAccelNameImpl(AccelTypes, Name, Die);
2443 }
2444 
2445 uint16_t DwarfDebug::getDwarfVersion() const {
2446   return Asm->OutStreamer->getContext().getDwarfVersion();
2447 }
2448