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