From 026894023fa53fa32fd342d18e05f55743cf6c4b Mon Sep 17 00:00:00 2001 From: Oxore Date: Tue, 30 Aug 2022 00:22:07 +0300 Subject: Convince GDB that it is connected --- gdbremote.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'gdbremote.cpp') diff --git a/gdbremote.cpp b/gdbremote.cpp index a093192..eb0fed8 100644 --- a/gdbremote.cpp +++ b/gdbremote.cpp @@ -56,6 +56,24 @@ static int setup_socket(uint16_t port) return socket_fd; } +static std::string CreateResponse(const GDBRemote::Packet& packet) +{ + using namespace GDBRemote; + if (0) { + } else if (packet.type == PacketType::kQueryHaltReason) { + return "S05"; + } else if (packet.type == PacketType::kSetThreadForCont) { + return "OK"; + } else if (packet.type == PacketType::kQueryAttached) { + return "1"; + } else if (packet.type == PacketType::kInterrupt) { + return "OK"; + } else if (packet.type == PacketType::kReadGeneralRegisters) { + return std::string(2*4*17, '0') + "00000200"; // 17 registers + PC + } + return ""; +} + int main(int argc, char *argv[]) { const int port = argc > 1 ? atoi(argv[1]) : 3333; @@ -94,9 +112,8 @@ int main(int argc, char *argv[]) } if (res->packet.length() > 0) { const auto packet = GDBRemote::Packet::Parse(res->packet); - - (void) packet; - const auto response = exchange_ctx.WrapDataToSend(); + const auto response = + exchange_ctx.WrapDataToSend(CreateResponse(packet)); printf("-> \"%s\"\n", response.c_str()); if (send(conn_fd, &response[0], response.length(), 0) == -1) perror("Send failed (response)"); -- cgit v1.2.3