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