OSDN Git Service

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