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/UUID.h"
1549ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Host/FileSpec.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/Mutex.h"
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/TimeValue.h"
18b01000fd063629facd45044f137446fb748ee179Greg Clayton#include "lldb/Symbol/ClangASTContext.h"
1949ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Symbol/SymbolContextScope.h"
20964deba8853eb794e59263322b59b09b43669618Greg Clayton#include "lldb/Target/PathMappingList.h"
21964deba8853eb794e59263322b59b09b43669618Greg Clayton
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24964deba8853eb794e59263322b59b09b43669618Greg Clayton//----------------------------------------------------------------------
25964deba8853eb794e59263322b59b09b43669618Greg Clayton/// @class Module Module.h "lldb/Core/Module.h"
26964deba8853eb794e59263322b59b09b43669618Greg Clayton/// @brief A class that describes an executable image and its associated
27964deba8853eb794e59263322b59b09b43669618Greg Clayton///        object and symbol files.
28964deba8853eb794e59263322b59b09b43669618Greg Clayton///
29964deba8853eb794e59263322b59b09b43669618Greg Clayton/// The module is designed to be able to select a single slice of an
30964deba8853eb794e59263322b59b09b43669618Greg Clayton/// executable image as it would appear on disk and during program
31964deba8853eb794e59263322b59b09b43669618Greg Clayton/// execution.
32964deba8853eb794e59263322b59b09b43669618Greg Clayton///
33964deba8853eb794e59263322b59b09b43669618Greg Clayton/// Modules control when and if information is parsed according to which
34964deba8853eb794e59263322b59b09b43669618Greg Clayton/// accessors are called. For example the object file (ObjectFile)
35964deba8853eb794e59263322b59b09b43669618Greg Clayton/// representation will only be parsed if the object file is requested
36964deba8853eb794e59263322b59b09b43669618Greg Clayton/// using the Module::GetObjectFile() is called. The debug symbols
37964deba8853eb794e59263322b59b09b43669618Greg Clayton/// will only be parsed if the symbol vendor (SymbolVendor) is
38964deba8853eb794e59263322b59b09b43669618Greg Clayton/// requested using the Module::GetSymbolVendor() is called.
39964deba8853eb794e59263322b59b09b43669618Greg Clayton///
40964deba8853eb794e59263322b59b09b43669618Greg Clayton/// The module will parse more detailed information as more queries are
41964deba8853eb794e59263322b59b09b43669618Greg Clayton/// made.
42964deba8853eb794e59263322b59b09b43669618Greg Clayton//----------------------------------------------------------------------
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Module :
44102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    public std::enable_shared_from_this<Module>,
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    public SymbolContextScope
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
48a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain	// Static functions that can track the lifetime of module objects.
49899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton	// This is handy because we might have Module objects that are in
50899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton	// shared pointers that aren't in the global module list (from
51899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton	// ModuleList). If this is the case we need to know about it.
52899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton    // The modules in the global list maintained by these functions
53899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton    // can be viewed using the "target modules list" command using the
54899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton    // "--global" (-g for short).
55899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton    static size_t
56899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton    GetNumberAllocatedModules ();
57899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton
58899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton    static Module *
59899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton    GetAllocatedModuleAtIndex (size_t idx);
60899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton
61c149c8b3a88e5c8a94febdf956551e378c531797Greg Clayton    static Mutex *
62899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton    GetAllocationModuleCollectionMutex();
63899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Construct with file specification and architecture.
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Clients that wish to share modules with other targets should
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// use ModuleList::GetSharedModule().
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] file_spec
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The file specification for the on disk repesentation of
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     this executable image.
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] arch
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The architecture to set as the current architecture in
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     this module.
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] object_name
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The name of an object in a module used to extract a module
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     within a module (.a files and modules that contain multiple
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     architectures).
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] object_offset
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The offset within an existing module used to extract a
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     module within a module (.a files and modules that contain
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     multiple architectures).
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Module (const FileSpec& file_spec,
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            const ArchSpec& arch,
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            const ConstString *object_name = NULL,
910e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton            off_t object_offset = 0,
920e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton            const TimeValue *object_mod_time_ptr = NULL);
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
94444fe998bf707bd076a70c3a779db8575533695eGreg Clayton    Module (const ModuleSpec &module_spec);
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Destructor.
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
98bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton    virtual
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~Module ();
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
101444fe998bf707bd076a70c3a779db8575533695eGreg Clayton    bool
102444fe998bf707bd076a70c3a779db8575533695eGreg Clayton    MatchesModuleSpec (const ModuleSpec &module_ref);
103b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton
104b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    //------------------------------------------------------------------
105b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    /// Set the load address for all sections in a module to be the
106b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    /// file address plus \a slide.
107b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///
108b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    /// Many times a module will be loaded in a target with a constant
109b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    /// offset applied to all top level sections. This function can
110b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    /// set the load address for all top level sections to be the
111b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    /// section file address + offset.
112b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///
113b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    /// @param[in] target
114b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     The target in which to apply the section load addresses.
115b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///
116b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    /// @param[in] offset
117b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     The offset to apply to all file addresses for all top
118b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     level sections in the object file as each section load
119b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     address is being set.
120b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///
121b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    /// @param[out] changed
122b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     If any section load addresses were changed in \a target,
123b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     then \a changed will be set to \b true. Else \a changed
124b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     will be set to false. This allows this function to be
125b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     called multiple times on the same module for the same
126b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     target. If the module hasn't moved, then \a changed will
127b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     be false and no module updated notification will need to
128b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     be sent out.
129b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///
1307dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    /// @return
131b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     /b True if any sections were successfully loaded in \a target,
132b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    ///     /b false otherwise.
133b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    //------------------------------------------------------------------
134b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    bool
135b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    SetLoadAddress (Target &target,
136b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton                    lldb::addr_t offset,
137b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton                    bool &changed);
138b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*)
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see SymbolContextScope
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CalculateSymbolContext (SymbolContext* sc);
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1473508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    virtual lldb::ModuleSP
148c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    CalculateSymbolContextModule ();
149c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton
1507826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    void
15175d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    GetDescription (Stream *s,
15275d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton                    lldb::DescriptionLevel level = lldb::eDescriptionLevelFull);
1537826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
15597a19b21dacd9063bb5475812df7781777262198Greg Clayton    /// Get the module path and object name.
15697a19b21dacd9063bb5475812df7781777262198Greg Clayton    ///
15797a19b21dacd9063bb5475812df7781777262198Greg Clayton    /// Modules can refer to object files. In this case the specification
15897a19b21dacd9063bb5475812df7781777262198Greg Clayton    /// is simple and would return the path to the file:
15997a19b21dacd9063bb5475812df7781777262198Greg Clayton    ///
16097a19b21dacd9063bb5475812df7781777262198Greg Clayton    ///     "/usr/lib/foo.dylib"
16197a19b21dacd9063bb5475812df7781777262198Greg Clayton    ///
16297a19b21dacd9063bb5475812df7781777262198Greg Clayton    /// Modules can be .o files inside of a BSD archive (.a file). In
16397a19b21dacd9063bb5475812df7781777262198Greg Clayton    /// this case, the object specification will look like:
16497a19b21dacd9063bb5475812df7781777262198Greg Clayton    ///
16597a19b21dacd9063bb5475812df7781777262198Greg Clayton    ///     "/usr/lib/foo.a(bar.o)"
16697a19b21dacd9063bb5475812df7781777262198Greg Clayton    ///
16797a19b21dacd9063bb5475812df7781777262198Greg Clayton    /// There are many places where logging wants to log this fully
16897a19b21dacd9063bb5475812df7781777262198Greg Clayton    /// qualified specification, so we centralize this functionality
16997a19b21dacd9063bb5475812df7781777262198Greg Clayton    /// here.
17097a19b21dacd9063bb5475812df7781777262198Greg Clayton    ///
17197a19b21dacd9063bb5475812df7781777262198Greg Clayton    /// @return
17297a19b21dacd9063bb5475812df7781777262198Greg Clayton    ///     The object path + object name if there is one.
17397a19b21dacd9063bb5475812df7781777262198Greg Clayton    //------------------------------------------------------------------
17497a19b21dacd9063bb5475812df7781777262198Greg Clayton    std::string
17597a19b21dacd9063bb5475812df7781777262198Greg Clayton    GetSpecificationDescription () const;
17697a19b21dacd9063bb5475812df7781777262198Greg Clayton
17797a19b21dacd9063bb5475812df7781777262198Greg Clayton    //------------------------------------------------------------------
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Dump a description of this object to a Stream.
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Dump a description of the contents of this object to the
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// supplied stream \a s. The dumped content will be only what has
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// been loaded or parsed up to this point at which this function
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// is called, so this is a good way to see what has been parsed
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// in a module.
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] s
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The stream to which to dump the object descripton.
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Dump (Stream *s);
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @copydoc SymbolContextScope::DumpSymbolContext(Stream*)
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see SymbolContextScope
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DumpSymbolContext (Stream *s);
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2002fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2022fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    /// Find a symbol in the object file's symbol table.
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] name
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The name of the symbol that we are looking for.
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] symbol_type
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     If set to eSymbolTypeAny, find a symbol of any type that
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     has a name that matches \a name. If set to any other valid
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     SymbolType enumeration value, then search only for
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     symbols that match \a symbol_type.
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns a valid symbol pointer if a symbol was found,
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     NULL otherwise.
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const Symbol *
21828d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton    FindFirstSymbolWithNameAndType (const ConstString &name,
219b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton                                    lldb::SymbolType symbol_type = lldb::eSymbolTypeAny);
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
2223e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    FindSymbolsWithNameAndType (const ConstString &name,
223b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton                                lldb::SymbolType symbol_type,
22428d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                                SymbolContextList &sc_list);
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
22728d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton    FindSymbolsMatchingRegExAndType (const RegularExpression &regex,
228b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton                                     lldb::SymbolType symbol_type,
22928d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                                     SymbolContextList &sc_list);
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2322fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    /// Find a funciton symbols in the object file's symbol table.
2332fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///
2342fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    /// @param[in] name
2352fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///     The name of the symbol that we are looking for.
2362fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///
2372fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    /// @param[in] name_type_mask
2382fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///     A mask that has one or more bitwise OR'ed values from the
2392fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///     lldb::FunctionNameType enumeration type that indicate what
2402fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///     kind of names we are looking for.
2412fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///
2422fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    /// @param[out] sc_list
2432fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///     A list to append any matching symbol contexts to.
2442fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///
2452fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    /// @return
2462fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    ///     The number of symbol contexts that were added to \a sc_list
2472fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    //------------------------------------------------------------------
2482fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    size_t
2492fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    FindFunctionSymbols (const ConstString &name,
2502fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton                         uint32_t name_type_mask,
2512fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton                         SymbolContextList& sc_list);
2522fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton
2532fcbf6e3d86ac0e6a95e11e5e232a9f72bd612d2Greg Clayton    //------------------------------------------------------------------
254801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    /// Find compile units by partial or full path.
255801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///
256801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    /// Finds all compile units that match \a path in all of the modules
257801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    /// and returns the results in \a sc_list.
258801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///
259801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    /// @param[in] path
260801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///     The name of the function we are looking for.
261801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///
262801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    /// @param[in] append
263801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///     If \b true, then append any compile units that were found
264801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///     to \a sc_list. If \b false, then the \a sc_list is cleared
265801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///     and the contents of \a sc_list are replaced.
266801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///
267801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    /// @param[out] sc_list
268801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///     A symbol context list that gets filled in with all of the
269801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///     matches.
270801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///
271801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    /// @return
272801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    ///     The number of matches added to \a sc_list.
273801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    //------------------------------------------------------------------
27436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    size_t
275801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    FindCompileUnits (const FileSpec &path,
276801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton                      bool append,
277801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton                      SymbolContextList &sc_list);
278801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton
279801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton
280801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton    //------------------------------------------------------------------
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Find functions by name.
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
2831dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    /// If the function is an inlined function, it will have a block,
2841dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    /// representing the inlined function, and the function will be the
2851dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    /// containing function.  If it is not inlined, then the block will
2861dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    /// be NULL.
2871dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    ///
28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] name
289336dc6006ec498007db726614eefc7cacfe43e1dJim Ingham    ///     The name of the compile unit we are looking for.
29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
2913e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    /// @param[in] namespace_decl
2923e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    ///     If valid, a namespace to search in.
2933e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    ///
29412bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    /// @param[in] name_type_mask
29512bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    ///     A bit mask of bits that indicate what kind of names should
29612bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    ///     be used when doing the lookup. Bits include fully qualified
29712bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    ///     names, base names, C++ methods, or ObjC selectors.
29812bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    ///     See FunctionNameType for more details.
29912bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    ///
30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] append
301cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     If \b true, any matches will be appended to \a sc_list, else
302cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     matches replace the contents of \a sc_list.
30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[out] sc_list
30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A symbol context list that gets filled in with all of the
30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     matches.
30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of matches added to \a sc_list.
31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
31136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    size_t
3123e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    FindFunctions (const ConstString &name,
3133e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan                   const ClangNamespaceDecl *namespace_decl,
31428d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                   uint32_t name_type_mask,
315302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan                   bool symbols_ok,
316302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan                   bool inlines_ok,
31728d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                   bool append,
31828d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                   SymbolContextList& sc_list);
31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Find functions by name.
32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
3231dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    /// If the function is an inlined function, it will have a block,
3241dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    /// representing the inlined function, and the function will be the
3251dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    /// containing function.  If it is not inlined, then the block will
3261dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    /// be NULL.
3271dca63469790d5dc677e4aa99403c3c72b97634dJim Ingham    ///
32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] regex
32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A regular expression to use when matching the name.
33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] append
332cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     If \b true, any matches will be appended to \a sc_list, else
333cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     matches replace the contents of \a sc_list.
33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[out] sc_list
33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A symbol context list that gets filled in with all of the
33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     matches.
33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of matches added to \a sc_list.
34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
34236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    size_t
34328d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton    FindFunctions (const RegularExpression& regex,
34428d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                   bool symbols_ok,
345302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan                   bool inlines_ok,
34628d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                   bool append,
34728d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                   SymbolContextList& sc_list);
34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Find global and static variables by name.
35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] name
35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The name of the global or static variable we are looking
35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     for.
35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
3563e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    /// @param[in] namespace_decl
3573e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    ///     If valid, a namespace to search in.
3583e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    ///
35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] append
36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     If \b true, any matches will be appended to \a
36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     variable_list, else matches replace the contents of
36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \a variable_list.
36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] max_matches
36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Allow the number of matches to be limited to \a
366178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton    ///     max_matches. Specify UINT32_MAX to get all possible matches.
36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] variable_list
36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A list of variables that gets the matches appended to (if
37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \a append it \b true), or replace (if \a append is \b false).
37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of matches added to \a variable_list.
37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
37536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    size_t
3763e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    FindGlobalVariables (const ConstString &name,
3773e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan                         const ClangNamespaceDecl *namespace_decl,
37828d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                         bool append,
37936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                         size_t max_matches,
38028d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                         VariableList& variable_list);
38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Find global and static variables by regular exression.
38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] regex
38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A regular expression to use when matching the name.
38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] append
38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     If \b true, any matches will be appended to \a
39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     variable_list, else matches replace the contents of
39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \a variable_list.
39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] max_matches
39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Allow the number of matches to be limited to \a
395178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton    ///     max_matches. Specify UINT32_MAX to get all possible matches.
39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] variable_list
39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A list of variables that gets the matches appended to (if
39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \a append it \b true), or replace (if \a append is \b false).
40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of matches added to \a variable_list.
40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
40436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    size_t
40528d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton    FindGlobalVariables (const RegularExpression& regex,
40628d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                         bool append,
40736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                         size_t max_matches,
40828d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton                         VariableList& variable_list);
40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Find types by name.
41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
413dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// Type lookups in modules go through the SymbolVendor (which will
414dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// use one or more SymbolFile subclasses). The SymbolFile needs to
415dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// be able to lookup types by basename and not the fully qualified
416dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// typename. This allows the type accelerator tables to stay small,
417dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// even with heavily templatized C++. The type search will then
418dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// narrow down the search results. If "exact_match" is true, then
419dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// the type search will only match exact type name matches. If
420dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// "exact_match" is false, the type will match as long as the base
421dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// typename matches and as long as any immediate containing
422dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// namespaces/class scopes that are specified match. So to search
423dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// for a type "d" in "b::c", the name "b::c::d" can be specified
424dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// and it will match any class/namespace "b" which contains a
425dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// class/namespace "c" which contains type "d". We do this to
426dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// allow users to not always have to specify complete scoping on
427dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// all expressions, but it also allows for exact matching when
428dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// required.
429dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///
43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] sc
43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A symbol context that scopes where to extract a type list
43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     from.
43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
434dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// @param[in] type_name
435dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     The name of the type we are looking for that is a fully
436dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     or partially qualfieid type name.
43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
438dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// @param[in] exact_match
439dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     If \b true, \a type_name is fully qualifed and must match
440dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     exactly. If \b false, \a type_name is a partially qualfied
441dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     name where the leading namespaces or classes can be
442dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     omitted to make finding types that a user may type
443dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     easier.
4443e80cd9c9e6ae50ff54537551e2fe3ed5319b9b4Sean Callanan    ///
445dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// @param[out] type_list
446dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     A type list gets populated with any matches.
44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
448dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// @return
449dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     The number of matches added to \a type_list.
450dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    //------------------------------------------------------------------
45136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    size_t
452dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    FindTypes (const SymbolContext& sc,
453dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton               const ConstString &type_name,
454dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton               bool exact_match,
45536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton               size_t max_matches,
456dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton               TypeList& types);
457dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton
4580b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton    lldb::TypeSP
4590b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton    FindFirstType (const SymbolContext& sc,
4600b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton                   const ConstString &type_name,
4610b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton                   bool exact_match);
4620b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton
463dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    //------------------------------------------------------------------
464dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// Find types by name that are in a namespace. This function is
465dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// used by the expression parser when searches need to happen in
466dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// an exact namespace scope.
46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
468dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// @param[in] sc
469dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     A symbol context that scopes where to extract a type list
470dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     from.
47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
472dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// @param[in] type_name
473dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     The name of a type within a namespace that should not include
474dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     any qualifying namespaces (just a type basename).
475dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///
476dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    /// @param[in] namespace_decl
477dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    ///     The namespace declaration that this type must exist in.
47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[out] type_list
48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A type list gets populated with any matches.
48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of matches added to \a type_list.
48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
48536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    size_t
486dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    FindTypesInNamespace (const SymbolContext& sc,
487dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton                          const ConstString &type_name,
488dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton                          const ClangNamespaceDecl *namespace_decl,
48936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                          size_t max_matches,
490dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton                          TypeList& type_list);
49124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get const accessor for the module architecture.
49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A const reference to the architecture object.
49724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const ArchSpec&
49924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetArchitecture () const;
50024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
50124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
50224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get const accessor for the module file specification.
50324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
50424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// This function returns the file for the module on the host system
50524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// that is running LLDB. This can differ from the path on the
50624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// platform since we might be doing remote debugging.
50724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    ///
50824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// @return
50924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    ///     A const reference to the file specification object.
51024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    //------------------------------------------------------------------
51124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    const FileSpec &
51224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetFileSpec () const
51324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    {
51424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        return m_file;
51524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    }
51624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
51724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    //------------------------------------------------------------------
51824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// Get accessor for the module platform file specification.
51924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    ///
52024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// Platform file refers to the path of the module as it is known on
52124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// the remote system on which it is being debugged. For local
52224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// debugging this is always the same as Module::GetFileSpec(). But
52324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// remote debugging might mention a file "/usr/lib/liba.dylib"
52424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// which might be locally downloaded and cached. In this case the
52524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// platform file could be something like:
52624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// "/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib"
52724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    /// The file could also be cached in a local developer kit directory.
52824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    ///
52924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
53024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A const reference to the file specification object.
53124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const FileSpec &
53324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetPlatformFileSpec () const
53424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    {
53524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        if (m_platform_file)
53624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton            return m_platform_file;
53724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        return m_file;
53824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    }
53924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
54024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    void
54124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    SetPlatformFileSpec (const FileSpec &file)
54224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    {
54324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        m_platform_file = file;
54424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    }
54524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5463508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    const FileSpec &
5473508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    GetSymbolFileFileSpec () const
5483508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    {
5493508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton        return m_symfile_spec;
5503508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    }
5513508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton
5523508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    void
55381a96aa6242f7b559770f5dc62316253cb8cb0d4Greg Clayton    SetSymbolFileFileSpec (const FileSpec &file);
5543508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton
55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const TimeValue &
5560e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    GetModificationTime () const
5570e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    {
5580e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        return m_mod_time;
5590e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    }
5600e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton
5610e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    const TimeValue &
5620e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    GetObjectModificationTime () const
5630e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    {
5640e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        return m_object_mod_time;
5650e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    }
5660e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton
5670e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    void
5680e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    SetObjectModificationTime (const TimeValue &mod_time)
5690e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    {
5700e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        m_mod_time = mod_time;
5710e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    }
5720e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton
5737508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    //------------------------------------------------------------------
5747508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    /// Tells whether this module is capable of being the main executable
5757508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    /// for a process.
5767508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    ///
5777508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    /// @return
5787508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    ///     \b true if it is, \b false otherwise.
5797508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    //------------------------------------------------------------------
5807508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    bool
5817508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    IsExecutable ();
58251b11e06de746667396f56b303d1867f007baf8bJim Ingham
58351b11e06de746667396f56b303d1867f007baf8bJim Ingham    //------------------------------------------------------------------
58451b11e06de746667396f56b303d1867f007baf8bJim Ingham    /// Tells whether this module has been loaded in the target passed in.
58551b11e06de746667396f56b303d1867f007baf8bJim Ingham    /// This call doesn't distinguish between whether the module is loaded
58651b11e06de746667396f56b303d1867f007baf8bJim Ingham    /// by the dynamic loader, or by a "target module add" type call.
58751b11e06de746667396f56b303d1867f007baf8bJim Ingham    ///
58851b11e06de746667396f56b303d1867f007baf8bJim Ingham    /// @param[in] target
58951b11e06de746667396f56b303d1867f007baf8bJim Ingham    ///    The target to check whether this is loaded in.
59051b11e06de746667396f56b303d1867f007baf8bJim Ingham    ///
59151b11e06de746667396f56b303d1867f007baf8bJim Ingham    /// @return
59251b11e06de746667396f56b303d1867f007baf8bJim Ingham    ///     \b true if it is, \b false otherwise.
59351b11e06de746667396f56b303d1867f007baf8bJim Ingham    //------------------------------------------------------------------
59451b11e06de746667396f56b303d1867f007baf8bJim Ingham    bool
59551b11e06de746667396f56b303d1867f007baf8bJim Ingham    IsLoadedInTarget (Target *target);
59624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
597146d9522c95c0c8c5409539813b55e08b99196eeEnrico Granata    bool
59802af494c397d62f22bea65d36ad47080b6adc8afEnrico Granata    LoadScriptingResourceInTarget (Target *target,
59902af494c397d62f22bea65d36ad47080b6adc8afEnrico Granata                                   Error& error,
60002af494c397d62f22bea65d36ad47080b6adc8afEnrico Granata                                   Stream* feedback_stream = NULL);
601146d9522c95c0c8c5409539813b55e08b99196eeEnrico Granata
60224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
60324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get the number of compile units for this module.
60424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
60524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of compile units that the symbol vendor plug-in
60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     finds.
60824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
60936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    size_t
61024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumCompileUnits();
61124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
61224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::CompUnitSP
61336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetCompileUnitAtIndex (size_t idx);
61424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
61524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const ConstString &
61624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetObjectName() const;
61724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
618b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    uint64_t
619b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetObjectOffset() const
620b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    {
621b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton        return m_object_offset;
622b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    }
62324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
62424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
62524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get the object file representation for the current architecture.
62624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
62724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// If the object file has not been located or parsed yet, this
62824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// function will find the best ObjectFile plug-in that can parse
62924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Module::m_file.
63024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
63124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
63224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     If Module::m_file does not exist, or no plug-in was found
63324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     that can parse the file, or the object file doesn't contain
63424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     the current architecture in Module::m_arch, NULL will be
63524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     returned, else a valid object file interface will be
63624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     returned. The returned pointer is owned by this object and
63724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     remains valid as long as the object is around.
63824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
63949ce8969d3154e1560106cfe530444c09410f217Greg Clayton    virtual ObjectFile *
64024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetObjectFile ();
641a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain
642a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    //------------------------------------------------------------------
643a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    /// Get the unified section list for the module. This is the section
644a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    /// list created by the module's object file and any debug info and
645a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    /// symbol files created by the symbol vendor.
646a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    ///
647a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    /// If the symbol vendor has not been loaded yet, this function
648a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    /// will return the section list for the object file.
649a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    ///
650a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    /// @return
651a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    ///     Unified module section list.
652a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    //------------------------------------------------------------------
653a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    virtual SectionList *
6547940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    GetSectionList ();
6557940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton
656ae2ae94bd72daf435204e99a0e03ccc64470a843Enrico Granata    uint32_t
657ae2ae94bd72daf435204e99a0e03ccc64470a843Enrico Granata    GetVersion (uint32_t *versions, uint32_t num_versions);
65824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6596c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton    // Load an object file from memory.
6606c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton    ObjectFile *
6616c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton    GetMemoryObjectFile (const lldb::ProcessSP &process_sp,
6626c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton                         lldb::addr_t header_addr,
6636c5438bf1d7af0f0ef1e81a30ad53e3fe93c35a8Greg Clayton                         Error &error);
66424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
66524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get the symbol vendor interface for the current architecture.
66624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
66724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// If the symbol vendor file has not been located yet, this
66824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// function will find the best SymbolVendor plug-in that can
66924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// use the current object file.
67024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
67124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
67224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     If this module does not have a valid object file, or no
67324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     plug-in can be found that can use the object file, NULL will
67424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     be returned, else a valid symbol vendor plug-in interface
67524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     will be returned. The returned pointer is owned by this
67624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     object and remains valid as long as the object is around.
67724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
67849ce8969d3154e1560106cfe530444c09410f217Greg Clayton    virtual SymbolVendor*
679188091899842b140313b54e097f16efbe165c998Greg Clayton    GetSymbolVendor(bool can_create = true,
680188091899842b140313b54e097f16efbe165c998Greg Clayton                    lldb_private::Stream *feedback_strm = NULL);
68124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
68224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
68324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get accessor the type list for this module.
68424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
68524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
68624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A valid type list pointer, or NULL if there is no valid
68724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     symbol vendor for this module.
68824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
68924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    TypeList*
69024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetTypeList ();
69124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
69224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
69324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get a pointer to the UUID value contained in this object.
69424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
69524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// If the executable image file doesn't not have a UUID value built
69624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// into the file format, an MD5 checksum of the entire file, or
69724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// slice of the file for the current architecture should be used.
69824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
69924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
70024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A const pointer to the internal copy of the UUID value in
70124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     this module if this module has a valid UUID value, NULL
70224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     otherwise.
70324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7040467c78e9a75eff9ec33d3c1f39fa83e1c5d9241Greg Clayton    const lldb_private::UUID &
70524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetUUID ();
70624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
70724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
70824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// A debugging function that will cause everything in a module to
70924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// be parsed.
71024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
71124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// All compile units will be pasred, along with all globals and
71224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// static variables and all functions for those compile units.
71324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// All types, scopes, local variables, static variables, global
71424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// variables, and line tables will be parsed. This can be used
71524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// prior to dumping a module to see a complete list of the
71624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// resuling debug information that gets parsed, or as a debug
71724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// function to ensure that the module can consume all of the
71824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// debug data the symbol vendor provides.
71924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
72024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
72124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ParseAllDebugSymbols();
72224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
72324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
72424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ResolveFileAddress (lldb::addr_t vm_addr, Address& so_addr);
72524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
72624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
72724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ResolveSymbolContextForAddress (const Address& so_addr, uint32_t resolve_scope, SymbolContext& sc);
72824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
72924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
73024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Resolve items in the symbol context for a given file and line.
73124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
73224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Tries to resolve \a file_path and \a line to a list of matching
73324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// symbol contexts.
73424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
73524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// The line table entries contains addresses that can be used to
73624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// further resolve the values in each match: the function, block,
73724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// symbol. Care should be taken to minimize the amount of
73824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// information that is requested to only what is needed --
73924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// typically the module, compile unit, line table and line table
74024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// entry are sufficient.
74124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
74224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] file_path
74324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A path to a source file to match. If \a file_path does not
74424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     specify a directory, then this query will match all files
74524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     whose base filename matches. If \a file_path does specify
74624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     a directory, the fullpath to the file must match.
74724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
74824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] line
74924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The source line to match, or zero if just the compile unit
75024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     should be resolved.
75124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
75224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] check_inlines
75324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Check for inline file and line number matches. This option
75424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     should be used sparingly as it will cause all line tables
75524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     for every compile unit to be parsed and searched for
75624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     matching inline file entries.
75724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
75824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] resolve_scope
75924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The scope that should be resolved (see
76024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     SymbolContext::Scope).
76124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
76224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[out] sc_list
76324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A symbol context list that gets matching symbols contexts
76424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     appended to.
76524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
76624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
76724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of matches that were added to \a sc_list.
76824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
76924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see SymbolContext::Scope
77024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
77124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
77224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ResolveSymbolContextForFilePath (const char *file_path, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list);
77324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
77424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
77524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Resolve items in the symbol context for a given file and line.
77624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
77724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Tries to resolve \a file_spec and \a line to a list of matching
77824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// symbol contexts.
77924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
78024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// The line table entries contains addresses that can be used to
78124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// further resolve the values in each match: the function, block,
78224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// symbol. Care should be taken to minimize the amount of
78324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// information that is requested to only what is needed --
78424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// typically the module, compile unit, line table and line table
78524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// entry are sufficient.
78624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
78724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] file_spec
78824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A file spec to a source file to match. If \a file_path does
78924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     not specify a directory, then this query will match all
79024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     files whose base filename matches. If \a file_path does
79124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     specify a directory, the fullpath to the file must match.
79224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
79324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] line
79424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The source line to match, or zero if just the compile unit
79524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     should be resolved.
79624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
79724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] check_inlines
79824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Check for inline file and line number matches. This option
79924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     should be used sparingly as it will cause all line tables
80024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     for every compile unit to be parsed and searched for
80124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     matching inline file entries.
80224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
80324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] resolve_scope
80424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The scope that should be resolved (see
80524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     SymbolContext::Scope).
80624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
80724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[out] sc_list
80824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A symbol context list that gets filled in with all of the
80924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     matches.
81024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
81124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
81224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A integer that contains SymbolContext::Scope bits set for
81324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     each item that was successfully resolved.
81424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
81524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see SymbolContext::Scope
81624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
81724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
81824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ResolveSymbolContextsForFileSpec (const FileSpec &file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list);
81924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
82024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
82124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
82224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetFileSpecAndObjectName (const FileSpec &file,
82324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                              const ConstString &object_name);
82424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
825236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    bool
826236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    GetIsDynamicLinkEditor () const
827236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    {
828236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton        return m_is_dynamic_loader_module;
829236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    }
830236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton
831236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    void
832236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    SetIsDynamicLinkEditor (bool b)
833236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    {
834236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton        m_is_dynamic_loader_module = b;
835236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    }
836236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton
837b01000fd063629facd45044f137446fb748ee179Greg Clayton    ClangASTContext &
838b01000fd063629facd45044f137446fb748ee179Greg Clayton    GetClangASTContext ();
839b01000fd063629facd45044f137446fb748ee179Greg Clayton
84075d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    // Special error functions that can do printf style formatting that will prepend the message with
84175d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    // something appropriate for this module (like the architecture, path and object name (if any)).
84275d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    // This centralizes code so that everyone doesn't need to format their error and log messages on
84375d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    // their own and keeps the output a bit more consistent.
84475d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    void
84575d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    LogMessage (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
84675d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton
84773a35715708b65b1d96c1c8f439548bb0990df08Greg Clayton    void
84873a35715708b65b1d96c1c8f439548bb0990df08Greg Clayton    LogMessageVerboseBacktrace (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
84973a35715708b65b1d96c1c8f439548bb0990df08Greg Clayton
85075d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    void
85175d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    ReportWarning (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
85275d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton
85375d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    void
85475d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton    ReportError (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
85575d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton
856df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    // Only report an error once when the module is first detected to be modified
857df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    // so we don't spam the console with many messages.
858df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    void
859df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    ReportErrorIfModifyDetected (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
860df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton
861cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton    //------------------------------------------------------------------
862cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton    // Return true if the file backing this module has changed since the
863cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton    // module was originally created  since we saved the intial file
864cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton    // modification time when the module first gets created.
865cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton    //------------------------------------------------------------------
866df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    bool
867cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton    FileHasChanged () const;
868df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton
8699482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    //------------------------------------------------------------------
8709482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    // SymbolVendor, SymbolFile and ObjectFile member objects should
8719482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    // lock the module mutex to avoid deadlocks.
8729482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    //------------------------------------------------------------------
8739482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    Mutex &
8749482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    GetMutex () const
8759482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
8769482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        return m_mutex;
8779482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
8789482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton
879964deba8853eb794e59263322b59b09b43669618Greg Clayton    PathMappingList &
880964deba8853eb794e59263322b59b09b43669618Greg Clayton    GetSourceMappingList ()
881964deba8853eb794e59263322b59b09b43669618Greg Clayton    {
882964deba8853eb794e59263322b59b09b43669618Greg Clayton        return m_source_mappings;
883964deba8853eb794e59263322b59b09b43669618Greg Clayton    }
884964deba8853eb794e59263322b59b09b43669618Greg Clayton
885964deba8853eb794e59263322b59b09b43669618Greg Clayton    const PathMappingList &
886964deba8853eb794e59263322b59b09b43669618Greg Clayton    GetSourceMappingList () const
887964deba8853eb794e59263322b59b09b43669618Greg Clayton    {
888964deba8853eb794e59263322b59b09b43669618Greg Clayton        return m_source_mappings;
889964deba8853eb794e59263322b59b09b43669618Greg Clayton    }
890964deba8853eb794e59263322b59b09b43669618Greg Clayton
8912418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    //------------------------------------------------------------------
8922418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// Finds a source file given a file spec using the module source
8932418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// path remappings (if any).
8942418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///
8952418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// Tries to resolve \a orig_spec by checking the module source path
8962418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// remappings. It makes sure the file exists, so this call can be
8972418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// expensive if the remappings are on a network file system, so
8982418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// use this function sparingly (not in a tight debug info parsing
8992418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// loop).
9002418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///
9012418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// @param[in] orig_spec
9022418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///     The original source file path to try and remap.
9032418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///
9042418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// @param[out] new_spec
9052418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///     The newly remapped filespec that is guaranteed to exist.
9062418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///
9072418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// @return
9082418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///     /b true if \a orig_spec was successfully located and
9092418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///     \a new_spec is filled in with an existing file spec,
9102418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///     \b false otherwise.
9112418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    //------------------------------------------------------------------
912964deba8853eb794e59263322b59b09b43669618Greg Clayton    bool
913964deba8853eb794e59263322b59b09b43669618Greg Clayton    FindSourceFile (const FileSpec &orig_spec, FileSpec &new_spec) const;
914964deba8853eb794e59263322b59b09b43669618Greg Clayton
9152418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    //------------------------------------------------------------------
9162418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// Remaps a source file given \a path into \a new_path.
9172418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///
9182418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// Remaps \a path if any source remappings match. This function
9192418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// does NOT stat the file system so it can be used in tight loops
9202418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// where debug info is being parsed.
9212418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///
9222418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// @param[in] path
9232418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///     The original source file path to try and remap.
9242418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///
9252418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// @param[out] new_path
9262418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///     The newly remapped filespec that is may or may not exist.
9272418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///
9282418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    /// @return
9292418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///     /b true if \a path was successfully located and \a new_path
9302418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    ///     is filled in with a new source path, \b false otherwise.
9312418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    //------------------------------------------------------------------
9322418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    bool
9332418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton    RemapSourceFile (const char *path, std::string &new_path) const;
9342418fddf2e200c827da5bc6c855f3d4971b2d867Greg Clayton
935296b06d325413723f5aac5988eed977b278a7807Greg Clayton
936296b06d325413723f5aac5988eed977b278a7807Greg Clayton    //------------------------------------------------------------------
937296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// Prepare to do a function name lookup.
938296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///
939296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// Looking up functions by name can be a tricky thing. LLDB requires
940296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// that accelerator tables contain full names for functions as well
941296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// as function basenames which include functions, class methods and
942296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// class functions. When the user requests that an action use a
943296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// function by name, we are sometimes asked to automatically figure
944296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// out what a name could possibly map to. A user might request a
945296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// breakpoint be set on "count". If no options are supplied to limit
946296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// the scope of where to search for count, we will by default match
947296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// any function names named "count", all class and instance methods
948296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// named "count" (no matter what the namespace or contained context)
949296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// and any selectors named "count". If a user specifies "a::b" we
950296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// will search for the basename "b", and then prune the results that
951296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// don't match "a::b" (note that "c::a::b" and "d::e::a::b" will
952296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// match a query of "a::b".
953296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///
954296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// @param[in] name
955296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     The user supplied name to use in the lookup
956296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///
957296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// @param[in] name_type_mask
958296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     The mask of bits from lldb::FunctionNameType enumerations
959296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     that tell us what kind of name we are looking for.
960296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///
961296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// @param[out] lookup_name
962296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     The actual name that will be used when calling
963296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     SymbolVendor::FindFunctions() or Symtab::FindFunctionSymbols()
964296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///
965296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// @param[out] lookup_name_type_mask
966296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     The actual name mask that should be used in the calls to
967296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     SymbolVendor::FindFunctions() or Symtab::FindFunctionSymbols()
968296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///
969296b06d325413723f5aac5988eed977b278a7807Greg Clayton    /// @param[out] match_name_after_lookup
970296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     A boolean that indicates if we need to iterate through any
971296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     match results obtained from SymbolVendor::FindFunctions() or
972296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     Symtab::FindFunctionSymbols() to see if the name contains
973296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     \a name. For example if \a name is "a::b", this function will
974296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     return a \a lookup_name of "b", with \a match_name_after_lookup
975296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     set to true to indicate any matches will need to be checked
976296b06d325413723f5aac5988eed977b278a7807Greg Clayton    ///     to make sure they contain \a name.
977296b06d325413723f5aac5988eed977b278a7807Greg Clayton    //------------------------------------------------------------------
978296b06d325413723f5aac5988eed977b278a7807Greg Clayton    static void
979296b06d325413723f5aac5988eed977b278a7807Greg Clayton    PrepareForFunctionNameLookup (const ConstString &name,
980296b06d325413723f5aac5988eed977b278a7807Greg Clayton                                  uint32_t name_type_mask,
981296b06d325413723f5aac5988eed977b278a7807Greg Clayton                                  ConstString &lookup_name,
982296b06d325413723f5aac5988eed977b278a7807Greg Clayton                                  uint32_t &lookup_name_type_mask,
983296b06d325413723f5aac5988eed977b278a7807Greg Clayton                                  bool &match_name_after_lookup);
984296b06d325413723f5aac5988eed977b278a7807Greg Clayton
98524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
98624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
98724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Member Variables
98824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
98924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    mutable Mutex               m_mutex;        ///< A mutex to keep this object happy in multi-threaded environments.
99024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    TimeValue                   m_mod_time;     ///< The modification time for this module when it was created.
9917508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    ArchSpec                    m_arch;         ///< The architecture for this module.
9920467c78e9a75eff9ec33d3c1f39fa83e1c5d9241Greg Clayton    lldb_private::UUID          m_uuid;         ///< Each module is assumed to have a unique identifier to help match it up to debug symbols.
99324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FileSpec                    m_file;         ///< The file representation on disk for this module (if there is one).
99424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    FileSpec                    m_platform_file;///< The path to the module on the platform on which it is being debugged
9953508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    FileSpec                    m_symfile_spec; ///< If this path is valid, then this is the file that _will_ be used as the symbol file for this module
99624943d2ee8bfaa7cf5893e4709143924157a5c1eChris 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.
997b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    uint64_t                    m_object_offset;
9980e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    TimeValue                   m_object_mod_time;
999e40b6424d9e49306392bec4b44060da36414c382Greg Clayton    lldb::ObjectFileSP          m_objfile_sp;   ///< A shared pointer to the object file parser for this module as it may or may not be shared with the SymbolFile
1000102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<SymbolVendor> m_symfile_ap;   ///< A pointer to the symbol vendor for this module.
1001b01000fd063629facd45044f137446fb748ee179Greg Clayton    ClangASTContext             m_ast;          ///< The AST context for this module.
1002964deba8853eb794e59263322b59b09b43669618Greg Clayton    PathMappingList             m_source_mappings; ///< Module specific source remappings for when you have debug info for a module that doesn't match where the sources currently are
10037940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    std::unique_ptr<lldb_private::SectionList> m_sections_ap; ///< Unified section list for module that is used by the ObjectFile and and ObjectFile instances for the debug info
1004964deba8853eb794e59263322b59b09b43669618Greg Clayton
1005236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    bool                        m_did_load_objfile:1,
1006236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton                                m_did_load_symbol_vendor:1,
1007236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton                                m_did_parse_uuid:1,
1008b01000fd063629facd45044f137446fb748ee179Greg Clayton                                m_did_init_ast:1,
1009cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton                                m_is_dynamic_loader_module:1;
1010cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton    mutable bool                m_file_has_changed:1,
1011cbacba1f223ee4819a4b99924dd994c7e52fdf04Greg Clayton                                m_first_file_changed_log:1;   /// See if the module was modified after it was initially opened.
1012236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton
101324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
101424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Resolve a file or load virtual address.
101524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
101624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Tries to resolve \a vm_addr as a file address (if \a
101724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// vm_addr_is_file_addr is true) or as a load address if \a
101824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// vm_addr_is_file_addr is false) in the symbol vendor.
101924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// \a resolve_scope indicates what clients wish to resolve
102024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// and can be used to limit the scope of what is parsed.
102124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
102224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] vm_addr
102324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The load virtual address to resolve.
102424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
102524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] vm_addr_is_file_addr
102624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     If \b true, \a vm_addr is a file address, else \a vm_addr
102724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     if a load address.
102824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
102924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] resolve_scope
103024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The scope that should be resolved (see
103124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     SymbolContext::Scope).
103224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
103324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[out] so_addr
103424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The section offset based address that got resolved if
103524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     any bits are returned.
103624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
103724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[out] sc
103824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //      The symbol context that has objects filled in. Each bit
103924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     in the \a resolve_scope pertains to a member in the \a sc.
104024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
104124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
104224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A integer that contains SymbolContext::Scope bits set for
104324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     each item that was successfully resolved.
104424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
104524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see SymbolContext::Scope
104624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
104724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
1048236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    ResolveSymbolContextForAddress (lldb::addr_t vm_addr,
1049236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton                                    bool vm_addr_is_file_addr,
1050236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton                                    uint32_t resolve_scope,
1051236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton                                    Address& so_addr,
1052236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton                                    SymbolContext& sc);
10537508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham
1054236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    void
1055236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    SymbolIndicesToSymbolContextList (Symtab *symtab,
1056236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton                                      std::vector<uint32_t> &symbol_indexes,
1057236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton                                      SymbolContextList &sc_list);
1058236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton
1059236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    bool
1060236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton    SetArchitecture (const ArchSpec &new_arch);
10617508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham
10627940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    SectionList *
10637940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    GetUnifiedSectionList();
10647940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton
106549ce8969d3154e1560106cfe530444c09410f217Greg Clayton    friend class ModuleList;
106649ce8969d3154e1560106cfe530444c09410f217Greg Clayton    friend class ObjectFile;
10677940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    friend class SymbolFile;
106849ce8969d3154e1560106cfe530444c09410f217Greg Clayton
106924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
1070979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
107136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    size_t
1072979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    FindTypes_Impl (const SymbolContext& sc,
10730fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan                    const ConstString &name,
10740fcec13c6639ab49216fa9447b25888b7bc9ff59Sean Callanan                    const ClangNamespaceDecl *namespace_decl,
1075979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata                    bool append,
107636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                    size_t max_matches,
1077979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata                    TypeList& types);
1078979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
1079979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
108024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (Module);
108124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
108224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
108324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
108424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
108524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_Module_h_
1086