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 #define DEBUG_TYPE "dwarfdebug"
     15 #include "DwarfDebug.h"
     16 #include "DIE.h"
     17 #include "DwarfAccelTable.h"
     18 #include "DwarfCompileUnit.h"
     19 #include "llvm/ADT/STLExtras.h"
     20 #include "llvm/ADT/Statistic.h"
     21 #include "llvm/ADT/StringExtras.h"
     22 #include "llvm/ADT/Triple.h"
     23 #include "llvm/CodeGen/MachineFunction.h"
     24 #include "llvm/CodeGen/MachineModuleInfo.h"
     25 #include "llvm/DIBuilder.h"
     26 #include "llvm/DebugInfo.h"
     27 #include "llvm/IR/Constants.h"
     28 #include "llvm/IR/DataLayout.h"
     29 #include "llvm/IR/Instructions.h"
     30 #include "llvm/IR/Module.h"
     31 #include "llvm/MC/MCAsmInfo.h"
     32 #include "llvm/MC/MCSection.h"
     33 #include "llvm/MC/MCStreamer.h"
     34 #include "llvm/MC/MCSymbol.h"
     35 #include "llvm/Support/CommandLine.h"
     36 #include "llvm/Support/Debug.h"
     37 #include "llvm/Support/ErrorHandling.h"
     38 #include "llvm/Support/FormattedStream.h"
     39 #include "llvm/Support/Path.h"
     40 #include "llvm/Support/Timer.h"
     41 #include "llvm/Support/ValueHandle.h"
     42 #include "llvm/Target/TargetFrameLowering.h"
     43 #include "llvm/Target/TargetLoweringObjectFile.h"
     44 #include "llvm/Target/TargetMachine.h"
     45 #include "llvm/Target/TargetOptions.h"
     46 #include "llvm/Target/TargetRegisterInfo.h"
     47 using namespace llvm;
     48 
     49 static cl::opt<bool> DisableDebugInfoPrinting("disable-debug-info-print",
     50                                               cl::Hidden,
     51      cl::desc("Disable debug info printing"));
     52 
     53 static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
     54      cl::desc("Make an absence of debug location information explicit."),
     55      cl::init(false));
     56 
     57 static cl::opt<bool> GenerateDwarfPubNamesSection("generate-dwarf-pubnames",
     58      cl::Hidden, cl::ZeroOrMore, cl::init(false),
     59      cl::desc("Generate DWARF pubnames section"));
     60 
     61 namespace {
     62   enum DefaultOnOff {
     63     Default, Enable, Disable
     64   };
     65 }
     66 
     67 static cl::opt<DefaultOnOff> DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
     68      cl::desc("Output prototype dwarf accelerator tables."),
     69      cl::values(
     70                 clEnumVal(Default, "Default for platform"),
     71                 clEnumVal(Enable, "Enabled"),
     72                 clEnumVal(Disable, "Disabled"),
     73                 clEnumValEnd),
     74      cl::init(Default));
     75 
     76 static cl::opt<DefaultOnOff> DarwinGDBCompat("darwin-gdb-compat", cl::Hidden,
     77      cl::desc("Compatibility with Darwin gdb."),
     78      cl::values(
     79                 clEnumVal(Default, "Default for platform"),
     80                 clEnumVal(Enable, "Enabled"),
     81                 clEnumVal(Disable, "Disabled"),
     82                 clEnumValEnd),
     83      cl::init(Default));
     84 
     85 static cl::opt<DefaultOnOff> SplitDwarf("split-dwarf", cl::Hidden,
     86      cl::desc("Output prototype dwarf split debug info."),
     87      cl::values(
     88                 clEnumVal(Default, "Default for platform"),
     89                 clEnumVal(Enable, "Enabled"),
     90                 clEnumVal(Disable, "Disabled"),
     91                 clEnumValEnd),
     92      cl::init(Default));
     93 
     94 namespace {
     95   const char *DWARFGroupName = "DWARF Emission";
     96   const char *DbgTimerName = "DWARF Debug Writer";
     97 } // end anonymous namespace
     98 
     99 //===----------------------------------------------------------------------===//
    100 
    101 // Configuration values for initial hash set sizes (log2).
    102 //
    103 static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
    104 
    105 namespace llvm {
    106 
    107 DIType DbgVariable::getType() const {
    108   DIType Ty = Var.getType();
    109   // FIXME: isBlockByrefVariable should be reformulated in terms of complex
    110   // addresses instead.
    111   if (Var.isBlockByrefVariable()) {
    112     /* Byref variables, in Blocks, are declared by the programmer as
    113        "SomeType VarName;", but the compiler creates a
    114        __Block_byref_x_VarName struct, and gives the variable VarName
    115        either the struct, or a pointer to the struct, as its type.  This
    116        is necessary for various behind-the-scenes things the compiler
    117        needs to do with by-reference variables in blocks.
    118 
    119        However, as far as the original *programmer* is concerned, the
    120        variable should still have type 'SomeType', as originally declared.
    121 
    122        The following function dives into the __Block_byref_x_VarName
    123        struct to find the original type of the variable.  This will be
    124        passed back to the code generating the type for the Debug
    125        Information Entry for the variable 'VarName'.  'VarName' will then
    126        have the original type 'SomeType' in its debug information.
    127 
    128        The original type 'SomeType' will be the type of the field named
    129        'VarName' inside the __Block_byref_x_VarName struct.
    130 
    131        NOTE: In order for this to not completely fail on the debugger
    132        side, the Debug Information Entry for the variable VarName needs to
    133        have a DW_AT_location that tells the debugger how to unwind through
    134        the pointers and __Block_byref_x_VarName struct to find the actual
    135        value of the variable.  The function addBlockByrefType does this.  */
    136     DIType subType = Ty;
    137     unsigned tag = Ty.getTag();
    138 
    139     if (tag == dwarf::DW_TAG_pointer_type) {
    140       DIDerivedType DTy = DIDerivedType(Ty);
    141       subType = DTy.getTypeDerivedFrom();
    142     }
    143 
    144     DICompositeType blockStruct = DICompositeType(subType);
    145     DIArray Elements = blockStruct.getTypeArray();
    146 
    147     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
    148       DIDescriptor Element = Elements.getElement(i);
    149       DIDerivedType DT = DIDerivedType(Element);
    150       if (getName() == DT.getName())
    151         return (DT.getTypeDerivedFrom());
    152     }
    153   }
    154   return Ty;
    155 }
    156 
    157 } // end llvm namespace
    158 
    159 DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
    160   : Asm(A), MMI(Asm->MMI), FirstCU(0),
    161     AbbreviationsSet(InitAbbreviationsSetSize),
    162     SourceIdMap(DIEValueAllocator),
    163     PrevLabel(NULL), GlobalCUIndexCount(0),
    164     InfoHolder(A, &AbbreviationsSet, &Abbreviations, "info_string",
    165                DIEValueAllocator),
    166     SkeletonAbbrevSet(InitAbbreviationsSetSize),
    167     SkeletonHolder(A, &SkeletonAbbrevSet, &SkeletonAbbrevs, "skel_string",
    168                    DIEValueAllocator) {
    169 
    170   DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
    171   DwarfStrSectionSym = TextSectionSym = 0;
    172   DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0;
    173   DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0;
    174   FunctionBeginSym = FunctionEndSym = 0;
    175 
    176   // Turn on accelerator tables and older gdb compatibility
    177   // for Darwin.
    178   bool IsDarwin = Triple(M->getTargetTriple()).isOSDarwin();
    179   if (DarwinGDBCompat == Default) {
    180     if (IsDarwin)
    181       IsDarwinGDBCompat = true;
    182     else
    183       IsDarwinGDBCompat = false;
    184   } else
    185     IsDarwinGDBCompat = DarwinGDBCompat == Enable ? true : false;
    186 
    187   if (DwarfAccelTables == Default) {
    188     if (IsDarwin)
    189       HasDwarfAccelTables = true;
    190     else
    191       HasDwarfAccelTables = false;
    192   } else
    193     HasDwarfAccelTables = DwarfAccelTables == Enable ? true : false;
    194 
    195   if (SplitDwarf == Default)
    196     HasSplitDwarf = false;
    197   else
    198     HasSplitDwarf = SplitDwarf == Enable ? true : false;
    199 
    200   {
    201     NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
    202     beginModule();
    203   }
    204 }
    205 DwarfDebug::~DwarfDebug() {
    206 }
    207 
    208 // Switch to the specified MCSection and emit an assembler
    209 // temporary label to it if SymbolStem is specified.
    210 static MCSymbol *emitSectionSym(AsmPrinter *Asm, const MCSection *Section,
    211                                 const char *SymbolStem = 0) {
    212   Asm->OutStreamer.SwitchSection(Section);
    213   if (!SymbolStem) return 0;
    214 
    215   MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
    216   Asm->OutStreamer.EmitLabel(TmpSym);
    217   return TmpSym;
    218 }
    219 
    220 MCSymbol *DwarfUnits::getStringPoolSym() {
    221   return Asm->GetTempSymbol(StringPref);
    222 }
    223 
    224 MCSymbol *DwarfUnits::getStringPoolEntry(StringRef Str) {
    225   std::pair<MCSymbol*, unsigned> &Entry =
    226     StringPool.GetOrCreateValue(Str).getValue();
    227   if (Entry.first) return Entry.first;
    228 
    229   Entry.second = NextStringPoolNumber++;
    230   return Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
    231 }
    232 
    233 unsigned DwarfUnits::getStringPoolIndex(StringRef Str) {
    234   std::pair<MCSymbol*, unsigned> &Entry =
    235     StringPool.GetOrCreateValue(Str).getValue();
    236   if (Entry.first) return Entry.second;
    237 
    238   Entry.second = NextStringPoolNumber++;
    239   Entry.first = Asm->GetTempSymbol(StringPref, Entry.second);
    240   return Entry.second;
    241 }
    242 
    243 unsigned DwarfUnits::getAddrPoolIndex(MCSymbol *Sym) {
    244   std::pair<MCSymbol*, unsigned> &Entry = AddressPool[Sym];
    245   if (Entry.first) return Entry.second;
    246 
    247   Entry.second = NextAddrPoolNumber++;
    248   Entry.first = Sym;
    249   return Entry.second;
    250 }
    251 
    252 // Define a unique number for the abbreviation.
    253 //
    254 void DwarfUnits::assignAbbrevNumber(DIEAbbrev &Abbrev) {
    255   // Profile the node so that we can make it unique.
    256   FoldingSetNodeID ID;
    257   Abbrev.Profile(ID);
    258 
    259   // Check the set for priors.
    260   DIEAbbrev *InSet = AbbreviationsSet->GetOrInsertNode(&Abbrev);
    261 
    262   // If it's newly added.
    263   if (InSet == &Abbrev) {
    264     // Add to abbreviation list.
    265     Abbreviations->push_back(&Abbrev);
    266 
    267     // Assign the vector position + 1 as its number.
    268     Abbrev.setNumber(Abbreviations->size());
    269   } else {
    270     // Assign existing abbreviation number.
    271     Abbrev.setNumber(InSet->getNumber());
    272   }
    273 }
    274 
    275 // If special LLVM prefix that is used to inform the asm
    276 // printer to not emit usual symbol prefix before the symbol name is used then
    277 // return linkage name after skipping this special LLVM prefix.
    278 static StringRef getRealLinkageName(StringRef LinkageName) {
    279   char One = '\1';
    280   if (LinkageName.startswith(StringRef(&One, 1)))
    281     return LinkageName.substr(1);
    282   return LinkageName;
    283 }
    284 
    285 static bool isObjCClass(StringRef Name) {
    286   return Name.startswith("+") || Name.startswith("-");
    287 }
    288 
    289 static bool hasObjCCategory(StringRef Name) {
    290   if (!isObjCClass(Name)) return false;
    291 
    292   size_t pos = Name.find(')');
    293   if (pos != std::string::npos) {
    294     if (Name[pos+1] != ' ') return false;
    295     return true;
    296   }
    297   return false;
    298 }
    299 
    300 static void getObjCClassCategory(StringRef In, StringRef &Class,
    301                                  StringRef &Category) {
    302   if (!hasObjCCategory(In)) {
    303     Class = In.slice(In.find('[') + 1, In.find(' '));
    304     Category = "";
    305     return;
    306   }
    307 
    308   Class = In.slice(In.find('[') + 1, In.find('('));
    309   Category = In.slice(In.find('[') + 1, In.find(' '));
    310   return;
    311 }
    312 
    313 static StringRef getObjCMethodName(StringRef In) {
    314   return In.slice(In.find(' ') + 1, In.find(']'));
    315 }
    316 
    317 // Add the various names to the Dwarf accelerator table names.
    318 static void addSubprogramNames(CompileUnit *TheCU, DISubprogram SP,
    319                                DIE* Die) {
    320   if (!SP.isDefinition()) return;
    321 
    322   TheCU->addAccelName(SP.getName(), Die);
    323 
    324   // If the linkage name is different than the name, go ahead and output
    325   // that as well into the name table.
    326   if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
    327     TheCU->addAccelName(SP.getLinkageName(), Die);
    328 
    329   // If this is an Objective-C selector name add it to the ObjC accelerator
    330   // too.
    331   if (isObjCClass(SP.getName())) {
    332     StringRef Class, Category;
    333     getObjCClassCategory(SP.getName(), Class, Category);
    334     TheCU->addAccelObjC(Class, Die);
    335     if (Category != "")
    336       TheCU->addAccelObjC(Category, Die);
    337     // Also add the base method name to the name table.
    338     TheCU->addAccelName(getObjCMethodName(SP.getName()), Die);
    339   }
    340 }
    341 
    342 // Find DIE for the given subprogram and attach appropriate DW_AT_low_pc
    343 // and DW_AT_high_pc attributes. If there are global variables in this
    344 // scope then create and insert DIEs for these variables.
    345 DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
    346                                           const MDNode *SPNode) {
    347   DIE *SPDie = SPCU->getDIE(SPNode);
    348 
    349   assert(SPDie && "Unable to find subprogram DIE!");
    350   DISubprogram SP(SPNode);
    351 
    352   // If we're updating an abstract DIE, then we will be adding the children and
    353   // object pointer later on. But what we don't want to do is process the
    354   // concrete DIE twice.
    355   DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode);
    356   if (AbsSPDIE) {
    357     bool InSameCU = (AbsSPDIE->getCompileUnit() == SPCU->getCUDie());
    358     // Pick up abstract subprogram DIE.
    359     SPDie = new DIE(dwarf::DW_TAG_subprogram);
    360     // If AbsSPDIE belongs to a different CU, use DW_FORM_ref_addr instead of
    361     // DW_FORM_ref4.
    362     SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
    363                       InSameCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
    364                       AbsSPDIE);
    365     SPCU->addDie(SPDie);
    366   } else {
    367     DISubprogram SPDecl = SP.getFunctionDeclaration();
    368     if (!SPDecl.isSubprogram()) {
    369       // There is not any need to generate specification DIE for a function
    370       // defined at compile unit level. If a function is defined inside another
    371       // function then gdb prefers the definition at top level and but does not
    372       // expect specification DIE in parent function. So avoid creating
    373       // specification DIE for a function defined inside a function.
    374       if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
    375           !SP.getContext().isFile() &&
    376           !isSubprogramContext(SP.getContext())) {
    377         SPCU->addFlag(SPDie, dwarf::DW_AT_declaration);
    378 
    379         // Add arguments.
    380         DICompositeType SPTy = SP.getType();
    381         DIArray Args = SPTy.getTypeArray();
    382         unsigned SPTag = SPTy.getTag();
    383         if (SPTag == dwarf::DW_TAG_subroutine_type)
    384           for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
    385             DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
    386             DIType ATy = DIType(Args.getElement(i));
    387             SPCU->addType(Arg, ATy);
    388             if (ATy.isArtificial())
    389               SPCU->addFlag(Arg, dwarf::DW_AT_artificial);
    390             if (ATy.isObjectPointer())
    391               SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer,
    392                                 dwarf::DW_FORM_ref4, Arg);
    393             SPDie->addChild(Arg);
    394           }
    395         DIE *SPDeclDie = SPDie;
    396         SPDie = new DIE(dwarf::DW_TAG_subprogram);
    397         SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification,
    398                           dwarf::DW_FORM_ref4, SPDeclDie);
    399         SPCU->addDie(SPDie);
    400       }
    401     }
    402   }
    403 
    404   SPCU->addLabelAddress(SPDie, dwarf::DW_AT_low_pc,
    405                         Asm->GetTempSymbol("func_begin",
    406                                            Asm->getFunctionNumber()));
    407   SPCU->addLabelAddress(SPDie, dwarf::DW_AT_high_pc,
    408                         Asm->GetTempSymbol("func_end",
    409                                            Asm->getFunctionNumber()));
    410   const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
    411   MachineLocation Location(RI->getFrameRegister(*Asm->MF));
    412   SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
    413 
    414   // Add name to the name table, we do this here because we're guaranteed
    415   // to have concrete versions of our DW_TAG_subprogram nodes.
    416   addSubprogramNames(SPCU, SP, SPDie);
    417 
    418   return SPDie;
    419 }
    420 
    421 // Construct new DW_TAG_lexical_block for this scope and attach
    422 // DW_AT_low_pc/DW_AT_high_pc labels.
    423 DIE *DwarfDebug::constructLexicalScopeDIE(CompileUnit *TheCU,
    424                                           LexicalScope *Scope) {
    425   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
    426   if (Scope->isAbstractScope())
    427     return ScopeDIE;
    428 
    429   const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
    430   if (Ranges.empty())
    431     return 0;
    432 
    433   SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
    434   if (Ranges.size() > 1) {
    435     // .debug_range section has not been laid out yet. Emit offset in
    436     // .debug_range as a uint, size 4, for now. emitDIE will handle
    437     // DW_AT_ranges appropriately.
    438     TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
    439                    DebugRangeSymbols.size()
    440                    * Asm->getDataLayout().getPointerSize());
    441     for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
    442          RE = Ranges.end(); RI != RE; ++RI) {
    443       DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
    444       DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
    445     }
    446     DebugRangeSymbols.push_back(NULL);
    447     DebugRangeSymbols.push_back(NULL);
    448     return ScopeDIE;
    449   }
    450 
    451   MCSymbol *Start = getLabelBeforeInsn(RI->first);
    452   MCSymbol *End = getLabelAfterInsn(RI->second);
    453 
    454   if (End == 0) return 0;
    455 
    456   assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
    457   assert(End->isDefined() && "Invalid end label for an inlined scope!");
    458 
    459   TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, Start);
    460   TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, End);
    461 
    462   return ScopeDIE;
    463 }
    464 
    465 // This scope represents inlined body of a function. Construct DIE to
    466 // represent this concrete inlined copy of the function.
    467 DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
    468                                           LexicalScope *Scope) {
    469   const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
    470   assert(Ranges.empty() == false &&
    471          "LexicalScope does not have instruction markers!");
    472 
    473   if (!Scope->getScopeNode())
    474     return NULL;
    475   DIScope DS(Scope->getScopeNode());
    476   DISubprogram InlinedSP = getDISubprogram(DS);
    477   DIE *OriginDIE = TheCU->getDIE(InlinedSP);
    478   if (!OriginDIE) {
    479     DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram.");
    480     return NULL;
    481   }
    482 
    483   SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
    484   MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
    485   MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
    486 
    487   if (StartLabel == 0 || EndLabel == 0) {
    488     llvm_unreachable("Unexpected Start and End labels for an inlined scope!");
    489   }
    490   assert(StartLabel->isDefined() &&
    491          "Invalid starting label for an inlined scope!");
    492   assert(EndLabel->isDefined() &&
    493          "Invalid end label for an inlined scope!");
    494 
    495   DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
    496   TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
    497                      dwarf::DW_FORM_ref4, OriginDIE);
    498 
    499   if (Ranges.size() > 1) {
    500     // .debug_range section has not been laid out yet. Emit offset in
    501     // .debug_range as a uint, size 4, for now. emitDIE will handle
    502     // DW_AT_ranges appropriately.
    503     TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
    504                    DebugRangeSymbols.size()
    505                    * Asm->getDataLayout().getPointerSize());
    506     for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
    507          RE = Ranges.end(); RI != RE; ++RI) {
    508       DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
    509       DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
    510     }
    511     DebugRangeSymbols.push_back(NULL);
    512     DebugRangeSymbols.push_back(NULL);
    513   } else {
    514     TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_low_pc, StartLabel);
    515     TheCU->addLabelAddress(ScopeDIE, dwarf::DW_AT_high_pc, EndLabel);
    516   }
    517 
    518   InlinedSubprogramDIEs.insert(OriginDIE);
    519 
    520   // Track the start label for this inlined function.
    521   //.debug_inlined section specification does not clearly state how
    522   // to emit inlined scope that is split into multiple instruction ranges.
    523   // For now, use first instruction range and emit low_pc/high_pc pair and
    524   // corresponding .debug_inlined section entry for this pair.
    525   DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
    526     I = InlineInfo.find(InlinedSP);
    527 
    528   if (I == InlineInfo.end()) {
    529     InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel, ScopeDIE));
    530     InlinedSPNodes.push_back(InlinedSP);
    531   } else
    532     I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
    533 
    534   DILocation DL(Scope->getInlinedAt());
    535   TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0,
    536                  getOrCreateSourceID(DL.getFilename(), DL.getDirectory(),
    537                                      TheCU->getUniqueID()));
    538   TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
    539 
    540   // Add name to the name table, we do this here because we're guaranteed
    541   // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
    542   addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
    543 
    544   return ScopeDIE;
    545 }
    546 
    547 // Construct a DIE for this scope.
    548 DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
    549   if (!Scope || !Scope->getScopeNode())
    550     return NULL;
    551 
    552   DIScope DS(Scope->getScopeNode());
    553   // Early return to avoid creating dangling variable|scope DIEs.
    554   if (!Scope->getInlinedAt() && DS.isSubprogram() && Scope->isAbstractScope() &&
    555       !TheCU->getDIE(DS))
    556     return NULL;
    557 
    558   SmallVector<DIE *, 8> Children;
    559   DIE *ObjectPointer = NULL;
    560 
    561   // Collect arguments for current function.
    562   if (LScopes.isCurrentFunctionScope(Scope))
    563     for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
    564       if (DbgVariable *ArgDV = CurrentFnArguments[i])
    565         if (DIE *Arg =
    566             TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope())) {
    567           Children.push_back(Arg);
    568           if (ArgDV->isObjectPointer()) ObjectPointer = Arg;
    569         }
    570 
    571   // Collect lexical scope children first.
    572   const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
    573   for (unsigned i = 0, N = Variables.size(); i < N; ++i)
    574     if (DIE *Variable =
    575         TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope())) {
    576       Children.push_back(Variable);
    577       if (Variables[i]->isObjectPointer()) ObjectPointer = Variable;
    578     }
    579   const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
    580   for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
    581     if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
    582       Children.push_back(Nested);
    583   DIE *ScopeDIE = NULL;
    584   if (Scope->getInlinedAt())
    585     ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
    586   else if (DS.isSubprogram()) {
    587     ProcessedSPNodes.insert(DS);
    588     if (Scope->isAbstractScope()) {
    589       ScopeDIE = TheCU->getDIE(DS);
    590       // Note down abstract DIE.
    591       if (ScopeDIE)
    592         AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
    593     }
    594     else
    595       ScopeDIE = updateSubprogramScopeDIE(TheCU, DS);
    596   }
    597   else {
    598     // There is no need to emit empty lexical block DIE.
    599     if (Children.empty())
    600       return NULL;
    601     ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
    602   }
    603 
    604   if (!ScopeDIE) return NULL;
    605 
    606   // Add children
    607   for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
    608          E = Children.end(); I != E; ++I)
    609     ScopeDIE->addChild(*I);
    610 
    611   if (DS.isSubprogram() && ObjectPointer != NULL)
    612     TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer,
    613                        dwarf::DW_FORM_ref4, ObjectPointer);
    614 
    615   if (DS.isSubprogram())
    616     TheCU->addPubTypes(DISubprogram(DS));
    617 
    618   return ScopeDIE;
    619 }
    620 
    621 // Look up the source id with the given directory and source file names.
    622 // If none currently exists, create a new id and insert it in the
    623 // SourceIds map. This can update DirectoryNames and SourceFileNames maps
    624 // as well.
    625 unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName,
    626                                          StringRef DirName, unsigned CUID) {
    627   // If we use .loc in assembly, we can't separate .file entries according to
    628   // compile units. Thus all files will belong to the default compile unit.
    629   if (Asm->TM.hasMCUseLoc() &&
    630       Asm->OutStreamer.getKind() == MCStreamer::SK_AsmStreamer)
    631     CUID = 0;
    632 
    633   // If FE did not provide a file name, then assume stdin.
    634   if (FileName.empty())
    635     return getOrCreateSourceID("<stdin>", StringRef(), CUID);
    636 
    637   // TODO: this might not belong here. See if we can factor this better.
    638   if (DirName == CompilationDir)
    639     DirName = "";
    640 
    641   // FileIDCUMap stores the current ID for the given compile unit.
    642   unsigned SrcId = FileIDCUMap[CUID] + 1;
    643 
    644   // We look up the CUID/file/dir by concatenating them with a zero byte.
    645   SmallString<128> NamePair;
    646   NamePair += CUID;
    647   NamePair += '\0';
    648   NamePair += DirName;
    649   NamePair += '\0'; // Zero bytes are not allowed in paths.
    650   NamePair += FileName;
    651 
    652   StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId);
    653   if (Ent.getValue() != SrcId)
    654     return Ent.getValue();
    655 
    656   FileIDCUMap[CUID] = SrcId;
    657   // Print out a .file directive to specify files for .loc directives.
    658   Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName, CUID);
    659 
    660   return SrcId;
    661 }
    662 
    663 // Create new CompileUnit for the given metadata node with tag
    664 // DW_TAG_compile_unit.
    665 CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) {
    666   DICompileUnit DIUnit(N);
    667   StringRef FN = DIUnit.getFilename();
    668   CompilationDir = DIUnit.getDirectory();
    669 
    670   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
    671   CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
    672                                        DIUnit.getLanguage(), Die, Asm,
    673                                        this, &InfoHolder);
    674 
    675   FileIDCUMap[NewCU->getUniqueID()] = 0;
    676   // Call this to emit a .file directive if it wasn't emitted for the source
    677   // file this CU comes from yet.
    678   getOrCreateSourceID(FN, CompilationDir, NewCU->getUniqueID());
    679 
    680   NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
    681   NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
    682                  DIUnit.getLanguage());
    683   NewCU->addString(Die, dwarf::DW_AT_name, FN);
    684   // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
    685   // into an entity. We're using 0 (or a NULL label) for this.
    686   NewCU->addLabelAddress(Die, dwarf::DW_AT_low_pc, NULL);
    687 
    688   // Define start line table label for each Compile Unit.
    689   MCSymbol *LineTableStartSym = Asm->GetTempSymbol("line_table_start",
    690                                                    NewCU->getUniqueID());
    691   Asm->OutStreamer.getContext().setMCLineTableSymbol(LineTableStartSym,
    692                                                      NewCU->getUniqueID());
    693 
    694   // DW_AT_stmt_list is a offset of line number information for this
    695   // compile unit in debug_line section.
    696   // The line table entries are not always emitted in assembly, so it
    697   // is not okay to use line_table_start here.
    698   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
    699     NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
    700                     NewCU->getUniqueID() == 0 ?
    701                     Asm->GetTempSymbol("section_line") : LineTableStartSym);
    702   else if (NewCU->getUniqueID() == 0)
    703     NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
    704   else
    705     NewCU->addDelta(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
    706                     LineTableStartSym, DwarfLineSectionSym);
    707 
    708   if (!CompilationDir.empty())
    709     NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
    710   if (DIUnit.isOptimized())
    711     NewCU->addFlag(Die, dwarf::DW_AT_APPLE_optimized);
    712 
    713   StringRef Flags = DIUnit.getFlags();
    714   if (!Flags.empty())
    715     NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, Flags);
    716 
    717   if (unsigned RVer = DIUnit.getRunTimeVersion())
    718     NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
    719             dwarf::DW_FORM_data1, RVer);
    720 
    721   if (!FirstCU)
    722     FirstCU = NewCU;
    723 
    724   if (useSplitDwarf()) {
    725     // This should be a unique identifier when we want to build .dwp files.
    726     NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
    727     // Now construct the skeleton CU associated.
    728     constructSkeletonCU(N);
    729   }
    730 
    731   InfoHolder.addUnit(NewCU);
    732 
    733   CUMap.insert(std::make_pair(N, NewCU));
    734   return NewCU;
    735 }
    736 
    737 // Construct subprogram DIE.
    738 void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
    739                                         const MDNode *N) {
    740   CompileUnit *&CURef = SPMap[N];
    741   if (CURef)
    742     return;
    743   CURef = TheCU;
    744 
    745   DISubprogram SP(N);
    746   if (!SP.isDefinition())
    747     // This is a method declaration which will be handled while constructing
    748     // class type.
    749     return;
    750 
    751   DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
    752 
    753   // Add to map.
    754   TheCU->insertDIE(N, SubprogramDie);
    755 
    756   // Add to context owner.
    757   TheCU->addToContextOwner(SubprogramDie, SP.getContext());
    758 
    759   // Expose as global, if requested.
    760   if (GenerateDwarfPubNamesSection)
    761     TheCU->addGlobalName(SP.getName(), SubprogramDie);
    762 }
    763 
    764 // Emit all Dwarf sections that should come prior to the content. Create
    765 // global DIEs and emit initial debug info sections. This is invoked by
    766 // the target AsmPrinter.
    767 void DwarfDebug::beginModule() {
    768   if (DisableDebugInfoPrinting)
    769     return;
    770 
    771   const Module *M = MMI->getModule();
    772 
    773   // If module has named metadata anchors then use them, otherwise scan the
    774   // module using debug info finder to collect debug info.
    775   NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
    776   if (!CU_Nodes)
    777     return;
    778 
    779   // Emit initial sections so we can reference labels later.
    780   emitSectionLabels();
    781 
    782   for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
    783     DICompileUnit CUNode(CU_Nodes->getOperand(i));
    784     CompileUnit *CU = constructCompileUnit(CUNode);
    785     DIArray GVs = CUNode.getGlobalVariables();
    786     for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
    787       CU->createGlobalVariableDIE(GVs.getElement(i));
    788     DIArray SPs = CUNode.getSubprograms();
    789     for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
    790       constructSubprogramDIE(CU, SPs.getElement(i));
    791     DIArray EnumTypes = CUNode.getEnumTypes();
    792     for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
    793       CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
    794     DIArray RetainedTypes = CUNode.getRetainedTypes();
    795     for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
    796       CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
    797   }
    798 
    799   // Tell MMI that we have debug info.
    800   MMI->setDebugInfoAvailability(true);
    801 
    802   // Prime section data.
    803   SectionMap.insert(Asm->getObjFileLowering().getTextSection());
    804 }
    805 
    806 // Attach DW_AT_inline attribute with inlined subprogram DIEs.
    807 void DwarfDebug::computeInlinedDIEs() {
    808   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
    809   for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
    810          AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
    811     DIE *ISP = *AI;
    812     FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
    813   }
    814   for (DenseMap<const MDNode *, DIE *>::iterator AI = AbstractSPDies.begin(),
    815          AE = AbstractSPDies.end(); AI != AE; ++AI) {
    816     DIE *ISP = AI->second;
    817     if (InlinedSubprogramDIEs.count(ISP))
    818       continue;
    819     FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
    820   }
    821 }
    822 
    823 // Collect info for variables that were optimized out.
    824 void DwarfDebug::collectDeadVariables() {
    825   const Module *M = MMI->getModule();
    826   DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
    827 
    828   if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
    829     for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
    830       DICompileUnit TheCU(CU_Nodes->getOperand(i));
    831       DIArray Subprograms = TheCU.getSubprograms();
    832       for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
    833         DISubprogram SP(Subprograms.getElement(i));
    834         if (ProcessedSPNodes.count(SP) != 0) continue;
    835         if (!SP.Verify()) continue;
    836         if (!SP.isDefinition()) continue;
    837         DIArray Variables = SP.getVariables();
    838         if (Variables.getNumElements() == 0) continue;
    839 
    840         LexicalScope *Scope =
    841           new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
    842         DeadFnScopeMap[SP] = Scope;
    843 
    844         // Construct subprogram DIE and add variables DIEs.
    845         CompileUnit *SPCU = CUMap.lookup(TheCU);
    846         assert(SPCU && "Unable to find Compile Unit!");
    847         constructSubprogramDIE(SPCU, SP);
    848         DIE *ScopeDIE = SPCU->getDIE(SP);
    849         for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
    850           DIVariable DV(Variables.getElement(vi));
    851           if (!DV.Verify()) continue;
    852           DbgVariable *NewVar = new DbgVariable(DV, NULL);
    853           if (DIE *VariableDIE =
    854               SPCU->constructVariableDIE(NewVar, Scope->isAbstractScope()))
    855             ScopeDIE->addChild(VariableDIE);
    856         }
    857       }
    858     }
    859   }
    860   DeleteContainerSeconds(DeadFnScopeMap);
    861 }
    862 
    863 void DwarfDebug::finalizeModuleInfo() {
    864   // Collect info for variables that were optimized out.
    865   collectDeadVariables();
    866 
    867   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
    868   computeInlinedDIEs();
    869 
    870   // Emit DW_AT_containing_type attribute to connect types with their
    871   // vtable holding type.
    872   for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
    873          CUE = CUMap.end(); CUI != CUE; ++CUI) {
    874     CompileUnit *TheCU = CUI->second;
    875     TheCU->constructContainingTypeDIEs();
    876   }
    877 
    878    // Compute DIE offsets and sizes.
    879   InfoHolder.computeSizeAndOffsets();
    880   if (useSplitDwarf())
    881     SkeletonHolder.computeSizeAndOffsets();
    882 }
    883 
    884 void DwarfDebug::endSections() {
    885   // Standard sections final addresses.
    886   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
    887   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
    888   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
    889   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
    890 
    891   // End text sections.
    892   for (unsigned I = 0, E = SectionMap.size(); I != E; ++I) {
    893     Asm->OutStreamer.SwitchSection(SectionMap[I]);
    894     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", I+1));
    895   }
    896 }
    897 
    898 // Emit all Dwarf sections that should come after the content.
    899 void DwarfDebug::endModule() {
    900 
    901   if (!FirstCU) return;
    902 
    903   // End any existing sections.
    904   // TODO: Does this need to happen?
    905   endSections();
    906 
    907   // Finalize the debug info for the module.
    908   finalizeModuleInfo();
    909 
    910   if (!useSplitDwarf()) {
    911     // Emit all the DIEs into a debug info section.
    912     emitDebugInfo();
    913 
    914     // Corresponding abbreviations into a abbrev section.
    915     emitAbbreviations();
    916 
    917     // Emit info into a debug loc section.
    918     emitDebugLoc();
    919 
    920     // Emit info into a debug aranges section.
    921     emitDebugARanges();
    922 
    923     // Emit info into a debug ranges section.
    924     emitDebugRanges();
    925 
    926     // Emit info into a debug macinfo section.
    927     emitDebugMacInfo();
    928 
    929     // Emit inline info.
    930     // TODO: When we don't need the option anymore we
    931     // can remove all of the code that this section
    932     // depends upon.
    933     if (useDarwinGDBCompat())
    934       emitDebugInlineInfo();
    935   } else {
    936     // TODO: Fill this in for separated debug sections and separate
    937     // out information into new sections.
    938 
    939     // Emit the debug info section and compile units.
    940     emitDebugInfo();
    941     emitDebugInfoDWO();
    942 
    943     // Corresponding abbreviations into a abbrev section.
    944     emitAbbreviations();
    945     emitDebugAbbrevDWO();
    946 
    947     // Emit info into a debug loc section.
    948     emitDebugLoc();
    949 
    950     // Emit info into a debug aranges section.
    951     emitDebugARanges();
    952 
    953     // Emit info into a debug ranges section.
    954     emitDebugRanges();
    955 
    956     // Emit info into a debug macinfo section.
    957     emitDebugMacInfo();
    958 
    959     // Emit DWO addresses.
    960     InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
    961 
    962     // Emit inline info.
    963     // TODO: When we don't need the option anymore we
    964     // can remove all of the code that this section
    965     // depends upon.
    966     if (useDarwinGDBCompat())
    967       emitDebugInlineInfo();
    968   }
    969 
    970   // Emit info into the dwarf accelerator table sections.
    971   if (useDwarfAccelTables()) {
    972     emitAccelNames();
    973     emitAccelObjC();
    974     emitAccelNamespaces();
    975     emitAccelTypes();
    976   }
    977 
    978   // Emit info into a debug pubnames section, if requested.
    979   if (GenerateDwarfPubNamesSection)
    980     emitDebugPubnames();
    981 
    982   // Emit info into a debug pubtypes section.
    983   // TODO: When we don't need the option anymore we can
    984   // remove all of the code that adds to the table.
    985   if (useDarwinGDBCompat())
    986     emitDebugPubTypes();
    987 
    988   // Finally emit string information into a string table.
    989   emitDebugStr();
    990   if (useSplitDwarf())
    991     emitDebugStrDWO();
    992 
    993   // clean up.
    994   SPMap.clear();
    995   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
    996          E = CUMap.end(); I != E; ++I)
    997     delete I->second;
    998 
    999   for (SmallVector<CompileUnit *, 1>::iterator I = SkeletonCUs.begin(),
   1000          E = SkeletonCUs.end(); I != E; ++I)
   1001     delete *I;
   1002 
   1003   // Reset these for the next Module if we have one.
   1004   FirstCU = NULL;
   1005 }
   1006 
   1007 // Find abstract variable, if any, associated with Var.
   1008 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
   1009                                               DebugLoc ScopeLoc) {
   1010   LLVMContext &Ctx = DV->getContext();
   1011   // More then one inlined variable corresponds to one abstract variable.
   1012   DIVariable Var = cleanseInlinedVariable(DV, Ctx);
   1013   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
   1014   if (AbsDbgVariable)
   1015     return AbsDbgVariable;
   1016 
   1017   LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
   1018   if (!Scope)
   1019     return NULL;
   1020 
   1021   AbsDbgVariable = new DbgVariable(Var, NULL);
   1022   addScopeVariable(Scope, AbsDbgVariable);
   1023   AbstractVariables[Var] = AbsDbgVariable;
   1024   return AbsDbgVariable;
   1025 }
   1026 
   1027 // If Var is a current function argument then add it to CurrentFnArguments list.
   1028 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
   1029                                       DbgVariable *Var, LexicalScope *Scope) {
   1030   if (!LScopes.isCurrentFunctionScope(Scope))
   1031     return false;
   1032   DIVariable DV = Var->getVariable();
   1033   if (DV.getTag() != dwarf::DW_TAG_arg_variable)
   1034     return false;
   1035   unsigned ArgNo = DV.getArgNumber();
   1036   if (ArgNo == 0)
   1037     return false;
   1038 
   1039   size_t Size = CurrentFnArguments.size();
   1040   if (Size == 0)
   1041     CurrentFnArguments.resize(MF->getFunction()->arg_size());
   1042   // llvm::Function argument size is not good indicator of how many
   1043   // arguments does the function have at source level.
   1044   if (ArgNo > Size)
   1045     CurrentFnArguments.resize(ArgNo * 2);
   1046   CurrentFnArguments[ArgNo - 1] = Var;
   1047   return true;
   1048 }
   1049 
   1050 // Collect variable information from side table maintained by MMI.
   1051 void
   1052 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
   1053                                    SmallPtrSet<const MDNode *, 16> &Processed) {
   1054   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
   1055   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
   1056          VE = VMap.end(); VI != VE; ++VI) {
   1057     const MDNode *Var = VI->first;
   1058     if (!Var) continue;
   1059     Processed.insert(Var);
   1060     DIVariable DV(Var);
   1061     const std::pair<unsigned, DebugLoc> &VP = VI->second;
   1062 
   1063     LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
   1064 
   1065     // If variable scope is not found then skip this variable.
   1066     if (Scope == 0)
   1067       continue;
   1068 
   1069     DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
   1070     DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable);
   1071     RegVar->setFrameIndex(VP.first);
   1072     if (!addCurrentFnArgument(MF, RegVar, Scope))
   1073       addScopeVariable(Scope, RegVar);
   1074     if (AbsDbgVariable)
   1075       AbsDbgVariable->setFrameIndex(VP.first);
   1076   }
   1077 }
   1078 
   1079 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
   1080 // defined reg.
   1081 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
   1082   assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
   1083   return MI->getNumOperands() == 3 &&
   1084          MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
   1085          MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
   1086 }
   1087 
   1088 // Get .debug_loc entry for the instruction range starting at MI.
   1089 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
   1090                                          const MCSymbol *FLabel,
   1091                                          const MCSymbol *SLabel,
   1092                                          const MachineInstr *MI) {
   1093   const MDNode *Var =  MI->getOperand(MI->getNumOperands() - 1).getMetadata();
   1094 
   1095   if (MI->getNumOperands() != 3) {
   1096     MachineLocation MLoc = Asm->getDebugValueLocation(MI);
   1097     return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
   1098   }
   1099   if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
   1100     MachineLocation MLoc;
   1101     MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
   1102     return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
   1103   }
   1104   if (MI->getOperand(0).isImm())
   1105     return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
   1106   if (MI->getOperand(0).isFPImm())
   1107     return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
   1108   if (MI->getOperand(0).isCImm())
   1109     return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
   1110 
   1111   llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
   1112 }
   1113 
   1114 // Find variables for each lexical scope.
   1115 void
   1116 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
   1117                                 SmallPtrSet<const MDNode *, 16> &Processed) {
   1118 
   1119   // collection info from MMI table.
   1120   collectVariableInfoFromMMITable(MF, Processed);
   1121 
   1122   for (SmallVectorImpl<const MDNode*>::const_iterator
   1123          UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
   1124          ++UVI) {
   1125     const MDNode *Var = *UVI;
   1126     if (Processed.count(Var))
   1127       continue;
   1128 
   1129     // History contains relevant DBG_VALUE instructions for Var and instructions
   1130     // clobbering it.
   1131     SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
   1132     if (History.empty())
   1133       continue;
   1134     const MachineInstr *MInsn = History.front();
   1135 
   1136     DIVariable DV(Var);
   1137     LexicalScope *Scope = NULL;
   1138     if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
   1139         DISubprogram(DV.getContext()).describes(MF->getFunction()))
   1140       Scope = LScopes.getCurrentFunctionScope();
   1141     else if (MDNode *IA = DV.getInlinedAt())
   1142       Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
   1143     else
   1144       Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
   1145     // If variable scope is not found then skip this variable.
   1146     if (!Scope)
   1147       continue;
   1148 
   1149     Processed.insert(DV);
   1150     assert(MInsn->isDebugValue() && "History must begin with debug value");
   1151     DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
   1152     DbgVariable *RegVar = new DbgVariable(DV, AbsVar);
   1153     if (!addCurrentFnArgument(MF, RegVar, Scope))
   1154       addScopeVariable(Scope, RegVar);
   1155     if (AbsVar)
   1156       AbsVar->setMInsn(MInsn);
   1157 
   1158     // Simplify ranges that are fully coalesced.
   1159     if (History.size() <= 1 || (History.size() == 2 &&
   1160                                 MInsn->isIdenticalTo(History.back()))) {
   1161       RegVar->setMInsn(MInsn);
   1162       continue;
   1163     }
   1164 
   1165     // Handle multiple DBG_VALUE instructions describing one variable.
   1166     RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
   1167 
   1168     for (SmallVectorImpl<const MachineInstr*>::const_iterator
   1169            HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
   1170       const MachineInstr *Begin = *HI;
   1171       assert(Begin->isDebugValue() && "Invalid History entry");
   1172 
   1173       // Check if DBG_VALUE is truncating a range.
   1174       if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
   1175           && !Begin->getOperand(0).getReg())
   1176         continue;
   1177 
   1178       // Compute the range for a register location.
   1179       const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
   1180       const MCSymbol *SLabel = 0;
   1181 
   1182       if (HI + 1 == HE)
   1183         // If Begin is the last instruction in History then its value is valid
   1184         // until the end of the function.
   1185         SLabel = FunctionEndSym;
   1186       else {
   1187         const MachineInstr *End = HI[1];
   1188         DEBUG(dbgs() << "DotDebugLoc Pair:\n"
   1189               << "\t" << *Begin << "\t" << *End << "\n");
   1190         if (End->isDebugValue())
   1191           SLabel = getLabelBeforeInsn(End);
   1192         else {
   1193           // End is a normal instruction clobbering the range.
   1194           SLabel = getLabelAfterInsn(End);
   1195           assert(SLabel && "Forgot label after clobber instruction");
   1196           ++HI;
   1197         }
   1198       }
   1199 
   1200       // The value is valid until the next DBG_VALUE or clobber.
   1201       DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
   1202                                                     Begin));
   1203     }
   1204     DotDebugLocEntries.push_back(DotDebugLocEntry());
   1205   }
   1206 
   1207   // Collect info for variables that were optimized out.
   1208   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
   1209   DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
   1210   for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
   1211     DIVariable DV(Variables.getElement(i));
   1212     if (!DV || !DV.Verify() || !Processed.insert(DV))
   1213       continue;
   1214     if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
   1215       addScopeVariable(Scope, new DbgVariable(DV, NULL));
   1216   }
   1217 }
   1218 
   1219 // Return Label preceding the instruction.
   1220 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
   1221   MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
   1222   assert(Label && "Didn't insert label before instruction");
   1223   return Label;
   1224 }
   1225 
   1226 // Return Label immediately following the instruction.
   1227 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
   1228   return LabelsAfterInsn.lookup(MI);
   1229 }
   1230 
   1231 // Process beginning of an instruction.
   1232 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
   1233   // Check if source location changes, but ignore DBG_VALUE locations.
   1234   if (!MI->isDebugValue()) {
   1235     DebugLoc DL = MI->getDebugLoc();
   1236     if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
   1237       unsigned Flags = 0;
   1238       PrevInstLoc = DL;
   1239       if (DL == PrologEndLoc) {
   1240         Flags |= DWARF2_FLAG_PROLOGUE_END;
   1241         PrologEndLoc = DebugLoc();
   1242       }
   1243       if (PrologEndLoc.isUnknown())
   1244         Flags |= DWARF2_FLAG_IS_STMT;
   1245 
   1246       if (!DL.isUnknown()) {
   1247         const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
   1248         recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
   1249       } else
   1250         recordSourceLine(0, 0, 0, 0);
   1251     }
   1252   }
   1253 
   1254   // Insert labels where requested.
   1255   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
   1256     LabelsBeforeInsn.find(MI);
   1257 
   1258   // No label needed.
   1259   if (I == LabelsBeforeInsn.end())
   1260     return;
   1261 
   1262   // Label already assigned.
   1263   if (I->second)
   1264     return;
   1265 
   1266   if (!PrevLabel) {
   1267     PrevLabel = MMI->getContext().CreateTempSymbol();
   1268     Asm->OutStreamer.EmitLabel(PrevLabel);
   1269   }
   1270   I->second = PrevLabel;
   1271 }
   1272 
   1273 // Process end of an instruction.
   1274 void DwarfDebug::endInstruction(const MachineInstr *MI) {
   1275   // Don't create a new label after DBG_VALUE instructions.
   1276   // They don't generate code.
   1277   if (!MI->isDebugValue())
   1278     PrevLabel = 0;
   1279 
   1280   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
   1281     LabelsAfterInsn.find(MI);
   1282 
   1283   // No label needed.
   1284   if (I == LabelsAfterInsn.end())
   1285     return;
   1286 
   1287   // Label already assigned.
   1288   if (I->second)
   1289     return;
   1290 
   1291   // We need a label after this instruction.
   1292   if (!PrevLabel) {
   1293     PrevLabel = MMI->getContext().CreateTempSymbol();
   1294     Asm->OutStreamer.EmitLabel(PrevLabel);
   1295   }
   1296   I->second = PrevLabel;
   1297 }
   1298 
   1299 // Each LexicalScope has first instruction and last instruction to mark
   1300 // beginning and end of a scope respectively. Create an inverse map that list
   1301 // scopes starts (and ends) with an instruction. One instruction may start (or
   1302 // end) multiple scopes. Ignore scopes that are not reachable.
   1303 void DwarfDebug::identifyScopeMarkers() {
   1304   SmallVector<LexicalScope *, 4> WorkList;
   1305   WorkList.push_back(LScopes.getCurrentFunctionScope());
   1306   while (!WorkList.empty()) {
   1307     LexicalScope *S = WorkList.pop_back_val();
   1308 
   1309     const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
   1310     if (!Children.empty())
   1311       for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
   1312              SE = Children.end(); SI != SE; ++SI)
   1313         WorkList.push_back(*SI);
   1314 
   1315     if (S->isAbstractScope())
   1316       continue;
   1317 
   1318     const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
   1319     if (Ranges.empty())
   1320       continue;
   1321     for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
   1322            RE = Ranges.end(); RI != RE; ++RI) {
   1323       assert(RI->first && "InsnRange does not have first instruction!");
   1324       assert(RI->second && "InsnRange does not have second instruction!");
   1325       requestLabelBeforeInsn(RI->first);
   1326       requestLabelAfterInsn(RI->second);
   1327     }
   1328   }
   1329 }
   1330 
   1331 // Get MDNode for DebugLoc's scope.
   1332 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
   1333   if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
   1334     return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
   1335   return DL.getScope(Ctx);
   1336 }
   1337 
   1338 // Walk up the scope chain of given debug loc and find line number info
   1339 // for the function.
   1340 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
   1341   const MDNode *Scope = getScopeNode(DL, Ctx);
   1342   DISubprogram SP = getDISubprogram(Scope);
   1343   if (SP.Verify()) {
   1344     // Check for number of operands since the compatibility is
   1345     // cheap here.
   1346     if (SP->getNumOperands() > 19)
   1347       return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
   1348     else
   1349       return DebugLoc::get(SP.getLineNumber(), 0, SP);
   1350   }
   1351 
   1352   return DebugLoc();
   1353 }
   1354 
   1355 // Gather pre-function debug information.  Assumes being called immediately
   1356 // after the function entry point has been emitted.
   1357 void DwarfDebug::beginFunction(const MachineFunction *MF) {
   1358   if (!MMI->hasDebugInfo()) return;
   1359   LScopes.initialize(*MF);
   1360   if (LScopes.empty()) return;
   1361   identifyScopeMarkers();
   1362 
   1363   // Set DwarfCompileUnitID in MCContext to the Compile Unit this function
   1364   // belongs to.
   1365   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
   1366   CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
   1367   assert(TheCU && "Unable to find compile unit!");
   1368   Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
   1369 
   1370   FunctionBeginSym = Asm->GetTempSymbol("func_begin",
   1371                                         Asm->getFunctionNumber());
   1372   // Assumes in correct section after the entry point.
   1373   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
   1374 
   1375   assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
   1376 
   1377   const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
   1378   // LiveUserVar - Map physreg numbers to the MDNode they contain.
   1379   std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
   1380 
   1381   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
   1382        I != E; ++I) {
   1383     bool AtBlockEntry = true;
   1384     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
   1385          II != IE; ++II) {
   1386       const MachineInstr *MI = II;
   1387 
   1388       if (MI->isDebugValue()) {
   1389         assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
   1390 
   1391         // Keep track of user variables.
   1392         const MDNode *Var =
   1393           MI->getOperand(MI->getNumOperands() - 1).getMetadata();
   1394 
   1395         // Variable is in a register, we need to check for clobbers.
   1396         if (isDbgValueInDefinedReg(MI))
   1397           LiveUserVar[MI->getOperand(0).getReg()] = Var;
   1398 
   1399         // Check the history of this variable.
   1400         SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
   1401         if (History.empty()) {
   1402           UserVariables.push_back(Var);
   1403           // The first mention of a function argument gets the FunctionBeginSym
   1404           // label, so arguments are visible when breaking at function entry.
   1405           DIVariable DV(Var);
   1406           if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
   1407               DISubprogram(getDISubprogram(DV.getContext()))
   1408                 .describes(MF->getFunction()))
   1409             LabelsBeforeInsn[MI] = FunctionBeginSym;
   1410         } else {
   1411           // We have seen this variable before. Try to coalesce DBG_VALUEs.
   1412           const MachineInstr *Prev = History.back();
   1413           if (Prev->isDebugValue()) {
   1414             // Coalesce identical entries at the end of History.
   1415             if (History.size() >= 2 &&
   1416                 Prev->isIdenticalTo(History[History.size() - 2])) {
   1417               DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
   1418                     << "\t" << *Prev
   1419                     << "\t" << *History[History.size() - 2] << "\n");
   1420               History.pop_back();
   1421             }
   1422 
   1423             // Terminate old register assignments that don't reach MI;
   1424             MachineFunction::const_iterator PrevMBB = Prev->getParent();
   1425             if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
   1426                 isDbgValueInDefinedReg(Prev)) {
   1427               // Previous register assignment needs to terminate at the end of
   1428               // its basic block.
   1429               MachineBasicBlock::const_iterator LastMI =
   1430                 PrevMBB->getLastNonDebugInstr();
   1431               if (LastMI == PrevMBB->end()) {
   1432                 // Drop DBG_VALUE for empty range.
   1433                 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
   1434                       << "\t" << *Prev << "\n");
   1435                 History.pop_back();
   1436               }
   1437               else {
   1438                 // Terminate after LastMI.
   1439                 History.push_back(LastMI);
   1440               }
   1441             }
   1442           }
   1443         }
   1444         History.push_back(MI);
   1445       } else {
   1446         // Not a DBG_VALUE instruction.
   1447         if (!MI->isLabel())
   1448           AtBlockEntry = false;
   1449 
   1450         // First known non-DBG_VALUE and non-frame setup location marks
   1451         // the beginning of the function body.
   1452         if (!MI->getFlag(MachineInstr::FrameSetup) &&
   1453             (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
   1454           PrologEndLoc = MI->getDebugLoc();
   1455 
   1456         // Check if the instruction clobbers any registers with debug vars.
   1457         for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
   1458                MOE = MI->operands_end(); MOI != MOE; ++MOI) {
   1459           if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
   1460             continue;
   1461           for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
   1462                AI.isValid(); ++AI) {
   1463             unsigned Reg = *AI;
   1464             const MDNode *Var = LiveUserVar[Reg];
   1465             if (!Var)
   1466               continue;
   1467             // Reg is now clobbered.
   1468             LiveUserVar[Reg] = 0;
   1469 
   1470             // Was MD last defined by a DBG_VALUE referring to Reg?
   1471             DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
   1472             if (HistI == DbgValues.end())
   1473               continue;
   1474             SmallVectorImpl<const MachineInstr*> &History = HistI->second;
   1475             if (History.empty())
   1476               continue;
   1477             const MachineInstr *Prev = History.back();
   1478             // Sanity-check: Register assignments are terminated at the end of
   1479             // their block.
   1480             if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
   1481               continue;
   1482             // Is the variable still in Reg?
   1483             if (!isDbgValueInDefinedReg(Prev) ||
   1484                 Prev->getOperand(0).getReg() != Reg)
   1485               continue;
   1486             // Var is clobbered. Make sure the next instruction gets a label.
   1487             History.push_back(MI);
   1488           }
   1489         }
   1490       }
   1491     }
   1492   }
   1493 
   1494   for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
   1495        I != E; ++I) {
   1496     SmallVectorImpl<const MachineInstr*> &History = I->second;
   1497     if (History.empty())
   1498       continue;
   1499 
   1500     // Make sure the final register assignments are terminated.
   1501     const MachineInstr *Prev = History.back();
   1502     if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
   1503       const MachineBasicBlock *PrevMBB = Prev->getParent();
   1504       MachineBasicBlock::const_iterator LastMI =
   1505         PrevMBB->getLastNonDebugInstr();
   1506       if (LastMI == PrevMBB->end())
   1507         // Drop DBG_VALUE for empty range.
   1508         History.pop_back();
   1509       else {
   1510         // Terminate after LastMI.
   1511         History.push_back(LastMI);
   1512       }
   1513     }
   1514     // Request labels for the full history.
   1515     for (unsigned i = 0, e = History.size(); i != e; ++i) {
   1516       const MachineInstr *MI = History[i];
   1517       if (MI->isDebugValue())
   1518         requestLabelBeforeInsn(MI);
   1519       else
   1520         requestLabelAfterInsn(MI);
   1521     }
   1522   }
   1523 
   1524   PrevInstLoc = DebugLoc();
   1525   PrevLabel = FunctionBeginSym;
   1526 
   1527   // Record beginning of function.
   1528   if (!PrologEndLoc.isUnknown()) {
   1529     DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
   1530                                        MF->getFunction()->getContext());
   1531     recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
   1532                      FnStartDL.getScope(MF->getFunction()->getContext()),
   1533     // We'd like to list the prologue as "not statements" but GDB behaves
   1534     // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
   1535                      DWARF2_FLAG_IS_STMT);
   1536   }
   1537 }
   1538 
   1539 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
   1540 //  SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
   1541   ScopeVariables[LS].push_back(Var);
   1542 //  Vars.push_back(Var);
   1543 }
   1544 
   1545 // Gather and emit post-function debug information.
   1546 void DwarfDebug::endFunction(const MachineFunction *MF) {
   1547   if (!MMI->hasDebugInfo() || LScopes.empty()) return;
   1548 
   1549   // Define end label for subprogram.
   1550   FunctionEndSym = Asm->GetTempSymbol("func_end",
   1551                                       Asm->getFunctionNumber());
   1552   // Assumes in correct section after the entry point.
   1553   Asm->OutStreamer.EmitLabel(FunctionEndSym);
   1554   // Set DwarfCompileUnitID in MCContext to default value.
   1555   Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
   1556 
   1557   SmallPtrSet<const MDNode *, 16> ProcessedVars;
   1558   collectVariableInfo(MF, ProcessedVars);
   1559 
   1560   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
   1561   CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
   1562   assert(TheCU && "Unable to find compile unit!");
   1563 
   1564   // Construct abstract scopes.
   1565   ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
   1566   for (unsigned i = 0, e = AList.size(); i != e; ++i) {
   1567     LexicalScope *AScope = AList[i];
   1568     DISubprogram SP(AScope->getScopeNode());
   1569     if (SP.Verify()) {
   1570       // Collect info for variables that were optimized out.
   1571       DIArray Variables = SP.getVariables();
   1572       for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
   1573         DIVariable DV(Variables.getElement(i));
   1574         if (!DV || !DV.Verify() || !ProcessedVars.insert(DV))
   1575           continue;
   1576         // Check that DbgVariable for DV wasn't created earlier, when
   1577         // findAbstractVariable() was called for inlined instance of DV.
   1578         LLVMContext &Ctx = DV->getContext();
   1579         DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
   1580         if (AbstractVariables.lookup(CleanDV))
   1581           continue;
   1582         if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
   1583           addScopeVariable(Scope, new DbgVariable(DV, NULL));
   1584       }
   1585     }
   1586     if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
   1587       constructScopeDIE(TheCU, AScope);
   1588   }
   1589 
   1590   DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
   1591 
   1592   if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
   1593     TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
   1594 
   1595   DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
   1596                                                MMI->getFrameMoves()));
   1597 
   1598   // Clear debug info
   1599   for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
   1600          I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
   1601     DeleteContainerPointers(I->second);
   1602   ScopeVariables.clear();
   1603   DeleteContainerPointers(CurrentFnArguments);
   1604   UserVariables.clear();
   1605   DbgValues.clear();
   1606   AbstractVariables.clear();
   1607   LabelsBeforeInsn.clear();
   1608   LabelsAfterInsn.clear();
   1609   PrevLabel = NULL;
   1610 }
   1611 
   1612 // Register a source line with debug info. Returns the  unique label that was
   1613 // emitted and which provides correspondence to the source line list.
   1614 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
   1615                                   unsigned Flags) {
   1616   StringRef Fn;
   1617   StringRef Dir;
   1618   unsigned Src = 1;
   1619   if (S) {
   1620     DIDescriptor Scope(S);
   1621 
   1622     if (Scope.isCompileUnit()) {
   1623       DICompileUnit CU(S);
   1624       Fn = CU.getFilename();
   1625       Dir = CU.getDirectory();
   1626     } else if (Scope.isFile()) {
   1627       DIFile F(S);
   1628       Fn = F.getFilename();
   1629       Dir = F.getDirectory();
   1630     } else if (Scope.isSubprogram()) {
   1631       DISubprogram SP(S);
   1632       Fn = SP.getFilename();
   1633       Dir = SP.getDirectory();
   1634     } else if (Scope.isLexicalBlockFile()) {
   1635       DILexicalBlockFile DBF(S);
   1636       Fn = DBF.getFilename();
   1637       Dir = DBF.getDirectory();
   1638     } else if (Scope.isLexicalBlock()) {
   1639       DILexicalBlock DB(S);
   1640       Fn = DB.getFilename();
   1641       Dir = DB.getDirectory();
   1642     } else
   1643       llvm_unreachable("Unexpected scope info");
   1644 
   1645     Src = getOrCreateSourceID(Fn, Dir,
   1646             Asm->OutStreamer.getContext().getDwarfCompileUnitID());
   1647   }
   1648   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
   1649 }
   1650 
   1651 //===----------------------------------------------------------------------===//
   1652 // Emit Methods
   1653 //===----------------------------------------------------------------------===//
   1654 
   1655 // Compute the size and offset of a DIE.
   1656 unsigned
   1657 DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
   1658   // Get the children.
   1659   const std::vector<DIE *> &Children = Die->getChildren();
   1660 
   1661   // Record the abbreviation.
   1662   assignAbbrevNumber(Die->getAbbrev());
   1663 
   1664   // Get the abbreviation for this DIE.
   1665   unsigned AbbrevNumber = Die->getAbbrevNumber();
   1666   const DIEAbbrev *Abbrev = Abbreviations->at(AbbrevNumber - 1);
   1667 
   1668   // Set DIE offset
   1669   Die->setOffset(Offset);
   1670 
   1671   // Start the size with the size of abbreviation code.
   1672   Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
   1673 
   1674   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
   1675   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
   1676 
   1677   // Size the DIE attribute values.
   1678   for (unsigned i = 0, N = Values.size(); i < N; ++i)
   1679     // Size attribute value.
   1680     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
   1681 
   1682   // Size the DIE children if any.
   1683   if (!Children.empty()) {
   1684     assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
   1685            "Children flag not set");
   1686 
   1687     for (unsigned j = 0, M = Children.size(); j < M; ++j)
   1688       Offset = computeSizeAndOffset(Children[j], Offset);
   1689 
   1690     // End of children marker.
   1691     Offset += sizeof(int8_t);
   1692   }
   1693 
   1694   Die->setSize(Offset - Die->getOffset());
   1695   return Offset;
   1696 }
   1697 
   1698 // Compute the size and offset of all the DIEs.
   1699 void DwarfUnits::computeSizeAndOffsets() {
   1700   // Offset from the beginning of debug info section.
   1701   unsigned AccuOffset = 0;
   1702   for (SmallVector<CompileUnit *, 1>::iterator I = CUs.begin(),
   1703          E = CUs.end(); I != E; ++I) {
   1704     (*I)->setDebugInfoOffset(AccuOffset);
   1705     unsigned Offset =
   1706       sizeof(int32_t) + // Length of Compilation Unit Info
   1707       sizeof(int16_t) + // DWARF version number
   1708       sizeof(int32_t) + // Offset Into Abbrev. Section
   1709       sizeof(int8_t);   // Pointer Size (in bytes)
   1710 
   1711     unsigned EndOffset = computeSizeAndOffset((*I)->getCUDie(), Offset);
   1712     AccuOffset += EndOffset;
   1713   }
   1714 }
   1715 
   1716 // Emit initial Dwarf sections with a label at the start of each one.
   1717 void DwarfDebug::emitSectionLabels() {
   1718   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
   1719 
   1720   // Dwarf sections base addresses.
   1721   DwarfInfoSectionSym =
   1722     emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
   1723   DwarfAbbrevSectionSym =
   1724     emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
   1725   if (useSplitDwarf())
   1726     DwarfAbbrevDWOSectionSym =
   1727       emitSectionSym(Asm, TLOF.getDwarfAbbrevDWOSection(),
   1728                      "section_abbrev_dwo");
   1729   emitSectionSym(Asm, TLOF.getDwarfARangesSection());
   1730 
   1731   if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
   1732     emitSectionSym(Asm, MacroInfo);
   1733 
   1734   DwarfLineSectionSym =
   1735     emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
   1736   emitSectionSym(Asm, TLOF.getDwarfLocSection());
   1737   if (GenerateDwarfPubNamesSection)
   1738     emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
   1739   emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
   1740   DwarfStrSectionSym =
   1741     emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
   1742   if (useSplitDwarf())
   1743     DwarfStrDWOSectionSym =
   1744       emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
   1745   DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
   1746                                              "debug_range");
   1747 
   1748   DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
   1749                                            "section_debug_loc");
   1750 
   1751   TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
   1752   emitSectionSym(Asm, TLOF.getDataSection());
   1753 }
   1754 
   1755 // Recursively emits a debug information entry.
   1756 void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
   1757   // Get the abbreviation for this DIE.
   1758   unsigned AbbrevNumber = Die->getAbbrevNumber();
   1759   const DIEAbbrev *Abbrev = Abbrevs->at(AbbrevNumber - 1);
   1760 
   1761   // Emit the code (index) for the abbreviation.
   1762   if (Asm->isVerbose())
   1763     Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
   1764                                 Twine::utohexstr(Die->getOffset()) + ":0x" +
   1765                                 Twine::utohexstr(Die->getSize()) + " " +
   1766                                 dwarf::TagString(Abbrev->getTag()));
   1767   Asm->EmitULEB128(AbbrevNumber);
   1768 
   1769   const SmallVector<DIEValue*, 32> &Values = Die->getValues();
   1770   const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
   1771 
   1772   // Emit the DIE attribute values.
   1773   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
   1774     unsigned Attr = AbbrevData[i].getAttribute();
   1775     unsigned Form = AbbrevData[i].getForm();
   1776     assert(Form && "Too many attributes for DIE (check abbreviation)");
   1777 
   1778     if (Asm->isVerbose())
   1779       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
   1780 
   1781     switch (Attr) {
   1782     case dwarf::DW_AT_abstract_origin: {
   1783       DIEEntry *E = cast<DIEEntry>(Values[i]);
   1784       DIE *Origin = E->getEntry();
   1785       unsigned Addr = Origin->getOffset();
   1786       if (Form == dwarf::DW_FORM_ref_addr) {
   1787         // For DW_FORM_ref_addr, output the offset from beginning of debug info
   1788         // section. Origin->getOffset() returns the offset from start of the
   1789         // compile unit.
   1790         DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
   1791         Addr += Holder.getCUOffset(Origin->getCompileUnit());
   1792       }
   1793       Asm->EmitInt32(Addr);
   1794       break;
   1795     }
   1796     case dwarf::DW_AT_ranges: {
   1797       // DW_AT_range Value encodes offset in debug_range section.
   1798       DIEInteger *V = cast<DIEInteger>(Values[i]);
   1799 
   1800       if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
   1801         Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
   1802                                  V->getValue(),
   1803                                  4);
   1804       } else {
   1805         Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
   1806                                        V->getValue(),
   1807                                        DwarfDebugRangeSectionSym,
   1808                                        4);
   1809       }
   1810       break;
   1811     }
   1812     case dwarf::DW_AT_location: {
   1813       if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
   1814         if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
   1815           Asm->EmitLabelReference(L->getValue(), 4);
   1816         else
   1817           Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
   1818       } else {
   1819         Values[i]->EmitValue(Asm, Form);
   1820       }
   1821       break;
   1822     }
   1823     case dwarf::DW_AT_accessibility: {
   1824       if (Asm->isVerbose()) {
   1825         DIEInteger *V = cast<DIEInteger>(Values[i]);
   1826         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
   1827       }
   1828       Values[i]->EmitValue(Asm, Form);
   1829       break;
   1830     }
   1831     default:
   1832       // Emit an attribute using the defined form.
   1833       Values[i]->EmitValue(Asm, Form);
   1834       break;
   1835     }
   1836   }
   1837 
   1838   // Emit the DIE children if any.
   1839   if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
   1840     const std::vector<DIE *> &Children = Die->getChildren();
   1841 
   1842     for (unsigned j = 0, M = Children.size(); j < M; ++j)
   1843       emitDIE(Children[j], Abbrevs);
   1844 
   1845     if (Asm->isVerbose())
   1846       Asm->OutStreamer.AddComment("End Of Children Mark");
   1847     Asm->EmitInt8(0);
   1848   }
   1849 }
   1850 
   1851 // Emit the various dwarf units to the unit section USection with
   1852 // the abbreviations going into ASection.
   1853 void DwarfUnits::emitUnits(DwarfDebug *DD,
   1854                            const MCSection *USection,
   1855                            const MCSection *ASection,
   1856                            const MCSymbol *ASectionSym) {
   1857   Asm->OutStreamer.SwitchSection(USection);
   1858   for (SmallVector<CompileUnit *, 1>::iterator I = CUs.begin(),
   1859          E = CUs.end(); I != E; ++I) {
   1860     CompileUnit *TheCU = *I;
   1861     DIE *Die = TheCU->getCUDie();
   1862 
   1863     // Emit the compile units header.
   1864     Asm->OutStreamer
   1865       .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(),
   1866                                     TheCU->getUniqueID()));
   1867 
   1868     // Emit size of content not including length itself
   1869     unsigned ContentSize = Die->getSize() +
   1870       sizeof(int16_t) + // DWARF version number
   1871       sizeof(int32_t) + // Offset Into Abbrev. Section
   1872       sizeof(int8_t);   // Pointer Size (in bytes)
   1873 
   1874     Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
   1875     Asm->EmitInt32(ContentSize);
   1876     Asm->OutStreamer.AddComment("DWARF version number");
   1877     Asm->EmitInt16(dwarf::DWARF_VERSION);
   1878     Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
   1879     Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
   1880                            ASectionSym);
   1881     Asm->OutStreamer.AddComment("Address Size (in bytes)");
   1882     Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
   1883 
   1884     DD->emitDIE(Die, Abbreviations);
   1885     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(),
   1886                                                   TheCU->getUniqueID()));
   1887   }
   1888 }
   1889 
   1890 /// For a given compile unit DIE, returns offset from beginning of debug info.
   1891 unsigned DwarfUnits::getCUOffset(DIE *Die) {
   1892   assert(Die->getTag() == dwarf::DW_TAG_compile_unit  &&
   1893          "Input DIE should be compile unit in getCUOffset.");
   1894   for (SmallVector<CompileUnit *, 1>::iterator I = CUs.begin(),
   1895        E = CUs.end(); I != E; ++I) {
   1896     CompileUnit *TheCU = *I;
   1897     if (TheCU->getCUDie() == Die)
   1898       return TheCU->getDebugInfoOffset();
   1899   }
   1900   llvm_unreachable("The compile unit DIE should belong to CUs in DwarfUnits.");
   1901 }
   1902 
   1903 // Emit the debug info section.
   1904 void DwarfDebug::emitDebugInfo() {
   1905   DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
   1906 
   1907   Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(),
   1908                    Asm->getObjFileLowering().getDwarfAbbrevSection(),
   1909                    DwarfAbbrevSectionSym);
   1910 }
   1911 
   1912 // Emit the abbreviation section.
   1913 void DwarfDebug::emitAbbreviations() {
   1914   if (!useSplitDwarf())
   1915     emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
   1916                 &Abbreviations);
   1917   else
   1918     emitSkeletonAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
   1919 }
   1920 
   1921 void DwarfDebug::emitAbbrevs(const MCSection *Section,
   1922                              std::vector<DIEAbbrev *> *Abbrevs) {
   1923   // Check to see if it is worth the effort.
   1924   if (!Abbrevs->empty()) {
   1925     // Start the debug abbrev section.
   1926     Asm->OutStreamer.SwitchSection(Section);
   1927 
   1928     MCSymbol *Begin = Asm->GetTempSymbol(Section->getLabelBeginName());
   1929     Asm->OutStreamer.EmitLabel(Begin);
   1930 
   1931     // For each abbrevation.
   1932     for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
   1933       // Get abbreviation data
   1934       const DIEAbbrev *Abbrev = Abbrevs->at(i);
   1935 
   1936       // Emit the abbrevations code (base 1 index.)
   1937       Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
   1938 
   1939       // Emit the abbreviations data.
   1940       Abbrev->Emit(Asm);
   1941     }
   1942 
   1943     // Mark end of abbreviations.
   1944     Asm->EmitULEB128(0, "EOM(3)");
   1945 
   1946     MCSymbol *End = Asm->GetTempSymbol(Section->getLabelEndName());
   1947     Asm->OutStreamer.EmitLabel(End);
   1948   }
   1949 }
   1950 
   1951 // Emit the last address of the section and the end of the line matrix.
   1952 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
   1953   // Define last address of section.
   1954   Asm->OutStreamer.AddComment("Extended Op");
   1955   Asm->EmitInt8(0);
   1956 
   1957   Asm->OutStreamer.AddComment("Op size");
   1958   Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
   1959   Asm->OutStreamer.AddComment("DW_LNE_set_address");
   1960   Asm->EmitInt8(dwarf::DW_LNE_set_address);
   1961 
   1962   Asm->OutStreamer.AddComment("Section end label");
   1963 
   1964   Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
   1965                                    Asm->getDataLayout().getPointerSize());
   1966 
   1967   // Mark end of matrix.
   1968   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
   1969   Asm->EmitInt8(0);
   1970   Asm->EmitInt8(1);
   1971   Asm->EmitInt8(1);
   1972 }
   1973 
   1974 // Emit visible names into a hashed accelerator table section.
   1975 void DwarfDebug::emitAccelNames() {
   1976   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
   1977                                            dwarf::DW_FORM_data4));
   1978   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
   1979          E = CUMap.end(); I != E; ++I) {
   1980     CompileUnit *TheCU = I->second;
   1981     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
   1982     for (StringMap<std::vector<DIE*> >::const_iterator
   1983            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
   1984       const char *Name = GI->getKeyData();
   1985       const std::vector<DIE *> &Entities = GI->second;
   1986       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
   1987              DE = Entities.end(); DI != DE; ++DI)
   1988         AT.AddName(Name, (*DI));
   1989     }
   1990   }
   1991 
   1992   AT.FinalizeTable(Asm, "Names");
   1993   Asm->OutStreamer.SwitchSection(
   1994     Asm->getObjFileLowering().getDwarfAccelNamesSection());
   1995   MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
   1996   Asm->OutStreamer.EmitLabel(SectionBegin);
   1997 
   1998   // Emit the full data.
   1999   AT.Emit(Asm, SectionBegin, &InfoHolder);
   2000 }
   2001 
   2002 // Emit objective C classes and categories into a hashed accelerator table
   2003 // section.
   2004 void DwarfDebug::emitAccelObjC() {
   2005   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
   2006                                            dwarf::DW_FORM_data4));
   2007   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
   2008          E = CUMap.end(); I != E; ++I) {
   2009     CompileUnit *TheCU = I->second;
   2010     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
   2011     for (StringMap<std::vector<DIE*> >::const_iterator
   2012            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
   2013       const char *Name = GI->getKeyData();
   2014       const std::vector<DIE *> &Entities = GI->second;
   2015       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
   2016              DE = Entities.end(); DI != DE; ++DI)
   2017         AT.AddName(Name, (*DI));
   2018     }
   2019   }
   2020 
   2021   AT.FinalizeTable(Asm, "ObjC");
   2022   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
   2023                                  .getDwarfAccelObjCSection());
   2024   MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
   2025   Asm->OutStreamer.EmitLabel(SectionBegin);
   2026 
   2027   // Emit the full data.
   2028   AT.Emit(Asm, SectionBegin, &InfoHolder);
   2029 }
   2030 
   2031 // Emit namespace dies into a hashed accelerator table.
   2032 void DwarfDebug::emitAccelNamespaces() {
   2033   DwarfAccelTable AT(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
   2034                                            dwarf::DW_FORM_data4));
   2035   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
   2036          E = CUMap.end(); I != E; ++I) {
   2037     CompileUnit *TheCU = I->second;
   2038     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
   2039     for (StringMap<std::vector<DIE*> >::const_iterator
   2040            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
   2041       const char *Name = GI->getKeyData();
   2042       const std::vector<DIE *> &Entities = GI->second;
   2043       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
   2044              DE = Entities.end(); DI != DE; ++DI)
   2045         AT.AddName(Name, (*DI));
   2046     }
   2047   }
   2048 
   2049   AT.FinalizeTable(Asm, "namespac");
   2050   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
   2051                                  .getDwarfAccelNamespaceSection());
   2052   MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
   2053   Asm->OutStreamer.EmitLabel(SectionBegin);
   2054 
   2055   // Emit the full data.
   2056   AT.Emit(Asm, SectionBegin, &InfoHolder);
   2057 }
   2058 
   2059 // Emit type dies into a hashed accelerator table.
   2060 void DwarfDebug::emitAccelTypes() {
   2061   std::vector<DwarfAccelTable::Atom> Atoms;
   2062   Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeDIEOffset,
   2063                                         dwarf::DW_FORM_data4));
   2064   Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTag,
   2065                                         dwarf::DW_FORM_data2));
   2066   Atoms.push_back(DwarfAccelTable::Atom(DwarfAccelTable::eAtomTypeTypeFlags,
   2067                                         dwarf::DW_FORM_data1));
   2068   DwarfAccelTable AT(Atoms);
   2069   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
   2070          E = CUMap.end(); I != E; ++I) {
   2071     CompileUnit *TheCU = I->second;
   2072     const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
   2073       = TheCU->getAccelTypes();
   2074     for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
   2075            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
   2076       const char *Name = GI->getKeyData();
   2077       const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
   2078       for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
   2079              = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
   2080         AT.AddName(Name, (*DI).first, (*DI).second);
   2081     }
   2082   }
   2083 
   2084   AT.FinalizeTable(Asm, "types");
   2085   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
   2086                                  .getDwarfAccelTypesSection());
   2087   MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
   2088   Asm->OutStreamer.EmitLabel(SectionBegin);
   2089 
   2090   // Emit the full data.
   2091   AT.Emit(Asm, SectionBegin, &InfoHolder);
   2092 }
   2093 
   2094 /// emitDebugPubnames - Emit visible names into a debug pubnames section.
   2095 ///
   2096 void DwarfDebug::emitDebugPubnames() {
   2097   const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
   2098 
   2099   typedef DenseMap<const MDNode*, CompileUnit*> CUMapType;
   2100   for (CUMapType::iterator I = CUMap.begin(), E = CUMap.end(); I != E; ++I) {
   2101     CompileUnit *TheCU = I->second;
   2102     unsigned ID = TheCU->getUniqueID();
   2103 
   2104     if (TheCU->getGlobalNames().empty())
   2105       continue;
   2106 
   2107     // Start the dwarf pubnames section.
   2108     Asm->OutStreamer.SwitchSection(
   2109       Asm->getObjFileLowering().getDwarfPubNamesSection());
   2110 
   2111     Asm->OutStreamer.AddComment("Length of Public Names Info");
   2112     Asm->EmitLabelDifference(Asm->GetTempSymbol("pubnames_end", ID),
   2113                              Asm->GetTempSymbol("pubnames_begin", ID), 4);
   2114 
   2115     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
   2116 
   2117     Asm->OutStreamer.AddComment("DWARF Version");
   2118     Asm->EmitInt16(dwarf::DWARF_VERSION);
   2119 
   2120     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
   2121     Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
   2122                            DwarfInfoSectionSym);
   2123 
   2124     Asm->OutStreamer.AddComment("Compilation Unit Length");
   2125     Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(), ID),
   2126                              Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
   2127                              4);
   2128 
   2129     const StringMap<DIE*> &Globals = TheCU->getGlobalNames();
   2130     for (StringMap<DIE*>::const_iterator
   2131            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
   2132       const char *Name = GI->getKeyData();
   2133       const DIE *Entity = GI->second;
   2134 
   2135       Asm->OutStreamer.AddComment("DIE offset");
   2136       Asm->EmitInt32(Entity->getOffset());
   2137 
   2138       if (Asm->isVerbose())
   2139         Asm->OutStreamer.AddComment("External Name");
   2140       Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
   2141     }
   2142 
   2143     Asm->OutStreamer.AddComment("End Mark");
   2144     Asm->EmitInt32(0);
   2145     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end", ID));
   2146   }
   2147 }
   2148 
   2149 void DwarfDebug::emitDebugPubTypes() {
   2150   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
   2151          E = CUMap.end(); I != E; ++I) {
   2152     CompileUnit *TheCU = I->second;
   2153     // Start the dwarf pubtypes section.
   2154     Asm->OutStreamer.SwitchSection(
   2155       Asm->getObjFileLowering().getDwarfPubTypesSection());
   2156     Asm->OutStreamer.AddComment("Length of Public Types Info");
   2157     Asm->EmitLabelDifference(
   2158       Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
   2159       Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
   2160 
   2161     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
   2162                                                   TheCU->getUniqueID()));
   2163 
   2164     if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
   2165     Asm->EmitInt16(dwarf::DWARF_VERSION);
   2166 
   2167     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
   2168     const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
   2169     Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(),
   2170                                               TheCU->getUniqueID()),
   2171                            DwarfInfoSectionSym);
   2172 
   2173     Asm->OutStreamer.AddComment("Compilation Unit Length");
   2174     Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(),
   2175                                                 TheCU->getUniqueID()),
   2176                              Asm->GetTempSymbol(ISec->getLabelBeginName(),
   2177                                                 TheCU->getUniqueID()),
   2178                              4);
   2179 
   2180     const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
   2181     for (StringMap<DIE*>::const_iterator
   2182            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
   2183       const char *Name = GI->getKeyData();
   2184       DIE *Entity = GI->second;
   2185 
   2186       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
   2187       Asm->EmitInt32(Entity->getOffset());
   2188 
   2189       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
   2190       // Emit the name with a terminating null byte.
   2191       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
   2192     }
   2193 
   2194     Asm->OutStreamer.AddComment("End Mark");
   2195     Asm->EmitInt32(0);
   2196     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
   2197                                                   TheCU->getUniqueID()));
   2198   }
   2199 }
   2200 
   2201 // Emit strings into a string section.
   2202 void DwarfUnits::emitStrings(const MCSection *StrSection,
   2203                              const MCSection *OffsetSection = NULL,
   2204                              const MCSymbol *StrSecSym = NULL) {
   2205 
   2206   if (StringPool.empty()) return;
   2207 
   2208   // Start the dwarf str section.
   2209   Asm->OutStreamer.SwitchSection(StrSection);
   2210 
   2211   // Get all of the string pool entries and put them in an array by their ID so
   2212   // we can sort them.
   2213   SmallVector<std::pair<unsigned,
   2214                  StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
   2215 
   2216   for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
   2217          I = StringPool.begin(), E = StringPool.end();
   2218        I != E; ++I)
   2219     Entries.push_back(std::make_pair(I->second.second, &*I));
   2220 
   2221   array_pod_sort(Entries.begin(), Entries.end());
   2222 
   2223   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
   2224     // Emit a label for reference from debug information entries.
   2225     Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
   2226 
   2227     // Emit the string itself with a terminating null byte.
   2228     Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
   2229                                          Entries[i].second->getKeyLength()+1));
   2230   }
   2231 
   2232   // If we've got an offset section go ahead and emit that now as well.
   2233   if (OffsetSection) {
   2234     Asm->OutStreamer.SwitchSection(OffsetSection);
   2235     unsigned offset = 0;
   2236     unsigned size = 4; // FIXME: DWARF64 is 8.
   2237     for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
   2238       Asm->OutStreamer.EmitIntValue(offset, size);
   2239       offset += Entries[i].second->getKeyLength() + 1;
   2240     }
   2241   }
   2242 }
   2243 
   2244 // Emit strings into a string section.
   2245 void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
   2246 
   2247   if (AddressPool.empty()) return;
   2248 
   2249   // Start the dwarf addr section.
   2250   Asm->OutStreamer.SwitchSection(AddrSection);
   2251 
   2252   // Get all of the string pool entries and put them in an array by their ID so
   2253   // we can sort them.
   2254   SmallVector<std::pair<unsigned,
   2255                         std::pair<MCSymbol*, unsigned>* >, 64> Entries;
   2256 
   2257   for (DenseMap<MCSymbol*, std::pair<MCSymbol*, unsigned> >::iterator
   2258          I = AddressPool.begin(), E = AddressPool.end();
   2259        I != E; ++I)
   2260     Entries.push_back(std::make_pair(I->second.second, &(I->second)));
   2261 
   2262   array_pod_sort(Entries.begin(), Entries.end());
   2263 
   2264   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
   2265     // Emit a label for reference from debug information entries.
   2266     MCSymbol *Sym = Entries[i].second->first;
   2267     if (Sym)
   2268       Asm->EmitLabelReference(Entries[i].second->first,
   2269                               Asm->getDataLayout().getPointerSize());
   2270     else
   2271       Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
   2272   }
   2273 
   2274 }
   2275 
   2276 // Emit visible names into a debug str section.
   2277 void DwarfDebug::emitDebugStr() {
   2278   DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
   2279   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
   2280 }
   2281 
   2282 // Emit visible names into a debug loc section.
   2283 void DwarfDebug::emitDebugLoc() {
   2284   if (DotDebugLocEntries.empty())
   2285     return;
   2286 
   2287   for (SmallVector<DotDebugLocEntry, 4>::iterator
   2288          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
   2289        I != E; ++I) {
   2290     DotDebugLocEntry &Entry = *I;
   2291     if (I + 1 != DotDebugLocEntries.end())
   2292       Entry.Merge(I+1);
   2293   }
   2294 
   2295   // Start the dwarf loc section.
   2296   Asm->OutStreamer.SwitchSection(
   2297     Asm->getObjFileLowering().getDwarfLocSection());
   2298   unsigned char Size = Asm->getDataLayout().getPointerSize();
   2299   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
   2300   unsigned index = 1;
   2301   for (SmallVector<DotDebugLocEntry, 4>::iterator
   2302          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
   2303        I != E; ++I, ++index) {
   2304     DotDebugLocEntry &Entry = *I;
   2305     if (Entry.isMerged()) continue;
   2306     if (Entry.isEmpty()) {
   2307       Asm->OutStreamer.EmitIntValue(0, Size);
   2308       Asm->OutStreamer.EmitIntValue(0, Size);
   2309       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
   2310     } else {
   2311       Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size);
   2312       Asm->OutStreamer.EmitSymbolValue(Entry.End, Size);
   2313       DIVariable DV(Entry.Variable);
   2314       Asm->OutStreamer.AddComment("Loc expr size");
   2315       MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
   2316       MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
   2317       Asm->EmitLabelDifference(end, begin, 2);
   2318       Asm->OutStreamer.EmitLabel(begin);
   2319       if (Entry.isInt()) {
   2320         DIBasicType BTy(DV.getType());
   2321         if (BTy.Verify() &&
   2322             (BTy.getEncoding()  == dwarf::DW_ATE_signed
   2323              || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
   2324           Asm->OutStreamer.AddComment("DW_OP_consts");
   2325           Asm->EmitInt8(dwarf::DW_OP_consts);
   2326           Asm->EmitSLEB128(Entry.getInt());
   2327         } else {
   2328           Asm->OutStreamer.AddComment("DW_OP_constu");
   2329           Asm->EmitInt8(dwarf::DW_OP_constu);
   2330           Asm->EmitULEB128(Entry.getInt());
   2331         }
   2332       } else if (Entry.isLocation()) {
   2333         if (!DV.hasComplexAddress())
   2334           // Regular entry.
   2335           Asm->EmitDwarfRegOp(Entry.Loc);
   2336         else {
   2337           // Complex address entry.
   2338           unsigned N = DV.getNumAddrElements();
   2339           unsigned i = 0;
   2340           if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
   2341             if (Entry.Loc.getOffset()) {
   2342               i = 2;
   2343               Asm->EmitDwarfRegOp(Entry.Loc);
   2344               Asm->OutStreamer.AddComment("DW_OP_deref");
   2345               Asm->EmitInt8(dwarf::DW_OP_deref);
   2346               Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
   2347               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
   2348               Asm->EmitSLEB128(DV.getAddrElement(1));
   2349             } else {
   2350               // If first address element is OpPlus then emit
   2351               // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
   2352               MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
   2353               Asm->EmitDwarfRegOp(Loc);
   2354               i = 2;
   2355             }
   2356           } else {
   2357             Asm->EmitDwarfRegOp(Entry.Loc);
   2358           }
   2359 
   2360           // Emit remaining complex address elements.
   2361           for (; i < N; ++i) {
   2362             uint64_t Element = DV.getAddrElement(i);
   2363             if (Element == DIBuilder::OpPlus) {
   2364               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
   2365               Asm->EmitULEB128(DV.getAddrElement(++i));
   2366             } else if (Element == DIBuilder::OpDeref) {
   2367               if (!Entry.Loc.isReg())
   2368                 Asm->EmitInt8(dwarf::DW_OP_deref);
   2369             } else
   2370               llvm_unreachable("unknown Opcode found in complex address");
   2371           }
   2372         }
   2373       }
   2374       // else ... ignore constant fp. There is not any good way to
   2375       // to represent them here in dwarf.
   2376       Asm->OutStreamer.EmitLabel(end);
   2377     }
   2378   }
   2379 }
   2380 
   2381 // Emit visible names into a debug aranges section.
   2382 void DwarfDebug::emitDebugARanges() {
   2383   // Start the dwarf aranges section.
   2384   Asm->OutStreamer.SwitchSection(
   2385                           Asm->getObjFileLowering().getDwarfARangesSection());
   2386 }
   2387 
   2388 // Emit visible names into a debug ranges section.
   2389 void DwarfDebug::emitDebugRanges() {
   2390   // Start the dwarf ranges section.
   2391   Asm->OutStreamer.SwitchSection(
   2392     Asm->getObjFileLowering().getDwarfRangesSection());
   2393   unsigned char Size = Asm->getDataLayout().getPointerSize();
   2394   for (SmallVector<const MCSymbol *, 8>::iterator
   2395          I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
   2396        I != E; ++I) {
   2397     if (*I)
   2398       Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
   2399     else
   2400       Asm->OutStreamer.EmitIntValue(0, Size);
   2401   }
   2402 }
   2403 
   2404 // Emit visible names into a debug macinfo section.
   2405 void DwarfDebug::emitDebugMacInfo() {
   2406   if (const MCSection *LineInfo =
   2407       Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
   2408     // Start the dwarf macinfo section.
   2409     Asm->OutStreamer.SwitchSection(LineInfo);
   2410   }
   2411 }
   2412 
   2413 // Emit inline info using following format.
   2414 // Section Header:
   2415 // 1. length of section
   2416 // 2. Dwarf version number
   2417 // 3. address size.
   2418 //
   2419 // Entries (one "entry" for each function that was inlined):
   2420 //
   2421 // 1. offset into __debug_str section for MIPS linkage name, if exists;
   2422 //   otherwise offset into __debug_str for regular function name.
   2423 // 2. offset into __debug_str section for regular function name.
   2424 // 3. an unsigned LEB128 number indicating the number of distinct inlining
   2425 // instances for the function.
   2426 //
   2427 // The rest of the entry consists of a {die_offset, low_pc} pair for each
   2428 // inlined instance; the die_offset points to the inlined_subroutine die in the
   2429 // __debug_info section, and the low_pc is the starting address for the
   2430 // inlining instance.
   2431 void DwarfDebug::emitDebugInlineInfo() {
   2432   if (!Asm->MAI->doesDwarfUseInlineInfoSection())
   2433     return;
   2434 
   2435   if (!FirstCU)
   2436     return;
   2437 
   2438   Asm->OutStreamer.SwitchSection(
   2439                         Asm->getObjFileLowering().getDwarfDebugInlineSection());
   2440 
   2441   Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
   2442   Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
   2443                            Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
   2444 
   2445   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
   2446 
   2447   Asm->OutStreamer.AddComment("Dwarf Version");
   2448   Asm->EmitInt16(dwarf::DWARF_VERSION);
   2449   Asm->OutStreamer.AddComment("Address Size (in bytes)");
   2450   Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
   2451 
   2452   for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
   2453          E = InlinedSPNodes.end(); I != E; ++I) {
   2454 
   2455     const MDNode *Node = *I;
   2456     DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
   2457       = InlineInfo.find(Node);
   2458     SmallVector<InlineInfoLabels, 4> &Labels = II->second;
   2459     DISubprogram SP(Node);
   2460     StringRef LName = SP.getLinkageName();
   2461     StringRef Name = SP.getName();
   2462 
   2463     Asm->OutStreamer.AddComment("MIPS linkage name");
   2464     if (LName.empty())
   2465       Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
   2466                              DwarfStrSectionSym);
   2467     else
   2468       Asm->EmitSectionOffset(InfoHolder
   2469                              .getStringPoolEntry(getRealLinkageName(LName)),
   2470                              DwarfStrSectionSym);
   2471 
   2472     Asm->OutStreamer.AddComment("Function name");
   2473     Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
   2474                            DwarfStrSectionSym);
   2475     Asm->EmitULEB128(Labels.size(), "Inline count");
   2476 
   2477     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
   2478            LE = Labels.end(); LI != LE; ++LI) {
   2479       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
   2480       Asm->EmitInt32(LI->second->getOffset());
   2481 
   2482       if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
   2483       Asm->OutStreamer.EmitSymbolValue(LI->first,
   2484                                        Asm->getDataLayout().getPointerSize());
   2485     }
   2486   }
   2487 
   2488   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
   2489 }
   2490 
   2491 // DWARF5 Experimental Separate Dwarf emitters.
   2492 
   2493 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
   2494 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
   2495 // DW_AT_ranges_base, DW_AT_addr_base. If DW_AT_ranges is present,
   2496 // DW_AT_low_pc and DW_AT_high_pc are not used, and vice versa.
   2497 CompileUnit *DwarfDebug::constructSkeletonCU(const MDNode *N) {
   2498   DICompileUnit DIUnit(N);
   2499   CompilationDir = DIUnit.getDirectory();
   2500 
   2501   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
   2502   CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++,
   2503                                        DIUnit.getLanguage(), Die, Asm,
   2504                                        this, &SkeletonHolder);
   2505 
   2506   NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
   2507                         DIUnit.getSplitDebugFilename());
   2508 
   2509   // This should be a unique identifier when we want to build .dwp files.
   2510   NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
   2511 
   2512   // FIXME: The addr base should be relative for each compile unit, however,
   2513   // this one is going to be 0 anyhow.
   2514   NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset, 0);
   2515 
   2516   // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
   2517   // into an entity. We're using 0, or a NULL label for this.
   2518   NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
   2519 
   2520   // DW_AT_stmt_list is a offset of line number information for this
   2521   // compile unit in debug_line section.
   2522   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
   2523     NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
   2524                     DwarfLineSectionSym);
   2525   else
   2526     NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
   2527 
   2528   if (!CompilationDir.empty())
   2529     NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
   2530 
   2531   SkeletonHolder.addUnit(NewCU);
   2532   SkeletonCUs.push_back(NewCU);
   2533 
   2534   return NewCU;
   2535 }
   2536 
   2537 void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
   2538   assert(useSplitDwarf() && "No split dwarf debug info?");
   2539   emitAbbrevs(Section, &SkeletonAbbrevs);
   2540 }
   2541 
   2542 // Emit the .debug_info.dwo section for separated dwarf. This contains the
   2543 // compile units that would normally be in debug_info.
   2544 void DwarfDebug::emitDebugInfoDWO() {
   2545   assert(useSplitDwarf() && "No split dwarf debug info?");
   2546   InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
   2547                        Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
   2548                        DwarfAbbrevDWOSectionSym);
   2549 }
   2550 
   2551 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
   2552 // abbreviations for the .debug_info.dwo section.
   2553 void DwarfDebug::emitDebugAbbrevDWO() {
   2554   assert(useSplitDwarf() && "No split dwarf?");
   2555   emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
   2556               &Abbreviations);
   2557 }
   2558 
   2559 // Emit the .debug_str.dwo section for separated dwarf. This contains the
   2560 // string section and is identical in format to traditional .debug_str
   2561 // sections.
   2562 void DwarfDebug::emitDebugStrDWO() {
   2563   assert(useSplitDwarf() && "No split dwarf?");
   2564   const MCSection *OffSec = Asm->getObjFileLowering()
   2565                             .getDwarfStrOffDWOSection();
   2566   const MCSymbol *StrSym = DwarfStrSectionSym;
   2567   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
   2568                          OffSec, StrSym);
   2569 }
   2570