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