aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdbserver/ChangeLog8
-rw-r--r--gdbserver/remote-utils.cc20
-rw-r--r--gdbserver/server.cc3
-rw-r--r--gdbserver/server.h1
4 files changed, 32 insertions, 0 deletions
diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog
index dc8964b..7a5a3b7 100644
--- a/gdbserver/ChangeLog
+++ b/gdbserver/ChangeLog
@@ -1,3 +1,11 @@
+2020-03-02 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * remote-utils.cc (prepare_resume_reply): Add ability to convert T
+ reply into an S reply.
+ * server.cc (disable_packet_T): New global.
+ (captured_main): Set new global when appropriate.
+ * server.h (disable_packet_T): Declare.
+
2020-02-21 Tom Tromey <tom@tromey.com>
* Makefile.in (mostlyclean): New target.
diff --git a/gdbserver/remote-utils.cc b/gdbserver/remote-utils.cc
index 6b54749..1c211e2 100644
--- a/gdbserver/remote-utils.cc
+++ b/gdbserver/remote-utils.cc
@@ -1204,6 +1204,26 @@ prepare_resume_reply (char *buf, ptid_t ptid,
else
sprintf (buf, "T%02x", status->value.sig);
+ if (disable_packet_T)
+ {
+ /* This is a bit (OK, a lot) of a kludge, however, this isn't
+ really a user feature, but exists only so GDB can use the
+ gdbserver to test handling of the 'S' stop reply packet, so
+ we would rather this code be as simple as possible.
+
+ By this point we've started to build the 'T' stop packet,
+ and it should look like 'Txx....' where 'x' is a hex digit.
+ An 'S' stop packet always looks like 'Sxx', so all we do
+ here is convert the buffer from a T packet to an S packet
+ and the avoid adding any extra content by breaking out. */
+ gdb_assert (*buf == 'T');
+ gdb_assert (isxdigit (*(buf + 1)));
+ gdb_assert (isxdigit (*(buf + 2)));
+ *buf = 'S';
+ *(buf + 3) = '\0';
+ break;
+ }
+
buf += strlen (buf);
saved_thread = current_thread;
diff --git a/gdbserver/server.cc b/gdbserver/server.cc
index a4cb1eb..43962ad 100644
--- a/gdbserver/server.cc
+++ b/gdbserver/server.cc
@@ -130,6 +130,7 @@ bool disable_packet_vCont;
bool disable_packet_Tthread;
bool disable_packet_qC;
bool disable_packet_qfThreadInfo;
+bool disable_packet_T;
static unsigned char *mem_buf;
@@ -3649,6 +3650,8 @@ captured_main (int argc, char *argv[])
disable_packet_qC = true;
else if (strcmp ("qfThreadInfo", tok) == 0)
disable_packet_qfThreadInfo = true;
+ else if (strcmp ("T", tok) == 0)
+ disable_packet_T = true;
else if (strcmp ("threads", tok) == 0)
{
disable_packet_vCont = true;
diff --git a/gdbserver/server.h b/gdbserver/server.h
index 3c28686..5ef48b6 100644
--- a/gdbserver/server.h
+++ b/gdbserver/server.h
@@ -76,6 +76,7 @@ extern bool disable_packet_vCont;
extern bool disable_packet_Tthread;
extern bool disable_packet_qC;
extern bool disable_packet_qfThreadInfo;
+extern bool disable_packet_T;
extern bool run_once;
extern bool non_stop;