LLVM API Documentation

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