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