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