1//===-- RegisterContextMemory.h ---------------------------------*- C++ -*-===// 2// 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 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef lldb_RegisterContextMemory_h_ 10#define lldb_RegisterContextMemory_h_ 11 12#include <vector> 13 14#include "lldb/Target/RegisterContext.h" 15#include "lldb/Utility/DataExtractor.h" 16#include "lldb/lldb-private.h" 17 18class DynamicRegisterInfo; 19 20class RegisterContextMemory : public lldb_private::RegisterContext { 21public: 22 RegisterContextMemory(lldb_private::Thread &thread, 23 uint32_t concrete_frame_idx, 24 DynamicRegisterInfo ®_info, 25 lldb::addr_t reg_data_addr); 26 27 ~RegisterContextMemory() override; 28 29 void InvalidateAllRegisters() override; 30 31 size_t GetRegisterCount() override; 32 33 const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override; 34 35 size_t GetRegisterSetCount() override; 36 37 const lldb_private::RegisterSet *GetRegisterSet(size_t reg_set) override; 38 39 uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, 40 uint32_t num) override; 41 42 // If all of the thread register are in a contiguous buffer in 43 // memory, then the default ReadRegister/WriteRegister and 44 // ReadAllRegisterValues/WriteAllRegisterValues will work. If thread 45 // registers are not contiguous, clients will want to subclass this 46 // class and modify the read/write functions as needed. 47 48 bool ReadRegister(const lldb_private::RegisterInfo *reg_info, 49 lldb_private::RegisterValue ®_value) override; 50 51 bool WriteRegister(const lldb_private::RegisterInfo *reg_info, 52 const lldb_private::RegisterValue ®_value) override; 53 54 bool ReadAllRegisterValues(lldb::DataBufferSP &data_sp) override; 55 56 bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; 57 58 void SetAllRegisterData(const lldb::DataBufferSP &data_sp); 59 60protected: 61 void SetAllRegisterValid(bool b); 62 63 DynamicRegisterInfo &m_reg_infos; 64 std::vector<bool> m_reg_valid; 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 68 69private: 70 DISALLOW_COPY_AND_ASSIGN(RegisterContextMemory); 71}; 72 73#endif // lldb_RegisterContextMemory_h_ 74