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