summaryrefslogtreecommitdiff
path: root/gdbremote_parser.hpp
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2022-08-30 16:49:38 +0300
committerOxore <oxore@protonmail.com>2022-08-30 16:49:38 +0300
commited3cf413dfe5f874f203f8b6a696af29cfc47dcd (patch)
tree9d9c181a568cf1833218444c0d2b26b33063435e /gdbremote_parser.hpp
parent026894023fa53fa32fd342d18e05f55743cf6c4b (diff)
Impl emulator stepping with GDB
Diffstat (limited to 'gdbremote_parser.hpp')
-rw-r--r--gdbremote_parser.hpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/gdbremote_parser.hpp b/gdbremote_parser.hpp
index 2e9fd88..88a0cf7 100644
--- a/gdbremote_parser.hpp
+++ b/gdbremote_parser.hpp
@@ -57,14 +57,18 @@ enum class PacketType: int {
kEnableExtendedMode,
kInterrupt,
kContinue,
+ kContinueAskSupported,
kReadGeneralRegisters,
+ kReadMemory,
+ kStep,
};
struct PacketData {
- PacketData() = delete;
+ virtual ~PacketData() {};
+protected:
PacketData(const PacketData&) = delete;
PacketData(PacketData&&) = delete;
- virtual ~PacketData() {}
+ PacketData() = default;
};
struct PacketDataSupportedFeatures: public PacketData {
@@ -72,9 +76,16 @@ struct PacketDataSupportedFeatures: public PacketData {
virtual ~PacketDataSupportedFeatures() {}
};
+struct PacketDataReadMemory: public PacketData {
+ PacketDataReadMemory(uint32_t a_offset, uint32_t a_length)
+ : offset(a_offset), length(a_length) {}
+ uint32_t offset{}, length{};
+ virtual ~PacketDataReadMemory() {}
+};
+
struct Packet {
const PacketType type{};
- const std::unique_ptr<PacketData> data{nullptr};
+ const std::unique_ptr<const PacketData> data{nullptr};
/** Convert raw packet data into a Packet
*
@@ -118,8 +129,14 @@ struct Packet {
return "vCtrlC";
case PacketType::kContinue:
return "vCont";
+ case PacketType::kContinueAskSupported:
+ return "vCont?";
case PacketType::kReadGeneralRegisters:
return "g";
+ case PacketType::kReadMemory:
+ return "m";
+ case PacketType::kStep:
+ return "s";
}
return "<unknown>";
}