Fix comment.
[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<DIE *> > &Names = TheCU->getAccelNames();
2251     for (StringMap<std::vector<DIE *> >::const_iterator GI = Names.begin(),
2252                                                         GE = Names.end();
2253          GI != GE; ++GI) {
2254       StringRef Name = GI->getKey();
2255       const std::vector<DIE *> &Entities = GI->second;
2256       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2257                                               DE = Entities.end();
2258            DI != DE; ++DI)
2259         AT.AddName(Name, (*DI));
2260     }
2261   }
2262
2263   AT.FinalizeTable(Asm, "Names");
2264   Asm->OutStreamer.SwitchSection(
2265       Asm->getObjFileLowering().getDwarfAccelNamesSection());
2266   MCSymbol *SectionBegin = Asm->GetTempSymbol("names_begin");
2267   Asm->OutStreamer.EmitLabel(SectionBegin);
2268
2269   // Emit the full data.
2270   AT.Emit(Asm, SectionBegin, &InfoHolder);
2271 }
2272
2273 // Emit objective C classes and categories into a hashed accelerator table
2274 // section.
2275 void DwarfDebug::emitAccelObjC() {
2276   DwarfAccelTable AT(
2277       DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4));
2278   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2279                                                          E = CUMap.end();
2280        I != E; ++I) {
2281     CompileUnit *TheCU = I->second;
2282     const StringMap<std::vector<DIE *> > &Names = TheCU->getAccelObjC();
2283     for (StringMap<std::vector<DIE *> >::const_iterator GI = Names.begin(),
2284                                                         GE = Names.end();
2285          GI != GE; ++GI) {
2286       StringRef Name = GI->getKey();
2287       const std::vector<DIE *> &Entities = GI->second;
2288       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2289                                               DE = Entities.end();
2290            DI != DE; ++DI)
2291         AT.AddName(Name, (*DI));
2292     }
2293   }
2294
2295   AT.FinalizeTable(Asm, "ObjC");
2296   Asm->OutStreamer.SwitchSection(
2297       Asm->getObjFileLowering().getDwarfAccelObjCSection());
2298   MCSymbol *SectionBegin = Asm->GetTempSymbol("objc_begin");
2299   Asm->OutStreamer.EmitLabel(SectionBegin);
2300
2301   // Emit the full data.
2302   AT.Emit(Asm, SectionBegin, &InfoHolder);
2303 }
2304
2305 // Emit namespace dies into a hashed accelerator table.
2306 void DwarfDebug::emitAccelNamespaces() {
2307   DwarfAccelTable AT(
2308       DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4));
2309   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2310                                                          E = CUMap.end();
2311        I != E; ++I) {
2312     CompileUnit *TheCU = I->second;
2313     const StringMap<std::vector<DIE *> > &Names = TheCU->getAccelNamespace();
2314     for (StringMap<std::vector<DIE *> >::const_iterator GI = Names.begin(),
2315                                                         GE = Names.end();
2316          GI != GE; ++GI) {
2317       StringRef Name = GI->getKey();
2318       const std::vector<DIE *> &Entities = GI->second;
2319       for (std::vector<DIE *>::const_iterator DI = Entities.begin(),
2320                                               DE = Entities.end();
2321            DI != DE; ++DI)
2322         AT.AddName(Name, (*DI));
2323     }
2324   }
2325
2326   AT.FinalizeTable(Asm, "namespac");
2327   Asm->OutStreamer.SwitchSection(
2328       Asm->getObjFileLowering().getDwarfAccelNamespaceSection());
2329   MCSymbol *SectionBegin = Asm->GetTempSymbol("namespac_begin");
2330   Asm->OutStreamer.EmitLabel(SectionBegin);
2331
2332   // Emit the full data.
2333   AT.Emit(Asm, SectionBegin, &InfoHolder);
2334 }
2335
2336 // Emit type dies into a hashed accelerator table.
2337 void DwarfDebug::emitAccelTypes() {
2338   std::vector<DwarfAccelTable::Atom> Atoms;
2339   Atoms.push_back(
2340       DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset, dwarf::DW_FORM_data4));
2341   Atoms.push_back(
2342       DwarfAccelTable::Atom(dwarf::DW_ATOM_die_tag, dwarf::DW_FORM_data2));
2343   Atoms.push_back(
2344       DwarfAccelTable::Atom(dwarf::DW_ATOM_type_flags, dwarf::DW_FORM_data1));
2345   DwarfAccelTable AT(Atoms);
2346   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2347                                                          E = CUMap.end();
2348        I != E; ++I) {
2349     CompileUnit *TheCU = I->second;
2350     const StringMap<std::vector<std::pair<DIE *, unsigned> > > &Names =
2351         TheCU->getAccelTypes();
2352     for (StringMap<std::vector<std::pair<DIE *, unsigned> > >::const_iterator
2353              GI = Names.begin(),
2354              GE = Names.end();
2355          GI != GE; ++GI) {
2356       StringRef Name = GI->getKey();
2357       const std::vector<std::pair<DIE *, unsigned> > &Entities = GI->second;
2358       for (std::vector<std::pair<DIE *, unsigned> >::const_iterator
2359                DI = Entities.begin(),
2360                DE = Entities.end();
2361            DI != DE; ++DI)
2362         AT.AddName(Name, (*DI).first, (*DI).second);
2363     }
2364   }
2365
2366   AT.FinalizeTable(Asm, "types");
2367   Asm->OutStreamer.SwitchSection(
2368       Asm->getObjFileLowering().getDwarfAccelTypesSection());
2369   MCSymbol *SectionBegin = Asm->GetTempSymbol("types_begin");
2370   Asm->OutStreamer.EmitLabel(SectionBegin);
2371
2372   // Emit the full data.
2373   AT.Emit(Asm, SectionBegin, &InfoHolder);
2374 }
2375
2376 // Public name handling.
2377 // The format for the various pubnames:
2378 //
2379 // dwarf pubnames - offset/name pairs where the offset is the offset into the CU
2380 // for the DIE that is named.
2381 //
2382 // gnu pubnames - offset/index value/name tuples where the offset is the offset
2383 // into the CU and the index value is computed according to the type of value
2384 // for the DIE that is named.
2385 //
2386 // For type units the offset is the offset of the skeleton DIE. For split dwarf
2387 // it's the offset within the debug_info/debug_types dwo section, however, the
2388 // reference in the pubname header doesn't change.
2389
2390 /// computeIndexValue - Compute the gdb index value for the DIE and CU.
2391 static dwarf::PubIndexEntryDescriptor computeIndexValue(CompileUnit *CU,
2392                                                         DIE *Die) {
2393   dwarf::GDBIndexEntryLinkage Linkage = dwarf::GIEL_STATIC;
2394
2395   // We could have a specification DIE that has our most of our knowledge,
2396   // look for that now.
2397   DIEValue *SpecVal = Die->findAttribute(dwarf::DW_AT_specification);
2398   if (SpecVal) {
2399     DIE *SpecDIE = cast<DIEEntry>(SpecVal)->getEntry();
2400     if (SpecDIE->findAttribute(dwarf::DW_AT_external))
2401       Linkage = dwarf::GIEL_EXTERNAL;
2402   } else if (Die->findAttribute(dwarf::DW_AT_external))
2403     Linkage = dwarf::GIEL_EXTERNAL;
2404
2405   switch (Die->getTag()) {
2406   case dwarf::DW_TAG_class_type:
2407   case dwarf::DW_TAG_structure_type:
2408   case dwarf::DW_TAG_union_type:
2409   case dwarf::DW_TAG_enumeration_type:
2410     return dwarf::PubIndexEntryDescriptor(
2411         dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus
2412                               ? dwarf::GIEL_STATIC
2413                               : dwarf::GIEL_EXTERNAL);
2414   case dwarf::DW_TAG_typedef:
2415   case dwarf::DW_TAG_base_type:
2416   case dwarf::DW_TAG_subrange_type:
2417     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_TYPE, dwarf::GIEL_STATIC);
2418   case dwarf::DW_TAG_namespace:
2419     return dwarf::GIEK_TYPE;
2420   case dwarf::DW_TAG_subprogram:
2421     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_FUNCTION, Linkage);
2422   case dwarf::DW_TAG_constant:
2423   case dwarf::DW_TAG_variable:
2424     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE, Linkage);
2425   case dwarf::DW_TAG_enumerator:
2426     return dwarf::PubIndexEntryDescriptor(dwarf::GIEK_VARIABLE,
2427                                           dwarf::GIEL_STATIC);
2428   default:
2429     return dwarf::GIEK_NONE;
2430   }
2431 }
2432
2433 /// emitDebugPubNames - Emit visible names into a debug pubnames section.
2434 ///
2435 void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
2436   const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2437   const MCSection *PSec =
2438       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
2439                : Asm->getObjFileLowering().getDwarfPubNamesSection();
2440
2441   typedef DenseMap<const MDNode *, CompileUnit *> CUMapType;
2442   for (CUMapType::iterator I = CUMap.begin(), E = CUMap.end(); I != E; ++I) {
2443     CompileUnit *TheCU = I->second;
2444     unsigned ID = TheCU->getUniqueID();
2445
2446     // Start the dwarf pubnames section.
2447     Asm->OutStreamer.SwitchSection(PSec);
2448
2449     // Emit a label so we can reference the beginning of this pubname section.
2450     if (GnuStyle)
2451       Asm->OutStreamer.EmitLabel(
2452           Asm->GetTempSymbol("gnu_pubnames", TheCU->getUniqueID()));
2453
2454     // Emit the header.
2455     Asm->OutStreamer.AddComment("Length of Public Names Info");
2456     Asm->EmitLabelDifference(Asm->GetTempSymbol("pubnames_end", ID),
2457                              Asm->GetTempSymbol("pubnames_begin", ID), 4);
2458
2459     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin", ID));
2460
2461     Asm->OutStreamer.AddComment("DWARF Version");
2462     Asm->EmitInt16(dwarf::DW_PUBNAMES_VERSION);
2463
2464     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2465     Asm->EmitSectionOffset(Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2466                            DwarfInfoSectionSym);
2467
2468     Asm->OutStreamer.AddComment("Compilation Unit Length");
2469     Asm->EmitLabelDifference(Asm->GetTempSymbol(ISec->getLabelEndName(), ID),
2470                              Asm->GetTempSymbol(ISec->getLabelBeginName(), ID),
2471                              4);
2472
2473     // Emit the pubnames for this compilation unit.
2474     const StringMap<DIE *> &Globals = TheCU->getGlobalNames();
2475     for (StringMap<DIE *>::const_iterator GI = Globals.begin(),
2476                                           GE = Globals.end();
2477          GI != GE; ++GI) {
2478       const char *Name = GI->getKeyData();
2479       DIE *Entity = GI->second;
2480
2481       Asm->OutStreamer.AddComment("DIE offset");
2482       Asm->EmitInt32(Entity->getOffset());
2483
2484       if (GnuStyle) {
2485         dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheCU, Entity);
2486         Asm->OutStreamer.AddComment(
2487             Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
2488             dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
2489         Asm->EmitInt8(Desc.toBits());
2490       }
2491
2492       if (Asm->isVerbose())
2493         Asm->OutStreamer.AddComment("External Name");
2494       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength() + 1));
2495     }
2496
2497     Asm->OutStreamer.AddComment("End Mark");
2498     Asm->EmitInt32(0);
2499     Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end", ID));
2500   }
2501 }
2502
2503 void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
2504   const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2505   const MCSection *PSec =
2506       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
2507                : Asm->getObjFileLowering().getDwarfPubTypesSection();
2508
2509   for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
2510                                                          E = CUMap.end();
2511        I != E; ++I) {
2512     CompileUnit *TheCU = I->second;
2513     // Start the dwarf pubtypes section.
2514     Asm->OutStreamer.SwitchSection(PSec);
2515
2516     // Emit a label so we can reference the beginning of this pubtype section.
2517     if (GnuStyle)
2518       Asm->OutStreamer.EmitLabel(
2519           Asm->GetTempSymbol("gnu_pubtypes", TheCU->getUniqueID()));
2520
2521     // Emit the header.
2522     Asm->OutStreamer.AddComment("Length of Public Types Info");
2523     Asm->EmitLabelDifference(
2524         Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()),
2525         Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()), 4);
2526
2527     Asm->OutStreamer.EmitLabel(
2528         Asm->GetTempSymbol("pubtypes_begin", TheCU->getUniqueID()));
2529
2530     if (Asm->isVerbose())
2531       Asm->OutStreamer.AddComment("DWARF Version");
2532     Asm->EmitInt16(dwarf::DW_PUBTYPES_VERSION);
2533
2534     Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
2535     Asm->EmitSectionOffset(
2536         Asm->GetTempSymbol(ISec->getLabelBeginName(), TheCU->getUniqueID()),
2537         DwarfInfoSectionSym);
2538
2539     Asm->OutStreamer.AddComment("Compilation Unit Length");
2540     Asm->EmitLabelDifference(
2541         Asm->GetTempSymbol(ISec->getLabelEndName(), TheCU->getUniqueID()),
2542         Asm->GetTempSymbol(ISec->getLabelBeginName(), TheCU->getUniqueID()), 4);
2543
2544     // Emit the pubtypes.
2545     const StringMap<DIE *> &Globals = TheCU->getGlobalTypes();
2546     for (StringMap<DIE *>::const_iterator GI = Globals.begin(),
2547                                           GE = Globals.end();
2548          GI != GE; ++GI) {
2549       const char *Name = GI->getKeyData();
2550       DIE *Entity = GI->second;
2551
2552       if (Asm->isVerbose())
2553         Asm->OutStreamer.AddComment("DIE offset");
2554       Asm->EmitInt32(Entity->getOffset());
2555
2556       if (GnuStyle) {
2557         dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheCU, Entity);
2558         Asm->OutStreamer.AddComment(
2559             Twine("Kind: ") + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
2560             dwarf::GDBIndexEntryLinkageString(Desc.Linkage));
2561         Asm->EmitInt8(Desc.toBits());
2562       }
2563
2564       if (Asm->isVerbose())
2565         Asm->OutStreamer.AddComment("External Name");
2566
2567       // Emit the name with a terminating null byte.
2568       Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength() + 1));
2569     }
2570
2571     Asm->OutStreamer.AddComment("End Mark");
2572     Asm->EmitInt32(0);
2573     Asm->OutStreamer.EmitLabel(
2574         Asm->GetTempSymbol("pubtypes_end", TheCU->getUniqueID()));
2575   }
2576 }
2577
2578 // Emit strings into a string section.
2579 void DwarfUnits::emitStrings(const MCSection *StrSection,
2580                              const MCSection *OffsetSection = NULL,
2581                              const MCSymbol *StrSecSym = NULL) {
2582
2583   if (StringPool.empty())
2584     return;
2585
2586   // Start the dwarf str section.
2587   Asm->OutStreamer.SwitchSection(StrSection);
2588
2589   // Get all of the string pool entries and put them in an array by their ID so
2590   // we can sort them.
2591   SmallVector<
2592       std::pair<unsigned, StringMapEntry<std::pair<MCSymbol *, unsigned> > *>,
2593       64> Entries;
2594
2595   for (StringMap<std::pair<MCSymbol *, unsigned> >::iterator
2596            I = StringPool.begin(),
2597            E = StringPool.end();
2598        I != E; ++I)
2599     Entries.push_back(std::make_pair(I->second.second, &*I));
2600
2601   array_pod_sort(Entries.begin(), Entries.end());
2602
2603   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2604     // Emit a label for reference from debug information entries.
2605     Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
2606
2607     // Emit the string itself with a terminating null byte.
2608     Asm->OutStreamer.EmitBytes(
2609         StringRef(Entries[i].second->getKeyData(),
2610                   Entries[i].second->getKeyLength() + 1));
2611   }
2612
2613   // If we've got an offset section go ahead and emit that now as well.
2614   if (OffsetSection) {
2615     Asm->OutStreamer.SwitchSection(OffsetSection);
2616     unsigned offset = 0;
2617     unsigned size = 4; // FIXME: DWARF64 is 8.
2618     for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2619       Asm->OutStreamer.EmitIntValue(offset, size);
2620       offset += Entries[i].second->getKeyLength() + 1;
2621     }
2622   }
2623 }
2624
2625
2626 // Emit addresses into the section given.
2627 void DwarfUnits::emitAddresses(const MCSection *AddrSection) {
2628
2629   if (AddressPool.empty())
2630     return;
2631
2632   // Start the dwarf addr section.
2633   Asm->OutStreamer.SwitchSection(AddrSection);
2634
2635   // Order the address pool entries by ID
2636   SmallVector<const MCExpr *, 64> Entries(AddressPool.size());
2637
2638   for (DenseMap<const MCExpr *, unsigned>::iterator I = AddressPool.begin(),
2639                                                     E = AddressPool.end();
2640        I != E; ++I)
2641     Entries[I->second] = I->first;
2642
2643   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
2644     // Emit an expression for reference from debug information entries.
2645     if (const MCExpr *Expr = Entries[i])
2646       Asm->OutStreamer.EmitValue(Expr, Asm->getDataLayout().getPointerSize());
2647     else
2648       Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
2649   }
2650 }
2651
2652 // Emit visible names into a debug str section.
2653 void DwarfDebug::emitDebugStr() {
2654   DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
2655   Holder.emitStrings(Asm->getObjFileLowering().getDwarfStrSection());
2656 }
2657
2658 // Emit locations into the debug loc section.
2659 void DwarfDebug::emitDebugLoc() {
2660   if (DotDebugLocEntries.empty())
2661     return;
2662
2663   for (SmallVectorImpl<DotDebugLocEntry>::iterator
2664            I = DotDebugLocEntries.begin(),
2665            E = DotDebugLocEntries.end();
2666        I != E; ++I) {
2667     DotDebugLocEntry &Entry = *I;
2668     if (I + 1 != DotDebugLocEntries.end())
2669       Entry.Merge(I + 1);
2670   }
2671
2672   // Start the dwarf loc section.
2673   Asm->OutStreamer.SwitchSection(
2674       Asm->getObjFileLowering().getDwarfLocSection());
2675   unsigned char Size = Asm->getDataLayout().getPointerSize();
2676   Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
2677   unsigned index = 1;
2678   for (SmallVectorImpl<DotDebugLocEntry>::iterator
2679            I = DotDebugLocEntries.begin(),
2680            E = DotDebugLocEntries.end();
2681        I != E; ++I, ++index) {
2682     DotDebugLocEntry &Entry = *I;
2683     if (Entry.isMerged())
2684       continue;
2685     if (Entry.isEmpty()) {
2686       Asm->OutStreamer.EmitIntValue(0, Size);
2687       Asm->OutStreamer.EmitIntValue(0, Size);
2688       Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
2689     } else {
2690       Asm->OutStreamer.EmitSymbolValue(Entry.getBeginSym(), Size);
2691       Asm->OutStreamer.EmitSymbolValue(Entry.getEndSym(), Size);
2692       DIVariable DV(Entry.getVariable());
2693       Asm->OutStreamer.AddComment("Loc expr size");
2694       MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2695       MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2696       Asm->EmitLabelDifference(end, begin, 2);
2697       Asm->OutStreamer.EmitLabel(begin);
2698       if (Entry.isInt()) {
2699         DIBasicType BTy(DV.getType());
2700         if (BTy.Verify() && (BTy.getEncoding() == dwarf::DW_ATE_signed ||
2701                              BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2702           Asm->OutStreamer.AddComment("DW_OP_consts");
2703           Asm->EmitInt8(dwarf::DW_OP_consts);
2704           Asm->EmitSLEB128(Entry.getInt());
2705         } else {
2706           Asm->OutStreamer.AddComment("DW_OP_constu");
2707           Asm->EmitInt8(dwarf::DW_OP_constu);
2708           Asm->EmitULEB128(Entry.getInt());
2709         }
2710       } else if (Entry.isLocation()) {
2711         MachineLocation Loc = Entry.getLoc();
2712         if (!DV.hasComplexAddress())
2713           // Regular entry.
2714           Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2715         else {
2716           // Complex address entry.
2717           unsigned N = DV.getNumAddrElements();
2718           unsigned i = 0;
2719           if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2720             if (Loc.getOffset()) {
2721               i = 2;
2722               Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2723               Asm->OutStreamer.AddComment("DW_OP_deref");
2724               Asm->EmitInt8(dwarf::DW_OP_deref);
2725               Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2726               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2727               Asm->EmitSLEB128(DV.getAddrElement(1));
2728             } else {
2729               // If first address element is OpPlus then emit
2730               // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2731               MachineLocation TLoc(Loc.getReg(), DV.getAddrElement(1));
2732               Asm->EmitDwarfRegOp(TLoc, DV.isIndirect());
2733               i = 2;
2734             }
2735           } else {
2736             Asm->EmitDwarfRegOp(Loc, DV.isIndirect());
2737           }
2738
2739           // Emit remaining complex address elements.
2740           for (; i < N; ++i) {
2741             uint64_t Element = DV.getAddrElement(i);
2742             if (Element == DIBuilder::OpPlus) {
2743               Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2744               Asm->EmitULEB128(DV.getAddrElement(++i));
2745             } else if (Element == DIBuilder::OpDeref) {
2746               if (!Loc.isReg())
2747                 Asm->EmitInt8(dwarf::DW_OP_deref);
2748             } else
2749               llvm_unreachable("unknown Opcode found in complex address");
2750           }
2751         }
2752       }
2753       // else ... ignore constant fp. There is not any good way to
2754       // to represent them here in dwarf.
2755       Asm->OutStreamer.EmitLabel(end);
2756     }
2757   }
2758 }
2759
2760 struct SymbolCUSorter {
2761   SymbolCUSorter(const MCStreamer &s) : Streamer(s) {}
2762   const MCStreamer &Streamer;
2763
2764   bool operator()(const SymbolCU &A, const SymbolCU &B) {
2765     unsigned IA = A.Sym ? Streamer.GetSymbolOrder(A.Sym) : 0;
2766     unsigned IB = B.Sym ? Streamer.GetSymbolOrder(B.Sym) : 0;
2767
2768     // Symbols with no order assigned should be placed at the end.
2769     // (e.g. section end labels)
2770     if (IA == 0)
2771       IA = (unsigned)(-1);
2772     if (IB == 0)
2773       IB = (unsigned)(-1);
2774     return IA < IB;
2775   }
2776 };
2777
2778 static bool CUSort(const CompileUnit *A, const CompileUnit *B) {
2779   return (A->getUniqueID() < B->getUniqueID());
2780 }
2781
2782 struct ArangeSpan {
2783   const MCSymbol *Start, *End;
2784 };
2785
2786 // Emit a debug aranges section, containing a CU lookup for any
2787 // address we can tie back to a CU.
2788 void DwarfDebug::emitDebugARanges() {
2789   // Start the dwarf aranges section.
2790   Asm->OutStreamer.SwitchSection(
2791       Asm->getObjFileLowering().getDwarfARangesSection());
2792
2793   typedef DenseMap<CompileUnit *, std::vector<ArangeSpan> > SpansType;
2794
2795   SpansType Spans;
2796
2797   // Build a list of sections used.
2798   std::vector<const MCSection *> Sections;
2799   for (SectionMapType::iterator it = SectionMap.begin(); it != SectionMap.end();
2800        it++) {
2801     const MCSection *Section = it->first;
2802     Sections.push_back(Section);
2803   }
2804
2805   // Sort the sections into order.
2806   // This is only done to ensure consistent output order across different runs.
2807   std::sort(Sections.begin(), Sections.end(), SectionSort);
2808
2809   // Build a set of address spans, sorted by CU.
2810   for (size_t SecIdx = 0; SecIdx < Sections.size(); SecIdx++) {
2811     const MCSection *Section = Sections[SecIdx];
2812     SmallVector<SymbolCU, 8> &List = SectionMap[Section];
2813     if (List.size() < 2)
2814       continue;
2815
2816     // Sort the symbols by offset within the section.
2817     SymbolCUSorter sorter(Asm->OutStreamer);
2818     std::sort(List.begin(), List.end(), sorter);
2819
2820     // If we have no section (e.g. common), just write out
2821     // individual spans for each symbol.
2822     if (Section == NULL) {
2823       for (size_t n = 0; n < List.size(); n++) {
2824         const SymbolCU &Cur = List[n];
2825
2826         ArangeSpan Span;
2827         Span.Start = Cur.Sym;
2828         Span.End = NULL;
2829         if (Cur.CU)
2830           Spans[Cur.CU].push_back(Span);
2831       }
2832     } else {
2833       // Build spans between each label.
2834       const MCSymbol *StartSym = List[0].Sym;
2835       for (size_t n = 1; n < List.size(); n++) {
2836         const SymbolCU &Prev = List[n - 1];
2837         const SymbolCU &Cur = List[n];
2838
2839         // Try and build the longest span we can within the same CU.
2840         if (Cur.CU != Prev.CU) {
2841           ArangeSpan Span;
2842           Span.Start = StartSym;
2843           Span.End = Cur.Sym;
2844           Spans[Prev.CU].push_back(Span);
2845           StartSym = Cur.Sym;
2846         }
2847       }
2848     }
2849   }
2850
2851   const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection();
2852   unsigned PtrSize = Asm->getDataLayout().getPointerSize();
2853
2854   // Build a list of CUs used.
2855   std::vector<CompileUnit *> CUs;
2856   for (SpansType::iterator it = Spans.begin(); it != Spans.end(); it++) {
2857     CompileUnit *CU = it->first;
2858     CUs.push_back(CU);
2859   }
2860
2861   // Sort the CU list (again, to ensure consistent output order).
2862   std::sort(CUs.begin(), CUs.end(), CUSort);
2863
2864   // Emit an arange table for each CU we used.
2865   for (size_t CUIdx = 0; CUIdx < CUs.size(); CUIdx++) {
2866     CompileUnit *CU = CUs[CUIdx];
2867     std::vector<ArangeSpan> &List = Spans[CU];
2868
2869     // Emit size of content not including length itself.
2870     unsigned ContentSize =
2871         sizeof(int16_t) + // DWARF ARange version number
2872         sizeof(int32_t) + // Offset of CU in the .debug_info section
2873         sizeof(int8_t) +  // Pointer Size (in bytes)
2874         sizeof(int8_t);   // Segment Size (in bytes)
2875
2876     unsigned TupleSize = PtrSize * 2;
2877
2878     // 7.20 in the Dwarf specs requires the table to be aligned to a tuple.
2879     unsigned Padding = 0;
2880     while (((sizeof(int32_t) + ContentSize + Padding) % TupleSize) != 0)
2881       Padding++;
2882
2883     ContentSize += Padding;
2884     ContentSize += (List.size() + 1) * TupleSize;
2885
2886     // For each compile unit, write the list of spans it covers.
2887     Asm->OutStreamer.AddComment("Length of ARange Set");
2888     Asm->EmitInt32(ContentSize);
2889     Asm->OutStreamer.AddComment("DWARF Arange version number");
2890     Asm->EmitInt16(dwarf::DW_ARANGES_VERSION);
2891     Asm->OutStreamer.AddComment("Offset Into Debug Info Section");
2892     Asm->EmitSectionOffset(
2893         Asm->GetTempSymbol(ISec->getLabelBeginName(), CU->getUniqueID()),
2894         DwarfInfoSectionSym);
2895     Asm->OutStreamer.AddComment("Address Size (in bytes)");
2896     Asm->EmitInt8(PtrSize);
2897     Asm->OutStreamer.AddComment("Segment Size (in bytes)");
2898     Asm->EmitInt8(0);
2899
2900     for (unsigned n = 0; n < Padding; n++)
2901       Asm->EmitInt8(0xff);
2902
2903     for (unsigned n = 0; n < List.size(); n++) {
2904       const ArangeSpan &Span = List[n];
2905       Asm->EmitLabelReference(Span.Start, PtrSize);
2906
2907       // Calculate the size as being from the span start to it's end.
2908       if (Span.End) {
2909         Asm->EmitLabelDifference(Span.End, Span.Start, PtrSize);
2910       } else {
2911         // For symbols without an end marker (e.g. common), we
2912         // write a single arange entry containing just that one symbol.
2913         uint64_t Size = SymSize[Span.Start];
2914         if (Size == 0)
2915           Size = 1;
2916
2917         Asm->OutStreamer.EmitIntValue(Size, PtrSize);
2918       }
2919     }
2920
2921     Asm->OutStreamer.AddComment("ARange terminator");
2922     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2923     Asm->OutStreamer.EmitIntValue(0, PtrSize);
2924   }
2925 }
2926
2927 // Emit visible names into a debug ranges section.
2928 void DwarfDebug::emitDebugRanges() {
2929   // Start the dwarf ranges section.
2930   Asm->OutStreamer.SwitchSection(
2931       Asm->getObjFileLowering().getDwarfRangesSection());
2932   unsigned char Size = Asm->getDataLayout().getPointerSize();
2933   for (SmallVectorImpl<const MCSymbol *>::iterator
2934            I = DebugRangeSymbols.begin(),
2935            E = DebugRangeSymbols.end();
2936        I != E; ++I) {
2937     if (*I)
2938       Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol *>(*I), Size);
2939     else
2940       Asm->OutStreamer.EmitIntValue(0, Size);
2941   }
2942 }
2943
2944 // Emit visible names into a debug macinfo section.
2945 void DwarfDebug::emitDebugMacInfo() {
2946   if (const MCSection *LineInfo =
2947           Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2948     // Start the dwarf macinfo section.
2949     Asm->OutStreamer.SwitchSection(LineInfo);
2950   }
2951 }
2952
2953 // DWARF5 Experimental Separate Dwarf emitters.
2954
2955 // This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
2956 // DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_dwo_name, DW_AT_dwo_id,
2957 // DW_AT_ranges_base, DW_AT_addr_base.
2958 CompileUnit *DwarfDebug::constructSkeletonCU(const CompileUnit *CU) {
2959
2960   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
2961   CompileUnit *NewCU = new CompileUnit(CU->getUniqueID(), Die, CU->getNode(),
2962                                        Asm, this, &SkeletonHolder);
2963
2964   NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
2965                         CU->getNode().getSplitDebugFilename());
2966
2967   // Relocate to the beginning of the addr_base section, else 0 for the
2968   // beginning of the one for this compile unit.
2969   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2970     NewCU->addLabel(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset,
2971                     DwarfAddrSectionSym);
2972   else
2973     NewCU->addUInt(Die, dwarf::DW_AT_GNU_addr_base, dwarf::DW_FORM_sec_offset,
2974                    0);
2975
2976   // 2.17.1 requires that we use DW_AT_low_pc for a single entry point
2977   // into an entity. We're using 0, or a NULL label for this.
2978   NewCU->addUInt(Die, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0);
2979
2980   // DW_AT_stmt_list is a offset of line number information for this
2981   // compile unit in debug_line section.
2982   // FIXME: Should handle multiple compile units.
2983   if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2984     NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset,
2985                     DwarfLineSectionSym);
2986   else
2987     NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_sec_offset, 0);
2988
2989   if (!CompilationDir.empty())
2990     NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir);
2991
2992   // Flags to let the linker know we have emitted new style pubnames.
2993   if (GenerateGnuPubSections) {
2994     if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
2995       NewCU->addLabel(Die, dwarf::DW_AT_GNU_pubnames, dwarf::DW_FORM_sec_offset,
2996                       Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID()));
2997     else
2998       NewCU->addDelta(Die, dwarf::DW_AT_GNU_pubnames, dwarf::DW_FORM_data4,
2999                       Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID()),
3000                       DwarfGnuPubNamesSectionSym);
3001
3002     if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
3003       NewCU->addLabel(Die, dwarf::DW_AT_GNU_pubtypes, dwarf::DW_FORM_sec_offset,
3004                       Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID()));
3005     else
3006       NewCU->addDelta(Die, dwarf::DW_AT_GNU_pubtypes, dwarf::DW_FORM_data4,
3007                       Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID()),
3008                       DwarfGnuPubTypesSectionSym);
3009   }
3010
3011   // Flag if we've emitted any ranges and their location for the compile unit.
3012   if (DebugRangeSymbols.size()) {
3013     if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
3014       NewCU->addLabel(Die, dwarf::DW_AT_GNU_ranges_base,
3015                       dwarf::DW_FORM_sec_offset, DwarfDebugRangeSectionSym);
3016     else
3017       NewCU->addUInt(Die, dwarf::DW_AT_GNU_ranges_base, dwarf::DW_FORM_data4,
3018                      0);
3019   }
3020
3021   SkeletonHolder.addUnit(NewCU);
3022   SkeletonCUs.push_back(NewCU);
3023
3024   return NewCU;
3025 }
3026
3027 void DwarfDebug::emitSkeletonAbbrevs(const MCSection *Section) {
3028   assert(useSplitDwarf() && "No split dwarf debug info?");
3029   emitAbbrevs(Section, &SkeletonAbbrevs);
3030 }
3031
3032 // Emit the .debug_info.dwo section for separated dwarf. This contains the
3033 // compile units that would normally be in debug_info.
3034 void DwarfDebug::emitDebugInfoDWO() {
3035   assert(useSplitDwarf() && "No split dwarf debug info?");
3036   InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(),
3037                        Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
3038                        DwarfAbbrevDWOSectionSym);
3039 }
3040
3041 // Emit the .debug_abbrev.dwo section for separated dwarf. This contains the
3042 // abbreviations for the .debug_info.dwo section.
3043 void DwarfDebug::emitDebugAbbrevDWO() {
3044   assert(useSplitDwarf() && "No split dwarf?");
3045   emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
3046               &Abbreviations);
3047 }
3048
3049 // Emit the .debug_str.dwo section for separated dwarf. This contains the
3050 // string section and is identical in format to traditional .debug_str
3051 // sections.
3052 void DwarfDebug::emitDebugStrDWO() {
3053   assert(useSplitDwarf() && "No split dwarf?");
3054   const MCSection *OffSec =
3055       Asm->getObjFileLowering().getDwarfStrOffDWOSection();
3056   const MCSymbol *StrSym = DwarfStrSectionSym;
3057   InfoHolder.emitStrings(Asm->getObjFileLowering().getDwarfStrDWOSection(),
3058                          OffSec, StrSym);
3059 }