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