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 ®ex, 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