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