906239d7097772f0032df4d7d3e260c68f23d61d
[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, None,
562                  getOrCreateSourceID(DL.getFilename(), DL.getDirectory(),
563                                      TheCU->getUniqueID()));
564   TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, None, 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, None, FileID);
890   TheCU->addUInt(IMDie, dwarf::DW_AT_decl_line, None, 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, None, 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, None, 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
973   if (NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu")) {
974     for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
975       DICompileUnit TheCU(CU_Nodes->getOperand(i));
976       DIArray Subprograms = TheCU.getSubprograms();
977       for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
978         DISubprogram SP(Subprograms.getElement(i));
979         if (ProcessedSPNodes.count(SP) != 0)
980           continue;
981         if (!SP.isSubprogram())
982           continue;
983         if (!SP.isDefinition())
984           continue;
985         DIArray Variables = SP.getVariables();
986         if (Variables.getNumElements() == 0)
987           continue;
988
989         // Construct subprogram DIE and add variables DIEs.
990         CompileUnit *SPCU = CUMap.lookup(TheCU);
991         assert(SPCU && "Unable to find Compile Unit!");
992         // FIXME: See the comment in constructSubprogramDIE about duplicate
993         // subprogram DIEs.
994         constructSubprogramDIE(SPCU, SP);
995         DIE *SPDIE = SPCU->getDIE(SP);
996         for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
997           DIVariable DV(Variables.getElement(vi));
998           if (!DV.isVariable())
999             continue;
1000           DbgVariable NewVar(DV, NULL, this);
1001           if (DIE *VariableDIE =
1002                   SPCU->constructVariableDIE(&NewVar, false))
1003             SPDIE->addChild(VariableDIE);
1004         }
1005       }
1006     }
1007   }
1008 }
1009
1010 // Type Signature [7.27] and ODR Hash code.
1011
1012 /// \brief Grabs the string in whichever attribute is passed in and returns
1013 /// a reference to it. Returns "" if the attribute doesn't exist.
1014 static StringRef getDIEStringAttr(DIE *Die, unsigned Attr) {
1015   DIEValue *V = Die->findAttribute(Attr);
1016
1017   if (DIEString *S = dyn_cast_or_null<DIEString>(V))
1018     return S->getString();
1019
1020   return StringRef("");
1021 }
1022
1023 /// Return true if the current DIE is contained within an anonymous namespace.
1024 static bool isContainedInAnonNamespace(DIE *Die) {
1025   DIE *Parent = Die->getParent();
1026
1027   while (Parent) {
1028     if (Parent->getTag() == dwarf::DW_TAG_namespace &&
1029         getDIEStringAttr(Parent, dwarf::DW_AT_name) == "")
1030       return true;
1031     Parent = Parent->getParent();
1032   }
1033
1034   return false;
1035 }
1036
1037 /// Test if the current CU language is C++ and that we have
1038 /// a named type that is not contained in an anonymous namespace.
1039 static bool shouldAddODRHash(CompileUnit *CU, DIE *Die) {
1040   return CU->getLanguage() == dwarf::DW_LANG_C_plus_plus &&
1041          getDIEStringAttr(Die, dwarf::DW_AT_name) != "" &&
1042          !isContainedInAnonNamespace(Die);
1043 }
1044
1045 void DwarfDebug::finalizeModuleInfo() {
1046   // Collect info for variables that were optimized out.
1047   collectDeadVariables();
1048
1049   // Attach DW_AT_inline attribute with inlined subprogram DIEs.
1050   computeInlinedDIEs();
1051
1052   // Split out type units and conditionally add an ODR tag to the split
1053   // out type.
1054   // FIXME: Do type splitting.
1055   for (unsigned i = 0, e = TypeUnits.size(); i != e; ++i) {
1056     DIE *Die = TypeUnits[i];
1057     DIEHash Hash;
1058     // If we've requested ODR hashes and it's applicable for an ODR hash then
1059     // add the ODR signature now.
1060     // FIXME: This should be added onto the type unit, not the type, but this
1061     // works as an intermediate stage.
1062     if (GenerateODRHash && shouldAddODRHash(CUMap.begin()->second, Die))
1063       CUMap.begin()->second->addUInt(Die, dwarf::DW_AT_GNU_odr_signature,
1064                                      dwarf::DW_FORM_data8,
1065                                      Hash.computeDIEODRSignature(Die));
1066   }
1067
1068   // Handle anything that needs to be done on a per-cu basis.
1069   for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
1070                                                          CUE = CUMap.end();
1071        CUI != CUE; ++CUI) {
1072     CompileUnit *TheCU = CUI->second;
1073     // Emit DW_AT_containing_type attribute to connect types with their
1074     // vtable holding type.
1075     TheCU->constructContainingTypeDIEs();
1076
1077     // If we're splitting the dwarf out now that we've got the entire
1078     // CU then construct a skeleton CU based upon it.
1079     if (useSplitDwarf()) {
1080       uint64_t ID = 0;
1081       if (GenerateCUHash) {
1082         DIEHash CUHash;
1083         ID = CUHash.computeCUSignature(TheCU->getCUDie());
1084       }
1085       // This should be a unique identifier when we want to build .dwp files.
1086       TheCU->addUInt(TheCU->getCUDie(), dwarf::DW_AT_GNU_dwo_id,
1087                      dwarf::DW_FORM_data8, ID);
1088       // Now construct the skeleton CU associated.
1089       CompileUnit *SkCU = constructSkeletonCU(TheCU);
1090       // This should be a unique identifier when we want to build .dwp files.
1091       SkCU->addUInt(SkCU->getCUDie(), dwarf::DW_AT_GNU_dwo_id,
1092                     dwarf::DW_FORM_data8, ID);
1093     }
1094   }
1095
1096   // Compute DIE offsets and sizes.
1097   InfoHolder.computeSizeAndOffsets();
1098   if (useSplitDwarf())
1099     SkeletonHolder.computeSizeAndOffsets();
1100 }
1101
1102 void DwarfDebug::endSections() {
1103    // Filter labels by section.
1104   for (size_t n = 0; n < ArangeLabels.size(); n++) {
1105     const SymbolCU &SCU = ArangeLabels[n];
1106     if (SCU.Sym->isInSection()) {
1107       // Make a note of this symbol and it's section.
1108       const MCSection *Section = &SCU.Sym->getSection();
1109       if (!Section->getKind().isMetadata())
1110         SectionMap[Section].push_back(SCU);
1111     } else {
1112       // Some symbols (e.g. common/bss on mach-o) can have no section but still
1113       // appear in the output. This sucks as we rely on sections to build
1114       // arange spans. We can do it without, but it's icky.
1115       SectionMap[NULL].push_back(SCU);
1116     }
1117   }
1118
1119   // Build a list of sections used.
1120   std::vector<const MCSection *> Sections;
1121   for (SectionMapType::iterator it = SectionMap.begin(); it != SectionMap.end();
1122        it++) {
1123     const MCSection *Section = it->first;
1124     Sections.push_back(Section);
1125   }
1126
1127   // Sort the sections into order.
1128   // This is only done to ensure consistent output order across different runs.
1129   std::sort(Sections.begin(), Sections.end(), SectionSort);
1130
1131   // Add terminating symbols for each section.
1132   for (unsigned ID=0;ID<Sections.size();ID++) {
1133     const MCSection *Section = Sections[ID];
1134     MCSymbol *Sym = NULL;
1135
1136     if (Section) {
1137       // We can't call MCSection::getLabelEndName, as it's only safe to do so
1138       // if we know the section name up-front. For user-created sections, the resulting
1139       // label may not be valid to use as a label. (section names can use a greater
1140       // set of characters on some systems)
1141       Sym = Asm->GetTempSymbol("debug_end", ID);
1142       Asm->OutStreamer.SwitchSection(Section);
1143       Asm->OutStreamer.EmitLabel(Sym);
1144     }
1145
1146     // Insert a final terminator.
1147     SectionMap[Section].push_back(SymbolCU(NULL, Sym));
1148   }
1149 }
1150
1151 // Emit all Dwarf sections that should come after the content.
1152 void DwarfDebug::endModule() {
1153
1154   if (!FirstCU) return;
1155
1156   // End any existing sections.
1157   // TODO: Does this need to happen?
1158   endSections();
1159
1160   // Finalize the debug info for the module.
1161   finalizeModuleInfo();
1162
1163   if (!useSplitDwarf()) {
1164     emitDebugStr();
1165
1166     // Emit all the DIEs into a debug info section.
1167     emitDebugInfo();
1168
1169     // Corresponding abbreviations into a abbrev section.
1170     emitAbbreviations();
1171
1172     // Emit info into a debug loc section.
1173     emitDebugLoc();
1174
1175     // Emit info into a debug aranges section.
1176     emitDebugARanges();
1177
1178     // Emit info into a debug ranges section.
1179     emitDebugRanges();
1180
1181     // Emit info into a debug macinfo section.
1182     emitDebugMacInfo();
1183
1184   } else {
1185     // TODO: Fill this in for separated debug sections and separate
1186     // out information into new sections.
1187     emitDebugStr();
1188     if (useSplitDwarf())
1189       emitDebugStrDWO();
1190
1191     // Emit the debug info section and compile units.
1192     emitDebugInfo();
1193     emitDebugInfoDWO();
1194
1195     // Corresponding abbreviations into a abbrev section.
1196     emitAbbreviations();
1197     emitDebugAbbrevDWO();
1198
1199     // Emit info into a debug loc section.
1200     emitDebugLoc();
1201
1202     // Emit info into a debug aranges section.
1203     emitDebugARanges();
1204
1205     // Emit info into a debug ranges section.
1206     emitDebugRanges();
1207
1208     // Emit info into a debug macinfo section.
1209     emitDebugMacInfo();
1210
1211     // Emit DWO addresses.
1212     InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
1213
1214   }
1215
1216   // Emit info into the dwarf accelerator table sections.
1217   if (useDwarfAccelTables()) {
1218     emitAccelNames();
1219     emitAccelObjC();
1220     emitAccelNamespaces();
1221     emitAccelTypes();
1222   }
1223
1224   // Emit the pubnames and pubtypes sections if requested.
1225   if (HasDwarfPubSections) {
1226     emitDebugPubNames(GenerateGnuPubSections);
1227     emitDebugPubTypes(GenerateGnuPubSections);
1228   }
1229
1230   // clean up.
1231   SPMap.clear();
1232   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1233          E = CUMap.end(); I != E; ++I)
1234     delete I->second;
1235
1236   for (SmallVectorImpl<CompileUnit *>::iterator I = SkeletonCUs.begin(),
1237          E = SkeletonCUs.end(); I != E; ++I)
1238     delete *I;
1239
1240   // Reset these for the next Module if we have one.
1241   FirstCU = NULL;
1242 }
1243
1244 // Find abstract variable, if any, associated with Var.
1245 DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
1246                                               DebugLoc ScopeLoc) {
1247   LLVMContext &Ctx = DV->getContext();
1248   // More then one inlined variable corresponds to one abstract variable.
1249   DIVariable Var = cleanseInlinedVariable(DV, Ctx);
1250   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
1251   if (AbsDbgVariable)
1252     return AbsDbgVariable;
1253
1254   LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
1255   if (!Scope)
1256     return NULL;
1257
1258   AbsDbgVariable = new DbgVariable(Var, NULL, this);
1259   addScopeVariable(Scope, AbsDbgVariable);
1260   AbstractVariables[Var] = AbsDbgVariable;
1261   return AbsDbgVariable;
1262 }
1263
1264 // If Var is a current function argument then add it to CurrentFnArguments list.
1265 bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
1266                                       DbgVariable *Var, LexicalScope *Scope) {
1267   if (!LScopes.isCurrentFunctionScope(Scope))
1268     return false;
1269   DIVariable DV = Var->getVariable();
1270   if (DV.getTag() != dwarf::DW_TAG_arg_variable)
1271     return false;
1272   unsigned ArgNo = DV.getArgNumber();
1273   if (ArgNo == 0)
1274     return false;
1275
1276   size_t Size = CurrentFnArguments.size();
1277   if (Size == 0)
1278     CurrentFnArguments.resize(MF->getFunction()->arg_size());
1279   // llvm::Function argument size is not good indicator of how many
1280   // arguments does the function have at source level.
1281   if (ArgNo > Size)
1282     CurrentFnArguments.resize(ArgNo * 2);
1283   CurrentFnArguments[ArgNo - 1] = Var;
1284   return true;
1285 }
1286
1287 // Collect variable information from side table maintained by MMI.
1288 void
1289 DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
1290                                    SmallPtrSet<const MDNode *, 16> &Processed) {
1291   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
1292   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
1293          VE = VMap.end(); VI != VE; ++VI) {
1294     const MDNode *Var = VI->first;
1295     if (!Var) continue;
1296     Processed.insert(Var);
1297     DIVariable DV(Var);
1298     const std::pair<unsigned, DebugLoc> &VP = VI->second;
1299
1300     LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
1301
1302     // If variable scope is not found then skip this variable.
1303     if (Scope == 0)
1304       continue;
1305
1306     DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
1307     DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable, this);
1308     RegVar->setFrameIndex(VP.first);
1309     if (!addCurrentFnArgument(MF, RegVar, Scope))
1310       addScopeVariable(Scope, RegVar);
1311     if (AbsDbgVariable)
1312       AbsDbgVariable->setFrameIndex(VP.first);
1313   }
1314 }
1315
1316 // Return true if debug value, encoded by DBG_VALUE instruction, is in a
1317 // defined reg.
1318 static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
1319   assert(MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
1320   return MI->getNumOperands() == 3 &&
1321          MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
1322          (MI->getOperand(1).isImm() ||
1323           (MI->getOperand(1).isReg() && MI->getOperand(1).getReg() == 0U));
1324 }
1325
1326 // Get .debug_loc entry for the instruction range starting at MI.
1327 static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
1328                                          const MCSymbol *FLabel,
1329                                          const MCSymbol *SLabel,
1330                                          const MachineInstr *MI) {
1331   const MDNode *Var =  MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1332
1333   assert(MI->getNumOperands() == 3);
1334   if (MI->getOperand(0).isReg()) {
1335     MachineLocation MLoc;
1336     // If the second operand is an immediate, this is a
1337     // register-indirect address.
1338     if (!MI->getOperand(1).isImm())
1339       MLoc.set(MI->getOperand(0).getReg());
1340     else
1341       MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
1342     return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
1343   }
1344   if (MI->getOperand(0).isImm())
1345     return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1346   if (MI->getOperand(0).isFPImm())
1347     return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1348   if (MI->getOperand(0).isCImm())
1349     return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1350
1351   llvm_unreachable("Unexpected 3 operand DBG_VALUE instruction!");
1352 }
1353
1354 // Find variables for each lexical scope.
1355 void
1356 DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1357                                 SmallPtrSet<const MDNode *, 16> &Processed) {
1358
1359   // Grab the variable info that was squirreled away in the MMI side-table.
1360   collectVariableInfoFromMMITable(MF, Processed);
1361
1362   for (SmallVectorImpl<const MDNode*>::const_iterator
1363          UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1364          ++UVI) {
1365     const MDNode *Var = *UVI;
1366     if (Processed.count(Var))
1367       continue;
1368
1369     // History contains relevant DBG_VALUE instructions for Var and instructions
1370     // clobbering it.
1371     SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1372     if (History.empty())
1373       continue;
1374     const MachineInstr *MInsn = History.front();
1375
1376     DIVariable DV(Var);
1377     LexicalScope *Scope = NULL;
1378     if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1379         DISubprogram(DV.getContext()).describes(MF->getFunction()))
1380       Scope = LScopes.getCurrentFunctionScope();
1381     else if (MDNode *IA = DV.getInlinedAt())
1382       Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1383     else
1384       Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1385     // If variable scope is not found then skip this variable.
1386     if (!Scope)
1387       continue;
1388
1389     Processed.insert(DV);
1390     assert(MInsn->isDebugValue() && "History must begin with debug value");
1391     DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc());
1392     DbgVariable *RegVar = new DbgVariable(DV, AbsVar, this);
1393     if (!addCurrentFnArgument(MF, RegVar, Scope))
1394       addScopeVariable(Scope, RegVar);
1395     if (AbsVar)
1396       AbsVar->setMInsn(MInsn);
1397
1398     // Simplify ranges that are fully coalesced.
1399     if (History.size() <= 1 || (History.size() == 2 &&
1400                                 MInsn->isIdenticalTo(History.back()))) {
1401       RegVar->setMInsn(MInsn);
1402       continue;
1403     }
1404
1405     // Handle multiple DBG_VALUE instructions describing one variable.
1406     RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1407
1408     for (SmallVectorImpl<const MachineInstr*>::const_iterator
1409            HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1410       const MachineInstr *Begin = *HI;
1411       assert(Begin->isDebugValue() && "Invalid History entry");
1412
1413       // Check if DBG_VALUE is truncating a range.
1414       if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1415           && !Begin->getOperand(0).getReg())
1416         continue;
1417
1418       // Compute the range for a register location.
1419       const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1420       const MCSymbol *SLabel = 0;
1421
1422       if (HI + 1 == HE)
1423         // If Begin is the last instruction in History then its value is valid
1424         // until the end of the function.
1425         SLabel = FunctionEndSym;
1426       else {
1427         const MachineInstr *End = HI[1];
1428         DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1429               << "\t" << *Begin << "\t" << *End << "\n");
1430         if (End->isDebugValue())
1431           SLabel = getLabelBeforeInsn(End);
1432         else {
1433           // End is a normal instruction clobbering the range.
1434           SLabel = getLabelAfterInsn(End);
1435           assert(SLabel && "Forgot label after clobber instruction");
1436           ++HI;
1437         }
1438       }
1439
1440       // The value is valid until the next DBG_VALUE or clobber.
1441       DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel,
1442                                                     Begin));
1443     }
1444     DotDebugLocEntries.push_back(DotDebugLocEntry());
1445   }
1446
1447   // Collect info for variables that were optimized out.
1448   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1449   DIArray Variables = DISubprogram(FnScope->getScopeNode()).getVariables();
1450   for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1451     DIVariable DV(Variables.getElement(i));
1452     if (!DV || !DV.isVariable() || !Processed.insert(DV))
1453       continue;
1454     if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1455       addScopeVariable(Scope, new DbgVariable(DV, NULL, this));
1456   }
1457 }
1458
1459 // Return Label preceding the instruction.
1460 MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1461   MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1462   assert(Label && "Didn't insert label before instruction");
1463   return Label;
1464 }
1465
1466 // Return Label immediately following the instruction.
1467 MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1468   return LabelsAfterInsn.lookup(MI);
1469 }
1470
1471 // Process beginning of an instruction.
1472 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1473   // Check if source location changes, but ignore DBG_VALUE locations.
1474   if (!MI->isDebugValue()) {
1475     DebugLoc DL = MI->getDebugLoc();
1476     if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1477       unsigned Flags = 0;
1478       PrevInstLoc = DL;
1479       if (DL == PrologEndLoc) {
1480         Flags |= DWARF2_FLAG_PROLOGUE_END;
1481         PrologEndLoc = DebugLoc();
1482       }
1483       if (PrologEndLoc.isUnknown())
1484         Flags |= DWARF2_FLAG_IS_STMT;
1485
1486       if (!DL.isUnknown()) {
1487         const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1488         recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1489       } else
1490         recordSourceLine(0, 0, 0, 0);
1491     }
1492   }
1493
1494   // Insert labels where requested.
1495   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1496     LabelsBeforeInsn.find(MI);
1497
1498   // No label needed.
1499   if (I == LabelsBeforeInsn.end())
1500     return;
1501
1502   // Label already assigned.
1503   if (I->second)
1504     return;
1505
1506   if (!PrevLabel) {
1507     PrevLabel = MMI->getContext().CreateTempSymbol();
1508     Asm->OutStreamer.EmitLabel(PrevLabel);
1509   }
1510   I->second = PrevLabel;
1511 }
1512
1513 // Process end of an instruction.
1514 void DwarfDebug::endInstruction(const MachineInstr *MI) {
1515   // Don't create a new label after DBG_VALUE instructions.
1516   // They don't generate code.
1517   if (!MI->isDebugValue())
1518     PrevLabel = 0;
1519
1520   DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1521     LabelsAfterInsn.find(MI);
1522
1523   // No label needed.
1524   if (I == LabelsAfterInsn.end())
1525     return;
1526
1527   // Label already assigned.
1528   if (I->second)
1529     return;
1530
1531   // We need a label after this instruction.
1532   if (!PrevLabel) {
1533     PrevLabel = MMI->getContext().CreateTempSymbol();
1534     Asm->OutStreamer.EmitLabel(PrevLabel);
1535   }
1536   I->second = PrevLabel;
1537 }
1538
1539 // Each LexicalScope has first instruction and last instruction to mark
1540 // beginning and end of a scope respectively. Create an inverse map that list
1541 // scopes starts (and ends) with an instruction. One instruction may start (or
1542 // end) multiple scopes. Ignore scopes that are not reachable.
1543 void DwarfDebug::identifyScopeMarkers() {
1544   SmallVector<LexicalScope *, 4> WorkList;
1545   WorkList.push_back(LScopes.getCurrentFunctionScope());
1546   while (!WorkList.empty()) {
1547     LexicalScope *S = WorkList.pop_back_val();
1548
1549     const SmallVectorImpl<LexicalScope *> &Children = S->getChildren();
1550     if (!Children.empty())
1551       for (SmallVectorImpl<LexicalScope *>::const_iterator SI = Children.begin(),
1552              SE = Children.end(); SI != SE; ++SI)
1553         WorkList.push_back(*SI);
1554
1555     if (S->isAbstractScope())
1556       continue;
1557
1558     const SmallVectorImpl<InsnRange> &Ranges = S->getRanges();
1559     if (Ranges.empty())
1560       continue;
1561     for (SmallVectorImpl<InsnRange>::const_iterator RI = Ranges.begin(),
1562            RE = Ranges.end(); RI != RE; ++RI) {
1563       assert(RI->first && "InsnRange does not have first instruction!");
1564       assert(RI->second && "InsnRange does not have second instruction!");
1565       requestLabelBeforeInsn(RI->first);
1566       requestLabelAfterInsn(RI->second);
1567     }
1568   }
1569 }
1570
1571 // Get MDNode for DebugLoc's scope.
1572 static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1573   if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1574     return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1575   return DL.getScope(Ctx);
1576 }
1577
1578 // Walk up the scope chain of given debug loc and find line number info
1579 // for the function.
1580 static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1581   const MDNode *Scope = getScopeNode(DL, Ctx);
1582   DISubprogram SP = getDISubprogram(Scope);
1583   if (SP.isSubprogram()) {
1584     // Check for number of operands since the compatibility is
1585     // cheap here.
1586     if (SP->getNumOperands() > 19)
1587       return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
1588     else
1589       return DebugLoc::get(SP.getLineNumber(), 0, SP);
1590   }
1591
1592   return DebugLoc();
1593 }
1594
1595 // Gather pre-function debug information.  Assumes being called immediately
1596 // after the function entry point has been emitted.
1597 void DwarfDebug::beginFunction(const MachineFunction *MF) {
1598   if (!MMI->hasDebugInfo()) return;
1599   LScopes.initialize(*MF);
1600   if (LScopes.empty()) return;
1601   identifyScopeMarkers();
1602
1603   // Set DwarfCompileUnitID in MCContext to the Compile Unit this function
1604   // belongs to.
1605   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1606   CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1607   assert(TheCU && "Unable to find compile unit!");
1608   if (Asm->TM.hasMCUseLoc() && Asm->OutStreamer.hasRawTextSupport())
1609     // Use a single line table if we are using .loc and generating assembly.
1610     Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1611   else
1612     Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
1613
1614   FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1615                                         Asm->getFunctionNumber());
1616   // Assumes in correct section after the entry point.
1617   Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1618
1619   assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1620
1621   const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1622   // LiveUserVar - Map physreg numbers to the MDNode they contain.
1623   std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1624
1625   for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1626        I != E; ++I) {
1627     bool AtBlockEntry = true;
1628     for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1629          II != IE; ++II) {
1630       const MachineInstr *MI = II;
1631
1632       if (MI->isDebugValue()) {
1633         assert(MI->getNumOperands() > 1 && "Invalid machine instruction!");
1634
1635         // Keep track of user variables.
1636         const MDNode *Var =
1637           MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1638
1639         // Variable is in a register, we need to check for clobbers.
1640         if (isDbgValueInDefinedReg(MI))
1641           LiveUserVar[MI->getOperand(0).getReg()] = Var;
1642
1643         // Check the history of this variable.
1644         SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1645         if (History.empty()) {
1646           UserVariables.push_back(Var);
1647           // The first mention of a function argument gets the FunctionBeginSym
1648           // label, so arguments are visible when breaking at function entry.
1649           DIVariable DV(Var);
1650           if (DV.isVariable() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1651               DISubprogram(getDISubprogram(DV.getContext()))
1652                 .describes(MF->getFunction()))
1653             LabelsBeforeInsn[MI] = FunctionBeginSym;
1654         } else {
1655           // We have seen this variable before. Try to coalesce DBG_VALUEs.
1656           const MachineInstr *Prev = History.back();
1657           if (Prev->isDebugValue()) {
1658             // Coalesce identical entries at the end of History.
1659             if (History.size() >= 2 &&
1660                 Prev->isIdenticalTo(History[History.size() - 2])) {
1661               DEBUG(dbgs() << "Coalescing identical DBG_VALUE entries:\n"
1662                     << "\t" << *Prev
1663                     << "\t" << *History[History.size() - 2] << "\n");
1664               History.pop_back();
1665             }
1666
1667             // Terminate old register assignments that don't reach MI;
1668             MachineFunction::const_iterator PrevMBB = Prev->getParent();
1669             if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1670                 isDbgValueInDefinedReg(Prev)) {
1671               // Previous register assignment needs to terminate at the end of
1672               // its basic block.
1673               MachineBasicBlock::const_iterator LastMI =
1674                 PrevMBB->getLastNonDebugInstr();
1675               if (LastMI == PrevMBB->end()) {
1676                 // Drop DBG_VALUE for empty range.
1677                 DEBUG(dbgs() << "Dropping DBG_VALUE for empty range:\n"
1678                       << "\t" << *Prev << "\n");
1679                 History.pop_back();
1680               } else if (llvm::next(PrevMBB) != PrevMBB->getParent()->end())
1681                 // Terminate after LastMI.
1682                 History.push_back(LastMI);
1683             }
1684           }
1685         }
1686         History.push_back(MI);
1687       } else {
1688         // Not a DBG_VALUE instruction.
1689         if (!MI->isLabel())
1690           AtBlockEntry = false;
1691
1692         // First known non-DBG_VALUE and non-frame setup location marks
1693         // the beginning of the function body.
1694         if (!MI->getFlag(MachineInstr::FrameSetup) &&
1695             (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
1696           PrologEndLoc = MI->getDebugLoc();
1697
1698         // Check if the instruction clobbers any registers with debug vars.
1699         for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1700                MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1701           if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1702             continue;
1703           for (MCRegAliasIterator AI(MOI->getReg(), TRI, true);
1704                AI.isValid(); ++AI) {
1705             unsigned Reg = *AI;
1706             const MDNode *Var = LiveUserVar[Reg];
1707             if (!Var)
1708               continue;
1709             // Reg is now clobbered.
1710             LiveUserVar[Reg] = 0;
1711
1712             // Was MD last defined by a DBG_VALUE referring to Reg?
1713             DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1714             if (HistI == DbgValues.end())
1715               continue;
1716             SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1717             if (History.empty())
1718               continue;
1719             const MachineInstr *Prev = History.back();
1720             // Sanity-check: Register assignments are terminated at the end of
1721             // their block.
1722             if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1723               continue;
1724             // Is the variable still in Reg?
1725             if (!isDbgValueInDefinedReg(Prev) ||
1726                 Prev->getOperand(0).getReg() != Reg)
1727               continue;
1728             // Var is clobbered. Make sure the next instruction gets a label.
1729             History.push_back(MI);
1730           }
1731         }
1732       }
1733     }
1734   }
1735
1736   for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1737        I != E; ++I) {
1738     SmallVectorImpl<const MachineInstr*> &History = I->second;
1739     if (History.empty())
1740       continue;
1741
1742     // Make sure the final register assignments are terminated.
1743     const MachineInstr *Prev = History.back();
1744     if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1745       const MachineBasicBlock *PrevMBB = Prev->getParent();
1746       MachineBasicBlock::const_iterator LastMI =
1747         PrevMBB->getLastNonDebugInstr();
1748       if (LastMI == PrevMBB->end())
1749         // Drop DBG_VALUE for empty range.
1750         History.pop_back();
1751       else if (PrevMBB != &PrevMBB->getParent()->back()) {
1752         // Terminate after LastMI.
1753         History.push_back(LastMI);
1754       }
1755     }
1756     // Request labels for the full history.
1757     for (unsigned i = 0, e = History.size(); i != e; ++i) {
1758       const MachineInstr *MI = History[i];
1759       if (MI->isDebugValue())
1760         requestLabelBeforeInsn(MI);
1761       else
1762         requestLabelAfterInsn(MI);
1763     }
1764   }
1765
1766   PrevInstLoc = DebugLoc();
1767   PrevLabel = FunctionBeginSym;
1768
1769   // Record beginning of function.
1770   if (!PrologEndLoc.isUnknown()) {
1771     DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1772                                        MF->getFunction()->getContext());
1773     recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1774                      FnStartDL.getScope(MF->getFunction()->getContext()),
1775     // We'd like to list the prologue as "not statements" but GDB behaves
1776     // poorly if we do that. Revisit this with caution/GDB (7.5+) testing.
1777                      DWARF2_FLAG_IS_STMT);
1778   }
1779 }
1780
1781 void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1782   SmallVectorImpl<DbgVariable *> &Vars = ScopeVariables[LS];
1783   DIVariable DV = Var->getVariable();
1784   // Variables with positive arg numbers are parameters.
1785   if (unsigned ArgNum = DV.getArgNumber()) {
1786     // Keep all parameters in order at the start of the variable list to ensure
1787     // function types are correct (no out-of-order parameters)
1788     //
1789     // This could be improved by only doing it for optimized builds (unoptimized
1790     // builds have the right order to begin with), searching from the back (this
1791     // would catch the unoptimized case quickly), or doing a binary search
1792     // rather than linear search.
1793     SmallVectorImpl<DbgVariable *>::iterator I = Vars.begin();
1794     while (I != Vars.end()) {
1795       unsigned CurNum = (*I)->getVariable().getArgNumber();
1796       // A local (non-parameter) variable has been found, insert immediately
1797       // before it.
1798       if (CurNum == 0)
1799         break;
1800       // A later indexed parameter has been found, insert immediately before it.
1801       if (CurNum > ArgNum)
1802         break;
1803       ++I;
1804     }
1805     Vars.insert(I, Var);
1806     return;
1807   }
1808
1809   Vars.push_back(Var);
1810 }
1811
1812 // Gather and emit post-function debug information.
1813 void DwarfDebug::endFunction(const MachineFunction *MF) {
1814   if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1815
1816   // Define end label for subprogram.
1817   FunctionEndSym = Asm->GetTempSymbol("func_end",
1818                                       Asm->getFunctionNumber());
1819   // Assumes in correct section after the entry point.
1820   Asm->OutStreamer.EmitLabel(FunctionEndSym);
1821   // Set DwarfCompileUnitID in MCContext to default value.
1822   Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
1823
1824   SmallPtrSet<const MDNode *, 16> ProcessedVars;
1825   collectVariableInfo(MF, ProcessedVars);
1826
1827   LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1828   CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
1829   assert(TheCU && "Unable to find compile unit!");
1830
1831   // Construct abstract scopes.
1832   ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1833   for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1834     LexicalScope *AScope = AList[i];
1835     DISubprogram SP(AScope->getScopeNode());
1836     if (SP.isSubprogram()) {
1837       // Collect info for variables that were optimized out.
1838       DIArray Variables = SP.getVariables();
1839       for (unsigned i = 0, e = Variables.getNumElements(); i != e; ++i) {
1840         DIVariable DV(Variables.getElement(i));
1841         if (!DV || !DV.isVariable() || !ProcessedVars.insert(DV))
1842           continue;
1843         // Check that DbgVariable for DV wasn't created earlier, when
1844         // findAbstractVariable() was called for inlined instance of DV.
1845         LLVMContext &Ctx = DV->getContext();
1846         DIVariable CleanDV = cleanseInlinedVariable(DV, Ctx);
1847         if (AbstractVariables.lookup(CleanDV))
1848           continue;
1849         if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1850           addScopeVariable(Scope, new DbgVariable(DV, NULL, this));
1851       }
1852     }
1853     if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1854       constructScopeDIE(TheCU, AScope);
1855   }
1856
1857   DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
1858
1859   if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
1860     TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
1861
1862   // Clear debug info
1863   for (ScopeVariablesMap::iterator
1864          I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1865     DeleteContainerPointers(I->second);
1866   ScopeVariables.clear();
1867   DeleteContainerPointers(CurrentFnArguments);
1868   UserVariables.clear();
1869   DbgValues.clear();
1870   AbstractVariables.clear();
1871   LabelsBeforeInsn.clear();
1872   LabelsAfterInsn.clear();
1873   PrevLabel = NULL;
1874 }
1875
1876 // Register a source line with debug info. Returns the  unique label that was
1877 // emitted and which provides correspondence to the source line list.
1878 void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1879                                   unsigned Flags) {
1880   StringRef Fn;
1881   StringRef Dir;
1882   unsigned Src = 1;
1883   if (S) {
1884     DIDescriptor Scope(S);
1885
1886     if (Scope.isCompileUnit()) {
1887       DICompileUnit CU(S);
1888       Fn = CU.getFilename();
1889       Dir = CU.getDirectory();
1890     } else if (Scope.isFile()) {
1891       DIFile F(S);
1892       Fn = F.getFilename();
1893       Dir = F.getDirectory();
1894     } else if (Scope.isSubprogram()) {
1895       DISubprogram SP(S);
1896       Fn = SP.getFilename();
1897       Dir = SP.getDirectory();
1898     } else if (Scope.isLexicalBlockFile()) {
1899       DILexicalBlockFile DBF(S);
1900       Fn = DBF.getFilename();
1901       Dir = DBF.getDirectory();
1902     } else if (Scope.isLexicalBlock()) {
1903       DILexicalBlock DB(S);
1904       Fn = DB.getFilename();
1905       Dir = DB.getDirectory();
1906     } else
1907       llvm_unreachable("Unexpected scope info");
1908
1909     Src = getOrCreateSourceID(Fn, Dir,
1910             Asm->OutStreamer.getContext().getDwarfCompileUnitID());
1911   }
1912   Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1913 }
1914
1915 //===----------------------------------------------------------------------===//
1916 // Emit Methods
1917 //===----------------------------------------------------------------------===//
1918
1919 // Compute the size and offset of a DIE.
1920 unsigned
1921 DwarfUnits::computeSizeAndOffset(DIE *Die, unsigned Offset) {
1922   // Get the children.
1923   const std::vector<DIE *> &Children = Die->getChildren();
1924
1925   // Record the abbreviation.
1926   assignAbbrevNumber(Die->getAbbrev());
1927
1928   // Get the abbreviation for this DIE.
1929   unsigned AbbrevNumber = Die->getAbbrevNumber();
1930   const DIEAbbrev *Abbrev = Abbreviations->at(AbbrevNumber - 1);
1931
1932   // Set DIE offset
1933   Die->setOffset(Offset);
1934
1935   // Start the size with the size of abbreviation code.
1936   Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1937
1938   const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
1939   const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
1940
1941   // Size the DIE attribute values.
1942   for (unsigned i = 0, N = Values.size(); i < N; ++i)
1943     // Size attribute value.
1944     Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1945
1946   // Size the DIE children if any.
1947   if (!Children.empty()) {
1948     assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1949            "Children flag not set");
1950
1951     for (unsigned j = 0, M = Children.size(); j < M; ++j)
1952       Offset = computeSizeAndOffset(Children[j], Offset);
1953
1954     // End of children marker.
1955     Offset += sizeof(int8_t);
1956   }
1957
1958   Die->setSize(Offset - Die->getOffset());
1959   return Offset;
1960 }
1961
1962 // Compute the size and offset of all the DIEs.
1963 void DwarfUnits::computeSizeAndOffsets() {
1964   // Offset from the beginning of debug info section.
1965   for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
1966          E = CUs.end(); I != E; ++I) {
1967     unsigned Offset =
1968       sizeof(int32_t) + // Length of Compilation Unit Info
1969       sizeof(int16_t) + // DWARF version number
1970       sizeof(int32_t) + // Offset Into Abbrev. Section
1971       sizeof(int8_t);   // Pointer Size (in bytes)
1972     computeSizeAndOffset((*I)->getCUDie(), Offset);
1973   }
1974 }
1975
1976 // Emit initial Dwarf sections with a label at the start of each one.
1977 void DwarfDebug::emitSectionLabels() {
1978   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1979
1980   // Dwarf sections base addresses.
1981   DwarfInfoSectionSym =
1982     emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1983   DwarfAbbrevSectionSym =
1984     emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1985   if (useSplitDwarf())
1986     DwarfAbbrevDWOSectionSym =
1987       emitSectionSym(Asm, TLOF.getDwarfAbbrevDWOSection(),
1988                      "section_abbrev_dwo");
1989   emitSectionSym(Asm, TLOF.getDwarfARangesSection());
1990
1991   if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1992     emitSectionSym(Asm, MacroInfo);
1993
1994   DwarfLineSectionSym =
1995     emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1996   emitSectionSym(Asm, TLOF.getDwarfLocSection());
1997   if (GenerateGnuPubSections) {
1998     DwarfGnuPubNamesSectionSym =
1999         emitSectionSym(Asm, TLOF.getDwarfGnuPubNamesSection());
2000     DwarfGnuPubTypesSectionSym =
2001         emitSectionSym(Asm, TLOF.getDwarfGnuPubTypesSection());
2002   } else if (HasDwarfPubSections) {
2003     emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
2004     emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
2005   }
2006
2007   DwarfStrSectionSym =
2008     emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
2009   if (useSplitDwarf()) {
2010     DwarfStrDWOSectionSym =
2011       emitSectionSym(Asm, TLOF.getDwarfStrDWOSection(), "skel_string");
2012     DwarfAddrSectionSym =
2013       emitSectionSym(Asm, TLOF.getDwarfAddrSection(), "addr_sec");
2014   }
2015   DwarfDebugRangeSectionSym = emitSectionSym(Asm, TLOF.getDwarfRangesSection(),
2016                                              "debug_range");
2017
2018   DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(),
2019                                            "section_debug_loc");
2020
2021   TextSectionSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
2022   emitSectionSym(Asm, TLOF.getDataSection());
2023 }
2024
2025 // Recursively emits a debug information entry.
2026 void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
2027   // Get the abbreviation for this DIE.
2028   unsigned AbbrevNumber = Die->getAbbrevNumber();
2029   const DIEAbbrev *Abbrev = Abbrevs->at(AbbrevNumber - 1);
2030
2031   // Emit the code (index) for the abbreviation.
2032   if (Asm->isVerbose())
2033     Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
2034                                 Twine::utohexstr(Die->getOffset()) + ":0x" +
2035                                 Twine::utohexstr(Die->getSize()) + " " +
2036                                 dwarf::TagString(Abbrev->getTag()));
2037   Asm->EmitULEB128(AbbrevNumber);
2038
2039   const SmallVectorImpl<DIEValue*> &Values = Die->getValues();
2040   const SmallVectorImpl<DIEAbbrevData> &AbbrevData = Abbrev->getData();
2041
2042   // Emit the DIE attribute values.
2043   for (unsigned i = 0, N = Values.size(); i < N; ++i) {
2044     dwarf::Attribute Attr = AbbrevData[i].getAttribute();
2045     dwarf::Form Form = AbbrevData[i].getForm();
2046     assert(Form && "Too many attributes for DIE (check abbreviation)");
2047
2048     if (Asm->isVerbose())
2049       Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
2050
2051     switch (Attr) {
2052     case dwarf::DW_AT_abstract_origin: {
2053       DIEEntry *E = cast<DIEEntry>(Values[i]);
2054       DIE *Origin = E->getEntry();
2055       unsigned Addr = Origin->getOffset();
2056       Asm->EmitInt32(Addr);
2057       break;
2058     }
2059     case dwarf::DW_AT_ranges: {
2060       // DW_AT_range Value encodes offset in debug_range section.
2061       DIEInteger *V = cast<DIEInteger>(Values[i]);
2062
2063       if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) {
2064         Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
2065                                  V->getValue(),
2066                                  4);
2067       } else {
2068         Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
2069                                        V->getValue(),
2070                                        DwarfDebugRangeSectionSym,
2071                                        4);
2072       }
2073       break;
2074     }
2075     case dwarf::DW_AT_location: {
2076       if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
2077         if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2078           Asm->EmitLabelReference(L->getValue(), 4);
2079         else
2080           Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
2081       } else {
2082         Values[i]->EmitValue(Asm, Form);
2083       }
2084       break;
2085     }
2086     case dwarf::DW_AT_accessibility: {
2087       if (Asm->isVerbose()) {
2088         DIEInteger *V = cast<DIEInteger>(Values[i]);
2089         Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
2090       }
2091       Values[i]->EmitValue(Asm, Form);
2092       break;
2093     }
2094     default:
2095       // Emit an attribute using the defined form.
2096       Values[i]->EmitValue(Asm, Form);
2097       break;
2098     }
2099   }
2100
2101   // Emit the DIE children if any.
2102   if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
2103     const std::vector<DIE *> &Children = Die->getChildren();
2104
2105     for (unsigned j = 0, M = Children.size(); j < M; ++j)
2106       emitDIE(Children[j], Abbrevs);
2107
2108     if (Asm->isVerbose())
2109       Asm->OutStreamer.AddComment("End Of Children Mark");
2110     Asm->EmitInt8(0);
2111   }
2112 }
2113
2114 // Emit the various dwarf units to the unit section USection with
2115 // the abbreviations going into ASection.
2116 void DwarfUnits::emitUnits(DwarfDebug *DD,
2117                            const MCSection *USection,
2118                            const MCSection *ASection,
2119                            const MCSymbol *ASectionSym) {
2120   Asm->OutStreamer.SwitchSection(USection);
2121   for (SmallVectorImpl<CompileUnit *>::iterator I = CUs.begin(),
2122          E = CUs.end(); I != E; ++I) {
2123     CompileUnit *TheCU = *I;
2124     DIE *Die = TheCU->getCUDie();
2125
2126     // Emit the compile units header.
2127     Asm->OutStreamer
2128       .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(),
2129                                     TheCU->getUniqueID()));
2130
2131     // Emit size of content not including length itself
2132     unsigned ContentSize = Die->getSize() +
2133       sizeof(int16_t) + // DWARF version number
2134       sizeof(int32_t) + // Offset Into Abbrev. Section
2135       sizeof(int8_t);   // Pointer Size (in bytes)
2136
2137     Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
2138     Asm->EmitInt32(ContentSize);
2139     Asm->OutStreamer.AddComment("DWARF version number");
2140     Asm->EmitInt16(DD->getDwarfVersion());
2141     Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2142     Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
2143                            ASectionSym);
2144     Asm->OutStreamer.AddComment("Address Size (in bytes)");
2145     Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
2146
2147     DD->emitDIE(Die, Abbreviations);
2148     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(),
2149                                                   TheCU->getUniqueID()));
2150   }
2151 }
2152
2153 // Emit the debug info section.
2154 void DwarfDebug::emitDebugInfo() {
2155   DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2156
2157   Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(),
2158                    Asm->getObjFileLowering().getDwarfAbbrevSection(),
2159                    DwarfAbbrevSectionSym);
2160 }
2161
2162 // Emit the abbreviation section.
2163 void DwarfDebug::emitAbbreviations() {
2164   if (!useSplitDwarf())
2165     emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
2166                 &Abbreviations);
2167   else
2168     emitSkeletonAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
2169 }
2170
2171 void DwarfDebug::emitAbbrevs(const MCSection *Section,
2172                              std::vector<DIEAbbrev *> *Abbrevs) {
2173   // Check to see if it is worth the effort.
2174   if (!Abbrevs->empty()) {
2175     // Start the debug abbrev section.
2176     Asm->OutStreamer.SwitchSection(Section);
2177
2178     MCSymbol *Begin = Asm->GetTempSymbol(Section->getLabelBeginName());
2179     Asm->OutStreamer.EmitLabel(Begin);
2180
2181     // For each abbrevation.
2182     for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
2183       // Get abbreviation data
2184       const DIEAbbrev *Abbrev = Abbrevs->at(i);
2185
2186       // Emit the abbrevations code (base 1 index.)
2187       Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
2188
2189       // Emit the abbreviations data.
2190       Abbrev->Emit(Asm);
2191     }
2192
2193     // Mark end of abbreviations.
2194     Asm->EmitULEB128(0, "EOM(3)");
2195
2196     MCSymbol *End = Asm->GetTempSymbol(Section->getLabelEndName());
2197     Asm->OutStreamer.EmitLabel(End);
2198   }
2199 }
2200
2201 // Emit the last address of the section and the end of the line matrix.
2202 void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
2203   // Define last address of section.
2204   Asm->OutStreamer.AddComment("Extended Op");
2205   Asm->EmitInt8(0);
2206
2207   Asm->OutStreamer.AddComment("Op size");
2208   Asm->EmitInt8(Asm->getDataLayout().getPointerSize() + 1);
2209   Asm->OutStreamer.AddComment("DW_LNE_set_address");
2210   Asm->EmitInt8(dwarf::DW_LNE_set_address);
2211
2212   Asm->OutStreamer.AddComment("Section end label");
2213
2214   Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
2215                                    Asm->getDataLayout().getPointerSize());
2216
2217   // Mark end of matrix.
2218   Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
2219   Asm->EmitInt8(0);
2220   Asm->EmitInt8(1);
2221   Asm->EmitInt8(1);
2222 }
2223
2224 // Emit visible names into a hashed accelerator table section.
2225 void DwarfDebug::emitAccelNames() {
2226   DwarfAccelTable AT(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
2227                                            dwarf::DW_FORM_data4));
2228   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2229          E = CUMap.end(); I != E; ++I) {
2230     CompileUnit *TheCU = I->second;
2231     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNames();
2232     for (StringMap<std::vector<DIE*> >::const_iterator
2233            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2234       StringRef Name = GI->getKey();
2235       const std::vector<DIE *> &Entities = GI->second;
2236       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2237              DE = Entities.end(); DI != DE; ++DI)
2238         AT.AddName(Name, (*DI));
2239     }
2240   }
2241
2242   AT.FinalizeTable(Asm, "Names");
2243   Asm->OutStreamer.SwitchSection(
2244     Asm->getObjFileLowering().getDwarfAccelNamesSection());
2245   MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2246   Asm->OutStreamer.EmitLabel(SectionBegin);
2247
2248   // Emit the full data.
2249   AT.Emit(Asm, SectionBegin, &InfoHolder);
2250 }
2251
2252 // Emit objective C classes and categories into a hashed accelerator table
2253 // section.
2254 void DwarfDebug::emitAccelObjC() {
2255   DwarfAccelTable AT(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
2256                                            dwarf::DW_FORM_data4));
2257   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2258          E = CUMap.end(); I != E; ++I) {
2259     CompileUnit *TheCU = I->second;
2260     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelObjC();
2261     for (StringMap<std::vector<DIE*> >::const_iterator
2262            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2263       StringRef Name = GI->getKey();
2264       const std::vector<DIE *> &Entities = GI->second;
2265       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2266              DE = Entities.end(); DI != DE; ++DI)
2267         AT.AddName(Name, (*DI));
2268     }
2269   }
2270
2271   AT.FinalizeTable(Asm, "ObjC");
2272   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2273                                  .getDwarfAccelObjCSection());
2274   MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2275   Asm->OutStreamer.EmitLabel(SectionBegin);
2276
2277   // Emit the full data.
2278   AT.Emit(Asm, SectionBegin, &InfoHolder);
2279 }
2280
2281 // Emit namespace dies into a hashed accelerator table.
2282 void DwarfDebug::emitAccelNamespaces() {
2283   DwarfAccelTable AT(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
2284                                            dwarf::DW_FORM_data4));
2285   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2286          E = CUMap.end(); I != E; ++I) {
2287     CompileUnit *TheCU = I->second;
2288     const StringMap<std::vector<DIE*> > &Names = TheCU->getAccelNamespace();
2289     for (StringMap<std::vector<DIE*> >::const_iterator
2290            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2291       StringRef Name = GI->getKey();
2292       const std::vector<DIE *> &Entities = GI->second;
2293       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2294              DE = Entities.end(); DI != DE; ++DI)
2295         AT.AddName(Name, (*DI));
2296     }
2297   }
2298
2299   AT.FinalizeTable(Asm, "namespac");
2300   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2301                                  .getDwarfAccelNamespaceSection());
2302   MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2303   Asm->OutStreamer.EmitLabel(SectionBegin);
2304
2305   // Emit the full data.
2306   AT.Emit(Asm, SectionBegin, &InfoHolder);
2307 }
2308
2309 // Emit type dies into a hashed accelerator table.
2310 void DwarfDebug::emitAccelTypes() {
2311   std::vector<DwarfAccelTable::Atom> Atoms;
2312   Atoms.push_back(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
2313                                         dwarf::DW_FORM_data4));
2314   Atoms.push_back(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_tag,
2315                                         dwarf::DW_FORM_data2));
2316   Atoms.push_back(DwarfAccelTable::Atom(dwarf::DW_ATOM_type_flags,
2317                                         dwarf::DW_FORM_data1));
2318   DwarfAccelTable AT(Atoms);
2319   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2320          E = CUMap.end(); I != E; ++I) {
2321     CompileUnit *TheCU = I->second;
2322     const StringMap<std::vector<std::pair<DIE*, unsigned > > > &Names
2323       = TheCU->getAccelTypes();
2324     for (StringMap<std::vector<std::pair<DIE*, unsigned> > >::const_iterator
2325            GI = Names.begin(), GE = Names.end(); GI != GE; ++GI) {
2326       StringRef Name = GI->getKey();
2327       const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2328       for (std::vector<std::pair<DIE *, unsigned> >::const_iterator DI
2329              = Entities.begin(), DE = Entities.end(); DI !=DE; ++DI)
2330         AT.AddName(Name, (*DI).first, (*DI).second);
2331     }
2332   }
2333
2334   AT.FinalizeTable(Asm, "types");
2335   Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering()
2336                                  .getDwarfAccelTypesSection());
2337   MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2338   Asm->OutStreamer.EmitLabel(SectionBegin);
2339
2340   // Emit the full data.
2341   AT.Emit(Asm, SectionBegin, &InfoHolder);
2342 }
2343
2344 // Public name handling.
2345 // The format for the various pubnames:
2346 //
2347 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
2348 // for the DIE that is named.
2349 //
2350 // gnu pubnames - offset/index value/name tuples where the offset is the offset
2351 // into the CU and the index value is computed according to the type of value
2352 // for the DIE that is named.
2353 //
2354 // For type units the offset is the offset of the skeleton DIE. For split dwarf
2355 // it's the offset within the debug_info/debug_types dwo section, however, the
2356 // reference in the pubname header doesn't change.
2357
2358 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
2359 static dwarf::PubIndexEntryDescriptor computeIndexValue(CompileUnit *CU,
2360                                                         DIE *Die) {
2361   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
2362
2363   // We could have a specification DIE that has our most of our knowledge,
2364   // look for that now.
2365   DIEValue *SpecVal = Die->findAttribute(dwarf::DW_AT_specification);
2366   if (SpecVal) {
2367     DIE *SpecDIE = cast<DIEEntry>(SpecVal)->getEntry();
2368     if (SpecDIE->findAttribute(dwarf::DW_AT_external))
2369       Linkage = dwarf::GIEL_EXTERNAL;
2370   } else if (Die->findAttribute(dwarf::DW_AT_external))
2371     Linkage = dwarf::GIEL_EXTERNAL;
2372
2373   switch (Die->getTag()) {
2374   case dwarf::DW_TAG_class_type:
2375   case dwarf::DW_TAG_structure_type:
2376   case dwarf::DW_TAG_union_type:
2377   case dwarf::DW_TAG_enumeration_type:
2378     return dwarf::PubIndexEntryDescriptor(
2379         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
2380                               ? dwarf::GIEL_STATIC
2381                               : dwarf::GIEL_EXTERNAL);
2382   case dwarf::DW_TAG_typedef:
2383   case dwarf::DW_TAG_base_type:
2384   case dwarf::DW_TAG_subrange_type:
2385     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
2386   case dwarf::DW_TAG_namespace:
2387     return dwarf::GIEK_TYPE;
2388   case dwarf::DW_TAG_subprogram:
2389     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
2390   case dwarf::DW_TAG_constant:
2391   case dwarf::DW_TAG_variable:
2392     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
2393   case dwarf::DW_TAG_enumerator:
2394     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
2395                                           dwarf::GIEL_STATIC);
2396   default:
2397     return dwarf::GIEK_NONE;
2398   }
2399 }
2400
2401 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
2402 ///
2403 void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
2404   const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2405   const MCSection *PSec =
2406       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
2407                : Asm->getObjFileLowering().getDwarfPubNamesSection();
2408
2409   typedef DenseMap<const MDNode*, CompileUnit*> CUMapType;
2410   for (CUMapType::iterator I = CUMap.begin(), E = CUMap.end(); I != E; ++I) {
2411     CompileUnit *TheCU = I->second;
2412     unsigned ID = TheCU->getUniqueID();
2413
2414     // Start the dwarf pubnames section.
2415     Asm->OutStreamer.SwitchSection(PSec);
2416
2417     // Emit a label so we can reference the beginning of this pubname section.
2418     if (GnuStyle)
2419       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("gnu_pubnames",
2420                                                     TheCU->getUniqueID()));
2421
2422     // Emit the header.
2423     Asm->OutStreamer.AddComment("Length of Public Names Info");
2424     Asm->EmitLabelDifference(Asm->GetTempSymbol("pubnames_end", ID),
2425                              Asm->GetTempSymbol("pubnames_begin", ID), 4);
2426
2427     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
2428
2429     Asm->OutStreamer.AddComment("DWARF Version");
2430     Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION);
2431
2432     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2433     Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2434                            DwarfInfoSectionSym);
2435
2436     Asm->OutStreamer.AddComment("Compilation Unit Length");
2437     Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(), ID),
2438                              Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2439                              4);
2440
2441     // Emit the pubnames for this compilation unit.
2442     const StringMap<DIE*> &Globals = TheCU->getGlobalNames();
2443     for (StringMap<DIE*>::const_iterator
2444            GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
2445       const char *Name = GI->getKeyData();
2446       DIE *Entity = GI->second;
2447
2448       Asm->OutStreamer.AddComment("DIE offset");
2449       Asm->EmitInt32(Entity->getOffset());
2450
2451       if (GnuStyle) {
2452         dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheCU, Entity);
2453         Asm->OutStreamer.AddComment(
2454             Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
2455             dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
2456         Asm->EmitInt8(Desc.toBits());
2457       }
2458
2459       if (Asm->isVerbose())
2460         Asm->OutStreamer.AddComment("External Name");
2461       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1));
2462     }
2463
2464     Asm->OutStreamer.AddComment("End Mark");
2465     Asm->EmitInt32(0);
2466     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end", ID));
2467   }
2468 }
2469
2470 void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
2471   const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2472   const MCSection *PSec =
2473       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
2474                : Asm->getObjFileLowering().getDwarfPubTypesSection();
2475
2476   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2477                                                          E = CUMap.end();
2478        I != E; ++I) {
2479     CompileUnit *TheCU = I->second;
2480     // Start the dwarf pubtypes section.
2481     Asm->OutStreamer.SwitchSection(PSec);
2482
2483     // Emit a label so we can reference the beginning of this pubtype section.
2484     if (GnuStyle)
2485       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("gnu_pubtypes",
2486                                                     TheCU->getUniqueID()));
2487
2488     // Emit the header.
2489     Asm->OutStreamer.AddComment("Length of Public Types Info");
2490     Asm->EmitLabelDifference(
2491         Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2492         Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2493
2494     Asm->OutStreamer.EmitLabel(
2495         Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()));
2496
2497     if (Asm->isVerbose())
2498       Asm->OutStreamer.AddComment("DWARF Version");
2499     Asm->EmitInt16(dwarf::DW_PUBTYPES_VERSION);
2500
2501     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2502     Asm->EmitSectionOffset(
2503         Asm->GetTempSymbol(ISec->getLabelBeginName(), TheCU->getUniqueID()),
2504         DwarfInfoSectionSym);
2505
2506     Asm->OutStreamer.AddComment("Compilation Unit Length");
2507     Asm->EmitLabelDifference(
2508         Asm->GetTempSymbol(ISec->getLabelEndName(), TheCU->getUniqueID()),
2509         Asm->GetTempSymbol(ISec->getLabelBeginName(), TheCU->getUniqueID()), 4);
2510
2511     // Emit the pubtypes.
2512     const StringMap<DIE *> &Globals = TheCU->getGlobalTypes();
2513     for (StringMap<DIE *>::const_iterator GI = Globals.begin(),
2514                                           GE = Globals.end();
2515          GI != GE; ++GI) {
2516       const char *Name = GI->getKeyData();
2517       DIE *Entity = GI->second;
2518
2519       if (Asm->isVerbose())
2520         Asm->OutStreamer.AddComment("DIE offset");
2521       Asm->EmitInt32(Entity->getOffset());
2522
2523       if (GnuStyle) {
2524         dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheCU, Entity);
2525         Asm->OutStreamer.AddComment(
2526             Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
2527             dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
2528         Asm->EmitInt8(Desc.toBits());
2529       }
2530
2531       if (Asm->isVerbose())
2532         Asm->OutStreamer.AddComment("External Name");
2533
2534       // Emit the name with a terminating null byte.
2535       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength() + 1));
2536     }
2537
2538     Asm->OutStreamer.AddComment("End Mark");
2539     Asm->EmitInt32(0);
2540     Asm->OutStreamer.EmitLabel(
2541         Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()));
2542   }
2543 }
2544
2545 // Emit strings into a string section.
2546 void DwarfUnits::emitStrings(const MCSection *StrSection,
2547                              const MCSection *OffsetSection = NULL,
2548                              const MCSymbol *StrSecSym = NULL) {
2549
2550   if (StringPool.empty()) return;
2551
2552   // Start the dwarf str section.
2553   Asm->OutStreamer.SwitchSection(StrSection);
2554
2555   // Get all of the string pool entries and put them in an array by their ID so
2556   // we can sort them.
2557   SmallVector<std::pair<unsigned,
2558                  StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
2559
2560   for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
2561          I = StringPool.begin(), E = StringPool.end();
2562        I != E; ++I)
2563     Entries.push_back(std::make_pair(I->second.second, &*I));
2564
2565   array_pod_sort(Entries.begin(), Entries.end());
2566
2567   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2568     // Emit a label for reference from debug information entries.
2569     Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2570
2571     // Emit the string itself with a terminating null byte.
2572     Asm->OutStreamer.EmitBytes(StringRef(Entries[i].second->getKeyData(),
2573                                          Entries[i].second->getKeyLength()+1));
2574   }
2575
2576   // If we've got an offset section go ahead and emit that now as well.
2577   if (OffsetSection) {
2578     Asm->OutStreamer.SwitchSection(OffsetSection);
2579     unsigned offset = 0;
2580     unsigned size = 4; // FIXME: DWARF64 is 8.
2581     for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2582       Asm->OutStreamer.EmitIntValue(offset, size);
2583       offset += Entries[i].second->getKeyLength() + 1;
2584     }
2585   }
2586 }
2587
2588 // Emit strings into a string section.
2589 void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2590
2591   if (AddressPool.empty()) return;
2592
2593   // Start the dwarf addr section.
2594   Asm->OutStreamer.SwitchSection(AddrSection);
2595
2596   // Order the address pool entries by ID
2597   SmallVector<const MCExpr *, 64> Entries(AddressPool.size());
2598
2599   for (DenseMap<const MCExpr *, unsigned>::iterator I = AddressPool.begin(),
2600                                                     E = AddressPool.end();
2601        I != E; ++I)
2602     Entries[I->second] = I->first;
2603
2604   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2605     // Emit an expression for reference from debug information entries.
2606     if (const MCExpr *Expr = Entries[i])
2607       Asm->OutStreamer.EmitValue(Expr, Asm->getDataLayout().getPointerSize());
2608     else
2609       Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2610   }
2611
2612 }
2613
2614 // Emit visible names into a debug str section.
2615 void DwarfDebug::emitDebugStr() {
2616   DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2617   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2618 }
2619
2620 // Emit locations into the debug loc section.
2621 void DwarfDebug::emitDebugLoc() {
2622   if (DotDebugLocEntries.empty())
2623     return;
2624
2625   for (SmallVectorImpl<DotDebugLocEntry>::iterator
2626          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2627        I != E; ++I) {
2628     DotDebugLocEntry &Entry = *I;
2629     if (I + 1 != DotDebugLocEntries.end())
2630       Entry.Merge(I+1);
2631   }
2632
2633   // Start the dwarf loc section.
2634   Asm->OutStreamer.SwitchSection(
2635     Asm->getObjFileLowering().getDwarfLocSection());
2636   unsigned char Size = Asm->getDataLayout().getPointerSize();
2637   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2638   unsigned index = 1;
2639   for (SmallVectorImpl<DotDebugLocEntry>::iterator
2640          I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
2641        I != E; ++I, ++index) {
2642     DotDebugLocEntry &Entry = *I;
2643     if (Entry.isMerged()) continue;
2644     if (Entry.isEmpty()) {
2645       Asm->OutStreamer.EmitIntValue(0, Size);
2646       Asm->OutStreamer.EmitIntValue(0, Size);
2647       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2648     } else {
2649       Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size);
2650       Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size);
2651       DIVariable DV(Entry.getVariable());
2652       Asm->OutStreamer.AddComment("Loc expr size");
2653       MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2654       MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2655       Asm->EmitLabelDifference(end, begin, 2);
2656       Asm->OutStreamer.EmitLabel(begin);
2657       if (Entry.isInt()) {
2658         DIBasicType BTy(DV.getType());
2659         if (BTy.Verify() &&
2660             (BTy.getEncoding()  == dwarf::DW_ATE_signed
2661              || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2662           Asm->OutStreamer.AddComment("DW_OP_consts");
2663           Asm->EmitInt8(dwarf::DW_OP_consts);
2664           Asm->EmitSLEB128(Entry.getInt());
2665         } else {
2666           Asm->OutStreamer.AddComment("DW_OP_constu");
2667           Asm->EmitInt8(dwarf::DW_OP_constu);
2668           Asm->EmitULEB128(Entry.getInt());
2669         }
2670       } else if (Entry.isLocation()) {
2671         MachineLocation Loc = Entry.getLoc();
2672         if (!DV.hasComplexAddress())
2673           // Regular entry.
2674           Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2675         else {
2676           // Complex address entry.
2677           unsigned N = DV.getNumAddrElements();
2678           unsigned i = 0;
2679           if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2680             if (Loc.getOffset()) {
2681               i = 2;
2682               Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2683               Asm->OutStreamer.AddComment("DW_OP_deref");
2684               Asm->EmitInt8(dwarf::DW_OP_deref);
2685               Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2686               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2687               Asm->EmitSLEB128(DV.getAddrElement(1));
2688             } else {
2689               // If first address element is OpPlus then emit
2690               // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2691               MachineLocation TLoc(Loc.getReg(), DV.getAddrElement(1));
2692               Asm->EmitDwarfRegOp(TLoc, DV.isIndirect());
2693               i = 2;
2694             }
2695           } else {
2696             Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2697           }
2698
2699           // Emit remaining complex address elements.
2700           for (; i < N; ++i) {
2701             uint64_t Element = DV.getAddrElement(i);
2702             if (Element == DIBuilder::OpPlus) {
2703               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2704               Asm->EmitULEB128(DV.getAddrElement(++i));
2705             } else if (Element == DIBuilder::OpDeref) {
2706               if (!Loc.isReg())
2707                 Asm->EmitInt8(dwarf::DW_OP_deref);
2708             } else
2709               llvm_unreachable("unknown Opcode found in complex address");
2710           }
2711         }
2712       }
2713       // else ... ignore constant fp. There is not any good way to
2714       // to represent them here in dwarf.
2715       Asm->OutStreamer.EmitLabel(end);
2716     }
2717   }
2718 }
2719
2720 struct SymbolCUSorter {
2721   SymbolCUSorter(const MCStreamer &s) : Streamer(s) {}
2722   const MCStreamer &Streamer;
2723
2724   bool operator() (const SymbolCU &A, const SymbolCU &B) {
2725     unsigned IA = A.Sym ? Streamer.GetSymbolOrder(A.Sym) : 0;
2726     unsigned IB = B.Sym ? Streamer.GetSymbolOrder(B.Sym) : 0;
2727
2728     // Symbols with no order assigned should be placed at the end.
2729     // (e.g. section end labels)
2730     if (IA == 0)
2731       IA = (unsigned)(-1);
2732     if (IB == 0)
2733       IB = (unsigned)(-1);
2734     return IA < IB;
2735   }
2736 };
2737
2738 static bool CUSort(const CompileUnit *A, const CompileUnit *B) {
2739     return (A->getUniqueID() < B->getUniqueID());
2740 }
2741
2742 struct ArangeSpan {
2743   const MCSymbol *Start, *End;
2744 };
2745
2746 // Emit a debug aranges section, containing a CU lookup for any
2747 // address we can tie back to a CU.
2748 void DwarfDebug::emitDebugARanges() {
2749   // Start the dwarf aranges section.
2750   Asm->OutStreamer
2751       .SwitchSection(Asm->getObjFileLowering().getDwarfARangesSection());
2752
2753   typedef DenseMap<CompileUnit *, std::vector<ArangeSpan> > SpansType;
2754
2755   SpansType Spans;
2756
2757   // Build a list of sections used.
2758   std::vector<const MCSection *> Sections;
2759   for (SectionMapType::iterator it = SectionMap.begin(); it != SectionMap.end();
2760        it++) {
2761     const MCSection *Section = it->first;
2762     Sections.push_back(Section);
2763   }
2764
2765   // Sort the sections into order.
2766   // This is only done to ensure consistent output order across different runs.
2767   std::sort(Sections.begin(), Sections.end(), SectionSort);
2768
2769   // Build a set of address spans, sorted by CU.
2770   for (size_t SecIdx=0;SecIdx<Sections.size();SecIdx++) {
2771     const MCSection *Section = Sections[SecIdx];
2772     SmallVector<SymbolCU, 8> &List = SectionMap[Section];
2773     if (List.size() < 2)
2774       continue;
2775
2776     // Sort the symbols by offset within the section.
2777     SymbolCUSorter sorter(Asm->OutStreamer);
2778     std::sort(List.begin(), List.end(), sorter);
2779
2780     // If we have no section (e.g. common), just write out
2781     // individual spans for each symbol.
2782     if (Section == NULL) {
2783       for (size_t n = 0; n < List.size(); n++) {
2784         const SymbolCU &Cur = List[n];
2785
2786         ArangeSpan Span;
2787         Span.Start = Cur.Sym;
2788         Span.End = NULL;
2789         if (Cur.CU)
2790           Spans[Cur.CU].push_back(Span);
2791       }
2792     } else {
2793       // Build spans between each label.
2794       const MCSymbol *StartSym = List[0].Sym;
2795       for (size_t n = 1; n < List.size(); n++) {
2796         const SymbolCU &Prev = List[n - 1];
2797         const SymbolCU &Cur = List[n];
2798
2799         // Try and build the longest span we can within the same CU.
2800         if (Cur.CU != Prev.CU) {
2801           ArangeSpan Span;
2802           Span.Start = StartSym;
2803           Span.End = Cur.Sym;
2804           Spans[Prev.CU].push_back(Span);
2805           StartSym = Cur.Sym;
2806         }
2807       }
2808     }
2809   }
2810
2811   const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2812   unsigned PtrSize = Asm->getDataLayout().getPointerSize();
2813
2814   // Build a list of CUs used.
2815   std::vector<CompileUnit *> CUs;
2816   for (SpansType::iterator it = Spans.begin(); it != Spans.end(); it++) {
2817     CompileUnit *CU = it->first;
2818     CUs.push_back(CU);
2819   }
2820
2821   // Sort the CU list (again, to ensure consistent output order).
2822   std::sort(CUs.begin(), CUs.end(), CUSort);
2823
2824   // Emit an arange table for each CU we used.
2825   for (size_t CUIdx=0;CUIdx<CUs.size();CUIdx++) {
2826     CompileUnit *CU = CUs[CUIdx];
2827     std::vector<ArangeSpan> &List = Spans[CU];
2828
2829     // Emit size of content not including length itself.
2830     unsigned ContentSize
2831         = sizeof(int16_t) // DWARF ARange version number
2832         + sizeof(int32_t) // Offset of CU in the .debug_info section
2833         + sizeof(int8_t)  // Pointer Size (in bytes)
2834         + sizeof(int8_t); // Segment Size (in bytes)
2835
2836     unsigned TupleSize = PtrSize * 2;
2837
2838     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
2839     unsigned Padding = 0;
2840     while (((sizeof(int32_t) + ContentSize + Padding) % TupleSize) != 0)
2841       Padding++;
2842
2843     ContentSize += Padding;
2844     ContentSize += (List.size() + 1) * TupleSize;
2845
2846     // For each compile unit, write the list of spans it covers.
2847     Asm->OutStreamer.AddComment("Length of ARange Set");
2848     Asm->EmitInt32(ContentSize);
2849     Asm->OutStreamer.AddComment("DWARF Arange version number");
2850     Asm->EmitInt16(dwarf::DW_ARANGES_VERSION);
2851     Asm->OutStreamer.AddComment("Offset Into Debug Info Section");
2852     Asm->EmitSectionOffset(
2853         Asm->GetTempSymbol(ISec->getLabelBeginName(), CU->getUniqueID()),
2854         DwarfInfoSectionSym);
2855     Asm->OutStreamer.AddComment("Address Size (in bytes)");
2856     Asm->EmitInt8(PtrSize);
2857     Asm->OutStreamer.AddComment("Segment Size (in bytes)");
2858     Asm->EmitInt8(0);
2859
2860     for (unsigned n = 0; n < Padding; n++)
2861       Asm->EmitInt8(0xff);
2862
2863     for (unsigned n = 0; n < List.size(); n++) {
2864       const ArangeSpan &Span = List[n];
2865       Asm->EmitLabelReference(Span.Start, PtrSize);
2866
2867       // Calculate the size as being from the span start to it's end.
2868       if (Span.End) {
2869         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
2870       } else {
2871         // For symbols without an end marker (e.g. common), we
2872         // write a single arange entry containing just that one symbol.
2873         uint64_t Size = SymSize[Span.Start];
2874         if (Size == 0)
2875           Size = 1;
2876
2877         Asm->OutStreamer.EmitIntValue(Size, PtrSize);
2878       }
2879     }
2880
2881     Asm->OutStreamer.AddComment("ARange terminator");
2882     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2883     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2884   }
2885 }
2886
2887 // Emit visible names into a debug ranges section.
2888 void DwarfDebug::emitDebugRanges() {
2889   // Start the dwarf ranges section.
2890   Asm->OutStreamer
2891       .SwitchSection(Asm->getObjFileLowering().getDwarfRangesSection());
2892   unsigned char Size = Asm->getDataLayout().getPointerSize();
2893   for (SmallVectorImpl<const MCSymbol *>::iterator
2894          I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2895        I != E; ++I) {
2896     if (*I)
2897       Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size);
2898     else
2899       Asm->OutStreamer.EmitIntValue(0, Size);
2900   }
2901 }
2902
2903 // Emit visible names into a debug macinfo section.
2904 void DwarfDebug::emitDebugMacInfo() {
2905   if (const MCSection *LineInfo =
2906       Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2907     // Start the dwarf macinfo section.
2908     Asm->OutStreamer.SwitchSection(LineInfo);
2909   }
2910 }
2911
2912 // DWARF5 Experimental Separate Dwarf emitters.
2913
2914 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2915 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2916 // DW_AT_ranges_base, DW_AT_addr_base.
2917 CompileUnit *DwarfDebug::constructSkeletonCU(const CompileUnit *CU) {
2918
2919   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2920   CompileUnit *NewCU = new CompileUnit(CU->getUniqueID(), Die, CU->getNode(),
2921                                        Asm, this, &SkeletonHolder);
2922
2923   NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2924                         DICompileUnit(CU->getNode()).getSplitDebugFilename());
2925
2926   // Relocate to the beginning of the addr_base section, else 0 for the
2927   // beginning of the one for this compile unit.
2928   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2929     NewCU->addLabel(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset,
2930                     DwarfAddrSectionSym);
2931   else
2932     NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base,
2933                    dwarf::DW_FORM_sec_offset, 0);
2934
2935   // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2936   // into an entity. We're using 0, or a NULL label for this.
2937   NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2938
2939   // DW_AT_stmt_list is a offset of line number information for this
2940   // compile unit in debug_line section.
2941   // FIXME: Should handle multiple compile units.
2942   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2943     NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2944                     DwarfLineSectionSym);
2945   else
2946     NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2947
2948   if (!CompilationDir.empty())
2949     NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2950
2951   // Flags to let the linker know we have emitted new style pubnames.
2952   if (GenerateGnuPubSections) {
2953     if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2954       NewCU->addLabel(Die, dwarf::DW_AT_GNU_pubnames, dwarf::DW_FORM_sec_offset,
2955                       Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID()));
2956     else
2957       NewCU->addDelta(Die, dwarf::DW_AT_GNU_pubnames, dwarf::DW_FORM_data4,
2958                       Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID()),
2959                       DwarfGnuPubNamesSectionSym);
2960
2961     if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2962       NewCU->addLabel(Die, dwarf::DW_AT_GNU_pubtypes, dwarf::DW_FORM_sec_offset,
2963                       Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID()));
2964     else
2965       NewCU->addDelta(Die, dwarf::DW_AT_GNU_pubtypes, dwarf::DW_FORM_data4,
2966                       Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID()),
2967                       DwarfGnuPubTypesSectionSym);
2968   }
2969
2970   // Flag if we've emitted any ranges and their location for the compile unit.
2971   if (DebugRangeSymbols.size()) {
2972     if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2973       NewCU->addLabel(Die, dwarf::DW_AT_GNU_ranges_base,
2974                       dwarf::DW_FORM_sec_offset, DwarfDebugRangeSectionSym);
2975     else
2976       NewCU->addUInt(Die, dwarf::DW_AT_GNU_ranges_base, dwarf::DW_FORM_data4,
2977                      0);
2978   }
2979
2980   SkeletonHolder.addUnit(NewCU);
2981   SkeletonCUs.push_back(NewCU);
2982
2983   return NewCU;
2984 }
2985
2986 void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
2987   assert(useSplitDwarf() && "No split dwarf debug info?");
2988   emitAbbrevs(Section, &SkeletonAbbrevs);
2989 }
2990
2991 // Emit the .debug_info.dwo section for separated dwarf. This contains the
2992 // compile units that would normally be in debug_info.
2993 void DwarfDebug::emitDebugInfoDWO() {
2994   assert(useSplitDwarf() && "No split dwarf debug info?");
2995   InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
2996                        Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
2997                        DwarfAbbrevDWOSectionSym);
2998 }
2999
3000 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
3001 // abbreviations for the .debug_info.dwo section.
3002 void DwarfDebug::emitDebugAbbrevDWO() {
3003   assert(useSplitDwarf() && "No split dwarf?");
3004   emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
3005               &Abbreviations);
3006 }
3007
3008 // Emit the .debug_str.dwo section for separated dwarf. This contains the
3009 // string section and is identical in format to traditional .debug_str
3010 // sections.
3011 void DwarfDebug::emitDebugStrDWO() {
3012   assert(useSplitDwarf() && "No split dwarf?");
3013   const MCSection *OffSec = Asm->getObjFileLowering()
3014                             .getDwarfStrOffDWOSection();
3015   const MCSymbol *StrSym = DwarfStrSectionSym;
3016   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
3017                          OffSec, StrSym);
3018 }