1 //===-- SymbolFileDWARF.h --------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef SymbolFileDWARF_SymbolFileDWARF_h_
11 #define SymbolFileDWARF_SymbolFileDWARF_h_
20 // Other libraries and framework includes
21 #include "clang/AST/CharUnits.h"
22 #include "clang/AST/ExternalASTSource.h"
23 #include "llvm/ADT/DenseMap.h"
24 #include "llvm/ADT/SmallPtrSet.h"
25 #include "llvm/ADT/SmallVector.h"
27 #include "lldb/lldb-private.h"
28 #include "lldb/Core/ClangForward.h"
29 #include "lldb/Core/ConstString.h"
30 #include "lldb/Core/dwarf.h"
31 #include "lldb/Core/DataExtractor.h"
32 #include "lldb/Core/Flags.h"
33 #include "lldb/Core/UniqueCStringMap.h"
34 #include "lldb/Symbol/ClangASTContext.h"
35 #include "lldb/Symbol/SymbolFile.h"
36 #include "lldb/Symbol/SymbolContext.h"
39 #include "DWARFDefines.h"
40 #include "HashedNameToDIE.h"
41 #include "NameToDIE.h"
42 #include "UniqueDWARFASTType.h"
44 //----------------------------------------------------------------------
45 // Forward Declarations for this DWARF plugin
46 //----------------------------------------------------------------------
48 class DWARFAbbreviationDeclaration;
49 class DWARFAbbreviationDeclarationSet;
51 class DWARFDebugAbbrev;
52 class DWARFDebugAranges;
54 class DWARFDebugInfoEntry;
56 class DWARFDebugPubnames;
57 class DWARFDebugRanges;
58 class DWARFDeclContext;
59 class DWARFDIECollection;
61 class SymbolFileDWARFDebugMap;
63 class SymbolFileDWARF : public lldb_private::SymbolFile, public lldb_private::UserID
66 friend class SymbolFileDWARFDebugMap;
67 friend class DebugMapModule;
68 friend class DWARFCompileUnit;
69 //------------------------------------------------------------------
71 //------------------------------------------------------------------
78 static lldb_private::ConstString
79 GetPluginNameStatic();
82 GetPluginDescriptionStatic();
84 static lldb_private::SymbolFile*
85 CreateInstance (lldb_private::ObjectFile* obj_file);
86 //------------------------------------------------------------------
87 // Constructors and Destructors
88 //------------------------------------------------------------------
89 SymbolFileDWARF(lldb_private::ObjectFile* ofile);
90 virtual ~SymbolFileDWARF();
92 virtual uint32_t CalculateAbilities ();
93 virtual void InitializeObject();
95 //------------------------------------------------------------------
96 // Compile Unit function calls
97 //------------------------------------------------------------------
98 virtual uint32_t GetNumCompileUnits();
99 virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index);
101 virtual lldb::LanguageType ParseCompileUnitLanguage (const lldb_private::SymbolContext& sc);
102 virtual size_t ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc);
103 virtual bool ParseCompileUnitLineTable (const lldb_private::SymbolContext& sc);
104 virtual bool ParseCompileUnitSupportFiles (const lldb_private::SymbolContext& sc, lldb_private::FileSpecList& support_files);
105 virtual size_t ParseFunctionBlocks (const lldb_private::SymbolContext& sc);
106 virtual size_t ParseTypes (const lldb_private::SymbolContext& sc);
107 virtual size_t ParseVariablesForContext (const lldb_private::SymbolContext& sc);
109 virtual lldb_private::Type* ResolveTypeUID(lldb::user_id_t type_uid);
110 virtual bool ResolveClangOpaqueTypeDefinition (lldb_private::ClangASTType& clang_type);
112 virtual lldb_private::Type* ResolveType (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* type_die, bool assert_not_being_parsed = true);
113 virtual clang::DeclContext* GetClangDeclContextContainingTypeUID (lldb::user_id_t type_uid);
114 virtual clang::DeclContext* GetClangDeclContextForTypeUID (const lldb_private::SymbolContext &sc, lldb::user_id_t type_uid);
116 virtual uint32_t ResolveSymbolContext (const lldb_private::Address& so_addr, uint32_t resolve_scope, lldb_private::SymbolContext& sc);
117 virtual uint32_t ResolveSymbolContext (const lldb_private::FileSpec& file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, lldb_private::SymbolContextList& sc_list);
118 virtual uint32_t FindGlobalVariables(const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, bool append, uint32_t max_matches, lldb_private::VariableList& variables);
119 virtual uint32_t FindGlobalVariables(const lldb_private::RegularExpression& regex, bool append, uint32_t max_matches, lldb_private::VariableList& variables);
120 virtual uint32_t FindFunctions(const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, uint32_t name_type_mask, bool include_inlines, bool append, lldb_private::SymbolContextList& sc_list);
121 virtual uint32_t FindFunctions(const lldb_private::RegularExpression& regex, bool include_inlines, bool append, lldb_private::SymbolContextList& sc_list);
122 virtual uint32_t FindTypes (const lldb_private::SymbolContext& sc, const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, bool append, uint32_t max_matches, lldb_private::TypeList& types);
123 virtual lldb_private::TypeList *
125 virtual size_t GetTypes (lldb_private::SymbolContextScope *sc_scope,
127 lldb_private::TypeList &type_list);
129 virtual lldb_private::ClangASTContext &
130 GetClangASTContext ();
132 virtual lldb_private::ClangNamespaceDecl
133 FindNamespace (const lldb_private::SymbolContext& sc,
134 const lldb_private::ConstString &name,
135 const lldb_private::ClangNamespaceDecl *parent_namespace_decl);
138 //------------------------------------------------------------------
139 // ClangASTContext callbacks for external source lookups.
140 //------------------------------------------------------------------
142 CompleteTagDecl (void *baton, clang::TagDecl *);
145 CompleteObjCInterfaceDecl (void *baton, clang::ObjCInterfaceDecl *);
148 FindExternalVisibleDeclsByName (void *baton,
149 const clang::DeclContext *DC,
150 clang::DeclarationName Name,
151 llvm::SmallVectorImpl <clang::NamedDecl *> *results);
154 LayoutRecordType (void *baton,
155 const clang::RecordDecl *record_decl,
158 llvm::DenseMap <const clang::FieldDecl *, uint64_t> &field_offsets,
159 llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &base_offsets,
160 llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &vbase_offsets);
163 LayoutRecordType (const clang::RecordDecl *record_decl,
166 llvm::DenseMap <const clang::FieldDecl *, uint64_t> &field_offsets,
167 llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &base_offsets,
168 llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &vbase_offsets);
182 llvm::DenseMap <const clang::FieldDecl *, uint64_t> field_offsets;
183 llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> base_offsets;
184 llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> vbase_offsets;
186 //------------------------------------------------------------------
187 // PluginInterface protocol
188 //------------------------------------------------------------------
189 virtual lldb_private::ConstString
195 // Approach 2 - count + accessor
196 // Index compile units would scan the initial compile units and register
197 // them with the module. This would only be done on demand if and only if
198 // the compile units were needed.
199 //virtual size_t GetCompUnitCount() = 0;
200 //virtual CompUnitSP GetCompUnitAtIndex(size_t cu_idx) = 0;
202 const lldb_private::DataExtractor& get_debug_abbrev_data ();
203 const lldb_private::DataExtractor& get_debug_aranges_data ();
204 const lldb_private::DataExtractor& get_debug_frame_data ();
205 const lldb_private::DataExtractor& get_debug_info_data ();
206 const lldb_private::DataExtractor& get_debug_line_data ();
207 const lldb_private::DataExtractor& get_debug_loc_data ();
208 const lldb_private::DataExtractor& get_debug_ranges_data ();
209 const lldb_private::DataExtractor& get_debug_str_data ();
210 const lldb_private::DataExtractor& get_apple_names_data ();
211 const lldb_private::DataExtractor& get_apple_types_data ();
212 const lldb_private::DataExtractor& get_apple_namespaces_data ();
213 const lldb_private::DataExtractor& get_apple_objc_data ();
216 DWARFDebugAbbrev* DebugAbbrev();
217 const DWARFDebugAbbrev* DebugAbbrev() const;
219 DWARFDebugInfo* DebugInfo();
220 const DWARFDebugInfo* DebugInfo() const;
222 DWARFDebugRanges* DebugRanges();
223 const DWARFDebugRanges* DebugRanges() const;
225 const lldb_private::DataExtractor&
226 GetCachedSectionData (uint32_t got_flag,
227 lldb::SectionType sect_type,
228 lldb_private::DataExtractor &data);
231 SupportedVersion(uint16_t version);
234 GetCachedClangDeclContextForDIE (const DWARFDebugInfoEntry *die)
236 DIEToDeclContextMap::iterator pos = m_die_to_decl_ctx.find(die);
237 if (pos != m_die_to_decl_ctx.end())
244 GetClangDeclContextForDIE (const lldb_private::SymbolContext &sc, DWARFCompileUnit *cu, const DWARFDebugInfoEntry *die);
247 GetClangDeclContextForDIEOffset (const lldb_private::SymbolContext &sc, dw_offset_t die_offset);
250 GetClangDeclContextContainingDIE (DWARFCompileUnit *cu,
251 const DWARFDebugInfoEntry *die,
252 const DWARFDebugInfoEntry **decl_ctx_die);
255 GetClangDeclContextContainingDIEOffset (dw_offset_t die_offset);
257 const DWARFDebugInfoEntry *
258 GetDeclContextDIEContainingDIE (DWARFCompileUnit *cu, const DWARFDebugInfoEntry *die);
261 SearchDeclContext (const clang::DeclContext *decl_context,
263 llvm::SmallVectorImpl <clang::NamedDecl *> *results);
271 const lldb_private::Flags&
278 HasForwardDeclForClangType (const lldb_private::ClangASTType &clang_type);
284 flagsGotDebugAbbrevData = (1 << 0),
285 flagsGotDebugArangesData = (1 << 1),
286 flagsGotDebugFrameData = (1 << 2),
287 flagsGotDebugInfoData = (1 << 3),
288 flagsGotDebugLineData = (1 << 4),
289 flagsGotDebugLocData = (1 << 5),
290 flagsGotDebugMacInfoData = (1 << 6),
291 flagsGotDebugPubNamesData = (1 << 7),
292 flagsGotDebugPubTypesData = (1 << 8),
293 flagsGotDebugRangesData = (1 << 9),
294 flagsGotDebugStrData = (1 << 10),
295 flagsGotAppleNamesData = (1 << 11),
296 flagsGotAppleTypesData = (1 << 12),
297 flagsGotAppleNamespacesData = (1 << 13),
298 flagsGotAppleObjCData = (1 << 14)
301 bool NamespaceDeclMatchesThisSymbolFile (const lldb_private::ClangNamespaceDecl *namespace_decl);
303 bool DIEIsInNamespace (const lldb_private::ClangNamespaceDecl *namespace_decl,
304 DWARFCompileUnit* dwarf_cu,
305 const DWARFDebugInfoEntry* die);
307 DISALLOW_COPY_AND_ASSIGN (SymbolFileDWARF);
308 lldb::CompUnitSP ParseCompileUnit (DWARFCompileUnit* dwarf_cu, uint32_t cu_idx);
309 DWARFCompileUnit* GetDWARFCompileUnit(lldb_private::CompileUnit *comp_unit);
310 DWARFCompileUnit* GetNextUnparsedDWARFCompileUnit(DWARFCompileUnit* prev_cu);
311 lldb_private::CompileUnit* GetCompUnitForDWARFCompUnit(DWARFCompileUnit* dwarf_cu, uint32_t cu_idx = UINT32_MAX);
312 bool GetFunction (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* func_die, lldb_private::SymbolContext& sc);
313 lldb_private::Function * ParseCompileUnitFunction (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die);
314 size_t ParseFunctionBlocks (const lldb_private::SymbolContext& sc,
315 lldb_private::Block *parent_block,
316 DWARFCompileUnit* dwarf_cu,
317 const DWARFDebugInfoEntry *die,
318 lldb::addr_t subprogram_low_pc,
320 size_t ParseTypes (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die, bool parse_siblings, bool parse_children);
321 lldb::TypeSP ParseType (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die, bool *type_is_new);
322 lldb_private::Type* ResolveTypeUID (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* die, bool assert_not_being_parsed);
324 lldb::VariableSP ParseVariableDIE(
325 const lldb_private::SymbolContext& sc,
326 DWARFCompileUnit* dwarf_cu,
327 const DWARFDebugInfoEntry *die,
328 const lldb::addr_t func_low_pc);
330 size_t ParseVariables(
331 const lldb_private::SymbolContext& sc,
332 DWARFCompileUnit* dwarf_cu,
333 const lldb::addr_t func_low_pc,
334 const DWARFDebugInfoEntry *die,
337 lldb_private::VariableList* cc_variable_list = NULL);
339 class DelayedAddObjCClassProperty;
340 typedef std::vector <DelayedAddObjCClassProperty> DelayedPropertyList;
342 bool ClassOrStructIsVirtual (
343 DWARFCompileUnit* dwarf_cu,
344 const DWARFDebugInfoEntry *parent_die);
346 size_t ParseChildMembers(
347 const lldb_private::SymbolContext& sc,
348 DWARFCompileUnit* dwarf_cu,
349 const DWARFDebugInfoEntry *die,
350 lldb_private::ClangASTType &class_clang_type,
351 const lldb::LanguageType class_language,
352 std::vector<clang::CXXBaseSpecifier *>& base_classes,
353 std::vector<int>& member_accessibilities,
354 DWARFDIECollection& member_function_dies,
355 DelayedPropertyList& delayed_properties,
356 lldb::AccessType &default_accessibility,
358 LayoutInfo &layout_info);
360 size_t ParseChildParameters(
361 const lldb_private::SymbolContext& sc,
362 clang::DeclContext *containing_decl_ctx,
363 DWARFCompileUnit* dwarf_cu,
364 const DWARFDebugInfoEntry *parent_die,
365 bool skip_artificial,
367 lldb_private::TypeList* type_list,
368 std::vector<lldb_private::ClangASTType>& function_args,
369 std::vector<clang::ParmVarDecl*>& function_param_decls,
370 unsigned &type_quals,
371 lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos);
373 size_t ParseChildEnumerators(
374 const lldb_private::SymbolContext& sc,
375 lldb_private::ClangASTType &clang_type,
377 uint32_t enumerator_byte_size,
378 DWARFCompileUnit* dwarf_cu,
379 const DWARFDebugInfoEntry *enum_die);
381 void ParseChildArrayInfo(
382 const lldb_private::SymbolContext& sc,
383 DWARFCompileUnit* dwarf_cu,
384 const DWARFDebugInfoEntry *parent_die,
385 int64_t& first_index,
386 std::vector<uint64_t>& element_orders,
387 uint32_t& byte_stride,
388 uint32_t& bit_stride);
390 // Given a die_offset, figure out the symbol context representing that die.
391 bool ResolveFunction (dw_offset_t offset,
392 DWARFCompileUnit *&dwarf_cu,
393 lldb_private::SymbolContextList& sc_list);
395 bool ResolveFunction (DWARFCompileUnit *cu,
396 const DWARFDebugInfoEntry *die,
397 lldb_private::SymbolContextList& sc_list);
399 bool FunctionDieMatchesPartialName (
400 const DWARFDebugInfoEntry* die,
401 const DWARFCompileUnit *dwarf_cu,
402 uint32_t name_type_mask,
403 const char *partial_name,
404 const char *base_name_start,
405 const char *base_name_end);
408 const lldb_private::ConstString &name,
409 const NameToDIE &name_to_die,
410 lldb_private::SymbolContextList& sc_list);
413 const lldb_private::RegularExpression ®ex,
414 const NameToDIE &name_to_die,
415 lldb_private::SymbolContextList& sc_list);
418 const lldb_private::RegularExpression ®ex,
419 const DWARFMappedHash::MemoryTable &memory_table,
420 lldb_private::SymbolContextList& sc_list);
422 lldb::TypeSP FindDefinitionTypeForDIE (
423 DWARFCompileUnit* dwarf_cu,
424 const DWARFDebugInfoEntry *die,
425 const lldb_private::ConstString &type_name);
427 lldb::TypeSP FindDefinitionTypeForDWARFDeclContext (
428 const DWARFDeclContext &die_decl_ctx);
430 lldb::TypeSP FindCompleteObjCDefinitionTypeForDIE (
431 const DWARFDebugInfoEntry *die,
432 const lldb_private::ConstString &type_name,
433 bool must_be_implementation);
435 bool Supports_DW_AT_APPLE_objc_complete_type (DWARFCompileUnit *cu);
437 lldb::TypeSP FindCompleteObjCDefinitionType (const lldb_private::ConstString &type_name,
438 bool header_definition_ok);
440 lldb_private::Symbol * GetObjCClassSymbol (const lldb_private::ConstString &objc_class_name);
442 void ParseFunctions (const DIEArray &die_offsets,
443 lldb_private::SymbolContextList& sc_list);
444 lldb::TypeSP GetTypeForDIE (DWARFCompileUnit *cu,
445 const DWARFDebugInfoEntry* die);
447 uint32_t FindTypes(std::vector<dw_offset_t> die_offsets, uint32_t max_matches, lldb_private::TypeList& types);
453 void SetDebugMapModule (const lldb::ModuleSP &module_sp)
455 m_debug_map_module_wp = module_sp;
458 SymbolFileDWARFDebugMap *
459 GetDebugMapSymfile ();
461 const DWARFDebugInfoEntry *
462 FindBlockContainingSpecification (dw_offset_t func_die_offset,
463 dw_offset_t spec_block_die_offset,
464 DWARFCompileUnit **dwarf_cu_handle);
466 const DWARFDebugInfoEntry *
467 FindBlockContainingSpecification (DWARFCompileUnit* dwarf_cu,
468 const DWARFDebugInfoEntry *die,
469 dw_offset_t spec_block_die_offset,
470 DWARFCompileUnit **dwarf_cu_handle);
472 clang::NamespaceDecl *
473 ResolveNamespaceDIE (DWARFCompileUnit *curr_cu, const DWARFDebugInfoEntry *die);
475 UniqueDWARFASTTypeMap &
476 GetUniqueDWARFASTTypeMap ();
478 void LinkDeclContextToDIE (clang::DeclContext *decl_ctx,
479 const DWARFDebugInfoEntry *die)
481 m_die_to_decl_ctx[die] = decl_ctx;
482 // There can be many DIEs for a single decl context
483 m_decl_ctx_to_die[decl_ctx].insert(die);
487 UserIDMatches (lldb::user_id_t uid) const
489 const lldb::user_id_t high_uid = uid & 0xffffffff00000000ull;
491 return high_uid == GetID();
496 MakeUserID (dw_offset_t die_offset) const
498 return GetID() | die_offset;
502 DeclKindIsCXXClass (clang::Decl::Kind decl_kind)
506 case clang::Decl::CXXRecord:
507 case clang::Decl::ClassTemplateSpecialization:
516 ParseTemplateParameterInfos (DWARFCompileUnit* dwarf_cu,
517 const DWARFDebugInfoEntry *parent_die,
518 lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos);
521 ParseTemplateDIE (DWARFCompileUnit* dwarf_cu,
522 const DWARFDebugInfoEntry *die,
523 lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos);
525 clang::ClassTemplateDecl *
526 ParseClassTemplateDecl (clang::DeclContext *decl_ctx,
527 lldb::AccessType access_type,
528 const char *parent_name,
530 const lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos);
533 DIEDeclContextsMatch (DWARFCompileUnit* cu1, const DWARFDebugInfoEntry *die1,
534 DWARFCompileUnit* cu2, const DWARFDebugInfoEntry *die2);
537 ClassContainsSelector (DWARFCompileUnit *dwarf_cu,
538 const DWARFDebugInfoEntry *class_die,
539 const lldb_private::ConstString &selector);
542 CopyUniqueClassMethodTypes (SymbolFileDWARF *class_symfile,
543 lldb_private::Type *class_type,
544 DWARFCompileUnit* src_cu,
545 const DWARFDebugInfoEntry *src_class_die,
546 DWARFCompileUnit* dst_cu,
547 const DWARFDebugInfoEntry *dst_class_die,
548 llvm::SmallVectorImpl <const DWARFDebugInfoEntry *> &failures);
551 FixupAddress (lldb_private::Address &addr);
553 typedef std::set<lldb_private::Type *> TypeSet;
556 GetTypes (DWARFCompileUnit* dwarf_cu,
557 const DWARFDebugInfoEntry *die,
558 dw_offset_t min_die_offset,
559 dw_offset_t max_die_offset,
563 lldb::ModuleWP m_debug_map_module_wp;
564 SymbolFileDWARFDebugMap * m_debug_map_symfile;
565 clang::TranslationUnitDecl * m_clang_tu_decl;
566 lldb_private::Flags m_flags;
567 lldb_private::DataExtractor m_dwarf_data;
568 lldb_private::DataExtractor m_data_debug_abbrev;
569 lldb_private::DataExtractor m_data_debug_aranges;
570 lldb_private::DataExtractor m_data_debug_frame;
571 lldb_private::DataExtractor m_data_debug_info;
572 lldb_private::DataExtractor m_data_debug_line;
573 lldb_private::DataExtractor m_data_debug_loc;
574 lldb_private::DataExtractor m_data_debug_ranges;
575 lldb_private::DataExtractor m_data_debug_str;
576 lldb_private::DataExtractor m_data_apple_names;
577 lldb_private::DataExtractor m_data_apple_types;
578 lldb_private::DataExtractor m_data_apple_namespaces;
579 lldb_private::DataExtractor m_data_apple_objc;
581 // The unique pointer items below are generated on demand if and when someone accesses
582 // them through a non const version of this class.
583 std::unique_ptr<DWARFDebugAbbrev> m_abbr;
584 std::unique_ptr<DWARFDebugInfo> m_info;
585 std::unique_ptr<DWARFDebugLine> m_line;
586 std::unique_ptr<DWARFMappedHash::MemoryTable> m_apple_names_ap;
587 std::unique_ptr<DWARFMappedHash::MemoryTable> m_apple_types_ap;
588 std::unique_ptr<DWARFMappedHash::MemoryTable> m_apple_namespaces_ap;
589 std::unique_ptr<DWARFMappedHash::MemoryTable> m_apple_objc_ap;
590 NameToDIE m_function_basename_index; // All concrete functions
591 NameToDIE m_function_fullname_index; // All concrete functions
592 NameToDIE m_function_method_index; // All inlined functions
593 NameToDIE m_function_selector_index; // All method names for functions of classes
594 NameToDIE m_objc_class_selectors_index; // Given a class name, find all selectors for the class
595 NameToDIE m_global_index; // Global and static variables
596 NameToDIE m_type_index; // All type DIE offsets
597 NameToDIE m_namespace_index; // All type DIE offsets
599 m_is_external_ast_source:1,
600 m_using_apple_tables:1;
601 lldb_private::LazyBool m_supports_DW_AT_APPLE_objc_complete_type;
603 std::unique_ptr<DWARFDebugRanges> m_ranges;
604 UniqueDWARFASTTypeMap m_unique_ast_type_map;
605 typedef llvm::SmallPtrSet<const DWARFDebugInfoEntry *, 4> DIEPointerSet;
606 typedef llvm::DenseMap<const DWARFDebugInfoEntry *, clang::DeclContext *> DIEToDeclContextMap;
607 typedef llvm::DenseMap<const clang::DeclContext *, DIEPointerSet> DeclContextToDIEMap;
608 typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb_private::Type *> DIEToTypePtr;
609 typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb::VariableSP> DIEToVariableSP;
610 typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb::clang_type_t> DIEToClangType;
611 typedef llvm::DenseMap<lldb::clang_type_t, const DWARFDebugInfoEntry *> ClangTypeToDIE;
612 typedef llvm::DenseMap<const clang::RecordDecl *, LayoutInfo> RecordDeclToLayoutMap;
613 DIEToDeclContextMap m_die_to_decl_ctx;
614 DeclContextToDIEMap m_decl_ctx_to_die;
615 DIEToTypePtr m_die_to_type;
616 DIEToVariableSP m_die_to_variable_sp;
617 DIEToClangType m_forward_decl_die_to_clang_type;
618 ClangTypeToDIE m_forward_decl_clang_type_to_die;
619 RecordDeclToLayoutMap m_record_decl_to_layout_map;
622 #endif // SymbolFileDWARF_SymbolFileDWARF_h_