summaryrefslogtreecommitdiff
path: root/gdbremote_parser.cpp
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2022-09-23 10:00:55 +0300
committerOxore <oxore@protonmail.com>2022-09-25 15:06:52 +0300
commit2e363155df0380bed5210e41d395015320a9bb74 (patch)
treeda88603bdb250e40aa4c6853d6c37325a2d04aa4 /gdbremote_parser.cpp
parent2233177e7ada45838dc61d1a5f98ff44f7fbc3a6 (diff)
Impl monitor reset and reset halt commands
Diffstat (limited to 'gdbremote_parser.cpp')
-rw-r--r--gdbremote_parser.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/gdbremote_parser.cpp b/gdbremote_parser.cpp
index b9115be..98533c5 100644
--- a/gdbremote_parser.cpp
+++ b/gdbremote_parser.cpp
@@ -79,6 +79,15 @@ struct Token {
}
};
+static std::string DecodeBinaryHex(const std::string& data_hex)
+{
+ std::string data(data_hex.size()/2, '\0');
+ for (size_t i = 0; i < data.size(); i++) {
+ data[i] = Utils::ParseByteFromHexChars(data_hex[i * 2], data_hex[i * 2 + 1]);
+ }
+ return data;
+}
+
struct Command {
std::string name;
Packet (*parse)(const std::vector<Token>&&);
@@ -122,6 +131,22 @@ struct Command {
{
return Packet{PacketType::kQueryTraceStatus};
}
+ static Packet parseQueryRcmd(const std::vector<Token>&& tokens)
+ {
+ if (tokens.size() < 3)
+ return Packet::None();
+ if (tokens[1].type != TokenType::kSeparatorComma)
+ return Packet::None();
+ if (tokens[2].type != TokenType::kHexNumeric)
+ return Packet::None();
+ const std::string& data_encoded = tokens[2].data;
+ const std::string data = DecodeBinaryHex(data_encoded);
+ printf("%s\n", data.c_str());
+ return Packet{
+ PacketType::kQueryRcmd,
+ std::make_unique<const PacketDataRcmd>(std::move(data)),
+ };
+ }
static Packet parseSetThreadForCont(const std::vector<Token>&&)
{
// TODO arguments
@@ -146,7 +171,7 @@ struct Command {
}
static Packet parseContinueVCont(const std::vector<Token>&& tokens)
{
- const std::string first_arg = tokens[1].data;
+ const std::string first_arg = tokens.size() > 1 ? tokens[1].data : "";
// Check if it is "vCont?" command
if (first_arg == "?") {
return Packet{PacketType::kContinueAskSupported};
@@ -260,6 +285,7 @@ static const Command commands[] = {
{ "qL", Command::parseQueryRTOSThreadInfo },
{ "qAttached", Command::parseQueryAttached },
{ "qTStatus", Command::parseQueryTraceStatus },
+ { "qRcmd", Command::parseQueryRcmd },
{ "Hc", Command::parseSetThreadForCont },
{ "Hg", Command::parseSetThreadForOps },
{ "vMustReplyEmpty", Command::parseMustReplyEmpty },