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