LLDB mainline
GDBRemoteRegisterContext.h
Go to the documentation of this file.
1//===-- GDBRemoteRegisterContext.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_SOURCE_PLUGINS_PROCESS_GDB_REMOTE_GDBREMOTEREGISTERCONTEXT_H
10#define LLDB_SOURCE_PLUGINS_PROCESS_GDB_REMOTE_GDBREMOTEREGISTERCONTEXT_H
11
12#include <vector>
13
19#include "lldb/lldb-private.h"
20
22
23class StringExtractor;
24
25namespace lldb_private {
26namespace process_gdb_remote {
27
28class ThreadGDBRemote;
29class ProcessGDBRemote;
30class GDBRemoteDynamicRegisterInfo;
31
32typedef std::shared_ptr<GDBRemoteDynamicRegisterInfo>
34
36public:
38
39 ~GDBRemoteDynamicRegisterInfo() override = default;
40
41 bool UpdateARM64SVERegistersInfos(uint64_t vg);
42};
43
45public:
46 GDBRemoteRegisterContext(ThreadGDBRemote &thread, uint32_t concrete_frame_idx,
48 bool read_all_at_once, bool write_all_at_once);
49
51
52 void InvalidateAllRegisters() override;
53
54 size_t GetRegisterCount() override;
55
56 const RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override;
57
58 size_t GetRegisterSetCount() override;
59
60 const RegisterSet *GetRegisterSet(size_t reg_set) override;
61
62 bool ReadRegister(const RegisterInfo *reg_info,
63 RegisterValue &value) override;
64
65 bool WriteRegister(const RegisterInfo *reg_info,
66 const RegisterValue &value) override;
67
68 bool ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override;
69
70 bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;
71
72 bool ReadAllRegisterValues(RegisterCheckpoint &reg_checkpoint) override;
73
74 bool
75 WriteAllRegisterValues(const RegisterCheckpoint &reg_checkpoint) override;
76
78 uint32_t num) override;
79
81
82protected:
83 friend class ThreadGDBRemote;
84
85 bool ReadRegisterBytes(const RegisterInfo *reg_info);
86
87 bool WriteRegisterBytes(const RegisterInfo *reg_info, DataExtractor &data,
88 uint32_t data_offset);
89
90 bool PrivateSetRegisterValue(uint32_t reg, llvm::ArrayRef<uint8_t> data);
91
92 bool PrivateSetRegisterValue(uint32_t reg, uint64_t val);
93
94 void SetAllRegisterValid(bool b);
95
96 bool GetRegisterIsValid(uint32_t reg) const {
97 assert(reg < m_reg_valid.size());
98 if (reg < m_reg_valid.size())
99 return m_reg_valid[reg];
100 return false;
101 }
102
103 void SetRegisterIsValid(const RegisterInfo *reg_info, bool valid) {
104 if (reg_info)
105 return SetRegisterIsValid(reg_info->kinds[lldb::eRegisterKindLLDB],
106 valid);
107 }
108
109 void SetRegisterIsValid(uint32_t reg, bool valid) {
110 assert(reg < m_reg_valid.size());
111 if (reg < m_reg_valid.size())
112 m_reg_valid[reg] = valid;
113 }
114
116 std::vector<bool> m_reg_valid;
121
122private:
123 // Helper function for ReadRegisterBytes().
124 bool GetPrimordialRegister(const RegisterInfo *reg_info,
126 // Helper function for WriteRegisterBytes().
127 bool SetPrimordialRegister(const RegisterInfo *reg_info,
129
133};
134
135} // namespace process_gdb_remote
136} // namespace lldb_private
137
138#endif // LLDB_SOURCE_PLUGINS_PROCESS_GDB_REMOTE_GDBREMOTEREGISTERCONTEXT_H
An data extractor class.
Definition: DataExtractor.h:48
const RegisterInfo * GetRegisterInfoAtIndex(size_t reg) override
const RegisterSet * GetRegisterSet(size_t reg_set) override
const GDBRemoteRegisterContext & operator=(const GDBRemoteRegisterContext &)=delete
GDBRemoteRegisterContext(const GDBRemoteRegisterContext &)=delete
bool WriteRegisterBytes(const RegisterInfo *reg_info, DataExtractor &data, uint32_t data_offset)
bool PrivateSetRegisterValue(uint32_t reg, llvm::ArrayRef< uint8_t > data)
bool ReadRegister(const RegisterInfo *reg_info, RegisterValue &value) override
bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override
bool WriteRegister(const RegisterInfo *reg_info, const RegisterValue &value) override
bool ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override
void SetRegisterIsValid(const RegisterInfo *reg_info, bool valid)
bool SetPrimordialRegister(const RegisterInfo *reg_info, GDBRemoteCommunicationClient &gdb_comm)
uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num) override
Convert from a given register numbering scheme to the lldb register numbering scheme.
bool GetPrimordialRegister(const RegisterInfo *reg_info, GDBRemoteCommunicationClient &gdb_comm)
std::shared_ptr< GDBRemoteDynamicRegisterInfo > GDBRemoteDynamicRegisterInfoSP
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14
RegisterKind
Register numbering types.
@ eRegisterKindLLDB
lldb's internal register numbers