1 //===-- DynamicRegisterInfo.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_DynamicRegisterInfo_h_ 11 #define lldb_DynamicRegisterInfo_h_ 12 13 // C Includes 14 // C++ Includes 15 #include <map> 16 #include <vector> 17 18 // Other libraries and framework includes 19 // Project includes 20 #include "lldb/Utility/ConstString.h" 21 #include "lldb/Utility/StructuredData.h" 22 #include "lldb/lldb-private.h" 23 24 class DynamicRegisterInfo { 25 public: 26 DynamicRegisterInfo() = default; 27 28 DynamicRegisterInfo(const lldb_private::StructuredData::Dictionary &dict, 29 const lldb_private::ArchSpec &arch); 30 31 virtual ~DynamicRegisterInfo() = default; 32 33 DynamicRegisterInfo(DynamicRegisterInfo &) = delete; 34 void operator=(DynamicRegisterInfo &) = delete; 35 36 DynamicRegisterInfo(DynamicRegisterInfo &&info); 37 DynamicRegisterInfo &operator=(DynamicRegisterInfo &&info); 38 39 size_t SetRegisterInfo(const lldb_private::StructuredData::Dictionary &dict, 40 const lldb_private::ArchSpec &arch); 41 42 void AddRegister(lldb_private::RegisterInfo ®_info, 43 lldb_private::ConstString ®_name, 44 lldb_private::ConstString ®_alt_name, 45 lldb_private::ConstString &set_name); 46 47 void Finalize(const lldb_private::ArchSpec &arch); 48 49 size_t GetNumRegisters() const; 50 51 size_t GetNumRegisterSets() const; 52 53 size_t GetRegisterDataByteSize() const; 54 55 const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(uint32_t i) const; 56 57 lldb_private::RegisterInfo *GetRegisterInfoAtIndex(uint32_t i); 58 59 const lldb_private::RegisterSet *GetRegisterSet(uint32_t i) const; 60 61 uint32_t GetRegisterSetIndexByName(lldb_private::ConstString &set_name, 62 bool can_create); 63 64 uint32_t ConvertRegisterKindToRegisterNumber(uint32_t kind, 65 uint32_t num) const; 66 67 void Dump() const; 68 69 void Clear(); 70 71 protected: 72 //------------------------------------------------------------------ 73 // Classes that inherit from DynamicRegisterInfo can see and modify these 74 //------------------------------------------------------------------ 75 typedef std::vector<lldb_private::RegisterInfo> reg_collection; 76 typedef std::vector<lldb_private::RegisterSet> set_collection; 77 typedef std::vector<uint32_t> reg_num_collection; 78 typedef std::vector<reg_num_collection> set_reg_num_collection; 79 typedef std::vector<lldb_private::ConstString> name_collection; 80 typedef std::map<uint32_t, reg_num_collection> reg_to_regs_map; 81 typedef std::vector<uint8_t> dwarf_opcode; 82 typedef std::map<uint32_t, dwarf_opcode> dynamic_reg_size_map; 83 84 const lldb_private::RegisterInfo * 85 GetRegisterInfo(const lldb_private::ConstString ®_name) const; 86 87 void MoveFrom(DynamicRegisterInfo &&info); 88 89 reg_collection m_regs; 90 set_collection m_sets; 91 set_reg_num_collection m_set_reg_nums; 92 name_collection m_set_names; 93 reg_to_regs_map m_value_regs_map; 94 reg_to_regs_map m_invalidate_regs_map; 95 dynamic_reg_size_map m_dynamic_reg_size_map; 96 size_t m_reg_data_byte_size = 0u; // The number of bytes required to store 97 // all registers 98 bool m_finalized = false; 99 }; 100 #endif // lldb_DynamicRegisterInfo_h_ 101