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