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