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