1 //===-- RegisterContextMemory.h ---------------------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTMEMORY_H
10 #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTMEMORY_H
14 #include "lldb/Target/DynamicRegisterInfo.h"
15 #include "lldb/Target/RegisterContext.h"
16 #include "lldb/Utility/DataExtractor.h"
17 #include "lldb/lldb-private.h"
19 class RegisterContextMemory
: public lldb_private::RegisterContext
{
21 RegisterContextMemory(lldb_private::Thread
&thread
,
22 uint32_t concrete_frame_idx
,
23 lldb_private::DynamicRegisterInfo
®_info
,
24 lldb::addr_t reg_data_addr
);
26 ~RegisterContextMemory() override
;
28 void InvalidateAllRegisters() override
;
30 size_t GetRegisterCount() override
;
32 const lldb_private::RegisterInfo
*GetRegisterInfoAtIndex(size_t reg
) override
;
34 size_t GetRegisterSetCount() override
;
36 const lldb_private::RegisterSet
*GetRegisterSet(size_t reg_set
) override
;
38 uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind
,
39 uint32_t num
) override
;
41 // If all of the thread register are in a contiguous buffer in
42 // memory, then the default ReadRegister/WriteRegister and
43 // ReadAllRegisterValues/WriteAllRegisterValues will work. If thread
44 // registers are not contiguous, clients will want to subclass this
45 // class and modify the read/write functions as needed.
47 bool ReadRegister(const lldb_private::RegisterInfo
*reg_info
,
48 lldb_private::RegisterValue
®_value
) override
;
50 bool WriteRegister(const lldb_private::RegisterInfo
*reg_info
,
51 const lldb_private::RegisterValue
®_value
) override
;
53 bool ReadAllRegisterValues(lldb::WritableDataBufferSP
&data_sp
) override
;
55 bool WriteAllRegisterValues(const lldb::DataBufferSP
&data_sp
) override
;
57 void SetAllRegisterData(const lldb::DataBufferSP
&data_sp
);
60 void SetAllRegisterValid(bool b
);
62 lldb_private::DynamicRegisterInfo
&m_reg_infos
;
63 std::vector
<bool> m_reg_valid
;
64 lldb::WritableDataBufferSP m_data
;
65 lldb_private::DataExtractor m_reg_data
;
66 lldb::addr_t m_reg_data_addr
; // If this is valid, then we have a register
67 // context that is stored in memmory
70 RegisterContextMemory(const RegisterContextMemory
&) = delete;
71 const RegisterContextMemory
&
72 operator=(const RegisterContextMemory
&) = delete;
75 #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTMEMORY_H