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