Module.h revision 178710cd4307f3d44dc76ebd70fc7daf7ebe17c5
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Module.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_Module_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Module_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ArchSpec.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Section.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UUID.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/ObjectFile.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/Mutex.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/TimeValue.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/CompileUnit.h" 201674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#include "lldb/Symbol/SymbolContext.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Symtab.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/TypeList.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class Module Module.h "lldb/Core/Module.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A class that describes an executable image and its associated 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// object and symbol files. 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The module is designed to be able to select a single slice of an 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// executable image as it would appear on disk and during program 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// execution. 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Modules control when and if information is parsed according to which 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// accessors are called. For example the object file (ObjectFile) 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// representation will only be parsed if the object file is requested 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// using the Module::GetObjectFile() is called. The debug symbols 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// will only be parsed if the symbol vendor (SymbolVendor) is 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// requested using the Module::GetSymbolVendor() is called. 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The module will parse more detailed information as more queries are 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// made. 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Module : 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public SymbolContextScope 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class ModuleList; 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend bool ObjectFile::SetModulesArchitecture (const ArchSpec &new_arch); 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with file specification and architecture. 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clients that wish to share modules with other targets should 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// use ModuleList::GetSharedModule(). 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] file_spec 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The file specification for the on disk repesentation of 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this executable image. 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] arch 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The architecture to set as the current architecture in 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this module. 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] object_name 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of an object in a module used to extract a module 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// within a module (.a files and modules that contain multiple 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// architectures). 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] object_offset 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The offset within an existing module used to extract a 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// module within a module (.a files and modules that contain 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// multiple architectures). 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Module (const FileSpec& file_spec, 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ArchSpec& arch, 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString *object_name = NULL, 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner off_t object_offset = 0); 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Module (); 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If you have an instance of Module, get its corresponding shared 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// pointer if it has one in the shared module list. 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ModuleSP 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSP (); 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*) 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContextScope 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CalculateSymbolContext (SymbolContext* sc); 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of this object to a Stream. 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Dump a description of the contents of this object to the 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// supplied stream \a s. The dumped content will be only what has 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// been loaded or parsed up to this point at which this function 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is called, so this is a good way to see what has been parsed 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in a module. 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The stream to which to dump the object descripton. 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s); 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @copydoc SymbolContextScope::DumpSymbolContext(Stream*) 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContextScope 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpSymbolContext (Stream *s); 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find a symbol in the object files symbol table. 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the symbol that we are looking for. 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] symbol_type 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If set to eSymbolTypeAny, find a symbol of any type that 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// has a name that matches \a name. If set to any other valid 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolType enumeration value, then search only for 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbols that match \a symbol_type. 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a valid symbol pointer if a symbol was found, 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// NULL otherwise. 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Symbol * 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindFirstSymbolWithNameAndType (const ConstString &name, lldb::SymbolType symbol_type = lldb::eSymbolTypeAny); 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindSymbolsWithNameAndType (const ConstString &name, lldb::SymbolType symbol_type, SymbolContextList &sc_list); 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindSymbolsMatchingRegExAndType (const RegularExpression ®ex, lldb::SymbolType symbol_type, SymbolContextList &sc_list); 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find functions by name. 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the function we are looking for. 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name_type_mask 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A bit mask of bits that indicate what kind of names should 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be used when doing the lookup. Bits include fully qualified 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// names, base names, C++ methods, or ObjC selectors. 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// See FunctionNameType for more details. 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, any matches will be appended to \a 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variable_list, else matches replace the contents of 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a variable_list. 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc_list 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context list that gets filled in with all of the 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matches. 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a sc_list. 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindFunctions (const ConstString &name, uint32_t name_type_mask, bool append, SymbolContextList& sc_list); 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find functions by name. 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] regex 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A regular expression to use when matching the name. 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, any matches will be appended to \a 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variable_list, else matches replace the contents of 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a variable_list. 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc_list 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context list that gets filled in with all of the 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matches. 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a sc_list. 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindFunctions (const RegularExpression& regex, bool append, SymbolContextList& sc_list); 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find global and static variables by name. 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the global or static variable we are looking 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for. 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, any matches will be appended to \a 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variable_list, else matches replace the contents of 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a variable_list. 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] max_matches 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow the number of matches to be limited to \a 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// max_matches. Specify UINT32_MAX to get all possible matches. 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] variable_list 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A list of variables that gets the matches appended to (if 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a append it \b true), or replace (if \a append is \b false). 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a variable_list. 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindGlobalVariables (const ConstString &name, bool append, uint32_t max_matches, VariableList& variable_list); 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find global and static variables by regular exression. 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] regex 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A regular expression to use when matching the name. 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, any matches will be appended to \a 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variable_list, else matches replace the contents of 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a variable_list. 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] max_matches 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow the number of matches to be limited to \a 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// max_matches. Specify UINT32_MAX to get all possible matches. 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] variable_list 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A list of variables that gets the matches appended to (if 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a append it \b true), or replace (if \a append is \b false). 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a variable_list. 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindGlobalVariables (const RegularExpression& regex, bool append, uint32_t max_matches, VariableList& variable_list); 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find types by name. 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] sc 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context that scopes where to extract a type list 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from. 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] name 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the type we are looking for. 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, any matches will be appended to \a 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variable_list, else matches replace the contents of 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a variable_list. 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] max_matches 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow the number of matches to be limited to \a 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// max_matches. Specify UINT32_MAX to get all possible matches. 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] encoding 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Limit the search to specific types, or get all types if 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// set to Type::invalid. 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] udt_name 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the encoding is a user defined type, specify the name 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// of the user defined type ("struct", "union", "class", etc). 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] type_list 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A type list gets populated with any matches. 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a type_list. 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindTypes (const SymbolContext& sc, const ConstString &name, bool append, uint32_t max_matches, TypeList& types); 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find types by name. 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] sc 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context that scopes where to extract a type list 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from. 2906916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] regex 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A regular expression to use when matching the name. 29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] append 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, any matches will be appended to \a 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variable_list, else matches replace the contents of 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a variable_list. 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] max_matches 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow the number of matches to be limited to \a 3016916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// max_matches. Specify UINT32_MAX to get all possible matches. 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] encoding 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Limit the search to specific types, or get all types if 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// set to Type::invalid. 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] udt_name 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the encoding is a user defined type, specify the name 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// of the user defined type ("struct", "union", "class", etc). 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] type_list 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A type list gets populated with any matches. 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches added to \a type_list. 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// uint32_t 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// FindTypes (const SymbolContext& sc, const RegularExpression& regex, bool append, uint32_t max_matches, Type::Encoding encoding, const char *udt_name, TypeList& type_list); 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the module architecture. 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the architecture object. 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ArchSpec& 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetArchitecture () const; 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get const accessor for the module file specification. 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const reference to the file specification object. 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const FileSpec & 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFileSpec () const; 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3396916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton const TimeValue & 3406916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton GetModificationTime () const; 3416916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tells whether this module is capable of being the main executable 3446916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// for a process. 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if it is, \b false otherwise. 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsExecutable (); 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the number of compile units for this module. 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of compile units that the symbol vendor plug-in 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// finds. 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumCompileUnits(); 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::CompUnitSP 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetCompileUnitAtIndex (uint32_t); 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString & 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetObjectName() const; 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3686916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton off_t 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetObjectOffset() const; 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the object file representation for the current architecture. 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the object file has not been located or parsed yet, this 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function will find the best ObjectFile plug-in that can parse 376960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton /// Module::m_file. 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If Module::m_file does not exist, or no plug-in was found 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that can parse the file, or the object file doesn't contain 3816916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// the current architecture in Module::m_arch, NULL will be 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// returned, else a valid object file interface will be 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// returned. The returned pointer is owned by this object and 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// remains valid as long as the object is around. 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ObjectFile * 38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetObjectFile (); 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3896916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton //------------------------------------------------------------------ 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the symbol vendor interface for the current architecture. 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the symbol vendor file has not been located yet, this 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function will find the best SymbolVendor plug-in that can 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// use the current object file. 39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 3966916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// @return 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If this module does not have a valid object file, or no 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// plug-in can be found that can use the object file, NULL will 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be returned, else a valid symbol vendor plug-in interface 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will be returned. The returned pointer is owned by this 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// object and remains valid as long as the object is around. 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolVendor* 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolVendor(bool can_create = true); 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor the type list for this module. 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A valid type list pointer, or NULL if there is no valid 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol vendor for this module. 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TypeList* 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetTypeList (); 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get a pointer to the UUID value contained in this object. 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the executable image file doesn't not have a UUID value built 420462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton /// into the file format, an MD5 checksum of the entire file, or 42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// slice of the file for the current architecture should be used. 42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 423462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton /// @return 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const pointer to the internal copy of the UUID value in 42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this module if this module has a valid UUID value, NULL 42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// otherwise. 42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const UUID & 42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetUUID (); 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4316916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton //------------------------------------------------------------------ 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A debugging function that will cause everything in a module to 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be parsed. 4346916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// All compile units will be pasred, along with all globals and 43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// static variables and all functions for those compile units. 4376916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// All types, scopes, local variables, static variables, global 43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// variables, and line tables will be parsed. This can be used 439462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton /// prior to dumping a module to see a complete list of the 44024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// resuling debug information that gets parsed, or as a debug 44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// function to ensure that the module can consume all of the 4426916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// debug data the symbol vendor provides. 44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 444462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton void 44524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ParseAllDebugSymbols(); 44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 44824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveFileAddress (lldb::addr_t vm_addr, Address& so_addr); 44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveSymbolContextForAddress (const Address& so_addr, uint32_t resolve_scope, SymbolContext& sc); 45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 45424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resolve items in the symbol context for a given file and line. 45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 45624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tries to resolve \a file_path and \a line to a list of matching 45724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol contexts. 45824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 45924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The line table entries contains addresses that can be used to 46024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// further resolve the values in each match: the function, block, 46124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol. Care should be taken to minimize the amount of 46224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information that is requested to only what is needed -- 4636916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// typically the module, compile unit, line table and line table 4641674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton /// entry are sufficient. 46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 4666916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// @param[in] file_path 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A path to a source file to match. If \a file_path does not 46824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// specify a directory, then this query will match all files 46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// whose base filename matches. If \a file_path does specify 47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a directory, the fullpath to the file must match. 4716916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// 47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] line 47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The source line to match, or zero if just the compile unit 47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should be resolved. 47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 4766916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton /// @param[in] check_inlines 47724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check for inline file and line number matches. This option 47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should be used sparingly as it will cause all line tables 47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for every compile unit to be parsed and searched for 48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matching inline file entries. 48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] resolve_scope 48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The scope that should be resolved (see 48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolContext::Scope). 48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc_list 48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context list that gets matching symbols contexts 48824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// appended to. 48924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 49024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 49124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of matches that were added to \a sc_list. 49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContext::Scope 49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveSymbolContextForFilePath (const char *file_path, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list); 49724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 49924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resolve items in the symbol context for a given file and line. 50024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 501a564ec6ffca0561d6a68d331985b5e7a4b46e793Greg Clayton /// Tries to resolve \a file_spec and \a line to a list of matching 50224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol contexts. 50324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 50424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The line table entries contains addresses that can be used to 50524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// further resolve the values in each match: the function, block, 50624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// symbol. Care should be taken to minimize the amount of 50724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// information that is requested to only what is needed -- 50824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// typically the module, compile unit, line table and line table 509a564ec6ffca0561d6a68d331985b5e7a4b46e793Greg Clayton /// entry are sufficient. 51024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 51124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] file_spec 51224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A file spec to a source file to match. If \a file_path does 51324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// not specify a directory, then this query will match all 51424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// files whose base filename matches. If \a file_path does 515a564ec6ffca0561d6a68d331985b5e7a4b46e793Greg Clayton /// specify a directory, the fullpath to the file must match. 51624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 51724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] line 51824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The source line to match, or zero if just the compile unit 519a564ec6ffca0561d6a68d331985b5e7a4b46e793Greg Clayton /// should be resolved. 52024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 52124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] check_inlines 52224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check for inline file and line number matches. This option 52324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// should be used sparingly as it will cause all line tables 52424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for every compile unit to be parsed and searched for 52524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matching inline file entries. 52624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 52724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] resolve_scope 52824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The scope that should be resolved (see 52924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolContext::Scope). 53024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 53124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc_list 53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A symbol context list that gets filled in with all of the 53324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// matches. 53424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 53524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 53624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A integer that contains SymbolContext::Scope bits set for 53724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// each item that was successfully resolved. 53824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 53924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContext::Scope 54024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 54124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 54224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveSymbolContextsForFileSpec (const FileSpec &file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list); 54324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 54424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 54524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 54624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetFileSpecAndObjectName (const FileSpec &file, 54724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString &object_name); 54824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 549eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton bool 55024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIsDynamicLinkEditor () const 551fe9864c516cb8e5b63cf463aecf089b4f9b94ac8Greg Clayton { 55224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_is_dynamic_loader_module; 553fe9864c516cb8e5b63cf463aecf089b4f9b94ac8Greg Clayton } 554fe9864c516cb8e5b63cf463aecf089b4f9b94ac8Greg Clayton 555fe9864c516cb8e5b63cf463aecf089b4f9b94ac8Greg Clayton void 556fe9864c516cb8e5b63cf463aecf089b4f9b94ac8Greg Clayton SetIsDynamicLinkEditor (bool b) 557fe9864c516cb8e5b63cf463aecf089b4f9b94ac8Greg Clayton { 558fe9864c516cb8e5b63cf463aecf089b4f9b94ac8Greg Clayton m_is_dynamic_loader_module = b; 559fe9864c516cb8e5b63cf463aecf089b4f9b94ac8Greg Clayton } 560fe9864c516cb8e5b63cf463aecf089b4f9b94ac8Greg Clayton 56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 56224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 56324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member Variables 56424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 56524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner mutable Mutex m_mutex; ///< A mutex to keep this object happy in multi-threaded environments. 56624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TimeValue m_mod_time; ///< The modification time for this module when it was created. 567a564ec6ffca0561d6a68d331985b5e7a4b46e793Greg Clayton ArchSpec m_arch; ///< The architecture for this module. 56824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UUID m_uuid; ///< Each module is assumed to have a unique identifier to help match it up to debug symbols. 56924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FileSpec m_file; ///< The file representation on disk for this module (if there is one). 57024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString m_object_name; ///< The name an object within this module that is selected, or empty of the module is represented by \a m_file. 57124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::auto_ptr<ObjectFile> m_objfile_ap; ///< A pointer to the object file parser for this module. 57224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::auto_ptr<SymbolVendor> m_symfile_ap; ///< A pointer to the symbol vendor for this module. 57324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool m_did_load_objfile:1, 57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_did_load_symbol_vendor:1, 57524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_did_parse_uuid:1, 57624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_is_dynamic_loader_module:1; 57724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 57824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 579a564ec6ffca0561d6a68d331985b5e7a4b46e793Greg Clayton /// Resolve a file or load virtual address. 58024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 58124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tries to resolve \a vm_addr as a file address (if \a 58224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// vm_addr_is_file_addr is true) or as a load address if \a 58324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// vm_addr_is_file_addr is false) in the symbol vendor. 58424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a resolve_scope indicates what clients wish to resolve 58524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and can be used to limit the scope of what is parsed. 58624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 58724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 58824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The load virtual address to resolve. 58924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 59024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr_is_file_addr 59124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, \a vm_addr is a file address, else \a vm_addr 59224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if a load address. 59324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 59424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] resolve_scope 59524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The scope that should be resolved (see 59624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// SymbolContext::Scope). 59724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 598a564ec6ffca0561d6a68d331985b5e7a4b46e793Greg Clayton /// @param[out] so_addr 59924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The section offset based address that got resolved if 60024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// any bits are returned. 60124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 60224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] sc 60324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The symbol context that has objects filled in. Each bit 60424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the \a resolve_scope pertains to a member in the \a sc. 60524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A integer that contains SymbolContext::Scope bits set for 60824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// each item that was successfully resolved. 60924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 61024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see SymbolContext::Scope 61124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 61224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 61324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveSymbolContextForAddress (lldb::addr_t vm_addr, 61424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool vm_addr_is_file_addr, 61524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t resolve_scope, 61624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Address& so_addr, 61754e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton SymbolContext& sc); 61824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 61924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 62024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolIndicesToSymbolContextList (Symtab *symtab, 62124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<uint32_t> &symbol_indexes, 62224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextList &sc_list); 62324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 62424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 62524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetArchitecture (const ArchSpec &new_arch); 62624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 62724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 62824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (Module); 62924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 63024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 631a564ec6ffca0561d6a68d331985b5e7a4b46e793Greg Clayton} // namespace lldb_private 632a564ec6ffca0561d6a68d331985b5e7a4b46e793Greg Clayton 63324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Module_h_ 63424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner