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