SymbolFileDWARF.h revision 0be1edd34ff46e017b1b973c5a57e3de9f613baf
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 <memory> 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <map> 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" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton#include "lldb/lldb-private.h" 27e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton#include "lldb/Core/ClangForward.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ConstString.h" 29ccfba727178bb919cdff3365839bed9584df2560Jason Molenda#include "lldb/Core/dwarf.h" 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataExtractor.h" 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Flags.h" 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UniqueCStringMap.h" 33f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton#include "lldb/Symbol/ClangASTContext.h" 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolFile.h" 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolContext.h" 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDefines.h" 39d74270e83908066c946d150faec9516349e1118bGreg Clayton#include "HashedNameToDIE.h" 4074124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton#include "NameToDIE.h" 41a8d4241dcd129f289710c909491e0e80e7e3d732Greg Clayton#include "UniqueDWARFASTType.h" 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Forward Declarations for this DWARF plugin 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFAbbreviationDeclaration; 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFAbbreviationDeclarationSet; 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFCompileUnit; 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugAbbrev; 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugAranges; 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugInfo; 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugInfoEntry; 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugLine; 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugPubnames; 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugRanges; 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDIECollection; 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFFormValue; 59ad60bf486dee699dd524225b63271ddc5b6329b9Greg Claytonclass SymbolFileDWARFDebugMap; 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 61444e35b5fdf15a25a427285650f06f1390e62c75Greg Claytonclass SymbolFileDWARF : public lldb_private::SymbolFile, public lldb_private::UserID 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 64f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton friend class SymbolFileDWARFDebugMap; 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Static Functions 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Initialize(); 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Terminate(); 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const char * 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPluginNameStatic(); 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const char * 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPluginDescriptionStatic(); 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb_private::SymbolFile* 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CreateInstance (lldb_private::ObjectFile* obj_file); 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF(lldb_private::ObjectFile* ofile); 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ~SymbolFileDWARF(); 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 89d0b7cfa22722fdaf4111a61d6eeb02a587710e16Sean Callanan virtual uint32_t CalculateAbilities (); 90b01000fd063629facd45044f137446fb748ee179Greg Clayton virtual void InitializeObject(); 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Compile Unit function calls 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual uint32_t GetNumCompileUnits(); 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index); 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc); 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool ParseCompileUnitLineTable (const lldb_private::SymbolContext& sc); 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool ParseCompileUnitSupportFiles (const lldb_private::SymbolContext& sc, lldb_private::FileSpecList& support_files); 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t ParseFunctionBlocks (const lldb_private::SymbolContext& sc); 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t ParseTypes (const lldb_private::SymbolContext& sc); 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t ParseVariablesForContext (const lldb_private::SymbolContext& sc); 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10574124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton virtual lldb_private::Type* ResolveTypeUID(lldb::user_id_t type_uid); 106462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton virtual lldb::clang_type_t ResolveClangOpaqueTypeDefinition (lldb::clang_type_t clang_opaque_type); 107462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 1080be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton virtual lldb_private::Type* ResolveType (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* type_die, bool assert_not_being_parsed = true); 109c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan virtual clang::DeclContext* GetClangDeclContextContainingTypeUID (lldb::user_id_t type_uid); 110c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan virtual clang::DeclContext* GetClangDeclContextForTypeUID (const lldb_private::SymbolContext &sc, lldb::user_id_t type_uid); 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual uint32_t ResolveSymbolContext (const lldb_private::Address& so_addr, uint32_t resolve_scope, lldb_private::SymbolContext& sc); 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris 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); 1140fcec13c6639ab49216fa9447b25888b7bc9ff59Sean 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); 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual uint32_t FindGlobalVariables(const lldb_private::RegularExpression& regex, bool append, uint32_t max_matches, lldb_private::VariableList& variables); 116302d78c71902398ce1f422bd09216dd53a6abb88Sean 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); 117302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan virtual uint32_t FindFunctions(const lldb_private::RegularExpression& regex, bool include_inlines, bool append, lldb_private::SymbolContextList& sc_list); 1180fcec13c6639ab49216fa9447b25888b7bc9ff59Sean 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); 119b01000fd063629facd45044f137446fb748ee179Greg Clayton virtual lldb_private::TypeList * 120b01000fd063629facd45044f137446fb748ee179Greg Clayton GetTypeList (); 121b01000fd063629facd45044f137446fb748ee179Greg Clayton virtual lldb_private::ClangASTContext & 122b01000fd063629facd45044f137446fb748ee179Greg Clayton GetClangASTContext (); 123b01000fd063629facd45044f137446fb748ee179Greg Clayton 1246916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton virtual lldb_private::ClangNamespaceDecl 125d7cb26e87841731c6452a9f2e997ed0f9c92625cGreg Clayton FindNamespace (const lldb_private::SymbolContext& sc, 1260fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan const lldb_private::ConstString &name, 1270fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan const lldb_private::ClangNamespaceDecl *parent_namespace_decl); 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 129b01000fd063629facd45044f137446fb748ee179Greg Clayton 130b01000fd063629facd45044f137446fb748ee179Greg Clayton //------------------------------------------------------------------ 131b01000fd063629facd45044f137446fb748ee179Greg Clayton // ClangASTContext callbacks for external source lookups. 132b01000fd063629facd45044f137446fb748ee179Greg Clayton //------------------------------------------------------------------ 133b01000fd063629facd45044f137446fb748ee179Greg Clayton static void 134b01000fd063629facd45044f137446fb748ee179Greg Clayton CompleteTagDecl (void *baton, clang::TagDecl *); 135b01000fd063629facd45044f137446fb748ee179Greg Clayton 136b01000fd063629facd45044f137446fb748ee179Greg Clayton static void 137b01000fd063629facd45044f137446fb748ee179Greg Clayton CompleteObjCInterfaceDecl (void *baton, clang::ObjCInterfaceDecl *); 138e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 139e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton static void 140e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton FindExternalVisibleDeclsByName (void *baton, 141e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton const clang::DeclContext *DC, 142e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton clang::DeclarationName Name, 143e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton llvm::SmallVectorImpl <clang::NamedDecl *> *results); 144b01000fd063629facd45044f137446fb748ee179Greg Clayton 1453fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton static bool 1463fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton LayoutRecordType (void *baton, 1473fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton const clang::RecordDecl *record_decl, 1483fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton uint64_t &size, 1493fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton uint64_t &alignment, 1503fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton llvm::DenseMap <const clang::FieldDecl *, uint64_t> &field_offsets, 1513fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &base_offsets, 1523fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> &vbase_offsets); 1533fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton 1543fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton bool 1553fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton LayoutRecordType (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 struct LayoutInfo 1633fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton { 1643fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton LayoutInfo () : 1653fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton bit_size(0), 1663fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton alignment(0), 1673fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton field_offsets()//, 1683fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton //base_offsets(), // We don't need to fill in the base classes, this can be done automatically 1693fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton //vbase_offsets() // We don't need to fill in the virtual base classes, this can be done automatically 1703fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton { 1713fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton } 1723fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton uint64_t bit_size; 1733fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton uint64_t alignment; 1743fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton llvm::DenseMap <const clang::FieldDecl *, uint64_t> field_offsets; 1753fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton// llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> base_offsets; 1763fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton// llvm::DenseMap <const clang::CXXRecordDecl *, clang::CharUnits> vbase_offsets; 1773fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton }; 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // PluginInterface protocol 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual const char * 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPluginName(); 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual const char * 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetShortPluginName(); 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual uint32_t 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPluginVersion(); 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Approach 2 - count + accessor 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Index compile units would scan the initial compile units and register 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // them with the module. This would only be done on demand if and only if 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // the compile units were needed. 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //virtual size_t GetCompUnitCount() = 0; 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //virtual CompUnitSP GetCompUnitAtIndex(size_t cu_idx) = 0; 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 197144188bc458a35997d2f2e52206ab69747439073Greg Clayton const lldb_private::DataExtractor& get_debug_abbrev_data (); 198144188bc458a35997d2f2e52206ab69747439073Greg Clayton const lldb_private::DataExtractor& get_debug_aranges_data (); 199144188bc458a35997d2f2e52206ab69747439073Greg Clayton const lldb_private::DataExtractor& get_debug_frame_data (); 200144188bc458a35997d2f2e52206ab69747439073Greg Clayton const lldb_private::DataExtractor& get_debug_info_data (); 201144188bc458a35997d2f2e52206ab69747439073Greg Clayton const lldb_private::DataExtractor& get_debug_line_data (); 202144188bc458a35997d2f2e52206ab69747439073Greg Clayton const lldb_private::DataExtractor& get_debug_loc_data (); 203144188bc458a35997d2f2e52206ab69747439073Greg Clayton const lldb_private::DataExtractor& get_debug_ranges_data (); 204144188bc458a35997d2f2e52206ab69747439073Greg Clayton const lldb_private::DataExtractor& get_debug_str_data (); 205f6e3de2d877dc94120c72624a79e488c9bea5c35Greg Clayton const lldb_private::DataExtractor& get_apple_names_data (); 206f6e3de2d877dc94120c72624a79e488c9bea5c35Greg Clayton const lldb_private::DataExtractor& get_apple_types_data (); 20700db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton const lldb_private::DataExtractor& get_apple_namespaces_data (); 20824a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton const lldb_private::DataExtractor& get_apple_objc_data (); 20900db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugAbbrev* DebugAbbrev(); 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugAbbrev* DebugAbbrev() const; 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugInfo* DebugInfo(); 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfo* DebugInfo() const; 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugRanges* DebugRanges(); 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugRanges* DebugRanges() const; 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::DataExtractor& 221b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton GetCachedSectionData (uint32_t got_flag, 222b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton lldb::SectionType sect_type, 223b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton lldb_private::DataExtractor &data); 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22532a8c7e02b84fbc36ee0fdb553002a1880c8d83eGreg Clayton static bool 22632a8c7e02b84fbc36ee0fdb553002a1880c8d83eGreg Clayton SupportedVersion(uint16_t version); 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::DeclContext * 229b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton GetCachedClangDeclContextForDIE (const DWARFDebugInfoEntry *die) 230b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton { 231b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton DIEToDeclContextMap::iterator pos = m_die_to_decl_ctx.find(die); 232b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton if (pos != m_die_to_decl_ctx.end()) 233b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton return pos->second; 234b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton else 235b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton return NULL; 236b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton } 237b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton 238b523031335a9c1c6c23c0789b5c6522a6a2e2ca1Greg Clayton clang::DeclContext * 239c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan GetClangDeclContextForDIE (const lldb_private::SymbolContext &sc, DWARFCompileUnit *cu, const DWARFDebugInfoEntry *die); 240c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 241c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan clang::DeclContext * 242c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan GetClangDeclContextForDIEOffset (const lldb_private::SymbolContext &sc, dw_offset_t die_offset); 243c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 244c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan clang::DeclContext * 24503fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton GetClangDeclContextContainingDIE (DWARFCompileUnit *cu, 24603fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton const DWARFDebugInfoEntry *die, 24703fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton const DWARFDebugInfoEntry **decl_ctx_die); 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::DeclContext * 250c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan GetClangDeclContextContainingDIEOffset (dw_offset_t die_offset); 2516c19c8a7da08b89ee153d7091aa8641348e0482cGreg Clayton 2526c19c8a7da08b89ee153d7091aa8641348e0482cGreg Clayton const DWARFDebugInfoEntry * 2536c19c8a7da08b89ee153d7091aa8641348e0482cGreg Clayton GetDeclContextDIEContainingDIE (DWARFCompileUnit *cu, const DWARFDebugInfoEntry *die); 2546c19c8a7da08b89ee153d7091aa8641348e0482cGreg Clayton 255e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton void 2569b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan SearchDeclContext (const clang::DeclContext *decl_context, 2579b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan const char *name, 2589b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan llvm::SmallVectorImpl <clang::NamedDecl *> *results); 2599b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::Flags& 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlags () 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_flags; 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::Flags& 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlags () const 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_flags; 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 272b01000fd063629facd45044f137446fb748ee179Greg Clayton bool 273b01000fd063629facd45044f137446fb748ee179Greg Clayton HasForwardDeclForClangType (lldb::clang_type_t clang_type); 274b01000fd063629facd45044f137446fb748ee179Greg Clayton 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugAbbrevData = (1 << 0), 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugArangesData = (1 << 1), 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugFrameData = (1 << 2), 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugInfoData = (1 << 3), 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugLineData = (1 << 4), 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugLocData = (1 << 5), 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugMacInfoData = (1 << 6), 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugPubNamesData = (1 << 7), 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugPubTypesData = (1 << 8), 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flagsGotDebugRangesData = (1 << 9), 289c8cf5e234be554d4acb6ae644a8269c303c4f56eGreg Clayton flagsGotDebugStrData = (1 << 10), 29024a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton flagsGotAppleNamesData = (1 << 11), 29124a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton flagsGotAppleTypesData = (1 << 12), 29224a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton flagsGotAppleNamespacesData = (1 << 13), 29324a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton flagsGotAppleObjCData = (1 << 14) 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 29582770e0df481f30c46fb7e905e99b45c1e6d31c8Greg Clayton 296db29bba117a0ea75b89c1280722225a3197b4313Greg Clayton bool NamespaceDeclMatchesThisSymbolFile (const lldb_private::ClangNamespaceDecl *namespace_decl); 297db29bba117a0ea75b89c1280722225a3197b4313Greg Clayton 29882770e0df481f30c46fb7e905e99b45c1e6d31c8Greg Clayton bool DIEIsInNamespace (const lldb_private::ClangNamespaceDecl *namespace_decl, 2990be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton DWARFCompileUnit* dwarf_cu, 30082770e0df481f30c46fb7e905e99b45c1e6d31c8Greg Clayton const DWARFDebugInfoEntry* die); 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (SymbolFileDWARF); 3030be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton lldb::CompUnitSP ParseCompileUnit (DWARFCompileUnit* dwarf_cu, uint32_t cu_idx); 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFCompileUnit* GetDWARFCompileUnitForUID(lldb::user_id_t cu_uid); 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFCompileUnit* GetNextUnparsedDWARFCompileUnit(DWARFCompileUnit* prev_cu); 3060be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton lldb_private::CompileUnit* GetCompUnitForDWARFCompUnit(DWARFCompileUnit* dwarf_cu, uint32_t cu_idx = UINT32_MAX); 3070be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton bool GetFunction (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* func_die, lldb_private::SymbolContext& sc); 3081d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton lldb_private::Function * ParseCompileUnitFunction (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die); 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t ParseFunctionBlocks (const lldb_private::SymbolContext& sc, 31075ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton lldb_private::Block *parent_block, 3111d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton DWARFCompileUnit* dwarf_cu, 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry *die, 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t subprogram_low_pc, 3142e45b0c3f6a6021aa7c064f715144599a2a712a0Greg Clayton uint32_t depth); 3151d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton size_t ParseTypes (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die, bool parse_siblings, bool parse_children); 316462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::TypeSP ParseType (const lldb_private::SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die, bool *type_is_new); 3170be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton lldb_private::Type* ResolveTypeUID (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* die, bool assert_not_being_parsed); 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::VariableSP ParseVariableDIE( 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::SymbolContext& sc, 3211d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton DWARFCompileUnit* dwarf_cu, 322178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton const DWARFDebugInfoEntry *die, 323178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton const lldb::addr_t func_low_pc); 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t ParseVariables( 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::SymbolContext& sc, 3271d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton DWARFCompileUnit* dwarf_cu, 328178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton const lldb::addr_t func_low_pc, 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry *die, 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool parse_siblings, 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool parse_children, 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::VariableList* cc_variable_list = NULL); 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t ParseChildMembers( 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::SymbolContext& sc, 3361d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton DWARFCompileUnit* dwarf_cu, 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry *die, 338462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::clang_type_t class_clang_type, 3399488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton const lldb::LanguageType class_language, 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<clang::CXXBaseSpecifier *>& base_classes, 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<int>& member_accessibilities, 342b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton DWARFDIECollection& member_function_dies, 34370a4f92d0e5f605c8ed1662fa959d465c96b0fb9Sean Callanan lldb::AccessType &default_accessibility, 3443fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton bool &is_a_class, 3453fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton LayoutInfo &layout_info); 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t ParseChildParameters( 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::SymbolContext& sc, 349c5dca6c656ffc94d2f958c56d7bc9076eac90783Greg Clayton clang::DeclContext *containing_decl_ctx, 3501d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton DWARFCompileUnit* dwarf_cu, 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry *parent_die, 352412440aa3a110e4068ee99729f7883c828fb3dceGreg Clayton bool skip_artificial, 35399309909259eacf4693458bfe44f913c316a09c6Sean Callanan bool &is_static, 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::TypeList* type_list, 355462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton std::vector<lldb::clang_type_t>& function_args, 3562403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton std::vector<clang::ParmVarDecl*>& function_param_decls, 357b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton unsigned &type_quals, 358b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos); 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t ParseChildEnumerators( 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::SymbolContext& sc, 362462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::clang_type_t enumerator_qual_type, 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t enumerator_byte_size, 3641d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton DWARFCompileUnit* dwarf_cu, 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry *enum_die); 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void ParseChildArrayInfo( 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::SymbolContext& sc, 3691d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton DWARFCompileUnit* dwarf_cu, 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry *parent_die, 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int64_t& first_index, 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<uint64_t>& element_orders, 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t& byte_stride, 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t& bit_stride); 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3768b7b2276132c7353cabd22000287b42badc26613Jim Ingham // Given a die_offset, figure out the symbol context representing that die. 3777a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton bool ResolveFunction (dw_offset_t offset, 3787a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton DWARFCompileUnit *&dwarf_cu, 3797a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton lldb_private::SymbolContextList& sc_list); 3807a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton 3817a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton bool ResolveFunction (DWARFCompileUnit *cu, 3827a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton const DWARFDebugInfoEntry *die, 3837a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton lldb_private::SymbolContextList& sc_list); 3847a1e5da2bcea7ec37dff72591892015da1f9e125Greg Clayton 3858b7b2276132c7353cabd22000287b42badc26613Jim Ingham bool FunctionDieMatchesPartialName ( 3868b7b2276132c7353cabd22000287b42badc26613Jim Ingham const DWARFDebugInfoEntry* die, 3878b7b2276132c7353cabd22000287b42badc26613Jim Ingham const DWARFCompileUnit *dwarf_cu, 3888b7b2276132c7353cabd22000287b42badc26613Jim Ingham uint32_t name_type_mask, 3898b7b2276132c7353cabd22000287b42badc26613Jim Ingham const char *partial_name, 3908b7b2276132c7353cabd22000287b42badc26613Jim Ingham const char *base_name_start, 3918b7b2276132c7353cabd22000287b42badc26613Jim Ingham const char *base_name_end); 392d74270e83908066c946d150faec9516349e1118bGreg Clayton 39312bec71b323dc520f0e985a86e09c4712559e115Greg Clayton void FindFunctions( 39412bec71b323dc520f0e985a86e09c4712559e115Greg Clayton const lldb_private::ConstString &name, 39574124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton const NameToDIE &name_to_die, 39674124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton lldb_private::SymbolContextList& sc_list); 39774124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton 39874124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton void FindFunctions ( 39974124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton const lldb_private::RegularExpression ®ex, 40074124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton const NameToDIE &name_to_die, 40112bec71b323dc520f0e985a86e09c4712559e115Greg Clayton lldb_private::SymbolContextList& sc_list); 40212bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 40300db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton void FindFunctions ( 40400db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton const lldb_private::RegularExpression ®ex, 40500db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton const DWARFMappedHash::MemoryTable &memory_table, 40600db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton lldb_private::SymbolContextList& sc_list); 40700db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton 40895e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton lldb::TypeSP FindDefinitionTypeForDIE ( 4090be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton DWARFCompileUnit* dwarf_cu, 41095e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton const DWARFDebugInfoEntry *die, 41195e33b7b4b832ff5a8dfd0720fe6a100be894df6Greg Clayton const lldb_private::ConstString &type_name); 41277917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton 41377917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton lldb::TypeSP FindCompleteObjCDefinitionTypeForDIE ( 41477917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton const DWARFDebugInfoEntry *die, 415e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton const lldb_private::ConstString &type_name, 416e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton bool must_be_implementation); 417e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton 418e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton bool Supports_DW_AT_APPLE_objc_complete_type (DWARFCompileUnit *cu); 419e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton 420e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton lldb::TypeSP FindCompleteObjCDefinitionType (const lldb_private::ConstString &type_name, 421e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton bool header_definition_ok); 42277917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton 42377917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton lldb_private::Symbol * GetObjCClassSymbol (const lldb_private::ConstString &objc_class_name); 42477917228890a15d40ec6dd28c5865dd1b7895053Greg Clayton 42500db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton void ParseFunctions (const DIEArray &die_offsets, 42600db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton lldb_private::SymbolContextList& sc_list); 4274fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton lldb::TypeSP GetTypeForDIE (DWARFCompileUnit *cu, 428462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton const DWARFDebugInfoEntry* die); 4294fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton 430960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton uint32_t FindTypes(std::vector<dw_offset_t> die_offsets, uint32_t max_matches, lldb_private::TypeList& types); 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Index(); 4339b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan 4349b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan void DumpIndexes(); 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 436ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton void SetDebugMapSymfile (SymbolFileDWARFDebugMap *debug_map_symfile) 437ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton { 438ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton m_debug_map_symfile = debug_map_symfile; 439ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton } 440ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton 4411bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton const DWARFDebugInfoEntry * 4421bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton FindBlockContainingSpecification (dw_offset_t func_die_offset, 4431bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton dw_offset_t spec_block_die_offset, 4441bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton DWARFCompileUnit **dwarf_cu_handle); 4451bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton 4461bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton const DWARFDebugInfoEntry * 4471bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton FindBlockContainingSpecification (DWARFCompileUnit* dwarf_cu, 4481bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton const DWARFDebugInfoEntry *die, 4491bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton dw_offset_t spec_block_die_offset, 4501bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton DWARFCompileUnit **dwarf_cu_handle); 4511bd2b2feb7694e06b9a971063c283f9c490479d2Greg Clayton 452d7cb26e87841731c6452a9f2e997ed0f9c92625cGreg Clayton clang::NamespaceDecl * 453d7cb26e87841731c6452a9f2e997ed0f9c92625cGreg Clayton ResolveNamespaceDIE (DWARFCompileUnit *curr_cu, const DWARFDebugInfoEntry *die); 454d7cb26e87841731c6452a9f2e997ed0f9c92625cGreg Clayton 455c3c4661c6a7527580e605dbb69bef7634971fe13Greg Clayton UniqueDWARFASTTypeMap & 456c3c4661c6a7527580e605dbb69bef7634971fe13Greg Clayton GetUniqueDWARFASTTypeMap (); 457c3c4661c6a7527580e605dbb69bef7634971fe13Greg Clayton 458e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton void LinkDeclContextToDIE (clang::DeclContext *decl_ctx, 459e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton const DWARFDebugInfoEntry *die) 460e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton { 461e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton m_die_to_decl_ctx[die] = decl_ctx; 46203fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton // There can be many DIEs for a single decl context 46303fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton m_decl_ctx_to_die[decl_ctx].insert(die); 464e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton } 465e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 466444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton bool 467444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton UserIDMatches (lldb::user_id_t uid) const 468444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton { 469444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton const lldb::user_id_t high_uid = uid & 0xffffffff00000000ull; 470444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton if (high_uid) 471444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton return high_uid == GetID(); 472444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton return true; 473444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton } 474b5c023af6df0f4f9eddd14284ca986f578c6bee2Greg Clayton 475444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton lldb::user_id_t 476444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton MakeUserID (dw_offset_t die_offset) const 477444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton { 478444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton return GetID() | die_offset; 479444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton } 480444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton 481f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton static bool 482f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton DeclKindIsCXXClass (clang::Decl::Kind decl_kind) 483f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton { 484f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton switch (decl_kind) 485f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton { 486f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton case clang::Decl::CXXRecord: 487f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton case clang::Decl::ClassTemplateSpecialization: 488f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton return true; 489f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton default: 490f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton break; 491f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton } 492f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton return false; 493f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton } 494f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 495f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton bool 496f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton ParseTemplateParameterInfos (DWARFCompileUnit* dwarf_cu, 497f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton const DWARFDebugInfoEntry *parent_die, 498f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos); 499f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 500b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton bool 501b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton ParseTemplateDIE (DWARFCompileUnit* dwarf_cu, 502b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton const DWARFDebugInfoEntry *die, 503b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos); 504b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton 505f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton clang::ClassTemplateDecl * 506f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton ParseClassTemplateDecl (clang::DeclContext *decl_ctx, 5075e8eb5c428e91b99f3884b53fc5deea0ecb001cdGreg Clayton lldb::AccessType access_type, 508f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton const char *parent_name, 509f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton int tag_decl_kind, 510f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton const lldb_private::ClangASTContext::TemplateParameterInfos &template_param_infos); 511f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 512b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton bool 513b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton DIEDeclContextsMatch (DWARFCompileUnit* cu1, const DWARFDebugInfoEntry *die1, 514b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton DWARFCompileUnit* cu2, const DWARFDebugInfoEntry *die2); 515f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 516e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton SymbolFileDWARFDebugMap * m_debug_map_symfile; 517e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton clang::TranslationUnitDecl * m_clang_tu_decl; 51824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::Flags m_flags; 51924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DataExtractor m_dwarf_data; 52024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DataExtractor m_data_debug_abbrev; 521144188bc458a35997d2f2e52206ab69747439073Greg Clayton lldb_private::DataExtractor m_data_debug_aranges; 52224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DataExtractor m_data_debug_frame; 52324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DataExtractor m_data_debug_info; 52424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DataExtractor m_data_debug_line; 52524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DataExtractor m_data_debug_loc; 52624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DataExtractor m_data_debug_ranges; 52724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DataExtractor m_data_debug_str; 528f6e3de2d877dc94120c72624a79e488c9bea5c35Greg Clayton lldb_private::DataExtractor m_data_apple_names; 529f6e3de2d877dc94120c72624a79e488c9bea5c35Greg Clayton lldb_private::DataExtractor m_data_apple_types; 53000db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton lldb_private::DataExtractor m_data_apple_namespaces; 53124a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton lldb_private::DataExtractor m_data_apple_objc; 53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 53324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The auto_ptr items below are generated on demand if and when someone accesses 53424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // them through a non const version of this class. 53524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::auto_ptr<DWARFDebugAbbrev> m_abbr; 53624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::auto_ptr<DWARFDebugInfo> m_info; 53724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::auto_ptr<DWARFDebugLine> m_line; 53800db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton std::auto_ptr<DWARFMappedHash::MemoryTable> m_apple_names_ap; 53900db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton std::auto_ptr<DWARFMappedHash::MemoryTable> m_apple_types_ap; 54000db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton std::auto_ptr<DWARFMappedHash::MemoryTable> m_apple_namespaces_ap; 54124a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton std::auto_ptr<DWARFMappedHash::MemoryTable> m_apple_objc_ap; 54274124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton NameToDIE m_function_basename_index; // All concrete functions 54374124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton NameToDIE m_function_fullname_index; // All concrete functions 54474124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton NameToDIE m_function_method_index; // All inlined functions 54574124754d6d8ffda5bdaef8ac87e7faaeef3b358Greg Clayton NameToDIE m_function_selector_index; // All method names for functions of classes 546ad60bf486dee699dd524225b63271ddc5b6329b9Greg Clayton NameToDIE m_objc_class_selectors_index; // Given a class name, find all selectors for the class 54700db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton NameToDIE m_global_index; // Global and static variables 54800db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton NameToDIE m_type_index; // All type DIE offsets 54900db215522a0cf31082d26d7ab30d2aa30965acfGreg Clayton NameToDIE m_namespace_index; // All type DIE offsets 550e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton bool m_indexed:1, 551e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton m_is_external_ast_source:1, 552e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton m_using_apple_tables:1; 553e6b976d3f1c42f18c85c87cb179954af7df5a542Greg Clayton lldb_private::LazyBool m_supports_DW_AT_APPLE_objc_complete_type; 55424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::auto_ptr<DWARFDebugRanges> m_ranges; 556a8d4241dcd129f289710c909491e0e80e7e3d732Greg Clayton UniqueDWARFASTTypeMap m_unique_ast_type_map; 55703fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton typedef llvm::SmallPtrSet<const DWARFDebugInfoEntry *, 4> DIEPointerSet; 55824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef llvm::DenseMap<const DWARFDebugInfoEntry *, clang::DeclContext *> DIEToDeclContextMap; 55903fd0d013cbd82ddcb3053a5add8f1f9891eeec5Greg Clayton typedef llvm::DenseMap<const clang::DeclContext *, DIEPointerSet> DeclContextToDIEMap; 5604fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb_private::Type *> DIEToTypePtr; 5614fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb::VariableSP> DIEToVariableSP; 562462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb::clang_type_t> DIEToClangType; 563462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton typedef llvm::DenseMap<lldb::clang_type_t, const DWARFDebugInfoEntry *> ClangTypeToDIE; 5643fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton typedef llvm::DenseMap<const clang::RecordDecl *, LayoutInfo> RecordDeclToLayoutMap; 56524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DIEToDeclContextMap m_die_to_decl_ctx; 566e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton DeclContextToDIEMap m_decl_ctx_to_die; 5674fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton DIEToTypePtr m_die_to_type; 5684fb400f4dc762fb92f9dcf1f6a7656ed12b09a75Greg Clayton DIEToVariableSP m_die_to_variable_sp; 569462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton DIEToClangType m_forward_decl_die_to_clang_type; 570462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton ClangTypeToDIE m_forward_decl_clang_type_to_die; 5713fc0c4f12b19f1e2bd276d2b6eb0fdd096a01414Greg Clayton RecordDeclToLayoutMap m_record_decl_to_layout_map; 57224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 57324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 574144188bc458a35997d2f2e52206ab69747439073Greg Clayton#endif // SymbolFileDWARF_SymbolFileDWARF_h_ 575