| //===-- RegisterCheckpoint.h ------------------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef liblldb_RegisterCheckpoint_h_ |
| #define liblldb_RegisterCheckpoint_h_ |
| |
| #include "lldb/Target/StackID.h" |
| #include "lldb/Utility/UserID.h" |
| #include "lldb/lldb-private.h" |
| |
| namespace lldb_private { |
| |
| // Inherit from UserID in case pushing/popping all register values can be done |
| // using a 64 bit integer that holds a baton/cookie instead of actually having |
| // to read all register values into a buffer |
| class RegisterCheckpoint : public UserID { |
| public: |
| enum class Reason { |
| // An expression is about to be run on the thread if the protocol that |
| // talks to the debuggee supports checkpointing the registers using a |
| // push/pop then the UserID base class in the RegisterCheckpoint can be |
| // used to store the baton/cookie that refers to the remote saved state. |
| eExpression, |
| // The register checkpoint wants the raw register bytes, so they must be |
| // read into m_data_sp, or the save/restore checkpoint should fail. |
| eDataBackup |
| }; |
| |
| RegisterCheckpoint(Reason reason) |
| : UserID(0), m_data_sp(), m_reason(reason) {} |
| |
| ~RegisterCheckpoint() {} |
| |
| lldb::DataBufferSP &GetData() { return m_data_sp; } |
| |
| const lldb::DataBufferSP &GetData() const { return m_data_sp; } |
| |
| protected: |
| lldb::DataBufferSP m_data_sp; |
| Reason m_reason; |
| |
| // Make RegisterCheckpointSP if you wish to share the data in this class. |
| DISALLOW_COPY_AND_ASSIGN(RegisterCheckpoint); |
| }; |
| |
| } // namespace lldb_private |
| |
| #endif // liblldb_RegisterCheckpoint_h_ |