diff options
author | Oxore <oxore@protonmail.com> | 2022-10-02 00:49:39 +0300 |
---|---|---|
committer | Oxore <oxore@protonmail.com> | 2022-10-02 00:59:23 +0300 |
commit | 15d14d36fc7ac30cdbde8c2a78e901ba2c47e94d (patch) | |
tree | 4606963389204dffa7a8cef51fb34ed80ecc01a3 /gdbremote_parser.hpp | |
parent | 72abe5f3e714df9cc8310a78bdfa648feb79c4d2 (diff) |
Impl setting registers via GDB
Diffstat (limited to 'gdbremote_parser.hpp')
-rw-r--r-- | gdbremote_parser.hpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/gdbremote_parser.hpp b/gdbremote_parser.hpp index d35d78e..856206a 100644 --- a/gdbremote_parser.hpp +++ b/gdbremote_parser.hpp @@ -61,6 +61,9 @@ enum class PacketType: int { kContinue, kContinueAskSupported, kReadGeneralRegisters, + kWriteGeneralRegisters, + kReadRegister, + kWriteRegister, kReadMemory, kWriteMemory, kStep, @@ -97,7 +100,7 @@ struct PacketDataWriteMemory: public PacketData { }; struct PacketDataRcmd: public PacketData { - PacketDataRcmd(const std::string&& a_data): data(std::move(a_data)) {} + PacketDataRcmd(std::string&& a_data): data(std::move(a_data)) {} std::string data{}; virtual ~PacketDataRcmd() {} }; @@ -120,6 +123,25 @@ struct PacketDataBreakpoint: public PacketData { virtual ~PacketDataBreakpoint() {} }; +struct PacketDataWriteGeneralRegisters: public PacketData { + PacketDataWriteGeneralRegisters(std::vector<uint32_t>&& regs): registers(std::move(regs)) {} + std::vector<uint32_t> registers{}; + virtual ~PacketDataWriteGeneralRegisters() {} +}; + +struct PacketDataReadRegister: public PacketData { + PacketDataReadRegister(uint32_t a_reg_id): reg_id(a_reg_id) {} + uint32_t reg_id{}; + virtual ~PacketDataReadRegister() {} +}; + +struct PacketDataWriteRegister: public PacketData { + PacketDataWriteRegister(uint32_t a_reg_id, uint32_t a_value) + : reg_id(a_reg_id), value(a_value) {} + uint32_t reg_id{}, value{}; + virtual ~PacketDataWriteRegister() {} +}; + struct Packet { const PacketType type{}; const std::unique_ptr<const PacketData> data{nullptr}; @@ -174,6 +196,12 @@ struct Packet { return "vCont?"; case PacketType::kReadGeneralRegisters: return "g"; + case PacketType::kWriteGeneralRegisters: + return "G"; + case PacketType::kReadRegister: + return "p"; + case PacketType::kWriteRegister: + return "P"; case PacketType::kReadMemory: return "m"; case PacketType::kWriteMemory: |