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