diff options
| author | Greg Clayton <gclayton@apple.com> | 2013-11-13 23:28:31 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2013-11-13 23:28:31 +0000 |
| commit | f74cf86bc55b34e567c760212cb4bdb6158fd225 (patch) | |
| tree | d6a775d137a7d653858f3df0faaf2367fd4f231e /lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h | |
| parent | bcccb5db2e88533941c0c63a8693bb71ca0ac318 (diff) | |
| download | bcm5719-llvm-f74cf86bc55b34e567c760212cb4bdb6158fd225.tar.gz bcm5719-llvm-f74cf86bc55b34e567c760212cb4bdb6158fd225.zip | |
<rdar://problem/15172417>
Added two new GDB server packets to debugserver: "QSaveRegisterState" and "QRestoreRegiterState".
"QSaveRegisterState" makes the remote GDB server save all register values and it returns a save identifier as an unsigned integer. This packet can be used prior to running expressions to save all registers.
All registers can them we later restored with "QRestoreRegiterState:SAVEID" what SAVEID is the integer identifier that was returned from the call to QSaveRegisterState.
Cleaned up redundant code in lldb_private::Thread, lldb_private::ThreadPlanCallFunction.
Moved the lldb_private::Thread::RegisterCheckpoint into its own header file and it is now in the lldb_private namespace. Trimmed down the RegisterCheckpoint class to omit stuff that wasn't used (the stack ID).
Added a few new virtual methods to lldb_private::RegisterContext that allow subclasses to efficiently save/restore register states and changed the RegisterContextGDBRemote to take advantage of these new calls.
llvm-svn: 194621
Diffstat (limited to 'lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h')
| -rw-r--r-- | lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h b/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h index 6b526f35914..ae9ef4980fc 100644 --- a/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h +++ b/lldb/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h @@ -20,16 +20,20 @@ #include "../HasAVX.h" #include "MachRegisterStatesI386.h" +#include <map> + class MachThread; class DNBArchImplI386 : public DNBArchProtocol { public: DNBArchImplI386(MachThread *thread) : + DNBArchProtocol(), m_thread(thread), m_state(), m_2pc_dbg_checkpoint(), - m_2pc_trans_state(Trans_Done) + m_2pc_trans_state(Trans_Done), + m_saved_register_states() { } virtual ~DNBArchImplI386() @@ -42,6 +46,9 @@ public: virtual bool SetRegisterValue(int set, int reg, const DNBRegisterValue *value); virtual nub_size_t GetRegisterContext (void *buf, nub_size_t buf_len); virtual nub_size_t SetRegisterContext (const void *buf, nub_size_t buf_len); + virtual uint32_t SaveRegisterState (); + virtual bool RestoreRegisterState (uint32_t save_id); + virtual kern_return_t GetRegisterState (int set, bool force); virtual kern_return_t SetRegisterState (int set); virtual bool RegisterSetStateIsValid (int set) const; @@ -240,6 +247,8 @@ protected: State m_state; DBG m_2pc_dbg_checkpoint; uint32_t m_2pc_trans_state; // Is transaction of DBG state change: Pedning (0), Done (1), or Rolled Back (2)? + typedef std::map<uint32_t, Context> SaveRegiterStates; + SaveRegiterStates m_saved_register_states; }; #endif // #if defined (__i386__) || defined (__x86_64__) |

