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