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