diff options
-rw-r--r-- | gdbserver/ChangeLog | 8 | ||||
-rw-r--r-- | gdbserver/remote-utils.cc | 20 | ||||
-rw-r--r-- | gdbserver/server.cc | 3 | ||||
-rw-r--r-- | gdbserver/server.h | 1 |
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; |