From 15d14d36fc7ac30cdbde8c2a78e901ba2c47e94d Mon Sep 17 00:00:00 2001 From: Oxore Date: Sun, 2 Oct 2022 00:49:39 +0300 Subject: Impl setting registers via GDB --- gdbremote_parser.hpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'gdbremote_parser.hpp') 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&& regs): registers(std::move(regs)) {} + std::vector 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 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: -- cgit v1.2.3