SymbolContext.h revision 12bec71b323dc520f0e985a86e09c4712559e115
15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//===-- SymbolContext.h -----------------------------------------*- C++ -*-===//
25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//
35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//                     The LLVM Compiler Infrastructure
45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//
55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner// This file is distributed under the University of Illinois Open Source
65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner// License. See LICENSE.TXT for details.
75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//
85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//===----------------------------------------------------------------------===//
95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef liblldb_SymbolContext_h_
125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define liblldb_SymbolContext_h_
135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <vector>
155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "lldb/lldb-private.h"
175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "lldb/Core/Address.h"
185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "lldb/Symbol/LineEntry.h"
195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnernamespace lldb_private {
215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerclass SymbolContextScope;
235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//----------------------------------------------------------------------
245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/// @class SymbolContext SymbolContext.h "lldb/Symbol/SymbolContext.h"
255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/// @brief Defines a symbol context baton that can be handed other debug
265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/// core functions.
275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner///
285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/// Many debugger functions require a context when doing lookups. This
295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/// class provides a common structure that can be used as the result
305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/// of a query that can contain a single result. Examples of such
315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/// queries include
322c538c86c15d597cc875dc926e4e39285c5625dfDavid 'Digit' Turner///     @li Looking up a load address.
335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//----------------------------------------------------------------------
345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerclass SymbolContext
355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerpublic:
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Default constructor.
405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Initialize all pointer members to NULL and all struct members
425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// to their default state.
435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    SymbolContext ();
455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Construct with an object that knows how to reconstruct its
485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// symbol context.
492c538c86c15d597cc875dc926e4e39285c5625dfDavid 'Digit' Turner    ///
505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] sc_scope
51cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    ///     A symbol context scope object that knows how to reconstruct
525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     it's context.
535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    explicit
555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    SymbolContext (SymbolContextScope *sc_scope);
565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Construct with module, and optional compile unit, function,
595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// block, line table, line entry and symbol.
605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Initialize all pointer to the specified values.
625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] module
645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     A Module pointer to the module for this context.
655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] comp_unit
675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     A CompileUnit pointer to the compile unit for this context.
685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] function
705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     A Function pointer to the function for this context.
715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] block
735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     A Block pointer to the deepest block for this context.
745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
75cc330d4169441727fecf1da08aee806fc021c4e2David 'Digit' Turner    /// @param[in] line_entry
766af6765e2f3bc930d0dce21d752bea570a1b1362David 'Digit' Turner    ///     A LineEntry pointer to the line entry for this context.
7734c48ff1e3ad5cd2084ca40188754d45f423750bDavid 'Digit' Turner    ///
787a78db75ad42aea283f5073f51891464104a9fc3David 'Digit' Turner    /// @param[in] symbol
795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     A Symbol pointer to the symbol for this context.
8034c48ff1e3ad5cd2084ca40188754d45f423750bDavid 'Digit' Turner    //------------------------------------------------------------------
815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    explicit
825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    SymbolContext (const lldb::TargetSP &target_sp,
8328a09b6fe8d8f3e92ffee9263609a6da881b8818David 'Digit' Turner                   const lldb::ModuleSP &module_sp,
845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                   CompileUnit *comp_unit = NULL,
85cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner                   Function *function = NULL,
8628a09b6fe8d8f3e92ffee9263609a6da881b8818David 'Digit' Turner                   Block *block = NULL,
87622b8f4c760b8c4479d28430f978bad8bb9ea32cTim Baverstock                   LineEntry *line_entry = NULL,
885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                   Symbol *symbol = NULL);
895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    // This version sets the target to a NULL TargetSP if you don't know it.
91986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    explicit
92986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    SymbolContext (const lldb::ModuleSP &module_sp,
93986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner                   CompileUnit *comp_unit = NULL,
94986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner                   Function *function = NULL,
95986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner                   Block *block = NULL,
96986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner                   LineEntry *line_entry = NULL,
97986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner                   Symbol *symbol = NULL);
985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
995973c775c853e26f684de58ad28c267281aaffd6David 'Digit' Turner    //------------------------------------------------------------------
1005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Copy constructor
1015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
102986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// Makes a copy of the another SymbolContext object \a rhs.
103986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///
104986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// @param[in] rhs
105986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///     A const SymbolContext object reference to copy.
106986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
107986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    SymbolContext (const SymbolContext& rhs);
108986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
109986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
110986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// Assignment operator.
111986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///
112986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// Copies the address value from another SymbolContext object \a
113986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// rhs into \a this object.
114986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///
115986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// @param[in] rhs
116986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///     A const SymbolContext object reference to copy.
117986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///
118986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// @return
119986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///     A const SymbolContext object reference to \a this.
120986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
121986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    const SymbolContext&
1225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    operator= (const SymbolContext& rhs);
1235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
1255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Clear the object's state.
1265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
1275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Resets all pointer members to NULL, and clears any class objects
1285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// to their default state.
1295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
1305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void
1315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    Clear ();
1325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
1345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Dump a description of this object to a Stream.
1355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
1365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Dump a description of the contents of this object to the
1375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// supplied stream \a s.
1385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
1395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] s
1405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     The stream to which to dump the object descripton.
1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
142986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    void
143986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    Dump (Stream *s, Process *process) const;
144986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
145986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Dump the stop context in this object to a Stream.
1475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
1485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Dump the best description of this object to the stream. The
1495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// information displayed depends on the amount and quality of the
1505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// information in this context. If a module, function, file and
1515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// line number are available, they will be dumped. If only a
1525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// module and function or symbol name with offset is available,
1535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// that will be ouput. Else just the address at which the target
1545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// was stopped will be displayed.
1555973c775c853e26f684de58ad28c267281aaffd6David 'Digit' Turner    ///
1565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] s
1575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     The stream to which to dump the object descripton.
1585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
1595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] so_addr
1605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     The resolved section offset address.
1615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
1625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void
1635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    DumpStopContext (Stream *s,
1645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     ExecutionContextScope *exe_scope,
1655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     const Address &so_addr,
1665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     bool show_module = true) const;
1675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
1695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Get the address range contained within a symbol context.
170a12820ef4aff2e2f6d3db9b704abee2c54d08f40David Turner    ///
1715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Address range priority is as follows:
1725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     - line_entry address range if line_entry is valid
1735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     - function address range if function is not NULL
1745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     - symbol address range if symbol is not NULL
1755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
1765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[out] range
1775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     An address range object that will be filled in if \b true
1785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     is returned.
1795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
1805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @return
1815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     \b True if this symbol context contains items that describe
1825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     an address range, \b false otherwise.
183986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
1845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    bool
185986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    GetAddressRange (uint32_t scope, AddressRange &range) const;
1865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
187986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
1885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void
1895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    GetDescription(Stream *s,
1905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                   lldb::DescriptionLevel level,
1915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                   Process *process) const;
1925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
1945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Find a function matching the given name, working out from this
195986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// symbol context.
1965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
1975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @return
1985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     A shared pointer to the function found.
1995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
2005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    Function *
2015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    FindFunctionByName (const char *name) const;
2025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
2045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Find a variable matching the given name, working out from this
2055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// symbol context.
2065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
2075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @return
2085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     A shared pointer to the variable found.
2095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
2105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    lldb::VariableSP
2115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    FindVariableByName (const char *name) const;
2125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
2145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Find a type matching the given name, working out from this
2155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// symbol context.
2165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
217986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// @return
2185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     A shared pointer to the variable found.
219986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
220986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    lldb::TypeSP
2215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    FindTypeByName (const char *name) const;
2225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
223986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
2245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    // Member variables
225986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
226986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    lldb::TargetSP  target_sp;   ///< The Target for a given query
2275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    lldb::ModuleSP  module_sp;  ///< The Module for a given query
2285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    CompileUnit *   comp_unit;  ///< The CompileUnit for a given query
2295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    Function *      function;   ///< The Function for a given query
2305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    Block *         block;      ///< The Block for a given query
2315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    LineEntry       line_entry; ///< The LineEntry for a given query
2325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    Symbol *        symbol;     ///< The Symbol for a given query
2335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
2345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//----------------------------------------------------------------------
236986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner/// @class SymbolContextList SymbolContext.h "lldb/Symbol/SymbolContext.h"
2375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/// @brief Defines a list of symbol context objects.
238986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner///
239986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner/// This class provides a common structure that can be used to contain
240986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner/// the result of a query that can contain a multiple results. Examples
241986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner/// of such queries include:
242986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner///     @li Looking up a function by name.
243986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner///     @li Finding all addressses for a specified file and line number.
244986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner//----------------------------------------------------------------------
245986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turnerclass SymbolContextList
246986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner{
247986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turnerpublic:
248986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
2495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Default constructor.
2505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
2515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Initialize with an empty list.
2525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
253986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    SymbolContextList ();
2545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
255986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
2565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Destructor.
257986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
2585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ~SymbolContextList ();
2595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
2615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Append a new symbol context to the list.
262986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///
2635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] sc
264986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///     A symbol context to append to the list.
2655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
2665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void
26795a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner    Append(const SymbolContext& sc);
268986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
2695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
27095a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner    /// Clear the object's state.
271986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///
2725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Clears the symbol context list.
2735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
2745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void
2755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    Clear();
2765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
2785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Dump a description of this object to a Stream.
2795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
2805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Dump a description of the contents of each symbol context in
2815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// the list to the supplied stream \a s.
2825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
2835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] s
2845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     The stream to which to dump the object descripton.
2855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
2865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void
2875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    Dump(Stream *s, Process *process) const;
288986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
2895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    //------------------------------------------------------------------
290986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// Get accessor for a symbol context at index \a idx.
2915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
2925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// Dump a description of the contents of each symbol context in
293986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// the list to the supplied stream \a s.
294986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///
2955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[in] idx
2965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///     The zero based index into the symbol context list.
2975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ///
2985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    /// @param[out] sc
299986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///     A reference to the symbol context to fill in.
300986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///
301986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// @return
302986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///     Returns \b true if \a idx was a valid index into this
303986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///     symbol context list and \a sc was filled in, \b false
304986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///     otherwise.
305986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
306986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    bool
307986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    GetContextAtIndex(uint32_t idx, SymbolContext& sc) const;
308986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
309986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    bool
310986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    RemoveContextAtIndex (uint32_t idx);
311986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
312986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// Get accessor for a symbol context list size.
313986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///
314986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    /// @return
315986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    ///     Returns the number of symbol context objects in the list.
31695a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner    //------------------------------------------------------------------
317986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    uint32_t
318986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    GetSize() const;
31995a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner
320986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turnerprotected:
321986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    typedef std::vector<SymbolContext> collection; ///< The collection type for the list.
322986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
323986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
324986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    // Member variables.
325986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    //------------------------------------------------------------------
326986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner    collection m_symbol_contexts; ///< The list of symbol contexts.
327986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner};
328986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner
3295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerbool operator== (const SymbolContext& lhs, const SymbolContext& rhs);
3305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerbool operator!= (const SymbolContext& lhs, const SymbolContext& rhs);
3315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
3325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} // namespace lldb_private
3335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
33495a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner#endif  // liblldb_SymbolContext_h_
335986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turner