StackFrame.h revision 32f4fdde0882395aec2ea56d1adcce78759105b7
1//===-- StackFrame.h --------------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef liblldb_StackFrame_h_
11#define liblldb_StackFrame_h_
12
13// C Includes
14// C++ Includes
15// Other libraries and framework includes
16// Project includes
17#include "lldb/Core/Error.h"
18#include "lldb/Core/Flags.h"
19#include "lldb/Core/Scalar.h"
20#include "lldb/Core/StreamString.h"
21#include "lldb/Core/UserID.h"
22#include "lldb/Core/ValueObjectList.h"
23#include "lldb/Symbol/SymbolContext.h"
24#include "lldb/Target/ExecutionContextScope.h"
25#include "lldb/Target/StackID.h"
26
27namespace lldb_private {
28
29class StackFrame :
30    public ExecutionContextScope
31{
32public:
33    //------------------------------------------------------------------
34    // Constructors and Destructors
35    //------------------------------------------------------------------
36    StackFrame (lldb::user_id_t frame_idx, lldb::user_id_t concrete_frame_idx, Thread &thread, lldb::addr_t cfa, uint32_t inline_height, lldb::addr_t pc, const SymbolContext *sc_ptr);
37    StackFrame (lldb::user_id_t frame_idx, lldb::user_id_t concrete_frame_idx, Thread &thread, const lldb::RegisterContextSP &reg_context_sp, lldb::addr_t cfa, uint32_t inline_height, lldb::addr_t pc, const SymbolContext *sc_ptr);
38    StackFrame (lldb::user_id_t frame_idx, lldb::user_id_t concrete_frame_idx, Thread &thread, const lldb::RegisterContextSP &reg_context_sp, lldb::addr_t cfa, uint32_t inline_height, const Address& pc, const SymbolContext *sc_ptr);
39    virtual ~StackFrame ();
40
41    Thread &
42    GetThread()
43    { return m_thread; }
44
45    const Thread &
46    GetThread() const
47    { return m_thread; }
48
49    StackID&
50    GetStackID();
51
52    Address&
53    GetFrameCodeAddress();
54
55    void
56    ChangePC (lldb::addr_t pc);
57
58    const SymbolContext&
59    GetSymbolContext (uint32_t resolve_scope);
60
61    bool
62    GetFrameBaseValue(Scalar &value, Error *error_ptr);
63
64    RegisterContext *
65    GetRegisterContext ();
66
67    const lldb::RegisterContextSP &
68    GetRegisterContextSP () const
69    {
70        return m_reg_context_sp;
71    }
72
73    VariableList *
74    GetVariableList ();
75
76    bool
77    HasDebugInformation ();
78
79    ValueObjectList &
80    GetValueObjectList();
81
82    const char *
83    Disassemble ();
84
85    void
86    Dump (Stream *strm, bool show_frame_index);
87
88    uint32_t
89    GetFrameIndex () const
90    {
91        return m_frame_index;
92    }
93
94    uint32_t
95    GetConcreteFrameIndex () const
96    {
97        return m_concrete_frame_index;
98    }
99
100    bool
101    IsConcrete () const;
102
103    //------------------------------------------------------------------
104    // lldb::ExecutionContextScope pure virtual functions
105    //------------------------------------------------------------------
106    virtual Target *
107    CalculateTarget ();
108
109    virtual Process *
110    CalculateProcess ();
111
112    virtual Thread *
113    CalculateThread ();
114
115    virtual StackFrame *
116    CalculateStackFrame ();
117
118    virtual void
119    Calculate (ExecutionContext &exe_ctx);
120
121protected:
122    //------------------------------------------------------------------
123    // Classes that inherit from StackFrame can see and modify these
124    //------------------------------------------------------------------
125
126
127private:
128    //------------------------------------------------------------------
129    // For StackFrame only
130    //------------------------------------------------------------------
131    Thread &m_thread;
132    uint32_t m_frame_index;
133    uint32_t m_concrete_frame_index;
134    lldb::RegisterContextSP m_reg_context_sp;
135    StackID m_id;
136    Address m_pc;   // PC as a section/offset address
137    SymbolContext   m_sc;
138    Flags m_flags;
139    Scalar m_frame_base;
140    Error m_frame_base_error;
141    lldb::VariableListSP m_variable_list_sp;
142    ValueObjectList m_value_object_list;
143    StreamString m_disassembly;
144    DISALLOW_COPY_AND_ASSIGN (StackFrame);
145};
146
147} // namespace lldb_private
148
149#endif  // liblldb_StackFrame_h_
150