124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SymbolFileDWARF.h --------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10144188bc458a35997d2f2e52206ab69747439073Greg Clayton#ifndef SymbolFileDWARF_SymbolFileDWARF_h_
11144188bc458a35997d2f2e52206ab69747439073Greg Clayton#define SymbolFileDWARF_SymbolFileDWARF_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list>
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <map>
17a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton#include <set>
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector>
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
213fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton#include "clang/AST/CharUnits.h"
22e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton#include "clang/AST/ExternalASTSource.h"
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "llvm/ADT/DenseMap.h"
2403fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton#include "llvm/ADT/SmallPtrSet.h"
25d3beda617568982a0295481551d23f9b42df801dSean Callanan#include "llvm/ADT/SmallVector.h"
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton#include "lldb/lldb-private.h"
28e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton#include "lldb/Core/ClangForward.h"
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ConstString.h"
30ccfba727178bb919cdff3365839bed9584df2560Jason Molenda#include "lldb/Core/dwarf.h"
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataExtractor.h"
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Flags.h"
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UniqueCStringMap.h"
34f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton#include "lldb/Symbol/ClangASTContext.h"
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolFile.h"
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolContext.h"
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDefines.h"
40d74270e83908066c946d150faec9516349e1118bGreg Clayton#include "HashedNameToDIE.h"
4174124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton#include "NameToDIE.h"
42a8d4241dcd129f289710c909491e0e80e7e3d732Greg Clayton#include "UniqueDWARFASTType.h"
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Forward Declarations for this DWARF plugin
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4749ce8969d3154e1560106cfe530444c09410f217Greg Claytonclass DebugMapModule;
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFAbbreviationDeclaration;
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFAbbreviationDeclarationSet;
50cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Claytonclass DWARFileUnit;
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugAbbrev;
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugAranges;
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugInfo;
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugInfoEntry;
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugLine;
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugPubnames;
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugRanges;
58cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Claytonclass DWARFDeclContext;
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDIECollection;
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFFormValue;
61ad60bf486dee699dd524225b63271ddc5b6329b9Greg Claytonclass SymbolFileDWARFDebugMap;
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
63444e35b5fdf15a25a427285650f06f1390e62c75Greg Claytonclass SymbolFileDWARF : public lldb_private::SymbolFile, public lldb_private::UserID
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
6648f833c33b8c2713e99139941ce3b3885883c4f0Sean Callanan    friend class SymbolFileDWARFDebugMap;
6749ce8969d3154e1560106cfe530444c09410f217Greg Clayton    friend class DebugMapModule;
68be754e641cfee70cf7ab0c6d160e94a085416f26Greg Clayton    friend class DWARFCompileUnit;
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Static Functions
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static void
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Initialize();
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static void
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Terminate();
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
780e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    static lldb_private::ConstString
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginNameStatic();
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const char *
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginDescriptionStatic();
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static lldb_private::SymbolFile*
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CreateInstance (lldb_private::ObjectFile* obj_file);
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Constructors and Destructors
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            SymbolFileDWARF(lldb_private::ObjectFile* ofile);
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual                 ~SymbolFileDWARF();
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
92d0b7cfa22722fdaf4111a61d6eeb02a587710e16Sean Callanan    virtual uint32_t        CalculateAbilities ();
93b01000fd063629facd45044f137446fb748ee179Greg Clayton    virtual void            InitializeObject();
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Compile Unit function calls
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t        GetNumCompileUnits();
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index);
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10149ce8969d3154e1560106cfe530444c09410f217Greg Clayton    virtual lldb::LanguageType ParseCompileUnitLanguage (const lldb_private::SymbolContext& sc);
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t          ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc);
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool            ParseCompileUnitLineTable (const lldb_private::SymbolContext& sc);
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool            ParseCompileUnitSupportFiles (const lldb_private::SymbolContext& sc, lldb_private::FileSpecList& support_files);
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t          ParseFunctionBlocks (const lldb_private::SymbolContext& sc);
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t          ParseTypes (const lldb_private::SymbolContext& sc);
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t          ParseVariablesForContext (const lldb_private::SymbolContext& sc);
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10974124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    virtual lldb_private::Type* ResolveTypeUID(lldb::user_id_t type_uid);
11052f792329be5db8e38961350589e97e8f2823acdGreg Clayton    virtual bool            ResolveClangOpaqueTypeDefinition (lldb_private::ClangASTType& clang_type);
111462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton
1120be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton    virtual lldb_private::Type* ResolveType (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* type_die, bool assert_not_being_parsed = true);
113c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan    virtual clang::DeclContext* GetClangDeclContextContainingTypeUID (lldb::user_id_t type_uid);
114c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan    virtual clang::DeclContext* GetClangDeclContextForTypeUID (const lldb_private::SymbolContext &sc, lldb::user_id_t type_uid);
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t        ResolveSymbolContext (const lldb_private::Address& so_addr, uint32_t resolve_scope, lldb_private::SymbolContext& sc);
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    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);
1180fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan    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);
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t        FindGlobalVariables(const lldb_private::RegularExpression& regex, bool append, uint32_t max_matches, lldb_private::VariableList& variables);
120302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan    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);
121302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan    virtual uint32_t        FindFunctions(const lldb_private::RegularExpression& regex, bool include_inlines, bool append, lldb_private::SymbolContextList& sc_list);
1220fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan    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);
123b01000fd063629facd45044f137446fb748ee179Greg Clayton    virtual lldb_private::TypeList *
124b01000fd063629facd45044f137446fb748ee179Greg Clayton                            GetTypeList ();
125a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    virtual size_t          GetTypes (lldb_private::SymbolContextScope *sc_scope,
126a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton                                      uint32_t type_mask,
127a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton                                      lldb_private::TypeList &type_list);
128a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton
129b01000fd063629facd45044f137446fb748ee179Greg Clayton    virtual lldb_private::ClangASTContext &
130b01000fd063629facd45044f137446fb748ee179Greg Clayton                            GetClangASTContext ();
131b01000fd063629facd45044f137446fb748ee179Greg Clayton
1326916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    virtual lldb_private::ClangNamespaceDecl
133d7cb26e87841731c6452a9f2e997ed0f9c92625cGreg Clayton            FindNamespace (const lldb_private::SymbolContext& sc,
1340fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan                           const lldb_private::ConstString &name,
1350fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan                           const lldb_private::ClangNamespaceDecl *parent_namespace_decl);
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
137b01000fd063629facd45044f137446fb748ee179Greg Clayton
138b01000fd063629facd45044f137446fb748ee179Greg Clayton    //------------------------------------------------------------------
139b01000fd063629facd45044f137446fb748ee179Greg Clayton    // ClangASTContext callbacks for external source lookups.
140b01000fd063629facd45044f137446fb748ee179Greg Clayton    //------------------------------------------------------------------
141b01000fd063629facd45044f137446fb748ee179Greg Clayton    static void
142b01000fd063629facd45044f137446fb748ee179Greg Clayton    CompleteTagDecl (void *baton, clang::TagDecl *);
143b01000fd063629facd45044f137446fb748ee179Greg Clayton
144b01000fd063629facd45044f137446fb748ee179Greg Clayton    static void
145b01000fd063629facd45044f137446fb748ee179Greg Clayton    CompleteObjCInterfaceDecl (void *baton, clang::ObjCInterfaceDecl *);
146e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton
147e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton    static void
148e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton    FindExternalVisibleDeclsByName (void *baton,
149e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton                                    const clang::DeclContext *DC,
150e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton                                    clang::DeclarationName Name,
151e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton                                    llvm::SmallVectorImpl <clang::NamedDecl *> *results);
152b01000fd063629facd45044f137446fb748ee179Greg Clayton
1533fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton    static bool
1543fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton    LayoutRecordType (void *baton,
1553fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      const clang::RecordDecl *record_decl,
1563fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      uint64_t &size,
1573fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      uint64_t &alignment,
1583fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      llvm::DenseMap <const clang::FieldDecl *, uint64_t> &field_offsets,
1593fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &base_offsets,
1603fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &vbase_offsets);
1613fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton
1623fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton    bool
1633fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton    LayoutRecordType (const clang::RecordDecl *record_decl,
1643fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      uint64_t &size,
1653fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      uint64_t &alignment,
1663fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      llvm::DenseMap <const clang::FieldDecl *, uint64_t> &field_offsets,
1673fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &base_offsets,
1683fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                      llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &vbase_offsets);
1693fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton
1703fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton    struct LayoutInfo
1713fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton    {
1723fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton        LayoutInfo () :
1733fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton            bit_size(0),
1743fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton            alignment(0),
17588db4597c7567be050b7a729f7306832f28428bbGreg Clayton            field_offsets(),
17688db4597c7567be050b7a729f7306832f28428bbGreg Clayton            base_offsets(),
17788db4597c7567be050b7a729f7306832f28428bbGreg Clayton            vbase_offsets()
1783fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton        {
1793fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton        }
1803fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton        uint64_t bit_size;
1813fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton        uint64_t alignment;
1823fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton        llvm::DenseMap <const clang::FieldDecl *, uint64_t> field_offsets;
18388db4597c7567be050b7a729f7306832f28428bbGreg Clayton        llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> base_offsets;
18488db4597c7567be050b7a729f7306832f28428bbGreg Clayton        llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> vbase_offsets;
1853fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton    };
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // PluginInterface protocol
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
1890e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    virtual lldb_private::ConstString
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginName();
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginVersion();
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Approach 2 - count + accessor
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Index compile units would scan the initial compile units and register
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // them with the module. This would only be done on demand if and only if
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // the compile units were needed.
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //virtual size_t        GetCompUnitCount() = 0;
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //virtual CompUnitSP    GetCompUnitAtIndex(size_t cu_idx) = 0;
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
202144188bc458a35997d2f2e52206ab69747439073Greg Clayton    const lldb_private::DataExtractor&      get_debug_abbrev_data ();
203144188bc458a35997d2f2e52206ab69747439073Greg Clayton    const lldb_private::DataExtractor&      get_debug_aranges_data ();
204144188bc458a35997d2f2e52206ab69747439073Greg Clayton    const lldb_private::DataExtractor&      get_debug_frame_data ();
205144188bc458a35997d2f2e52206ab69747439073Greg Clayton    const lldb_private::DataExtractor&      get_debug_info_data ();
206144188bc458a35997d2f2e52206ab69747439073Greg Clayton    const lldb_private::DataExtractor&      get_debug_line_data ();
207144188bc458a35997d2f2e52206ab69747439073Greg Clayton    const lldb_private::DataExtractor&      get_debug_loc_data ();
208144188bc458a35997d2f2e52206ab69747439073Greg Clayton    const lldb_private::DataExtractor&      get_debug_ranges_data ();
209144188bc458a35997d2f2e52206ab69747439073Greg Clayton    const lldb_private::DataExtractor&      get_debug_str_data ();
210f6e3de2d877dc94120c72624a79e488c9bea5c35Greg Clayton    const lldb_private::DataExtractor&      get_apple_names_data ();
211f6e3de2d877dc94120c72624a79e488c9bea5c35Greg Clayton    const lldb_private::DataExtractor&      get_apple_types_data ();
21200db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton    const lldb_private::DataExtractor&      get_apple_namespaces_data ();
21324a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton    const lldb_private::DataExtractor&      get_apple_objc_data ();
21400db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFDebugAbbrev*       DebugAbbrev();
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DWARFDebugAbbrev* DebugAbbrev() const;
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFDebugInfo*         DebugInfo();
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DWARFDebugInfo*   DebugInfo() const;
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFDebugRanges*       DebugRanges();
22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DWARFDebugRanges* DebugRanges() const;
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::DataExtractor&
226b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    GetCachedSectionData (uint32_t got_flag,
227b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton                          lldb::SectionType sect_type,
228b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton                          lldb_private::DataExtractor &data);
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23032a8c7e02b84fbc36ee0fdb553002a1880c8d83eGreg Clayton    static bool
23132a8c7e02b84fbc36ee0fdb553002a1880c8d83eGreg Clayton    SupportedVersion(uint16_t version);
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::DeclContext *
234b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton    GetCachedClangDeclContextForDIE (const DWARFDebugInfoEntry *die)
235b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton    {
236b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton        DIEToDeclContextMap::iterator pos = m_die_to_decl_ctx.find(die);
237b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton        if (pos != m_die_to_decl_ctx.end())
238b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton            return pos->second;
239b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton        else
240b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton            return NULL;
241b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton    }
242b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton
243b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton    clang::DeclContext *
244c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan    GetClangDeclContextForDIE (const lldb_private::SymbolContext &sc, DWARFCompileUnit *cu, const DWARFDebugInfoEntry *die);
245c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan
246c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan    clang::DeclContext *
247c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan    GetClangDeclContextForDIEOffset (const lldb_private::SymbolContext &sc, dw_offset_t die_offset);
248c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan
249c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan    clang::DeclContext *
25003fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton    GetClangDeclContextContainingDIE (DWARFCompileUnit *cu,
25103fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton                                      const DWARFDebugInfoEntry *die,
25203fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton                                      const DWARFDebugInfoEntry **decl_ctx_die);
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::DeclContext *
255c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan    GetClangDeclContextContainingDIEOffset (dw_offset_t die_offset);
2566c19c8a7da08b89ee153d7091aa8641348e0482cGreg Clayton
2576c19c8a7da08b89ee153d7091aa8641348e0482cGreg Clayton    const DWARFDebugInfoEntry *
2586c19c8a7da08b89ee153d7091aa8641348e0482cGreg Clayton    GetDeclContextDIEContainingDIE (DWARFCompileUnit *cu, const DWARFDebugInfoEntry *die);
2596c19c8a7da08b89ee153d7091aa8641348e0482cGreg Clayton
260e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton    void
2619b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan    SearchDeclContext (const clang::DeclContext *decl_context,
2629b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan                       const char *name,
2639b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan                       llvm::SmallVectorImpl <clang::NamedDecl *> *results);
2649b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Flags&
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetFlags ()
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_flags;
26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::Flags&
27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetFlags () const
27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_flags;
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
277b01000fd063629facd45044f137446fb748ee179Greg Clayton    bool
27852f792329be5db8e38961350589e97e8f2823acdGreg Clayton    HasForwardDeclForClangType (const lldb_private::ClangASTType &clang_type);
279b01000fd063629facd45044f137446fb748ee179Greg Clayton
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    enum
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugAbbrevData     = (1 << 0),
28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugArangesData    = (1 << 1),
28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugFrameData      = (1 << 2),
28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugInfoData       = (1 << 3),
28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugLineData       = (1 << 4),
28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugLocData        = (1 << 5),
29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugMacInfoData    = (1 << 6),
29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugPubNamesData   = (1 << 7),
29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugPubTypesData   = (1 << 8),
29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugRangesData     = (1 << 9),
294c8cf5e234be554d4acb6ae644a8269c303c4f56eGreg Clayton        flagsGotDebugStrData        = (1 << 10),
29524a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton        flagsGotAppleNamesData      = (1 << 11),
29624a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton        flagsGotAppleTypesData      = (1 << 12),
29724a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton        flagsGotAppleNamespacesData = (1 << 13),
29824a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton        flagsGotAppleObjCData       = (1 << 14)
29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
30082770e0df481f30c46fb7e905e99b45c1e6d31c8Greg Clayton
301db29bba117a0ea75b89c1280722225a3197b4313Greg Clayton    bool                    NamespaceDeclMatchesThisSymbolFile (const lldb_private::ClangNamespaceDecl *namespace_decl);
302db29bba117a0ea75b89c1280722225a3197b4313Greg Clayton
30382770e0df481f30c46fb7e905e99b45c1e6d31c8Greg Clayton    bool                    DIEIsInNamespace (const lldb_private::ClangNamespaceDecl *namespace_decl,
3040be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton                                              DWARFCompileUnit* dwarf_cu,
30582770e0df481f30c46fb7e905e99b45c1e6d31c8Greg Clayton                                              const DWARFDebugInfoEntry* die);
30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (SymbolFileDWARF);
3080be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton    lldb::CompUnitSP        ParseCompileUnit (DWARFCompileUnit* dwarf_cu, uint32_t cu_idx);
30949ce8969d3154e1560106cfe530444c09410f217Greg Clayton    DWARFCompileUnit*       GetDWARFCompileUnit(lldb_private::CompileUnit *comp_unit);
31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFCompileUnit*       GetNextUnparsedDWARFCompileUnit(DWARFCompileUnit* prev_cu);
3110be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton    lldb_private::CompileUnit*      GetCompUnitForDWARFCompUnit(DWARFCompileUnit* dwarf_cu, uint32_t cu_idx = UINT32_MAX);
3120be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton    bool                    GetFunction (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* func_die, lldb_private::SymbolContext& sc);
3131d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    lldb_private::Function *        ParseCompileUnitFunction (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die);
31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseFunctionBlocks (const lldb_private::SymbolContext& sc,
31575ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton                                                 lldb_private::Block *parent_block,
3161d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                 DWARFCompileUnit* dwarf_cu,
31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                 const DWARFDebugInfoEntry *die,
31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                 lldb::addr_t subprogram_low_pc,
3192e45b0c3f6a6021aa7c064f715144599a2a712a0Greg Clayton                                                 uint32_t depth);
3201d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    size_t                  ParseTypes (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die, bool parse_siblings, bool parse_children);
321462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::TypeSP            ParseType (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die, bool *type_is_new);
3220be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton    lldb_private::Type*     ResolveTypeUID (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* die, bool assert_not_being_parsed);
32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::VariableSP        ParseVariableDIE(
32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
3261d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
327178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton                                const DWARFDebugInfoEntry *die,
328178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton                                const lldb::addr_t func_low_pc);
32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseVariables(
33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
3321d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
333178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton                                const lldb::addr_t func_low_pc,
33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *die,
33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                bool parse_siblings,
33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                bool parse_children,
33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                lldb_private::VariableList* cc_variable_list = NULL);
33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
339a23b44181b98ccaf5125cd7213e8c3624fb71eacSean Callanan    class DelayedAddObjCClassProperty;
340a23b44181b98ccaf5125cd7213e8c3624fb71eacSean Callanan    typedef std::vector <DelayedAddObjCClassProperty> DelayedPropertyList;
341a23b44181b98ccaf5125cd7213e8c3624fb71eacSean Callanan
3429c09181404cc35f65d5353231246959135fb7684Greg Clayton    bool                    ClassOrStructIsVirtual (
3439c09181404cc35f65d5353231246959135fb7684Greg Clayton                                DWARFCompileUnit* dwarf_cu,
3449c09181404cc35f65d5353231246959135fb7684Greg Clayton                                const DWARFDebugInfoEntry *parent_die);
3459c09181404cc35f65d5353231246959135fb7684Greg Clayton
34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseChildMembers(
34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
3481d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *die,
35052f792329be5db8e38961350589e97e8f2823acdGreg Clayton                                lldb_private::ClangASTType &class_clang_type,
3519488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton                                const lldb::LanguageType class_language,
35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                std::vector<clang::CXXBaseSpecifier *>& base_classes,
35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                std::vector<int>& member_accessibilities,
354b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton                                DWARFDIECollection& member_function_dies,
355a23b44181b98ccaf5125cd7213e8c3624fb71eacSean Callanan                                DelayedPropertyList& delayed_properties,
35670a4f92d0e5f605c8ed1662fa959d465c96b0fb9Sean Callanan                                lldb::AccessType &default_accessibility,
3573fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                                bool &is_a_class,
3583fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton                                LayoutInfo &layout_info);
35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseChildParameters(
36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
362c5dca6c656ffc94d2f958c56d7bc9076eac90783Greg Clayton                                clang::DeclContext *containing_decl_ctx,
3631d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *parent_die,
365412440aa3a110e4068ee99729f7883c828fb3dceGreg Clayton                                bool skip_artificial,
36699309909259eacf4693458bfe44f913c316a09c6Sean Callanan                                bool &is_static,
36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                lldb_private::TypeList* type_list,
36852f792329be5db8e38961350589e97e8f2823acdGreg Clayton                                std::vector<lldb_private::ClangASTType>& function_args,
3692403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton                                std::vector<clang::ParmVarDecl*>& function_param_decls,
370b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton                                unsigned &type_quals,
371b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton                                lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos);
37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseChildEnumerators(
37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
37552f792329be5db8e38961350589e97e8f2823acdGreg Clayton                                lldb_private::ClangASTType &clang_type,
376d5e48bd4029b47cd298fd065429bb3a350a08324Greg Clayton                                bool is_signed,
37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                uint32_t enumerator_byte_size,
3781d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *enum_die);
38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void                    ParseChildArrayInfo(
38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
3831d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *parent_die,
38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                int64_t& first_index,
38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                std::vector<uint64_t>& element_orders,
38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                uint32_t& byte_stride,
38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                uint32_t& bit_stride);
38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3908b7b2276132c7353cabd22000287b42badc26613Jim Ingham                            // Given a die_offset, figure out the symbol context representing that die.
3917a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton    bool                    ResolveFunction (dw_offset_t offset,
3927a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton                                             DWARFCompileUnit *&dwarf_cu,
3937a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton                                             lldb_private::SymbolContextList& sc_list);
3947a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton
3957a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton    bool                    ResolveFunction (DWARFCompileUnit *cu,
3967a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton                                             const DWARFDebugInfoEntry *die,
3977a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton                                             lldb_private::SymbolContextList& sc_list);
3987a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton
3998b7b2276132c7353cabd22000287b42badc26613Jim Ingham    bool                    FunctionDieMatchesPartialName (
4008b7b2276132c7353cabd22000287b42badc26613Jim Ingham                                const DWARFDebugInfoEntry* die,
4018b7b2276132c7353cabd22000287b42badc26613Jim Ingham                                const DWARFCompileUnit *dwarf_cu,
4028b7b2276132c7353cabd22000287b42badc26613Jim Ingham                                uint32_t name_type_mask,
4038b7b2276132c7353cabd22000287b42badc26613Jim Ingham                                const char *partial_name,
4048b7b2276132c7353cabd22000287b42badc26613Jim Ingham                                const char *base_name_start,
4058b7b2276132c7353cabd22000287b42badc26613Jim Ingham                                const char *base_name_end);
406d74270e83908066c946d150faec9516349e1118bGreg Clayton
40712bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    void                    FindFunctions(
40812bec71b323dc520f0e985a86e09c4712559e115Greg Clayton                                const lldb_private::ConstString &name,
40974124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton                                const NameToDIE &name_to_die,
41074124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton                                lldb_private::SymbolContextList& sc_list);
41174124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton
41274124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    void                    FindFunctions (
41374124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton                                const lldb_private::RegularExpression &regex,
41474124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton                                const NameToDIE &name_to_die,
41512bec71b323dc520f0e985a86e09c4712559e115Greg Clayton                                lldb_private::SymbolContextList& sc_list);
41612bec71b323dc520f0e985a86e09c4712559e115Greg Clayton
41700db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton    void                    FindFunctions (
41800db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton                                const lldb_private::RegularExpression &regex,
41900db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton                                const DWARFMappedHash::MemoryTable &memory_table,
42000db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton                                lldb_private::SymbolContextList& sc_list);
42100db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton
42295e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton    lldb::TypeSP            FindDefinitionTypeForDIE (
4230be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton                                DWARFCompileUnit* dwarf_cu,
42495e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton                                const DWARFDebugInfoEntry *die,
42595e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton                                const lldb_private::ConstString &type_name);
426cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton
427cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton    lldb::TypeSP            FindDefinitionTypeForDWARFDeclContext (
428cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton                                const DWARFDeclContext &die_decl_ctx);
42977917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton
43077917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton    lldb::TypeSP            FindCompleteObjCDefinitionTypeForDIE (
43177917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton                                const DWARFDebugInfoEntry *die,
432e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton                                const lldb_private::ConstString &type_name,
433e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton                                bool must_be_implementation);
434e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton
435e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton    bool                    Supports_DW_AT_APPLE_objc_complete_type (DWARFCompileUnit *cu);
436e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton
437e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton    lldb::TypeSP            FindCompleteObjCDefinitionType (const lldb_private::ConstString &type_name,
438e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton                                                            bool header_definition_ok);
43977917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton
44077917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton    lldb_private::Symbol *  GetObjCClassSymbol (const lldb_private::ConstString &objc_class_name);
44177917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton
44200db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton    void                    ParseFunctions (const DIEArray &die_offsets,
44300db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton                                            lldb_private::SymbolContextList& sc_list);
4444fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    lldb::TypeSP            GetTypeForDIE (DWARFCompileUnit *cu,
445462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                                           const DWARFDebugInfoEntry* die);
4464fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton
447960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    uint32_t                FindTypes(std::vector<dw_offset_t> die_offsets, uint32_t max_matches, lldb_private::TypeList& types);
44824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void                    Index();
4509b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan
4519b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan    void                    DumpIndexes();
45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
45349ce8969d3154e1560106cfe530444c09410f217Greg Clayton    void                    SetDebugMapModule (const lldb::ModuleSP &module_sp)
454ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton                            {
45549ce8969d3154e1560106cfe530444c09410f217Greg Clayton                                m_debug_map_module_wp = module_sp;
456ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton                            }
45749ce8969d3154e1560106cfe530444c09410f217Greg Clayton
45849ce8969d3154e1560106cfe530444c09410f217Greg Clayton    SymbolFileDWARFDebugMap *
45949ce8969d3154e1560106cfe530444c09410f217Greg Clayton                            GetDebugMapSymfile ();
460ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton
4611bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton    const DWARFDebugInfoEntry *
4621bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton                            FindBlockContainingSpecification (dw_offset_t func_die_offset,
4631bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton                                                              dw_offset_t spec_block_die_offset,
4641bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton                                                              DWARFCompileUnit **dwarf_cu_handle);
4651bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton
4661bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton    const DWARFDebugInfoEntry *
4671bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton                            FindBlockContainingSpecification (DWARFCompileUnit* dwarf_cu,
4681bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton                                                              const DWARFDebugInfoEntry *die,
4691bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton                                                              dw_offset_t spec_block_die_offset,
4701bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton                                                              DWARFCompileUnit **dwarf_cu_handle);
4711bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton
472d7cb26e87841731c6452a9f2e997ed0f9c92625cGreg Clayton    clang::NamespaceDecl *
473d7cb26e87841731c6452a9f2e997ed0f9c92625cGreg Clayton    ResolveNamespaceDIE (DWARFCompileUnit *curr_cu, const DWARFDebugInfoEntry *die);
474d7cb26e87841731c6452a9f2e997ed0f9c92625cGreg Clayton
475c3c4661c6a7527580e605dbb69bef7634971fe13Greg Clayton    UniqueDWARFASTTypeMap &
476c3c4661c6a7527580e605dbb69bef7634971fe13Greg Clayton    GetUniqueDWARFASTTypeMap ();
477c3c4661c6a7527580e605dbb69bef7634971fe13Greg Clayton
478e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton    void                    LinkDeclContextToDIE (clang::DeclContext *decl_ctx,
479e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton                                                  const DWARFDebugInfoEntry *die)
480e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton                            {
481e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton                                m_die_to_decl_ctx[die] = decl_ctx;
48203fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton                                // There can be many DIEs for a single decl context
48303fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton                                m_decl_ctx_to_die[decl_ctx].insert(die);
484e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton                            }
485e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton
486444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    bool
487444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    UserIDMatches (lldb::user_id_t uid) const
488444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    {
489444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton        const lldb::user_id_t high_uid = uid & 0xffffffff00000000ull;
490444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton        if (high_uid)
491444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton            return high_uid == GetID();
492444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton        return true;
493444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    }
494b5c023af6df0f4f9eddd14284ca986f578c6bee2Greg Clayton
495444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    lldb::user_id_t
496444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    MakeUserID (dw_offset_t die_offset) const
497444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    {
498444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton        return GetID() | die_offset;
499444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    }
500444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton
501f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton    static bool
502f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton    DeclKindIsCXXClass (clang::Decl::Kind decl_kind)
503f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton    {
504f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton        switch (decl_kind)
505f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton        {
506f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton            case clang::Decl::CXXRecord:
507f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton            case clang::Decl::ClassTemplateSpecialization:
508f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton                return true;
509f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton            default:
510f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton                break;
511f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton        }
512f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton        return false;
513f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton    }
514f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton
515f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton    bool
516f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton    ParseTemplateParameterInfos (DWARFCompileUnit* dwarf_cu,
517f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton                                 const DWARFDebugInfoEntry *parent_die,
518f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton                                 lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos);
519f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton
520b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton    bool
521b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton    ParseTemplateDIE (DWARFCompileUnit* dwarf_cu,
522b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton                      const DWARFDebugInfoEntry *die,
523b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton                      lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos);
524b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton
525f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton    clang::ClassTemplateDecl *
526f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton    ParseClassTemplateDecl (clang::DeclContext *decl_ctx,
5275e8eb5c428e91b99f3884b53fc5deea0ecb001cdGreg Clayton                            lldb::AccessType access_type,
528f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton                            const char *parent_name,
529f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton                            int tag_decl_kind,
530f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton                            const lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos);
531f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton
532b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton    bool
533b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton    DIEDeclContextsMatch (DWARFCompileUnit* cu1, const DWARFDebugInfoEntry *die1,
534b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton                          DWARFCompileUnit* cu2, const DWARFDebugInfoEntry *die2);
5358d6115615f55ae38ff141f0a6859d59750da8d02Sean Callanan
5368d6115615f55ae38ff141f0a6859d59750da8d02Sean Callanan    bool
5378d6115615f55ae38ff141f0a6859d59750da8d02Sean Callanan    ClassContainsSelector (DWARFCompileUnit *dwarf_cu,
5388d6115615f55ae38ff141f0a6859d59750da8d02Sean Callanan                           const DWARFDebugInfoEntry *class_die,
5398d6115615f55ae38ff141f0a6859d59750da8d02Sean Callanan                           const lldb_private::ConstString &selector);
540f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton
541bd5c23ddf5bacc78548bbe348c8c5d98c372aedcGreg Clayton    bool
542d3beda617568982a0295481551d23f9b42df801dSean Callanan    CopyUniqueClassMethodTypes (SymbolFileDWARF *class_symfile,
543d3beda617568982a0295481551d23f9b42df801dSean Callanan                                lldb_private::Type *class_type,
544bd5c23ddf5bacc78548bbe348c8c5d98c372aedcGreg Clayton                                DWARFCompileUnit* src_cu,
545bd5c23ddf5bacc78548bbe348c8c5d98c372aedcGreg Clayton                                const DWARFDebugInfoEntry *src_class_die,
546bd5c23ddf5bacc78548bbe348c8c5d98c372aedcGreg Clayton                                DWARFCompileUnit* dst_cu,
547d3beda617568982a0295481551d23f9b42df801dSean Callanan                                const DWARFDebugInfoEntry *dst_class_die,
548d3beda617568982a0295481551d23f9b42df801dSean Callanan                                llvm::SmallVectorImpl <const DWARFDebugInfoEntry *> &failures);
549bd5c23ddf5bacc78548bbe348c8c5d98c372aedcGreg Clayton
550464a5063bc59755cb6ec063d0b2491097302d2abGreg Clayton    bool
551464a5063bc59755cb6ec063d0b2491097302d2abGreg Clayton    FixupAddress (lldb_private::Address &addr);
552464a5063bc59755cb6ec063d0b2491097302d2abGreg Clayton
553a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    typedef std::set<lldb_private::Type *> TypeSet;
554a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton
555a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    void
556a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    GetTypes (DWARFCompileUnit* dwarf_cu,
557a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton              const DWARFDebugInfoEntry *die,
558a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton              dw_offset_t min_die_offset,
559a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton              dw_offset_t max_die_offset,
560a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton              uint32_t type_mask,
561a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton              TypeSet &type_set);
562a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton
56349ce8969d3154e1560106cfe530444c09410f217Greg Clayton    lldb::ModuleWP                  m_debug_map_module_wp;
564e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton    SymbolFileDWARFDebugMap *       m_debug_map_symfile;
565e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton    clang::TranslationUnitDecl *    m_clang_tu_decl;
56624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Flags             m_flags;
56724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_dwarf_data;
56824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_abbrev;
569144188bc458a35997d2f2e52206ab69747439073Greg Clayton    lldb_private::DataExtractor     m_data_debug_aranges;
57024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_frame;
57124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_info;
57224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_line;
57324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_loc;
57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_ranges;
57524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_str;
576f6e3de2d877dc94120c72624a79e488c9bea5c35Greg Clayton    lldb_private::DataExtractor     m_data_apple_names;
577f6e3de2d877dc94120c72624a79e488c9bea5c35Greg Clayton    lldb_private::DataExtractor     m_data_apple_types;
57800db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton    lldb_private::DataExtractor     m_data_apple_namespaces;
57924a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton    lldb_private::DataExtractor     m_data_apple_objc;
58024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
58181a96aa6242f7b559770f5dc62316253cb8cb0d4Greg Clayton    // The unique pointer items below are generated on demand if and when someone accesses
58224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // them through a non const version of this class.
583102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<DWARFDebugAbbrev>     m_abbr;
584102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<DWARFDebugInfo>       m_info;
585102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<DWARFDebugLine>       m_line;
586102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<DWARFMappedHash::MemoryTable> m_apple_names_ap;
587102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<DWARFMappedHash::MemoryTable> m_apple_types_ap;
588102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<DWARFMappedHash::MemoryTable> m_apple_namespaces_ap;
589102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<DWARFMappedHash::MemoryTable> m_apple_objc_ap;
59074124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    NameToDIE                           m_function_basename_index;  // All concrete functions
59174124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    NameToDIE                           m_function_fullname_index;  // All concrete functions
59274124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    NameToDIE                           m_function_method_index;    // All inlined functions
59374124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    NameToDIE                           m_function_selector_index;  // All method names for functions of classes
594ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton    NameToDIE                           m_objc_class_selectors_index; // Given a class name, find all selectors for the class
59500db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton    NameToDIE                           m_global_index;             // Global and static variables
59600db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton    NameToDIE                           m_type_index;               // All type DIE offsets
59700db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton    NameToDIE                           m_namespace_index;          // All type DIE offsets
598e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton    bool                                m_indexed:1,
599e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton                                        m_is_external_ast_source:1,
600e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton                                        m_using_apple_tables:1;
601e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton    lldb_private::LazyBool              m_supports_DW_AT_APPLE_objc_complete_type;
60224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
603102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<DWARFDebugRanges>     m_ranges;
604a8d4241dcd129f289710c909491e0e80e7e3d732Greg Clayton    UniqueDWARFASTTypeMap m_unique_ast_type_map;
60503fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton    typedef llvm::SmallPtrSet<const DWARFDebugInfoEntry *, 4> DIEPointerSet;
60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef llvm::DenseMap<const DWARFDebugInfoEntry *, clang::DeclContext *> DIEToDeclContextMap;
60703fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton    typedef llvm::DenseMap<const clang::DeclContext *, DIEPointerSet> DeclContextToDIEMap;
6084fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb_private::Type *> DIEToTypePtr;
6094fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb::VariableSP> DIEToVariableSP;
610462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb::clang_type_t> DIEToClangType;
611462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    typedef llvm::DenseMap<lldb::clang_type_t, const DWARFDebugInfoEntry *> ClangTypeToDIE;
6123fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton    typedef llvm::DenseMap<const clang::RecordDecl *, LayoutInfo> RecordDeclToLayoutMap;
61324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DIEToDeclContextMap m_die_to_decl_ctx;
614e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton    DeclContextToDIEMap m_decl_ctx_to_die;
6154fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    DIEToTypePtr m_die_to_type;
6164fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    DIEToVariableSP m_die_to_variable_sp;
617462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    DIEToClangType m_forward_decl_die_to_clang_type;
618462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    ClangTypeToDIE m_forward_decl_clang_type_to_die;
6193fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton    RecordDeclToLayoutMap m_record_decl_to_layout_map;
62024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
62124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
622144188bc458a35997d2f2e52206ab69747439073Greg Clayton#endif  // SymbolFileDWARF_SymbolFileDWARF_h_
623