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