SymbolFileDWARF.h revision e5748d889fb7fb97b3ff07444894d7714776b609
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
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_SymbolFileDWARF_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_SymbolFileDWARF_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list>
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <memory>
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <map>
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector>
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "llvm/ADT/DenseMap.h"
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton#include "lldb/Core/ClangForward.h"
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ConstString.h"
25ccfba727178bb919cdff3365839bed9584df2560Jason Molenda#include "lldb/Core/dwarf.h"
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataExtractor.h"
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Flags.h"
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UniqueCStringMap.h"
2984f8075072eef306234f8109573067647735c111Greg Clayton#include "lldb/Symbol/ClangASTContext.h"
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolFile.h"
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolContext.h"
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDefines.h"
3574124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton#include "NameToDIE.h"
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Forward Declarations for this DWARF plugin
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFAbbreviationDeclaration;
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFAbbreviationDeclarationSet;
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFCompileUnit;
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugAbbrev;
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugAranges;
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugInfo;
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugInfoEntry;
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugLine;
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugPubnames;
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugRanges;
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDIECollection;
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFFormValue;
53ad60bf486dee699dd524225b63271ddc5b6329b9Greg Claytonclass SymbolFileDWARFDebugMap;
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SymbolFileDWARF : public lldb_private::SymbolFile
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SymbolFileDWARFDebugMap;
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Static Functions
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static void
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Initialize();
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static void
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Terminate();
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const char *
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginNameStatic();
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const char *
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginDescriptionStatic();
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static lldb_private::SymbolFile*
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CreateInstance (lldb_private::ObjectFile* obj_file);
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Constructors and Destructors
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            SymbolFileDWARF(lldb_private::ObjectFile* ofile);
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual                 ~SymbolFileDWARF();
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t        GetAbilities ();
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Compile Unit function calls
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t        GetNumCompileUnits();
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index);
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t          ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc);
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool            ParseCompileUnitLineTable (const lldb_private::SymbolContext& sc);
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool            ParseCompileUnitSupportFiles (const lldb_private::SymbolContext& sc, lldb_private::FileSpecList& support_files);
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t          ParseFunctionBlocks (const lldb_private::SymbolContext& sc);
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t          ParseTypes (const lldb_private::SymbolContext& sc);
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t          ParseVariablesForContext (const lldb_private::SymbolContext& sc);
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9874124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    virtual lldb_private::Type* ResolveTypeUID(lldb::user_id_t type_uid);
99462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    virtual lldb::clang_type_t ResolveClangOpaqueTypeDefinition (lldb::clang_type_t clang_opaque_type);
100462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton
101fb7c51c07c249bd611051c76e4ff491f1a17cf2dGreg Clayton    virtual lldb_private::Type* ResolveType (DWARFCompileUnit* cu, const DWARFDebugInfoEntry* type_die, bool assert_not_being_parsed = true);
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual clang::DeclContext* GetClangDeclContextForTypeUID (lldb::user_id_t type_uid);
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t        ResolveSymbolContext (const lldb_private::Address& so_addr, uint32_t resolve_scope, lldb_private::SymbolContext& sc);
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris 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);
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t        FindGlobalVariables(const lldb_private::ConstString &name, bool append, uint32_t max_matches, lldb_private::VariableList& variables);
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t        FindGlobalVariables(const lldb_private::RegularExpression& regex, bool append, uint32_t max_matches, lldb_private::VariableList& variables);
10812bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    virtual uint32_t        FindFunctions(const lldb_private::ConstString &name, uint32_t name_type_mask, bool append, lldb_private::SymbolContextList& sc_list);
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t        FindFunctions(const lldb_private::RegularExpression& regex, bool append, lldb_private::SymbolContextList& sc_list);
110960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    virtual uint32_t        FindTypes (const lldb_private::SymbolContext& sc, const lldb_private::ConstString &name, bool append, uint32_t max_matches, lldb_private::TypeList& types);
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  virtual uint32_t        FindTypes(const lldb_private::SymbolContext& sc, const lldb_private::RegularExpression& regex, bool append, uint32_t max_matches, lldb::Type::Encoding encoding, lldb::user_id_t udt_uid, lldb_private::TypeList& types);
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // PluginInterface protocol
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual const char *
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginName();
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual const char *
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetShortPluginName();
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginVersion();
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPluginCommandHelp (const char *command, lldb_private::Stream *strm);
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual lldb_private::Error
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ExecutePluginCommand (lldb_private::Args &command, lldb_private::Stream *strm);
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual lldb_private::Log *
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    EnablePluginLogging (lldb_private::Stream *strm, lldb_private::Args &command);
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Approach 2 - count + accessor
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Index compile units would scan the initial compile units and register
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // them with the module. This would only be done on demand if and only if
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // the compile units were needed.
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //virtual size_t        GetCompUnitCount() = 0;
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //virtual CompUnitSP    GetCompUnitAtIndex(size_t cu_idx) = 0;
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::DataExtractor&      get_debug_abbrev_data();
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::DataExtractor&      get_debug_frame_data();
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::DataExtractor&      get_debug_info_data();
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::DataExtractor&      get_debug_line_data();
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::DataExtractor&      get_debug_loc_data();
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::DataExtractor&      get_debug_ranges_data();
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::DataExtractor&      get_debug_str_data();
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFDebugAbbrev*       DebugAbbrev();
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DWARFDebugAbbrev* DebugAbbrev() const;
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFDebugAranges*      DebugAranges();
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DWARFDebugAranges*DebugAranges() const;
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFDebugInfo*         DebugInfo();
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DWARFDebugInfo*   DebugInfo() const;
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFDebugRanges*       DebugRanges();
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DWARFDebugRanges* DebugRanges() const;
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::DataExtractor&
16332a8c7e02b84fbc36ee0fdb553002a1880c8d83eGreg Clayton    GetCachedSectionData (uint32_t got_flag, lldb::SectionType sect_type, lldb_private::DataExtractor &data);
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16532a8c7e02b84fbc36ee0fdb553002a1880c8d83eGreg Clayton    static bool
16632a8c7e02b84fbc36ee0fdb553002a1880c8d83eGreg Clayton    SupportedVersion(uint16_t version);
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::DeclContext *
1691d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    GetClangDeclContextForDIE (DWARFCompileUnit *cu, const DWARFDebugInfoEntry *die);
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::DeclContext *
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetClangDeclContextForDIEOffset (dw_offset_t die_offset);
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Flags&
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetFlags ()
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_flags;
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::Flags&
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetFlags () const
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_flags;
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    enum
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugAbbrevData     = (1 << 0),
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugArangesData    = (1 << 1),
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugFrameData      = (1 << 2),
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugInfoData       = (1 << 3),
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugLineData       = (1 << 4),
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugLocData        = (1 << 5),
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugMacInfoData    = (1 << 6),
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugPubNamesData   = (1 << 7),
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugPubTypesData   = (1 << 8),
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugRangesData     = (1 << 9),
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flagsGotDebugStrData        = (1 << 10),
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (SymbolFileDWARF);
2041d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    bool                    ParseCompileUnit (DWARFCompileUnit* cu, lldb::CompUnitSP& compile_unit_sp);
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFCompileUnit*       GetDWARFCompileUnitForUID(lldb::user_id_t cu_uid);
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFCompileUnit*       GetNextUnparsedDWARFCompileUnit(DWARFCompileUnit* prev_cu);
207178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton    lldb_private::CompileUnit*      GetCompUnitForDWARFCompUnit(DWARFCompileUnit* cu, uint32_t cu_idx = UINT32_MAX);
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool                    GetFunction (DWARFCompileUnit* cu, const DWARFDebugInfoEntry* func_die, lldb_private::SymbolContext& sc);
2091d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    lldb_private::Function *        ParseCompileUnitFunction (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die);
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseFunctionBlocks (const lldb_private::SymbolContext& sc,
21175ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton                                                 lldb_private::Block *parent_block,
2121d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                 DWARFCompileUnit* dwarf_cu,
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                 const DWARFDebugInfoEntry *die,
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                 lldb::addr_t subprogram_low_pc,
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                 bool parse_siblings,
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                 bool parse_children);
2171d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    size_t                  ParseTypes (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die, bool parse_siblings, bool parse_children);
218462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::TypeSP            ParseType (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die, bool *type_is_new);
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::VariableSP        ParseVariableDIE(
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
2221d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
223178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton                                const DWARFDebugInfoEntry *die,
224178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton                                const lldb::addr_t func_low_pc);
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseVariables(
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
2281d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
229178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton                                const lldb::addr_t func_low_pc,
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *die,
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                bool parse_siblings,
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                bool parse_children,
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                lldb_private::VariableList* cc_variable_list = NULL);
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseChildMembers(
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
2371d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *die,
239462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                                lldb::clang_type_t class_clang_type,
2409488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton                                const lldb::LanguageType class_language,
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                std::vector<clang::CXXBaseSpecifier *>& base_classes,
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                std::vector<int>& member_accessibilities,
243b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton                                DWARFDIECollection& member_function_dies,
24470a4f92d0e5f605c8ed1662fa959d465c96b0fb9Sean Callanan                                lldb::AccessType &default_accessibility,
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                bool &is_a_class);
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseChildParameters(
24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                lldb::TypeSP& type_sp,
2501d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *parent_die,
252412440aa3a110e4068ee99729f7883c828fb3dceGreg Clayton                                bool skip_artificial,
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                lldb_private::TypeList* type_list,
254462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                                std::vector<lldb::clang_type_t>& function_args,
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                std::vector<clang::ParmVarDecl*>& function_param_decls);
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t                  ParseChildEnumerators(
25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
259462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                                lldb::clang_type_t enumerator_qual_type,
26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                uint32_t enumerator_byte_size,
2611d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *enum_die);
26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void                    ParseChildArrayInfo(
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const lldb_private::SymbolContext& sc,
2661d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                DWARFCompileUnit* dwarf_cu,
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                const DWARFDebugInfoEntry *parent_die,
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                int64_t& first_index,
26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                std::vector<uint64_t>& element_orders,
27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                uint32_t& byte_stride,
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                uint32_t& bit_stride);
27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27312bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    void                    FindFunctions(
27412bec71b323dc520f0e985a86e09c4712559e115Greg Clayton                                const lldb_private::ConstString &name,
27574124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton                                const NameToDIE &name_to_die,
27674124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton                                lldb_private::SymbolContextList& sc_list);
27774124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton
27874124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    void                    FindFunctions (
27974124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton                                const lldb_private::RegularExpression &regex,
28074124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton                                const NameToDIE &name_to_die,
28112bec71b323dc520f0e985a86e09c4712559e115Greg Clayton                                lldb_private::SymbolContextList& sc_list);
28212bec71b323dc520f0e985a86e09c4712559e115Greg Clayton
28395e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton    lldb::TypeSP            FindDefinitionTypeForDIE (
28495e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton                                DWARFCompileUnit* cu,
28595e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton                                const DWARFDebugInfoEntry *die,
28695e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton                                const lldb_private::ConstString &type_name);
28795e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton
2884fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    lldb::TypeSP            GetTypeForDIE (DWARFCompileUnit *cu,
289462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                                           const DWARFDebugInfoEntry* die);
2904fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton
291960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    uint32_t                FindTypes(std::vector<dw_offset_t> die_offsets, uint32_t max_matches, lldb_private::TypeList& types);
29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void                    Index();
29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
295ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton    void                    SetDebugMapSymfile (SymbolFileDWARFDebugMap *debug_map_symfile)
296ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton                            {
297ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton                                m_debug_map_symfile = debug_map_symfile;
298ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton                            }
299ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton
300e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton    SymbolFileDWARFDebugMap *       m_debug_map_symfile;
301e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton    clang::TranslationUnitDecl *    m_clang_tu_decl;
30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Flags             m_flags;
30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_dwarf_data;
30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_abbrev;
30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_frame;
30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_info;
30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_line;
30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_loc;
30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_ranges;
31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor     m_data_debug_str;
31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // The auto_ptr items below are generated on demand if and when someone accesses
31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // them through a non const version of this class.
31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<DWARFDebugAbbrev>     m_abbr;
31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<DWARFDebugAranges>    m_aranges;
31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<DWARFDebugInfo>       m_info;
31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<DWARFDebugLine>       m_line;
31874124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    NameToDIE                           m_function_basename_index;  // All concrete functions
31974124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    NameToDIE                           m_function_fullname_index;  // All concrete functions
32074124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    NameToDIE                           m_function_method_index;    // All inlined functions
32174124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton    NameToDIE                           m_function_selector_index;  // All method names for functions of classes
322ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton    NameToDIE                           m_objc_class_selectors_index; // Given a class name, find all selectors for the class
323fcf06fb0b608f09477d7984938255ebf8f92d0daGreg Clayton    NameToDIE                           m_global_index;                 // Global and static variables
324fcf06fb0b608f09477d7984938255ebf8f92d0daGreg Clayton    NameToDIE                           m_type_index;                  // All type DIE offsets
325fcf06fb0b608f09477d7984938255ebf8f92d0daGreg Clayton    NameToDIE                           m_namespace_index;              // All type DIE offsets
32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_indexed;
32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<DWARFDebugRanges>     m_ranges;
32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef llvm::DenseMap<const DWARFDebugInfoEntry *, clang::DeclContext *> DIEToDeclContextMap;
3314fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb_private::Type *> DIEToTypePtr;
3324fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb::VariableSP> DIEToVariableSP;
333462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb::clang_type_t> DIEToClangType;
334462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    typedef llvm::DenseMap<lldb::clang_type_t, const DWARFDebugInfoEntry *> ClangTypeToDIE;
33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DIEToDeclContextMap m_die_to_decl_ctx;
3364fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    DIEToTypePtr m_die_to_type;
3374fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton    DIEToVariableSP m_die_to_variable_sp;
338462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    DIEToClangType m_forward_decl_die_to_clang_type;
339462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    ClangTypeToDIE m_forward_decl_clang_type_to_die;
34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_SymbolFileDWARF_h_
343