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 "DwarfCompileUnit.h"
19 #include "DwarfExpression.h"
20 #include "DwarfUnit.h"
21 #include "llvm/ADT/STLExtras.h"
22 #include "llvm/ADT/Statistic.h"
23 #include "llvm/ADT/StringExtras.h"
24 #include "llvm/ADT/Triple.h"
25 #include "llvm/CodeGen/DIE.h"
26 #include "llvm/CodeGen/MachineFunction.h"
27 #include "llvm/CodeGen/MachineModuleInfo.h"
28 #include "llvm/IR/Constants.h"
29 #include "llvm/IR/DIBuilder.h"
30 #include "llvm/IR/DataLayout.h"
31 #include "llvm/IR/DebugInfo.h"
32 #include "llvm/IR/Instructions.h"
33 #include "llvm/IR/Module.h"
34 #include "llvm/IR/ValueHandle.h"
35 #include "llvm/MC/MCAsmInfo.h"
36 #include "llvm/MC/MCDwarf.h"
37 #include "llvm/MC/MCSection.h"
38 #include "llvm/MC/MCStreamer.h"
39 #include "llvm/MC/MCSymbol.h"
40 #include "llvm/Support/CommandLine.h"
41 #include "llvm/Support/Debug.h"
42 #include "llvm/Support/Dwarf.h"
43 #include "llvm/Support/Endian.h"
44 #include "llvm/Support/ErrorHandling.h"
45 #include "llvm/Support/FormattedStream.h"
46 #include "llvm/Support/LEB128.h"
47 #include "llvm/Support/MD5.h"
48 #include "llvm/Support/Path.h"
49 #include "llvm/Support/Timer.h"
50 #include "llvm/Support/raw_ostream.h"
51 #include "llvm/Target/TargetFrameLowering.h"
52 #include "llvm/Target/TargetLoweringObjectFile.h"
53 #include "llvm/Target/TargetMachine.h"
54 #include "llvm/Target/TargetOptions.h"
55 #include "llvm/Target/TargetRegisterInfo.h"
56 #include "llvm/Target/TargetSubtargetInfo.h"
57 using namespace llvm;
58 
59 #define DEBUG_TYPE "dwarfdebug"
60 
61 static cl::opt<bool>
62 DisableDebugInfoPrinting("disable-debug-info-print", cl::Hidden,
63                          cl::desc("Disable debug info printing"));
64 
65 static cl::opt<bool> UnknownLocations(
66     "use-unknown-locations", cl::Hidden,
67     cl::desc("Make an absence of debug location information explicit."),
68     cl::init(false));
69 
70 static cl::opt<bool>
71 GenerateGnuPubSections("generate-gnu-dwarf-pub-sections", cl::Hidden,
72                        cl::desc("Generate GNU-style pubnames and pubtypes"),
73                        cl::init(false));
74 
75 static cl::opt<bool> GenerateARangeSection("generate-arange-section",
76                                            cl::Hidden,
77                                            cl::desc("Generate dwarf aranges"),
78                                            cl::init(false));
79 
80 static cl::opt<DebuggerKind>
81 DebuggerTuningOpt("debugger-tune",
82                   cl::desc("Tune debug info for a particular debugger"),
83                   cl::init(DebuggerKind::Default),
84                   cl::values(
85                       clEnumValN(DebuggerKind::GDB, "gdb", "gdb"),
86                       clEnumValN(DebuggerKind::LLDB, "lldb", "lldb"),
87                       clEnumValN(DebuggerKind::SCE, "sce",
88                                  "SCE targets (e.g. PS4)"),
89                       clEnumValEnd));
90 
91 namespace {
92 enum DefaultOnOff { Default, Enable, Disable };
93 }
94 
95 static cl::opt<DefaultOnOff>
96 DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
97                  cl::desc("Output prototype dwarf accelerator tables."),
98                  cl::values(clEnumVal(Default, "Default for platform"),
99                             clEnumVal(Enable, "Enabled"),
100                             clEnumVal(Disable, "Disabled"), clEnumValEnd),
101                  cl::init(Default));
102 
103 static cl::opt<DefaultOnOff>
104 SplitDwarf("split-dwarf", cl::Hidden,
105            cl::desc("Output DWARF5 split debug info."),
106            cl::values(clEnumVal(Default, "Default for platform"),
107                       clEnumVal(Enable, "Enabled"),
108                       clEnumVal(Disable, "Disabled"), clEnumValEnd),
109            cl::init(Default));
110 
111 static cl::opt<DefaultOnOff>
112 DwarfPubSections("generate-dwarf-pub-sections", cl::Hidden,
113                  cl::desc("Generate DWARF pubnames and pubtypes sections"),
114                  cl::values(clEnumVal(Default, "Default for platform"),
115                             clEnumVal(Enable, "Enabled"),
116                             clEnumVal(Disable, "Disabled"), clEnumValEnd),
117                  cl::init(Default));
118 
119 static cl::opt<DefaultOnOff>
120 DwarfLinkageNames("dwarf-linkage-names", cl::Hidden,
121                   cl::desc("Emit DWARF linkage-name attributes."),
122                   cl::values(clEnumVal(Default, "Default for platform"),
123                              clEnumVal(Enable, "Enabled"),
124                              clEnumVal(Disable, "Disabled"), clEnumValEnd),
125                   cl::init(Default));
126 
127 static const char *const DWARFGroupName = "DWARF Emission";
128 static const char *const DbgTimerName = "DWARF Debug Writer";
129 
130 void DebugLocDwarfExpression::EmitOp(uint8_t Op, const char *Comment) {
131   BS.EmitInt8(
132       Op, Comment ? Twine(Comment) + " " + dwarf::OperationEncodingString(Op)
133                   : dwarf::OperationEncodingString(Op));
134 }
135 
136 void DebugLocDwarfExpression::EmitSigned(int64_t Value) {
137   BS.EmitSLEB128(Value, Twine(Value));
138 }
139 
140 void DebugLocDwarfExpression::EmitUnsigned(uint64_t Value) {
141   BS.EmitULEB128(Value, Twine(Value));
142 }
143 
144 bool DebugLocDwarfExpression::isFrameRegister(unsigned MachineReg) {
145   // This information is not available while emitting .debug_loc entries.
146   return false;
147 }
148 
149 //===----------------------------------------------------------------------===//
150 
151 /// resolve - Look in the DwarfDebug map for the MDNode that
152 /// corresponds to the reference.
153 template <typename T> T *DbgVariable::resolve(TypedDINodeRef<T> Ref) const {
154   return DD->resolve(Ref);
155 }
156 
157 bool DbgVariable::isBlockByrefVariable() const {
158   assert(Var && "Invalid complex DbgVariable!");
159   return Var->getType()
160       .resolve(DD->getTypeIdentifierMap())
161       ->isBlockByrefStruct();
162 }
163 
164 const DIType *DbgVariable::getType() const {
165   DIType *Ty = Var->getType().resolve(DD->getTypeIdentifierMap());
166   // FIXME: isBlockByrefVariable should be reformulated in terms of complex
167   // addresses instead.
168   if (Ty->isBlockByrefStruct()) {
169     /* Byref variables, in Blocks, are declared by the programmer as
170        "SomeType VarName;", but the compiler creates a
171        __Block_byref_x_VarName struct, and gives the variable VarName
172        either the struct, or a pointer to the struct, as its type.  This
173        is necessary for various behind-the-scenes things the compiler
174        needs to do with by-reference variables in blocks.
175 
176        However, as far as the original *programmer* is concerned, the
177        variable should still have type 'SomeType', as originally declared.
178 
179        The following function dives into the __Block_byref_x_VarName
180        struct to find the original type of the variable.  This will be
181        passed back to the code generating the type for the Debug
182        Information Entry for the variable 'VarName'.  'VarName' will then
183        have the original type 'SomeType' in its debug information.
184 
185        The original type 'SomeType' will be the type of the field named
186        'VarName' inside the __Block_byref_x_VarName struct.
187 
188        NOTE: In order for this to not completely fail on the debugger
189        side, the Debug Information Entry for the variable VarName needs to
190        have a DW_AT_location that tells the debugger how to unwind through
191        the pointers and __Block_byref_x_VarName struct to find the actual
192        value of the variable.  The function addBlockByrefType does this.  */
193     DIType *subType = Ty;
194     uint16_t tag = Ty->getTag();
195 
196     if (tag == dwarf::DW_TAG_pointer_type)
197       subType = resolve(cast<DIDerivedType>(Ty)->getBaseType());
198 
199     auto Elements = cast<DICompositeType>(subType)->getElements();
200     for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
201       auto *DT = cast<DIDerivedType>(Elements[i]);
202       if (getName() == DT->getName())
203         return resolve(DT->getBaseType());
204     }
205   }
206   return Ty;
207 }
208 
209 static LLVM_CONSTEXPR DwarfAccelTable::Atom TypeAtoms[] = {
210     DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4),
211     DwarfAccelTable::Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2),
212     DwarfAccelTable::Atom(dwarf::DW_ATOM_type_flags, dwarf::DW_FORM_data1)};
213 
214 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
215     : Asm(A), MMI(Asm->MMI), DebugLocs(A->OutStreamer->isVerboseAsm()),
216       PrevLabel(nullptr), InfoHolder(A, "info_string", DIEValueAllocator),
217       SkeletonHolder(A, "skel_string", DIEValueAllocator),
218       IsDarwin(Triple(A->getTargetTriple()).isOSDarwin()),
219       AccelNames(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
220                                        dwarf::DW_FORM_data4)),
221       AccelObjC(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
222                                       dwarf::DW_FORM_data4)),
223       AccelNamespace(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
224                                            dwarf::DW_FORM_data4)),
225       AccelTypes(TypeAtoms), DebuggerTuning(DebuggerKind::Default) {
226 
227   CurFn = nullptr;
228   CurMI = nullptr;
229   Triple TT(Asm->getTargetTriple());
230 
231   // Make sure we know our "debugger tuning."  The command-line option takes
232   // precedence; fall back to triple-based defaults.
233   if (DebuggerTuningOpt != DebuggerKind::Default)
234     DebuggerTuning = DebuggerTuningOpt;
235   else if (IsDarwin || TT.isOSFreeBSD())
236     DebuggerTuning = DebuggerKind::LLDB;
237   else if (TT.isPS4CPU())
238     DebuggerTuning = DebuggerKind::SCE;
239   else
240     DebuggerTuning = DebuggerKind::GDB;
241 
242   // Turn on accelerator tables for LLDB by default.
243   if (DwarfAccelTables == Default)
244     HasDwarfAccelTables = tuneForLLDB();
245   else
246     HasDwarfAccelTables = DwarfAccelTables == Enable;
247 
248   // Handle split DWARF. Off by default for now.
249   if (SplitDwarf == Default)
250     HasSplitDwarf = false;
251   else
252     HasSplitDwarf = SplitDwarf == Enable;
253 
254   // Pubnames/pubtypes on by default for GDB.
255   if (DwarfPubSections == Default)
256     HasDwarfPubSections = tuneForGDB();
257   else
258     HasDwarfPubSections = DwarfPubSections == Enable;
259 
260   // SCE does not use linkage names.
261   if (DwarfLinkageNames == Default)
262     UseLinkageNames = !tuneForSCE();
263   else
264     UseLinkageNames = DwarfLinkageNames == Enable;
265 
266   unsigned DwarfVersionNumber = Asm->TM.Options.MCOptions.DwarfVersion;
267   DwarfVersion = DwarfVersionNumber ? DwarfVersionNumber
268                                     : MMI->getModule()->getDwarfVersion();
269   // Use dwarf 4 by default if nothing is requested.
270   DwarfVersion = DwarfVersion ? DwarfVersion : dwarf::DWARF_VERSION;
271 
272   // Work around a GDB bug. GDB doesn't support the standard opcode;
273   // SCE doesn't support GNU's; LLDB prefers the standard opcode, which
274   // is defined as of DWARF 3.
275   // See GDB bug 11616 - DW_OP_form_tls_address is unimplemented
276   // https://sourceware.org/bugzilla/show_bug.cgi?id=11616
277   UseGNUTLSOpcode = tuneForGDB() || DwarfVersion < 3;
278 
279   Asm->OutStreamer->getContext().setDwarfVersion(DwarfVersion);
280 
281   {
282     NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
283     beginModule();
284   }
285 }
286 
287 // Define out of line so we don't have to include DwarfUnit.h in DwarfDebug.h.
288 DwarfDebug::~DwarfDebug() { }
289 
290 static bool isObjCClass(StringRef Name) {
291   return Name.startswith("+") || Name.startswith("-");
292 }
293 
294 static bool hasObjCCategory(StringRef Name) {
295   if (!isObjCClass(Name))
296     return false;
297 
298   return Name.find(") ") != StringRef::npos;
299 }
300 
301 static void getObjCClassCategory(StringRef In, StringRef &Class,
302                                  StringRef &Category) {
303   if (!hasObjCCategory(In)) {
304     Class = In.slice(In.find('[') + 1, In.find(' '));
305     Category = "";
306     return;
307   }
308 
309   Class = In.slice(In.find('[') + 1, In.find('('));
310   Category = In.slice(In.find('[') + 1, In.find(' '));
311   return;
312 }
313 
314 static StringRef getObjCMethodName(StringRef In) {
315   return In.slice(In.find(' ') + 1, In.find(']'));
316 }
317 
318 // Add the various names to the Dwarf accelerator table names.
319 // TODO: Determine whether or not we should add names for programs
320 // that do not have a DW_AT_name or DW_AT_linkage_name field - this
321 // is only slightly different than the lookup of non-standard ObjC names.
322 void DwarfDebug::addSubprogramNames(const DISubprogram *SP, DIE &Die) {
323   if (!SP->isDefinition())
324     return;
325   addAccelName(SP->getName(), Die);
326 
327   // If the linkage name is different than the name, go ahead and output
328   // that as well into the name table.
329   if (SP->getLinkageName() != "" && SP->getName() != SP->getLinkageName())
330     addAccelName(SP->getLinkageName(), Die);
331 
332   // If this is an Objective-C selector name add it to the ObjC accelerator
333   // too.
334   if (isObjCClass(SP->getName())) {
335     StringRef Class, Category;
336     getObjCClassCategory(SP->getName(), Class, Category);
337     addAccelObjC(Class, Die);
338     if (Category != "")
339       addAccelObjC(Category, Die);
340     // Also add the base method name to the name table.
341     addAccelName(getObjCMethodName(SP->getName()), Die);
342   }
343 }
344 
345 /// Check whether we should create a DIE for the given Scope, return true
346 /// if we don't create a DIE (the corresponding DIE is null).
347 bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) {
348   if (Scope->isAbstractScope())
349     return false;
350 
351   // We don't create a DIE if there is no Range.
352   const SmallVectorImpl<InsnRange> &Ranges = Scope->getRanges();
353   if (Ranges.empty())
354     return true;
355 
356   if (Ranges.size() > 1)
357     return false;
358 
359   // We don't create a DIE if we have a single Range and the end label
360   // is null.
361   return !getLabelAfterInsn(Ranges.front().second);
362 }
363 
364 template <typename Func> void forBothCUs(DwarfCompileUnit &CU, Func F) {
365   F(CU);
366   if (auto *SkelCU = CU.getSkeleton())
367     F(*SkelCU);
368 }
369 
370 void DwarfDebug::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) {
371   assert(Scope && Scope->getScopeNode());
372   assert(Scope->isAbstractScope());
373   assert(!Scope->getInlinedAt());
374 
375   const MDNode *SP = Scope->getScopeNode();
376 
377   ProcessedSPNodes.insert(SP);
378 
379   // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
380   // was inlined from another compile unit.
381   auto &CU = SPMap[SP];
382   forBothCUs(*CU, [&](DwarfCompileUnit &CU) {
383     CU.constructAbstractSubprogramScopeDIE(Scope);
384   });
385 }
386 
387 void DwarfDebug::addGnuPubAttributes(DwarfUnit &U, DIE &D) const {
388   if (!GenerateGnuPubSections)
389     return;
390 
391   U.addFlag(D, dwarf::DW_AT_GNU_pubnames);
392 }
393 
394 // Create new DwarfCompileUnit for the given metadata node with tag
395 // DW_TAG_compile_unit.
396 DwarfCompileUnit &
397 DwarfDebug::constructDwarfCompileUnit(const DICompileUnit *DIUnit) {
398   StringRef FN = DIUnit->getFilename();
399   CompilationDir = DIUnit->getDirectory();
400 
401   auto OwnedUnit = make_unique<DwarfCompileUnit>(
402       InfoHolder.getUnits().size(), DIUnit, Asm, this, &InfoHolder);
403   DwarfCompileUnit &NewCU = *OwnedUnit;
404   DIE &Die = NewCU.getUnitDie();
405   InfoHolder.addUnit(std::move(OwnedUnit));
406   if (useSplitDwarf())
407     NewCU.setSkeleton(constructSkeletonCU(NewCU));
408 
409   // LTO with assembly output shares a single line table amongst multiple CUs.
410   // To avoid the compilation directory being ambiguous, let the line table
411   // explicitly describe the directory of all files, never relying on the
412   // compilation directory.
413   if (!Asm->OutStreamer->hasRawTextSupport() || SingleCU)
414     Asm->OutStreamer->getContext().setMCLineTableCompilationDir(
415         NewCU.getUniqueID(), CompilationDir);
416 
417   NewCU.addString(Die, dwarf::DW_AT_producer, DIUnit->getProducer());
418   NewCU.addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
419                 DIUnit->getSourceLanguage());
420   NewCU.addString(Die, dwarf::DW_AT_name, FN);
421 
422   if (!useSplitDwarf()) {
423     NewCU.initStmtList();
424 
425     // If we're using split dwarf the compilation dir is going to be in the
426     // skeleton CU and so we don't need to duplicate it here.
427     if (!CompilationDir.empty())
428       NewCU.addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
429 
430     addGnuPubAttributes(NewCU, Die);
431   }
432 
433   if (DIUnit->isOptimized())
434     NewCU.addFlag(Die, dwarf::DW_AT_APPLE_optimized);
435 
436   StringRef Flags = DIUnit->getFlags();
437   if (!Flags.empty())
438     NewCU.addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
439 
440   if (unsigned RVer = DIUnit->getRuntimeVersion())
441     NewCU.addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
442                   dwarf::DW_FORM_data1, RVer);
443 
444   if (useSplitDwarf())
445     NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoDWOSection());
446   else
447     NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoSection());
448 
449   if (DIUnit->getDWOId()) {
450     // This CU is either a clang module DWO or a skeleton CU.
451     NewCU.addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8,
452                   DIUnit->getDWOId());
453     if (!DIUnit->getSplitDebugFilename().empty())
454       // This is a prefabricated skeleton CU.
455       NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name,
456                       DIUnit->getSplitDebugFilename());
457   }
458 
459   CUMap.insert(std::make_pair(DIUnit, &NewCU));
460   CUDieMap.insert(std::make_pair(&Die, &NewCU));
461   return NewCU;
462 }
463 
464 void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
465                                                   const DIImportedEntity *N) {
466   if (DIE *D = TheCU.getOrCreateContextDIE(N->getScope()))
467     D->addChild(TheCU.constructImportedEntityDIE(N));
468 }
469 
470 // Emit all Dwarf sections that should come prior to the content. Create
471 // global DIEs and emit initial debug info sections. This is invoked by
472 // the target AsmPrinter.
473 void DwarfDebug::beginModule() {
474   if (DisableDebugInfoPrinting)
475     return;
476 
477   const Module *M = MMI->getModule();
478 
479   FunctionDIs = makeSubprogramMap(*M);
480 
481   NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
482   if (!CU_Nodes)
483     return;
484   TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
485 
486   SingleCU = CU_Nodes->getNumOperands() == 1;
487 
488   for (MDNode *N : CU_Nodes->operands()) {
489     auto *CUNode = cast<DICompileUnit>(N);
490     DwarfCompileUnit &CU = constructDwarfCompileUnit(CUNode);
491     for (auto *IE : CUNode->getImportedEntities())
492       CU.addImportedEntity(IE);
493     for (auto *GV : CUNode->getGlobalVariables())
494       CU.getOrCreateGlobalVariableDIE(GV);
495     for (auto *SP : CUNode->getSubprograms())
496       SPMap.insert(std::make_pair(SP, &CU));
497     for (auto *Ty : CUNode->getEnumTypes()) {
498       // The enum types array by design contains pointers to
499       // MDNodes rather than DIRefs. Unique them here.
500       CU.getOrCreateTypeDIE(cast<DIType>(resolve(Ty->getRef())));
501     }
502     for (auto *Ty : CUNode->getRetainedTypes()) {
503       // The retained types array by design contains pointers to
504       // MDNodes rather than DIRefs. Unique them here.
505       DIType *RT = cast<DIType>(resolve(Ty->getRef()));
506       if (!RT->isExternalTypeRef())
507         // There is no point in force-emitting a forward declaration.
508         CU.getOrCreateTypeDIE(RT);
509     }
510     // Emit imported_modules last so that the relevant context is already
511     // available.
512     for (auto *IE : CUNode->getImportedEntities())
513       constructAndAddImportedEntityDIE(CU, IE);
514   }
515 
516   // Tell MMI that we have debug info.
517   MMI->setDebugInfoAvailability(true);
518 }
519 
520 void DwarfDebug::finishVariableDefinitions() {
521   for (const auto &Var : ConcreteVariables) {
522     DIE *VariableDie = Var->getDIE();
523     assert(VariableDie);
524     // FIXME: Consider the time-space tradeoff of just storing the unit pointer
525     // in the ConcreteVariables list, rather than looking it up again here.
526     // DIE::getUnit isn't simple - it walks parent pointers, etc.
527     DwarfCompileUnit *Unit = lookupUnit(VariableDie->getUnit());
528     assert(Unit);
529     DbgVariable *AbsVar = getExistingAbstractVariable(
530         InlinedVariable(Var->getVariable(), Var->getInlinedAt()));
531     if (AbsVar && AbsVar->getDIE()) {
532       Unit->addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin,
533                         *AbsVar->getDIE());
534     } else
535       Unit->applyVariableAttributes(*Var, *VariableDie);
536   }
537 }
538 
539 void DwarfDebug::finishSubprogramDefinitions() {
540   for (const auto &P : SPMap)
541     forBothCUs(*P.second, [&](DwarfCompileUnit &CU) {
542       CU.finishSubprogramDefinition(cast<DISubprogram>(P.first));
543     });
544 }
545 
546 
547 // Collect info for variables that were optimized out.
548 void DwarfDebug::collectDeadVariables() {
549   const Module *M = MMI->getModule();
550 
551   if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
552     for (MDNode *N : CU_Nodes->operands()) {
553       auto *TheCU = cast<DICompileUnit>(N);
554       // Construct subprogram DIE and add variables DIEs.
555       DwarfCompileUnit *SPCU =
556           static_cast<DwarfCompileUnit *>(CUMap.lookup(TheCU));
557       assert(SPCU && "Unable to find Compile Unit!");
558       for (auto *SP : TheCU->getSubprograms()) {
559         if (ProcessedSPNodes.count(SP) != 0)
560           continue;
561         SPCU->collectDeadVariables(SP);
562       }
563     }
564   }
565 }
566 
567 void DwarfDebug::finalizeModuleInfo() {
568   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
569 
570   finishSubprogramDefinitions();
571 
572   finishVariableDefinitions();
573 
574   // Collect info for variables that were optimized out.
575   collectDeadVariables();
576 
577   // Handle anything that needs to be done on a per-unit basis after
578   // all other generation.
579   for (const auto &P : CUMap) {
580     auto &TheCU = *P.second;
581     // Emit DW_AT_containing_type attribute to connect types with their
582     // vtable holding type.
583     TheCU.constructContainingTypeDIEs();
584 
585     // Add CU specific attributes if we need to add any.
586     // If we're splitting the dwarf out now that we've got the entire
587     // CU then add the dwo id to it.
588     auto *SkCU = TheCU.getSkeleton();
589     if (useSplitDwarf()) {
590       // Emit a unique identifier for this CU.
591       uint64_t ID = DIEHash(Asm).computeCUSignature(TheCU.getUnitDie());
592       TheCU.addUInt(TheCU.getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
593                     dwarf::DW_FORM_data8, ID);
594       SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id,
595                     dwarf::DW_FORM_data8, ID);
596 
597       // We don't keep track of which addresses are used in which CU so this
598       // is a bit pessimistic under LTO.
599       if (!AddrPool.isEmpty()) {
600         const MCSymbol *Sym = TLOF.getDwarfAddrSection()->getBeginSymbol();
601         SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_addr_base,
602                               Sym, Sym);
603       }
604       if (!SkCU->getRangeLists().empty()) {
605         const MCSymbol *Sym = TLOF.getDwarfRangesSection()->getBeginSymbol();
606         SkCU->addSectionLabel(SkCU->getUnitDie(), dwarf::DW_AT_GNU_ranges_base,
607                               Sym, Sym);
608       }
609     }
610 
611     // If we have code split among multiple sections or non-contiguous
612     // ranges of code then emit a DW_AT_ranges attribute on the unit that will
613     // remain in the .o file, otherwise add a DW_AT_low_pc.
614     // FIXME: We should use ranges allow reordering of code ala
615     // .subsections_via_symbols in mach-o. This would mean turning on
616     // ranges for all subprogram DIEs for mach-o.
617     DwarfCompileUnit &U = SkCU ? *SkCU : TheCU;
618     if (unsigned NumRanges = TheCU.getRanges().size()) {
619       if (NumRanges > 1)
620         // A DW_AT_low_pc attribute may also be specified in combination with
621         // DW_AT_ranges to specify the default base address for use in
622         // location lists (see Section 2.6.2) and range lists (see Section
623         // 2.17.3).
624         U.addUInt(U.getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
625       else
626         U.setBaseAddress(TheCU.getRanges().front().getStart());
627       U.attachRangesOrLowHighPC(U.getUnitDie(), TheCU.takeRanges());
628     }
629   }
630 
631   // Compute DIE offsets and sizes.
632   InfoHolder.computeSizeAndOffsets();
633   if (useSplitDwarf())
634     SkeletonHolder.computeSizeAndOffsets();
635 }
636 
637 // Emit all Dwarf sections that should come after the content.
638 void DwarfDebug::endModule() {
639   assert(CurFn == nullptr);
640   assert(CurMI == nullptr);
641 
642   // If we aren't actually generating debug info (check beginModule -
643   // conditionalized on !DisableDebugInfoPrinting and the presence of the
644   // llvm.dbg.cu metadata node)
645   if (!MMI->hasDebugInfo())
646     return;
647 
648   // Finalize the debug info for the module.
649   finalizeModuleInfo();
650 
651   emitDebugStr();
652 
653   if (useSplitDwarf())
654     emitDebugLocDWO();
655   else
656     // Emit info into a debug loc section.
657     emitDebugLoc();
658 
659   // Corresponding abbreviations into a abbrev section.
660   emitAbbreviations();
661 
662   // Emit all the DIEs into a debug info section.
663   emitDebugInfo();
664 
665   // Emit info into a debug aranges section.
666   if (GenerateARangeSection)
667     emitDebugARanges();
668 
669   // Emit info into a debug ranges section.
670   emitDebugRanges();
671 
672   if (useSplitDwarf()) {
673     emitDebugStrDWO();
674     emitDebugInfoDWO();
675     emitDebugAbbrevDWO();
676     emitDebugLineDWO();
677     // Emit DWO addresses.
678     AddrPool.emit(*Asm, Asm->getObjFileLowering().getDwarfAddrSection());
679   }
680 
681   // Emit info into the dwarf accelerator table sections.
682   if (useDwarfAccelTables()) {
683     emitAccelNames();
684     emitAccelObjC();
685     emitAccelNamespaces();
686     emitAccelTypes();
687   }
688 
689   // Emit the pubnames and pubtypes sections if requested.
690   if (HasDwarfPubSections) {
691     emitDebugPubNames(GenerateGnuPubSections);
692     emitDebugPubTypes(GenerateGnuPubSections);
693   }
694 
695   // clean up.
696   SPMap.clear();
697   AbstractVariables.clear();
698 }
699 
700 // Find abstract variable, if any, associated with Var.
701 DbgVariable *
702 DwarfDebug::getExistingAbstractVariable(InlinedVariable IV,
703                                         const DILocalVariable *&Cleansed) {
704   // More then one inlined variable corresponds to one abstract variable.
705   Cleansed = IV.first;
706   auto I = AbstractVariables.find(Cleansed);
707   if (I != AbstractVariables.end())
708     return I->second.get();
709   return nullptr;
710 }
711 
712 DbgVariable *DwarfDebug::getExistingAbstractVariable(InlinedVariable IV) {
713   const DILocalVariable *Cleansed;
714   return getExistingAbstractVariable(IV, Cleansed);
715 }
716 
717 void DwarfDebug::createAbstractVariable(const DILocalVariable *Var,
718                                         LexicalScope *Scope) {
719   auto AbsDbgVariable = make_unique<DbgVariable>(Var, /* IA */ nullptr, this);
720   InfoHolder.addScopeVariable(Scope, AbsDbgVariable.get());
721   AbstractVariables[Var] = std::move(AbsDbgVariable);
722 }
723 
724 void DwarfDebug::ensureAbstractVariableIsCreated(InlinedVariable IV,
725                                                  const MDNode *ScopeNode) {
726   const DILocalVariable *Cleansed = nullptr;
727   if (getExistingAbstractVariable(IV, Cleansed))
728     return;
729 
730   createAbstractVariable(Cleansed, LScopes.getOrCreateAbstractScope(
731                                        cast<DILocalScope>(ScopeNode)));
732 }
733 
734 void DwarfDebug::ensureAbstractVariableIsCreatedIfScoped(
735     InlinedVariable IV, const MDNode *ScopeNode) {
736   const DILocalVariable *Cleansed = nullptr;
737   if (getExistingAbstractVariable(IV, Cleansed))
738     return;
739 
740   if (LexicalScope *Scope =
741           LScopes.findAbstractScope(cast_or_null<DILocalScope>(ScopeNode)))
742     createAbstractVariable(Cleansed, Scope);
743 }
744 
745 // Collect variable information from side table maintained by MMI.
746 void DwarfDebug::collectVariableInfoFromMMITable(
747     DenseSet<InlinedVariable> &Processed) {
748   for (const auto &VI : MMI->getVariableDbgInfo()) {
749     if (!VI.Var)
750       continue;
751     assert(VI.Var->isValidLocationForIntrinsic(VI.Loc) &&
752            "Expected inlined-at fields to agree");
753 
754     InlinedVariable Var(VI.Var, VI.Loc->getInlinedAt());
755     Processed.insert(Var);
756     LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc);
757 
758     // If variable scope is not found then skip this variable.
759     if (!Scope)
760       continue;
761 
762     ensureAbstractVariableIsCreatedIfScoped(Var, Scope->getScopeNode());
763     auto RegVar = make_unique<DbgVariable>(Var.first, Var.second, this);
764     RegVar->initializeMMI(VI.Expr, VI.Slot);
765     if (InfoHolder.addScopeVariable(Scope, RegVar.get()))
766       ConcreteVariables.push_back(std::move(RegVar));
767   }
768 }
769 
770 // Get .debug_loc entry for the instruction range starting at MI.
771 static DebugLocEntry::Value getDebugLocValue(const MachineInstr *MI) {
772   const DIExpression *Expr = MI->getDebugExpression();
773 
774   assert(MI->getNumOperands() == 4);
775   if (MI->getOperand(0).isReg()) {
776     MachineLocation MLoc;
777     // If the second operand is an immediate, this is a
778     // register-indirect address.
779     if (!MI->getOperand(1).isImm())
780       MLoc.set(MI->getOperand(0).getReg());
781     else
782       MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
783     return DebugLocEntry::Value(Expr, MLoc);
784   }
785   if (MI->getOperand(0).isImm())
786     return DebugLocEntry::Value(Expr, MI->getOperand(0).getImm());
787   if (MI->getOperand(0).isFPImm())
788     return DebugLocEntry::Value(Expr, MI->getOperand(0).getFPImm());
789   if (MI->getOperand(0).isCImm())
790     return DebugLocEntry::Value(Expr, MI->getOperand(0).getCImm());
791 
792   llvm_unreachable("Unexpected 4-operand DBG_VALUE instruction!");
793 }
794 
795 /// Determine whether two variable pieces overlap.
796 static bool piecesOverlap(const DIExpression *P1, const DIExpression *P2) {
797   if (!P1->isBitPiece() || !P2->isBitPiece())
798     return true;
799   unsigned l1 = P1->getBitPieceOffset();
800   unsigned l2 = P2->getBitPieceOffset();
801   unsigned r1 = l1 + P1->getBitPieceSize();
802   unsigned r2 = l2 + P2->getBitPieceSize();
803   // True where [l1,r1[ and [r1,r2[ overlap.
804   return (l1 < r2) && (l2 < r1);
805 }
806 
807 /// Build the location list for all DBG_VALUEs in the function that
808 /// describe the same variable.  If the ranges of several independent
809 /// pieces of the same variable overlap partially, split them up and
810 /// combine the ranges. The resulting DebugLocEntries are will have
811 /// strict monotonically increasing begin addresses and will never
812 /// overlap.
813 //
814 // Input:
815 //
816 //   Ranges History [var, loc, piece ofs size]
817 // 0 |      [x, (reg0, piece 0, 32)]
818 // 1 | |    [x, (reg1, piece 32, 32)] <- IsPieceOfPrevEntry
819 // 2 | |    ...
820 // 3   |    [clobber reg0]
821 // 4        [x, (mem, piece 0, 64)] <- overlapping with both previous pieces of
822 //                                     x.
823 //
824 // Output:
825 //
826 // [0-1]    [x, (reg0, piece  0, 32)]
827 // [1-3]    [x, (reg0, piece  0, 32), (reg1, piece 32, 32)]
828 // [3-4]    [x, (reg1, piece 32, 32)]
829 // [4- ]    [x, (mem,  piece  0, 64)]
830 void
831 DwarfDebug::buildLocationList(SmallVectorImpl<DebugLocEntry> &DebugLoc,
832                               const DbgValueHistoryMap::InstrRanges &Ranges) {
833   SmallVector<DebugLocEntry::Value, 4> OpenRanges;
834 
835   for (auto I = Ranges.begin(), E = Ranges.end(); I != E; ++I) {
836     const MachineInstr *Begin = I->first;
837     const MachineInstr *End = I->second;
838     assert(Begin->isDebugValue() && "Invalid History entry");
839 
840     // Check if a variable is inaccessible in this range.
841     if (Begin->getNumOperands() > 1 &&
842         Begin->getOperand(0).isReg() && !Begin->getOperand(0).getReg()) {
843       OpenRanges.clear();
844       continue;
845     }
846 
847     // If this piece overlaps with any open ranges, truncate them.
848     const DIExpression *DIExpr = Begin->getDebugExpression();
849     auto Last = std::remove_if(OpenRanges.begin(), OpenRanges.end(),
850                                [&](DebugLocEntry::Value R) {
851       return piecesOverlap(DIExpr, R.getExpression());
852     });
853     OpenRanges.erase(Last, OpenRanges.end());
854 
855     const MCSymbol *StartLabel = getLabelBeforeInsn(Begin);
856     assert(StartLabel && "Forgot label before DBG_VALUE starting a range!");
857 
858     const MCSymbol *EndLabel;
859     if (End != nullptr)
860       EndLabel = getLabelAfterInsn(End);
861     else if (std::next(I) == Ranges.end())
862       EndLabel = Asm->getFunctionEnd();
863     else
864       EndLabel = getLabelBeforeInsn(std::next(I)->first);
865     assert(EndLabel && "Forgot label after instruction ending a range!");
866 
867     DEBUG(dbgs() << "DotDebugLoc: " << *Begin << "\n");
868 
869     auto Value = getDebugLocValue(Begin);
870     DebugLocEntry Loc(StartLabel, EndLabel, Value);
871     bool couldMerge = false;
872 
873     // If this is a piece, it may belong to the current DebugLocEntry.
874     if (DIExpr->isBitPiece()) {
875       // Add this value to the list of open ranges.
876       OpenRanges.push_back(Value);
877 
878       // Attempt to add the piece to the last entry.
879       if (!DebugLoc.empty())
880         if (DebugLoc.back().MergeValues(Loc))
881           couldMerge = true;
882     }
883 
884     if (!couldMerge) {
885       // Need to add a new DebugLocEntry. Add all values from still
886       // valid non-overlapping pieces.
887       if (OpenRanges.size())
888         Loc.addValues(OpenRanges);
889 
890       DebugLoc.push_back(std::move(Loc));
891     }
892 
893     // Attempt to coalesce the ranges of two otherwise identical
894     // DebugLocEntries.
895     auto CurEntry = DebugLoc.rbegin();
896     DEBUG({
897       dbgs() << CurEntry->getValues().size() << " Values:\n";
898       for (auto &Value : CurEntry->getValues())
899         Value.getExpression()->dump();
900       dbgs() << "-----\n";
901     });
902 
903     auto PrevEntry = std::next(CurEntry);
904     if (PrevEntry != DebugLoc.rend() && PrevEntry->MergeRanges(*CurEntry))
905       DebugLoc.pop_back();
906   }
907 }
908 
909 DbgVariable *DwarfDebug::createConcreteVariable(LexicalScope &Scope,
910                                                 InlinedVariable IV) {
911   ensureAbstractVariableIsCreatedIfScoped(IV, Scope.getScopeNode());
912   ConcreteVariables.push_back(
913       make_unique<DbgVariable>(IV.first, IV.second, this));
914   InfoHolder.addScopeVariable(&Scope, ConcreteVariables.back().get());
915   return ConcreteVariables.back().get();
916 }
917 
918 // Find variables for each lexical scope.
919 void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU,
920                                      const DISubprogram *SP,
921                                      DenseSet<InlinedVariable> &Processed) {
922   // Grab the variable info that was squirreled away in the MMI side-table.
923   collectVariableInfoFromMMITable(Processed);
924 
925   for (const auto &I : DbgValues) {
926     InlinedVariable IV = I.first;
927     if (Processed.count(IV))
928       continue;
929 
930     // Instruction ranges, specifying where IV is accessible.
931     const auto &Ranges = I.second;
932     if (Ranges.empty())
933       continue;
934 
935     LexicalScope *Scope = nullptr;
936     if (const DILocation *IA = IV.second)
937       Scope = LScopes.findInlinedScope(IV.first->getScope(), IA);
938     else
939       Scope = LScopes.findLexicalScope(IV.first->getScope());
940     // If variable scope is not found then skip this variable.
941     if (!Scope)
942       continue;
943 
944     Processed.insert(IV);
945     DbgVariable *RegVar = createConcreteVariable(*Scope, IV);
946 
947     const MachineInstr *MInsn = Ranges.front().first;
948     assert(MInsn->isDebugValue() && "History must begin with debug value");
949 
950     // Check if the first DBG_VALUE is valid for the rest of the function.
951     if (Ranges.size() == 1 && Ranges.front().second == nullptr) {
952       RegVar->initializeDbgValue(MInsn);
953       continue;
954     }
955 
956     // Handle multiple DBG_VALUE instructions describing one variable.
957     DebugLocStream::ListBuilder List(DebugLocs, TheCU, *Asm, *RegVar, *MInsn);
958 
959     // Build the location list for this variable.
960     SmallVector<DebugLocEntry, 8> Entries;
961     buildLocationList(Entries, Ranges);
962 
963     // If the variable has an DIBasicType, extract it.  Basic types cannot have
964     // unique identifiers, so don't bother resolving the type with the
965     // identifier map.
966     const DIBasicType *BT = dyn_cast<DIBasicType>(
967         static_cast<const Metadata *>(IV.first->getType()));
968 
969     // Finalize the entry by lowering it into a DWARF bytestream.
970     for (auto &Entry : Entries)
971       Entry.finalize(*Asm, List, BT);
972   }
973 
974   // Collect info for variables that were optimized out.
975   for (const DILocalVariable *DV : SP->getVariables()) {
976     if (Processed.insert(InlinedVariable(DV, nullptr)).second)
977       if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope()))
978         createConcreteVariable(*Scope, InlinedVariable(DV, nullptr));
979   }
980 }
981 
982 // Return Label preceding the instruction.
983 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
984   MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
985   assert(Label && "Didn't insert label before instruction");
986   return Label;
987 }
988 
989 // Return Label immediately following the instruction.
990 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
991   return LabelsAfterInsn.lookup(MI);
992 }
993 
994 // Process beginning of an instruction.
995 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
996   assert(CurMI == nullptr);
997   CurMI = MI;
998   // Check if source location changes, but ignore DBG_VALUE locations.
999   if (!MI->isDebugValue()) {
1000     DebugLoc DL = MI->getDebugLoc();
1001     if (DL != PrevInstLoc) {
1002       if (DL) {
1003         unsigned Flags = 0;
1004         PrevInstLoc = DL;
1005         if (DL == PrologEndLoc) {
1006           Flags |= DWARF2_FLAG_PROLOGUE_END;
1007           PrologEndLoc = DebugLoc();
1008           Flags |= DWARF2_FLAG_IS_STMT;
1009         }
1010         if (DL.getLine() !=
1011             Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine())
1012           Flags |= DWARF2_FLAG_IS_STMT;
1013 
1014         const MDNode *Scope = DL.getScope();
1015         recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1016       } else if (UnknownLocations) {
1017         PrevInstLoc = DL;
1018         recordSourceLine(0, 0, nullptr, 0);
1019       }
1020     }
1021   }
1022 
1023   // Insert labels where requested.
1024   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
1025       LabelsBeforeInsn.find(MI);
1026 
1027   // No label needed.
1028   if (I == LabelsBeforeInsn.end())
1029     return;
1030 
1031   // Label already assigned.
1032   if (I->second)
1033     return;
1034 
1035   if (!PrevLabel) {
1036     PrevLabel = MMI->getContext().createTempSymbol();
1037     Asm->OutStreamer->EmitLabel(PrevLabel);
1038   }
1039   I->second = PrevLabel;
1040 }
1041 
1042 // Process end of an instruction.
1043 void DwarfDebug::endInstruction() {
1044   assert(CurMI != nullptr);
1045   // Don't create a new label after DBG_VALUE instructions.
1046   // They don't generate code.
1047   if (!CurMI->isDebugValue())
1048     PrevLabel = nullptr;
1049 
1050   DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
1051       LabelsAfterInsn.find(CurMI);
1052   CurMI = nullptr;
1053 
1054   // No label needed.
1055   if (I == LabelsAfterInsn.end())
1056     return;
1057 
1058   // Label already assigned.
1059   if (I->second)
1060     return;
1061 
1062   // We need a label after this instruction.
1063   if (!PrevLabel) {
1064     PrevLabel = MMI->getContext().createTempSymbol();
1065     Asm->OutStreamer->EmitLabel(PrevLabel);
1066   }
1067   I->second = PrevLabel;
1068 }
1069 
1070 // Each LexicalScope has first instruction and last instruction to mark
1071 // beginning and end of a scope respectively. Create an inverse map that list
1072 // scopes starts (and ends) with an instruction. One instruction may start (or
1073 // end) multiple scopes. Ignore scopes that are not reachable.
1074 void DwarfDebug::identifyScopeMarkers() {
1075   SmallVector<LexicalScope *, 4> WorkList;
1076   WorkList.push_back(LScopes.getCurrentFunctionScope());
1077   while (!WorkList.empty()) {
1078     LexicalScope *S = WorkList.pop_back_val();
1079 
1080     const SmallVectorImpl<LexicalScope *> &Children = S->getChildren();
1081     if (!Children.empty())
1082       WorkList.append(Children.begin(), Children.end());
1083 
1084     if (S->isAbstractScope())
1085       continue;
1086 
1087     for (const InsnRange &R : S->getRanges()) {
1088       assert(R.first && "InsnRange does not have first instruction!");
1089       assert(R.second && "InsnRange does not have second instruction!");
1090       requestLabelBeforeInsn(R.first);
1091       requestLabelAfterInsn(R.second);
1092     }
1093   }
1094 }
1095 
1096 static DebugLoc findPrologueEndLoc(const MachineFunction *MF) {
1097   // First known non-DBG_VALUE and non-frame setup location marks
1098   // the beginning of the function body.
1099   for (const auto &MBB : *MF)
1100     for (const auto &MI : MBB)
1101       if (!MI.isDebugValue() && !MI.getFlag(MachineInstr::FrameSetup) &&
1102           MI.getDebugLoc())
1103         return MI.getDebugLoc();
1104   return DebugLoc();
1105 }
1106 
1107 // Gather pre-function debug information.  Assumes being called immediately
1108 // after the function entry point has been emitted.
1109 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1110   CurFn = MF;
1111 
1112   // If there's no debug info for the function we're not going to do anything.
1113   if (!MMI->hasDebugInfo())
1114     return;
1115 
1116   auto DI = FunctionDIs.find(MF->getFunction());
1117   if (DI == FunctionDIs.end())
1118     return;
1119 
1120   // Grab the lexical scopes for the function, if we don't have any of those
1121   // then we're not going to be able to do anything.
1122   LScopes.initialize(*MF);
1123   if (LScopes.empty())
1124     return;
1125 
1126   assert(DbgValues.empty() && "DbgValues map wasn't cleaned!");
1127 
1128   // Make sure that each lexical scope will have a begin/end label.
1129   identifyScopeMarkers();
1130 
1131   // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
1132   // belongs to so that we add to the correct per-cu line table in the
1133   // non-asm case.
1134   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1135   // FnScope->getScopeNode() and DI->second should represent the same function,
1136   // though they may not be the same MDNode due to inline functions merged in
1137   // LTO where the debug info metadata still differs (either due to distinct
1138   // written differences - two versions of a linkonce_odr function
1139   // written/copied into two separate files, or some sub-optimal metadata that
1140   // isn't structurally identical (see: file path/name info from clang, which
1141   // includes the directory of the cpp file being built, even when the file name
1142   // is absolute (such as an <> lookup header)))
1143   DwarfCompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1144   assert(TheCU && "Unable to find compile unit!");
1145   if (Asm->OutStreamer->hasRawTextSupport())
1146     // Use a single line table if we are generating assembly.
1147     Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1148   else
1149     Asm->OutStreamer->getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1150 
1151   // Calculate history for local variables.
1152   calculateDbgValueHistory(MF, Asm->MF->getSubtarget().getRegisterInfo(),
1153                            DbgValues);
1154 
1155   // Request labels for the full history.
1156   for (const auto &I : DbgValues) {
1157     const auto &Ranges = I.second;
1158     if (Ranges.empty())
1159       continue;
1160 
1161     // The first mention of a function argument gets the CurrentFnBegin
1162     // label, so arguments are visible when breaking at function entry.
1163     const DILocalVariable *DIVar = Ranges.front().first->getDebugVariable();
1164     if (DIVar->isParameter() &&
1165         getDISubprogram(DIVar->getScope())->describes(MF->getFunction())) {
1166       LabelsBeforeInsn[Ranges.front().first] = Asm->getFunctionBegin();
1167       if (Ranges.front().first->getDebugExpression()->isBitPiece()) {
1168         // Mark all non-overlapping initial pieces.
1169         for (auto I = Ranges.begin(); I != Ranges.end(); ++I) {
1170           const DIExpression *Piece = I->first->getDebugExpression();
1171           if (std::all_of(Ranges.begin(), I,
1172                           [&](DbgValueHistoryMap::InstrRange Pred) {
1173                 return !piecesOverlap(Piece, Pred.first->getDebugExpression());
1174               }))
1175             LabelsBeforeInsn[I->first] = Asm->getFunctionBegin();
1176           else
1177             break;
1178         }
1179       }
1180     }
1181 
1182     for (const auto &Range : Ranges) {
1183       requestLabelBeforeInsn(Range.first);
1184       if (Range.second)
1185         requestLabelAfterInsn(Range.second);
1186     }
1187   }
1188 
1189   PrevInstLoc = DebugLoc();
1190   PrevLabel = Asm->getFunctionBegin();
1191 
1192   // Record beginning of function.
1193   PrologEndLoc = findPrologueEndLoc(MF);
1194   if (DILocation *L = PrologEndLoc) {
1195     // We'd like to list the prologue as "not statements" but GDB behaves
1196     // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1197     auto *SP = L->getInlinedAtScope()->getSubprogram();
1198     recordSourceLine(SP->getScopeLine(), 0, SP, DWARF2_FLAG_IS_STMT);
1199   }
1200 }
1201 
1202 // Gather and emit post-function debug information.
1203 void DwarfDebug::endFunction(const MachineFunction *MF) {
1204   assert(CurFn == MF &&
1205       "endFunction should be called with the same function as beginFunction");
1206 
1207   if (!MMI->hasDebugInfo() || LScopes.empty() ||
1208       !FunctionDIs.count(MF->getFunction())) {
1209     // If we don't have a lexical scope for this function then there will
1210     // be a hole in the range information. Keep note of this by setting the
1211     // previously used section to nullptr.
1212     PrevCU = nullptr;
1213     CurFn = nullptr;
1214     return;
1215   }
1216 
1217   // Set DwarfDwarfCompileUnitID in MCContext to default value.
1218   Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
1219 
1220   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1221   auto *SP = cast<DISubprogram>(FnScope->getScopeNode());
1222   DwarfCompileUnit &TheCU = *SPMap.lookup(SP);
1223 
1224   DenseSet<InlinedVariable> ProcessedVars;
1225   collectVariableInfo(TheCU, SP, ProcessedVars);
1226 
1227   // Add the range of this function to the list of ranges for the CU.
1228   TheCU.addRange(RangeSpan(Asm->getFunctionBegin(), Asm->getFunctionEnd()));
1229 
1230   // Under -gmlt, skip building the subprogram if there are no inlined
1231   // subroutines inside it.
1232   if (TheCU.getCUNode()->getEmissionKind() == DIBuilder::LineTablesOnly &&
1233       LScopes.getAbstractScopesList().empty() && !IsDarwin) {
1234     assert(InfoHolder.getScopeVariables().empty());
1235     assert(DbgValues.empty());
1236     // FIXME: This wouldn't be true in LTO with a -g (with inlining) CU followed
1237     // by a -gmlt CU. Add a test and remove this assertion.
1238     assert(AbstractVariables.empty());
1239     LabelsBeforeInsn.clear();
1240     LabelsAfterInsn.clear();
1241     PrevLabel = nullptr;
1242     CurFn = nullptr;
1243     return;
1244   }
1245 
1246 #ifndef NDEBUG
1247   size_t NumAbstractScopes = LScopes.getAbstractScopesList().size();
1248 #endif
1249   // Construct abstract scopes.
1250   for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
1251     auto *SP = cast<DISubprogram>(AScope->getScopeNode());
1252     // Collect info for variables that were optimized out.
1253     for (const DILocalVariable *DV : SP->getVariables()) {
1254       if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second)
1255         continue;
1256       ensureAbstractVariableIsCreated(InlinedVariable(DV, nullptr),
1257                                       DV->getScope());
1258       assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
1259              && "ensureAbstractVariableIsCreated inserted abstract scopes");
1260     }
1261     constructAbstractSubprogramScopeDIE(AScope);
1262   }
1263 
1264   TheCU.constructSubprogramScopeDIE(FnScope);
1265   if (auto *SkelCU = TheCU.getSkeleton())
1266     if (!LScopes.getAbstractScopesList().empty())
1267       SkelCU->constructSubprogramScopeDIE(FnScope);
1268 
1269   // Clear debug info
1270   // Ownership of DbgVariables is a bit subtle - ScopeVariables owns all the
1271   // DbgVariables except those that are also in AbstractVariables (since they
1272   // can be used cross-function)
1273   InfoHolder.getScopeVariables().clear();
1274   DbgValues.clear();
1275   LabelsBeforeInsn.clear();
1276   LabelsAfterInsn.clear();
1277   PrevLabel = nullptr;
1278   CurFn = nullptr;
1279 }
1280 
1281 // Register a source line with debug info. Returns the  unique label that was
1282 // emitted and which provides correspondence to the source line list.
1283 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1284                                   unsigned Flags) {
1285   StringRef Fn;
1286   StringRef Dir;
1287   unsigned Src = 1;
1288   unsigned Discriminator = 0;
1289   if (auto *Scope = cast_or_null<DIScope>(S)) {
1290     Fn = Scope->getFilename();
1291     Dir = Scope->getDirectory();
1292     if (auto *LBF = dyn_cast<DILexicalBlockFile>(Scope))
1293       Discriminator = LBF->getDiscriminator();
1294 
1295     unsigned CUID = Asm->OutStreamer->getContext().getDwarfCompileUnitID();
1296     Src = static_cast<DwarfCompileUnit &>(*InfoHolder.getUnits()[CUID])
1297               .getOrCreateSourceID(Fn, Dir);
1298   }
1299   Asm->OutStreamer->EmitDwarfLocDirective(Src, Line, Col, Flags, 0,
1300                                           Discriminator, Fn);
1301 }
1302 
1303 //===----------------------------------------------------------------------===//
1304 // Emit Methods
1305 //===----------------------------------------------------------------------===//
1306 
1307 // Emit the debug info section.
1308 void DwarfDebug::emitDebugInfo() {
1309   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1310   Holder.emitUnits(/* UseOffsets */ false);
1311 }
1312 
1313 // Emit the abbreviation section.
1314 void DwarfDebug::emitAbbreviations() {
1315   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1316 
1317   Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
1318 }
1319 
1320 void DwarfDebug::emitAccel(DwarfAccelTable &Accel, MCSection *Section,
1321                            StringRef TableName) {
1322   Accel.FinalizeTable(Asm, TableName);
1323   Asm->OutStreamer->SwitchSection(Section);
1324 
1325   // Emit the full data.
1326   Accel.emit(Asm, Section->getBeginSymbol(), this);
1327 }
1328 
1329 // Emit visible names into a hashed accelerator table section.
1330 void DwarfDebug::emitAccelNames() {
1331   emitAccel(AccelNames, Asm->getObjFileLowering().getDwarfAccelNamesSection(),
1332             "Names");
1333 }
1334 
1335 // Emit objective C classes and categories into a hashed accelerator table
1336 // section.
1337 void DwarfDebug::emitAccelObjC() {
1338   emitAccel(AccelObjC, Asm->getObjFileLowering().getDwarfAccelObjCSection(),
1339             "ObjC");
1340 }
1341 
1342 // Emit namespace dies into a hashed accelerator table.
1343 void DwarfDebug::emitAccelNamespaces() {
1344   emitAccel(AccelNamespace,
1345             Asm->getObjFileLowering().getDwarfAccelNamespaceSection(),
1346             "namespac");
1347 }
1348 
1349 // Emit type dies into a hashed accelerator table.
1350 void DwarfDebug::emitAccelTypes() {
1351   emitAccel(AccelTypes, Asm->getObjFileLowering().getDwarfAccelTypesSection(),
1352             "types");
1353 }
1354 
1355 // Public name handling.
1356 // The format for the various pubnames:
1357 //
1358 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
1359 // for the DIE that is named.
1360 //
1361 // gnu pubnames - offset/index value/name tuples where the offset is the offset
1362 // into the CU and the index value is computed according to the type of value
1363 // for the DIE that is named.
1364 //
1365 // For type units the offset is the offset of the skeleton DIE. For split dwarf
1366 // it's the offset within the debug_info/debug_types dwo section, however, the
1367 // reference in the pubname header doesn't change.
1368 
1369 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
1370 static dwarf::PubIndexEntryDescriptor computeIndexValue(DwarfUnit *CU,
1371                                                         const DIE *Die) {
1372   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
1373 
1374   // We could have a specification DIE that has our most of our knowledge,
1375   // look for that now.
1376   if (DIEValue SpecVal = Die->findAttribute(dwarf::DW_AT_specification)) {
1377     DIE &SpecDIE = SpecVal.getDIEEntry().getEntry();
1378     if (SpecDIE.findAttribute(dwarf::DW_AT_external))
1379       Linkage = dwarf::GIEL_EXTERNAL;
1380   } else if (Die->findAttribute(dwarf::DW_AT_external))
1381     Linkage = dwarf::GIEL_EXTERNAL;
1382 
1383   switch (Die->getTag()) {
1384   case dwarf::DW_TAG_class_type:
1385   case dwarf::DW_TAG_structure_type:
1386   case dwarf::DW_TAG_union_type:
1387   case dwarf::DW_TAG_enumeration_type:
1388     return dwarf::PubIndexEntryDescriptor(
1389         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
1390                               ? dwarf::GIEL_STATIC
1391                               : dwarf::GIEL_EXTERNAL);
1392   case dwarf::DW_TAG_typedef:
1393   case dwarf::DW_TAG_base_type:
1394   case dwarf::DW_TAG_subrange_type:
1395     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
1396   case dwarf::DW_TAG_namespace:
1397     return dwarf::GIEK_TYPE;
1398   case dwarf::DW_TAG_subprogram:
1399     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
1400   case dwarf::DW_TAG_variable:
1401     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
1402   case dwarf::DW_TAG_enumerator:
1403     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
1404                                           dwarf::GIEL_STATIC);
1405   default:
1406     return dwarf::GIEK_NONE;
1407   }
1408 }
1409 
1410 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
1411 ///
1412 void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
1413   MCSection *PSec = GnuStyle
1414                         ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
1415                         : Asm->getObjFileLowering().getDwarfPubNamesSection();
1416 
1417   emitDebugPubSection(GnuStyle, PSec, "Names",
1418                       &DwarfCompileUnit::getGlobalNames);
1419 }
1420 
1421 void DwarfDebug::emitDebugPubSection(
1422     bool GnuStyle, MCSection *PSec, StringRef Name,
1423     const StringMap<const DIE *> &(DwarfCompileUnit::*Accessor)() const) {
1424   for (const auto &NU : CUMap) {
1425     DwarfCompileUnit *TheU = NU.second;
1426 
1427     const auto &Globals = (TheU->*Accessor)();
1428 
1429     if (Globals.empty())
1430       continue;
1431 
1432     if (auto *Skeleton = TheU->getSkeleton())
1433       TheU = Skeleton;
1434 
1435     // Start the dwarf pubnames section.
1436     Asm->OutStreamer->SwitchSection(PSec);
1437 
1438     // Emit the header.
1439     Asm->OutStreamer->AddComment("Length of Public " + Name + " Info");
1440     MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin");
1441     MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end");
1442     Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);
1443 
1444     Asm->OutStreamer->EmitLabel(BeginLabel);
1445 
1446     Asm->OutStreamer->AddComment("DWARF Version");
1447     Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION);
1448 
1449     Asm->OutStreamer->AddComment("Offset of Compilation Unit Info");
1450     Asm->emitDwarfSymbolReference(TheU->getLabelBegin());
1451 
1452     Asm->OutStreamer->AddComment("Compilation Unit Length");
1453     Asm->EmitInt32(TheU->getLength());
1454 
1455     // Emit the pubnames for this compilation unit.
1456     for (const auto &GI : Globals) {
1457       const char *Name = GI.getKeyData();
1458       const DIE *Entity = GI.second;
1459 
1460       Asm->OutStreamer->AddComment("DIE offset");
1461       Asm->EmitInt32(Entity->getOffset());
1462 
1463       if (GnuStyle) {
1464         dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheU, Entity);
1465         Asm->OutStreamer->AddComment(
1466             Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
1467             dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
1468         Asm->EmitInt8(Desc.toBits());
1469       }
1470 
1471       Asm->OutStreamer->AddComment("External Name");
1472       Asm->OutStreamer->EmitBytes(StringRef(Name, GI.getKeyLength() + 1));
1473     }
1474 
1475     Asm->OutStreamer->AddComment("End Mark");
1476     Asm->EmitInt32(0);
1477     Asm->OutStreamer->EmitLabel(EndLabel);
1478   }
1479 }
1480 
1481 void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
1482   MCSection *PSec = GnuStyle
1483                         ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
1484                         : Asm->getObjFileLowering().getDwarfPubTypesSection();
1485 
1486   emitDebugPubSection(GnuStyle, PSec, "Types",
1487                       &DwarfCompileUnit::getGlobalTypes);
1488 }
1489 
1490 // Emit visible names into a debug str section.
1491 void DwarfDebug::emitDebugStr() {
1492   DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
1493   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
1494 }
1495 
1496 void DwarfDebug::emitDebugLocEntry(ByteStreamer &Streamer,
1497                                    const DebugLocStream::Entry &Entry) {
1498   auto &&Comments = DebugLocs.getComments(Entry);
1499   auto Comment = Comments.begin();
1500   auto End = Comments.end();
1501   for (uint8_t Byte : DebugLocs.getBytes(Entry))
1502     Streamer.EmitInt8(Byte, Comment != End ? *(Comment++) : "");
1503 }
1504 
1505 static void emitDebugLocValue(const AsmPrinter &AP, const DIBasicType *BT,
1506                               ByteStreamer &Streamer,
1507                               const DebugLocEntry::Value &Value,
1508                               unsigned PieceOffsetInBits) {
1509   DebugLocDwarfExpression DwarfExpr(*AP.MF->getSubtarget().getRegisterInfo(),
1510                                     AP.getDwarfDebug()->getDwarfVersion(),
1511                                     Streamer);
1512   // Regular entry.
1513   if (Value.isInt()) {
1514     if (BT && (BT->getEncoding() == dwarf::DW_ATE_signed ||
1515                BT->getEncoding() == dwarf::DW_ATE_signed_char))
1516       DwarfExpr.AddSignedConstant(Value.getInt());
1517     else
1518       DwarfExpr.AddUnsignedConstant(Value.getInt());
1519   } else if (Value.isLocation()) {
1520     MachineLocation Loc = Value.getLoc();
1521     const DIExpression *Expr = Value.getExpression();
1522     if (!Expr || !Expr->getNumElements())
1523       // Regular entry.
1524       AP.EmitDwarfRegOp(Streamer, Loc);
1525     else {
1526       // Complex address entry.
1527       if (Loc.getOffset()) {
1528         DwarfExpr.AddMachineRegIndirect(Loc.getReg(), Loc.getOffset());
1529         DwarfExpr.AddExpression(Expr->expr_op_begin(), Expr->expr_op_end(),
1530                                 PieceOffsetInBits);
1531       } else
1532         DwarfExpr.AddMachineRegExpression(Expr, Loc.getReg(),
1533                                           PieceOffsetInBits);
1534     }
1535   }
1536   // else ... ignore constant fp. There is not any good way to
1537   // to represent them here in dwarf.
1538   // FIXME: ^
1539 }
1540 
1541 void DebugLocEntry::finalize(const AsmPrinter &AP,
1542                              DebugLocStream::ListBuilder &List,
1543                              const DIBasicType *BT) {
1544   DebugLocStream::EntryBuilder Entry(List, Begin, End);
1545   BufferByteStreamer Streamer = Entry.getStreamer();
1546   const DebugLocEntry::Value &Value = Values[0];
1547   if (Value.isBitPiece()) {
1548     // Emit all pieces that belong to the same variable and range.
1549     assert(std::all_of(Values.begin(), Values.end(), [](DebugLocEntry::Value P) {
1550           return P.isBitPiece();
1551         }) && "all values are expected to be pieces");
1552     assert(std::is_sorted(Values.begin(), Values.end()) &&
1553            "pieces are expected to be sorted");
1554 
1555     unsigned Offset = 0;
1556     for (auto Piece : Values) {
1557       const DIExpression *Expr = Piece.getExpression();
1558       unsigned PieceOffset = Expr->getBitPieceOffset();
1559       unsigned PieceSize = Expr->getBitPieceSize();
1560       assert(Offset <= PieceOffset && "overlapping or duplicate pieces");
1561       if (Offset < PieceOffset) {
1562         // The DWARF spec seriously mandates pieces with no locations for gaps.
1563         DebugLocDwarfExpression Expr(*AP.MF->getSubtarget().getRegisterInfo(),
1564                                      AP.getDwarfDebug()->getDwarfVersion(),
1565                                      Streamer);
1566         Expr.AddOpPiece(PieceOffset-Offset, 0);
1567         Offset += PieceOffset-Offset;
1568       }
1569       Offset += PieceSize;
1570 
1571       emitDebugLocValue(AP, BT, Streamer, Piece, PieceOffset);
1572     }
1573   } else {
1574     assert(Values.size() == 1 && "only pieces may have >1 value");
1575     emitDebugLocValue(AP, BT, Streamer, Value, 0);
1576   }
1577 }
1578 
1579 void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry) {
1580   // Emit the size.
1581   Asm->OutStreamer->AddComment("Loc expr size");
1582   Asm->EmitInt16(DebugLocs.getBytes(Entry).size());
1583 
1584   // Emit the entry.
1585   APByteStreamer Streamer(*Asm);
1586   emitDebugLocEntry(Streamer, Entry);
1587 }
1588 
1589 // Emit locations into the debug loc section.
1590 void DwarfDebug::emitDebugLoc() {
1591   // Start the dwarf loc section.
1592   Asm->OutStreamer->SwitchSection(
1593       Asm->getObjFileLowering().getDwarfLocSection());
1594   unsigned char Size = Asm->getDataLayout().getPointerSize();
1595   for (const auto &List : DebugLocs.getLists()) {
1596     Asm->OutStreamer->EmitLabel(List.Label);
1597     const DwarfCompileUnit *CU = List.CU;
1598     for (const auto &Entry : DebugLocs.getEntries(List)) {
1599       // Set up the range. This range is relative to the entry point of the
1600       // compile unit. This is a hard coded 0 for low_pc when we're emitting
1601       // ranges, or the DW_AT_low_pc on the compile unit otherwise.
1602       if (auto *Base = CU->getBaseAddress()) {
1603         Asm->EmitLabelDifference(Entry.BeginSym, Base, Size);
1604         Asm->EmitLabelDifference(Entry.EndSym, Base, Size);
1605       } else {
1606         Asm->OutStreamer->EmitSymbolValue(Entry.BeginSym, Size);
1607         Asm->OutStreamer->EmitSymbolValue(Entry.EndSym, Size);
1608       }
1609 
1610       emitDebugLocEntryLocation(Entry);
1611     }
1612     Asm->OutStreamer->EmitIntValue(0, Size);
1613     Asm->OutStreamer->EmitIntValue(0, Size);
1614   }
1615 }
1616 
1617 void DwarfDebug::emitDebugLocDWO() {
1618   Asm->OutStreamer->SwitchSection(
1619       Asm->getObjFileLowering().getDwarfLocDWOSection());
1620   for (const auto &List : DebugLocs.getLists()) {
1621     Asm->OutStreamer->EmitLabel(List.Label);
1622     for (const auto &Entry : DebugLocs.getEntries(List)) {
1623       // Just always use start_length for now - at least that's one address
1624       // rather than two. We could get fancier and try to, say, reuse an
1625       // address we know we've emitted elsewhere (the start of the function?
1626       // The start of the CU or CU subrange that encloses this range?)
1627       Asm->EmitInt8(dwarf::DW_LLE_start_length_entry);
1628       unsigned idx = AddrPool.getIndex(Entry.BeginSym);
1629       Asm->EmitULEB128(idx);
1630       Asm->EmitLabelDifference(Entry.EndSym, Entry.BeginSym, 4);
1631 
1632       emitDebugLocEntryLocation(Entry);
1633     }
1634     Asm->EmitInt8(dwarf::DW_LLE_end_of_list_entry);
1635   }
1636 }
1637 
1638 struct ArangeSpan {
1639   const MCSymbol *Start, *End;
1640 };
1641 
1642 // Emit a debug aranges section, containing a CU lookup for any
1643 // address we can tie back to a CU.
1644 void DwarfDebug::emitDebugARanges() {
1645   // Provides a unique id per text section.
1646   MapVector<MCSection *, SmallVector<SymbolCU, 8>> SectionMap;
1647 
1648   // Filter labels by section.
1649   for (const SymbolCU &SCU : ArangeLabels) {
1650     if (SCU.Sym->isInSection()) {
1651       // Make a note of this symbol and it's section.
1652       MCSection *Section = &SCU.Sym->getSection();
1653       if (!Section->getKind().isMetadata())
1654         SectionMap[Section].push_back(SCU);
1655     } else {
1656       // Some symbols (e.g. common/bss on mach-o) can have no section but still
1657       // appear in the output. This sucks as we rely on sections to build
1658       // arange spans. We can do it without, but it's icky.
1659       SectionMap[nullptr].push_back(SCU);
1660     }
1661   }
1662 
1663   // Add terminating symbols for each section.
1664   for (const auto &I : SectionMap) {
1665     MCSection *Section = I.first;
1666     MCSymbol *Sym = nullptr;
1667 
1668     if (Section)
1669       Sym = Asm->OutStreamer->endSection(Section);
1670 
1671     // Insert a final terminator.
1672     SectionMap[Section].push_back(SymbolCU(nullptr, Sym));
1673   }
1674 
1675   DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans;
1676 
1677   for (auto &I : SectionMap) {
1678     const MCSection *Section = I.first;
1679     SmallVector<SymbolCU, 8> &List = I.second;
1680     if (List.size() < 2)
1681       continue;
1682 
1683     // If we have no section (e.g. common), just write out
1684     // individual spans for each symbol.
1685     if (!Section) {
1686       for (const SymbolCU &Cur : List) {
1687         ArangeSpan Span;
1688         Span.Start = Cur.Sym;
1689         Span.End = nullptr;
1690         if (Cur.CU)
1691           Spans[Cur.CU].push_back(Span);
1692       }
1693       continue;
1694     }
1695 
1696     // Sort the symbols by offset within the section.
1697     std::sort(List.begin(), List.end(),
1698               [&](const SymbolCU &A, const SymbolCU &B) {
1699       unsigned IA = A.Sym ? Asm->OutStreamer->GetSymbolOrder(A.Sym) : 0;
1700       unsigned IB = B.Sym ? Asm->OutStreamer->GetSymbolOrder(B.Sym) : 0;
1701 
1702       // Symbols with no order assigned should be placed at the end.
1703       // (e.g. section end labels)
1704       if (IA == 0)
1705         return false;
1706       if (IB == 0)
1707         return true;
1708       return IA < IB;
1709     });
1710 
1711     // Build spans between each label.
1712     const MCSymbol *StartSym = List[0].Sym;
1713     for (size_t n = 1, e = List.size(); n < e; n++) {
1714       const SymbolCU &Prev = List[n - 1];
1715       const SymbolCU &Cur = List[n];
1716 
1717       // Try and build the longest span we can within the same CU.
1718       if (Cur.CU != Prev.CU) {
1719         ArangeSpan Span;
1720         Span.Start = StartSym;
1721         Span.End = Cur.Sym;
1722         Spans[Prev.CU].push_back(Span);
1723         StartSym = Cur.Sym;
1724       }
1725     }
1726   }
1727 
1728   // Start the dwarf aranges section.
1729   Asm->OutStreamer->SwitchSection(
1730       Asm->getObjFileLowering().getDwarfARangesSection());
1731 
1732   unsigned PtrSize = Asm->getDataLayout().getPointerSize();
1733 
1734   // Build a list of CUs used.
1735   std::vector<DwarfCompileUnit *> CUs;
1736   for (const auto &it : Spans) {
1737     DwarfCompileUnit *CU = it.first;
1738     CUs.push_back(CU);
1739   }
1740 
1741   // Sort the CU list (again, to ensure consistent output order).
1742   std::sort(CUs.begin(), CUs.end(), [](const DwarfUnit *A, const DwarfUnit *B) {
1743     return A->getUniqueID() < B->getUniqueID();
1744   });
1745 
1746   // Emit an arange table for each CU we used.
1747   for (DwarfCompileUnit *CU : CUs) {
1748     std::vector<ArangeSpan> &List = Spans[CU];
1749 
1750     // Describe the skeleton CU's offset and length, not the dwo file's.
1751     if (auto *Skel = CU->getSkeleton())
1752       CU = Skel;
1753 
1754     // Emit size of content not including length itself.
1755     unsigned ContentSize =
1756         sizeof(int16_t) + // DWARF ARange version number
1757         sizeof(int32_t) + // Offset of CU in the .debug_info section
1758         sizeof(int8_t) +  // Pointer Size (in bytes)
1759         sizeof(int8_t);   // Segment Size (in bytes)
1760 
1761     unsigned TupleSize = PtrSize * 2;
1762 
1763     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
1764     unsigned Padding =
1765         OffsetToAlignment(sizeof(int32_t) + ContentSize, TupleSize);
1766 
1767     ContentSize += Padding;
1768     ContentSize += (List.size() + 1) * TupleSize;
1769 
1770     // For each compile unit, write the list of spans it covers.
1771     Asm->OutStreamer->AddComment("Length of ARange Set");
1772     Asm->EmitInt32(ContentSize);
1773     Asm->OutStreamer->AddComment("DWARF Arange version number");
1774     Asm->EmitInt16(dwarf::DW_ARANGES_VERSION);
1775     Asm->OutStreamer->AddComment("Offset Into Debug Info Section");
1776     Asm->emitDwarfSymbolReference(CU->getLabelBegin());
1777     Asm->OutStreamer->AddComment("Address Size (in bytes)");
1778     Asm->EmitInt8(PtrSize);
1779     Asm->OutStreamer->AddComment("Segment Size (in bytes)");
1780     Asm->EmitInt8(0);
1781 
1782     Asm->OutStreamer->EmitFill(Padding, 0xff);
1783 
1784     for (const ArangeSpan &Span : List) {
1785       Asm->EmitLabelReference(Span.Start, PtrSize);
1786 
1787       // Calculate the size as being from the span start to it's end.
1788       if (Span.End) {
1789         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
1790       } else {
1791         // For symbols without an end marker (e.g. common), we
1792         // write a single arange entry containing just that one symbol.
1793         uint64_t Size = SymSize[Span.Start];
1794         if (Size == 0)
1795           Size = 1;
1796 
1797         Asm->OutStreamer->EmitIntValue(Size, PtrSize);
1798       }
1799     }
1800 
1801     Asm->OutStreamer->AddComment("ARange terminator");
1802     Asm->OutStreamer->EmitIntValue(0, PtrSize);
1803     Asm->OutStreamer->EmitIntValue(0, PtrSize);
1804   }
1805 }
1806 
1807 // Emit visible names into a debug ranges section.
1808 void DwarfDebug::emitDebugRanges() {
1809   // Start the dwarf ranges section.
1810   Asm->OutStreamer->SwitchSection(
1811       Asm->getObjFileLowering().getDwarfRangesSection());
1812 
1813   // Size for our labels.
1814   unsigned char Size = Asm->getDataLayout().getPointerSize();
1815 
1816   // Grab the specific ranges for the compile units in the module.
1817   for (const auto &I : CUMap) {
1818     DwarfCompileUnit *TheCU = I.second;
1819 
1820     if (auto *Skel = TheCU->getSkeleton())
1821       TheCU = Skel;
1822 
1823     // Iterate over the misc ranges for the compile units in the module.
1824     for (const RangeSpanList &List : TheCU->getRangeLists()) {
1825       // Emit our symbol so we can find the beginning of the range.
1826       Asm->OutStreamer->EmitLabel(List.getSym());
1827 
1828       for (const RangeSpan &Range : List.getRanges()) {
1829         const MCSymbol *Begin = Range.getStart();
1830         const MCSymbol *End = Range.getEnd();
1831         assert(Begin && "Range without a begin symbol?");
1832         assert(End && "Range without an end symbol?");
1833         if (auto *Base = TheCU->getBaseAddress()) {
1834           Asm->EmitLabelDifference(Begin, Base, Size);
1835           Asm->EmitLabelDifference(End, Base, Size);
1836         } else {
1837           Asm->OutStreamer->EmitSymbolValue(Begin, Size);
1838           Asm->OutStreamer->EmitSymbolValue(End, Size);
1839         }
1840       }
1841 
1842       // And terminate the list with two 0 values.
1843       Asm->OutStreamer->EmitIntValue(0, Size);
1844       Asm->OutStreamer->EmitIntValue(0, Size);
1845     }
1846   }
1847 }
1848 
1849 // DWARF5 Experimental Separate Dwarf emitters.
1850 
1851 void DwarfDebug::initSkeletonUnit(const DwarfUnit &U, DIE &Die,
1852                                   std::unique_ptr<DwarfUnit> NewU) {
1853   NewU->addString(Die, dwarf::DW_AT_GNU_dwo_name,
1854                   U.getCUNode()->getSplitDebugFilename());
1855 
1856   if (!CompilationDir.empty())
1857     NewU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
1858 
1859   addGnuPubAttributes(*NewU, Die);
1860 
1861   SkeletonHolder.addUnit(std::move(NewU));
1862 }
1863 
1864 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
1865 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
1866 // DW_AT_addr_base, DW_AT_ranges_base.
1867 DwarfCompileUnit &DwarfDebug::constructSkeletonCU(const DwarfCompileUnit &CU) {
1868 
1869   auto OwnedUnit = make_unique<DwarfCompileUnit>(
1870       CU.getUniqueID(), CU.getCUNode(), Asm, this, &SkeletonHolder);
1871   DwarfCompileUnit &NewCU = *OwnedUnit;
1872   NewCU.initSection(Asm->getObjFileLowering().getDwarfInfoSection());
1873 
1874   NewCU.initStmtList();
1875 
1876   initSkeletonUnit(CU, NewCU.getUnitDie(), std::move(OwnedUnit));
1877 
1878   return NewCU;
1879 }
1880 
1881 // Emit the .debug_info.dwo section for separated dwarf. This contains the
1882 // compile units that would normally be in debug_info.
1883 void DwarfDebug::emitDebugInfoDWO() {
1884   assert(useSplitDwarf() && "No split dwarf debug info?");
1885   // Don't emit relocations into the dwo file.
1886   InfoHolder.emitUnits(/* UseOffsets */ true);
1887 }
1888 
1889 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
1890 // abbreviations for the .debug_info.dwo section.
1891 void DwarfDebug::emitDebugAbbrevDWO() {
1892   assert(useSplitDwarf() && "No split dwarf?");
1893   InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
1894 }
1895 
1896 void DwarfDebug::emitDebugLineDWO() {
1897   assert(useSplitDwarf() && "No split dwarf?");
1898   Asm->OutStreamer->SwitchSection(
1899       Asm->getObjFileLowering().getDwarfLineDWOSection());
1900   SplitTypeUnitFileTable.Emit(*Asm->OutStreamer, MCDwarfLineTableParams());
1901 }
1902 
1903 // Emit the .debug_str.dwo section for separated dwarf. This contains the
1904 // string section and is identical in format to traditional .debug_str
1905 // sections.
1906 void DwarfDebug::emitDebugStrDWO() {
1907   assert(useSplitDwarf() && "No split dwarf?");
1908   MCSection *OffSec = Asm->getObjFileLowering().getDwarfStrOffDWOSection();
1909   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
1910                          OffSec);
1911 }
1912 
1913 MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) {
1914   if (!useSplitDwarf())
1915     return nullptr;
1916   if (SingleCU)
1917     SplitTypeUnitFileTable.setCompilationDir(CU.getCUNode()->getDirectory());
1918   return &SplitTypeUnitFileTable;
1919 }
1920 
1921 uint64_t DwarfDebug::makeTypeSignature(StringRef Identifier) {
1922   MD5 Hash;
1923   Hash.update(Identifier);
1924   // ... take the least significant 8 bytes and return those. Our MD5
1925   // implementation always returns its results in little endian, swap bytes
1926   // appropriately.
1927   MD5::MD5Result Result;
1928   Hash.final(Result);
1929   return support::endian::read64le(Result + 8);
1930 }
1931 
1932 void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
1933                                       StringRef Identifier, DIE &RefDie,
1934                                       const DICompositeType *CTy) {
1935   // Fast path if we're building some type units and one has already used the
1936   // address pool we know we're going to throw away all this work anyway, so
1937   // don't bother building dependent types.
1938   if (!TypeUnitsUnderConstruction.empty() && AddrPool.hasBeenUsed())
1939     return;
1940 
1941   const DwarfTypeUnit *&TU = DwarfTypeUnits[CTy];
1942   if (TU) {
1943     CU.addDIETypeSignature(RefDie, *TU);
1944     return;
1945   }
1946 
1947   bool TopLevelType = TypeUnitsUnderConstruction.empty();
1948   AddrPool.resetUsedFlag();
1949 
1950   auto OwnedUnit = make_unique<DwarfTypeUnit>(
1951       InfoHolder.getUnits().size() + TypeUnitsUnderConstruction.size(), CU, Asm,
1952       this, &InfoHolder, getDwoLineTable(CU));
1953   DwarfTypeUnit &NewTU = *OwnedUnit;
1954   DIE &UnitDie = NewTU.getUnitDie();
1955   TU = &NewTU;
1956   TypeUnitsUnderConstruction.push_back(
1957       std::make_pair(std::move(OwnedUnit), CTy));
1958 
1959   NewTU.addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
1960                 CU.getLanguage());
1961 
1962   uint64_t Signature = makeTypeSignature(Identifier);
1963   NewTU.setTypeSignature(Signature);
1964 
1965   if (useSplitDwarf())
1966     NewTU.initSection(Asm->getObjFileLowering().getDwarfTypesDWOSection());
1967   else {
1968     CU.applyStmtList(UnitDie);
1969     NewTU.initSection(
1970         Asm->getObjFileLowering().getDwarfTypesSection(Signature));
1971   }
1972 
1973   NewTU.setType(NewTU.createTypeDIE(CTy));
1974 
1975   if (TopLevelType) {
1976     auto TypeUnitsToAdd = std::move(TypeUnitsUnderConstruction);
1977     TypeUnitsUnderConstruction.clear();
1978 
1979     // Types referencing entries in the address table cannot be placed in type
1980     // units.
1981     if (AddrPool.hasBeenUsed()) {
1982 
1983       // Remove all the types built while building this type.
1984       // This is pessimistic as some of these types might not be dependent on
1985       // the type that used an address.
1986       for (const auto &TU : TypeUnitsToAdd)
1987         DwarfTypeUnits.erase(TU.second);
1988 
1989       // Construct this type in the CU directly.
1990       // This is inefficient because all the dependent types will be rebuilt
1991       // from scratch, including building them in type units, discovering that
1992       // they depend on addresses, throwing them out and rebuilding them.
1993       CU.constructTypeDIE(RefDie, cast<DICompositeType>(CTy));
1994       return;
1995     }
1996 
1997     // If the type wasn't dependent on fission addresses, finish adding the type
1998     // and all its dependent types.
1999     for (auto &TU : TypeUnitsToAdd)
2000       InfoHolder.addUnit(std::move(TU.first));
2001   }
2002   CU.addDIETypeSignature(RefDie, NewTU);
2003 }
2004 
2005 // Accelerator table mutators - add each name along with its companion
2006 // DIE to the proper table while ensuring that the name that we're going
2007 // to reference is in the string table. We do this since the names we
2008 // add may not only be identical to the names in the DIE.
2009 void DwarfDebug::addAccelName(StringRef Name, const DIE &Die) {
2010   if (!useDwarfAccelTables())
2011     return;
2012   AccelNames.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2013 }
2014 
2015 void DwarfDebug::addAccelObjC(StringRef Name, const DIE &Die) {
2016   if (!useDwarfAccelTables())
2017     return;
2018   AccelObjC.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2019 }
2020 
2021 void DwarfDebug::addAccelNamespace(StringRef Name, const DIE &Die) {
2022   if (!useDwarfAccelTables())
2023     return;
2024   AccelNamespace.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2025 }
2026 
2027 void DwarfDebug::addAccelType(StringRef Name, const DIE &Die, char Flags) {
2028   if (!useDwarfAccelTables())
2029     return;
2030   AccelTypes.AddName(InfoHolder.getStringPool().getEntry(*Asm, Name), &Die);
2031 }
2032