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