//===-- RegisterCheckpoint.h ------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef liblldb_RegisterCheckpoint_h_ #define liblldb_RegisterCheckpoint_h_ #include "lldb/lldb-private.h" #include "lldb/Core/UserID.h" #include "lldb/Target/StackID.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_