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 &regex, 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