StackFrame.h revision 33ed170599d41fe407a4dcf5f0875c75e1ad1375
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    GetPC();
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    // lldb::ExecutionContextScope pure virtual functions
101    //------------------------------------------------------------------
102    virtual Target *
103    CalculateTarget ();
104
105    virtual Process *
106    CalculateProcess ();
107
108    virtual Thread *
109    CalculateThread ();
110
111    virtual StackFrame *
112    CalculateStackFrame ();
113
114    virtual void
115    Calculate (ExecutionContext &exe_ctx);
116
117protected:
118    //------------------------------------------------------------------
119    // Classes that inherit from StackFrame can see and modify these
120    //------------------------------------------------------------------
121
122
123private:
124    //------------------------------------------------------------------
125    // For StackFrame only
126    //------------------------------------------------------------------
127    Thread &m_thread;
128    uint32_t m_frame_index;
129    uint32_t m_concrete_frame_index;
130    lldb::RegisterContextSP m_reg_context_sp;
131    StackID m_id;
132    Address m_pc;   // PC as a section/offset address
133    SymbolContext   m_sc;
134    Flags m_flags;
135    Scalar m_frame_base;
136    Error m_frame_base_error;
137    lldb::VariableListSP m_variable_list_sp;
138    ValueObjectList m_value_object_list;
139    StreamString m_disassembly;
140    DISALLOW_COPY_AND_ASSIGN (StackFrame);
141};
142
143} // namespace lldb_private
144
145#endif  // liblldb_StackFrame_h_
146