summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Snyder <msnyder@specifix.com>2008-06-22 02:36:30 +0000
committerMichael Snyder <msnyder@specifix.com>2008-06-22 02:36:30 +0000
commitf20ac148a61e9558c8719e1e01ab0b447deec322 (patch)
treea1d9971903c4226fcc441296a5a3ad5d2c3f8c68
parent8fdfe939487014f8e22f20c3a668aea83e8066ed (diff)
downloadgdb-f20ac148a61e9558c8719e1e01ab0b447deec322.tar.gz
2008-06-21 Michael Snyder <msnyder@specifix.com>
Add support for 'R' packet (restart). * gdbfreeplay-back.c (handle_special_case). Add support for 'R'. Remove support for "monitor gdbfreeplay-echo".
-rw-r--r--gdb/gdbserver/ChangeLog4
-rw-r--r--gdb/gdbserver/gdbfreeplay-back.c25
2 files changed, 13 insertions, 16 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index a748f2858e0..7464deedac5 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,5 +1,9 @@
2008-06-21 Michael Snyder <msnyder@specifix.com>
+ Add support for 'R' packet (restart).
+ * gdbfreeplay-back.c (handle_special_case). Add support for 'R'.
+ Remove support for "monitor gdbfreeplay-echo".
+
Add support for 'O' packet output.
* remote-breakpoint.h (PLAY_O_PACKETS): New enum const.
* gdbfreeplay-back.c (StopFrame): Discard gpos, replace with Opos.
diff --git a/gdb/gdbserver/gdbfreeplay-back.c b/gdb/gdbserver/gdbfreeplay-back.c
index 0cc65fe4dc2..e44e2a4bab8 100644
--- a/gdb/gdbserver/gdbfreeplay-back.c
+++ b/gdb/gdbserver/gdbfreeplay-back.c
@@ -700,23 +700,16 @@ handle_special_case (FILE *infile, int fd, char *request)
return OK;
}
- /* Handle "monitor gdbfreeplay-echo"
- (just to get a handle on the 'O' message). */
- if ((p = strstr (request, monitor_echo)) != NULL)
+ /* Handle 'R' (restart) request.
+ This is an extended-remote request that is not really used any more,
+ but we can send it out-of-band (using "maint packet") to effectively
+ set the replay buffer back to the beginning. */
+ if (strstr (request, "$R#52") != NULL)
{
- /* OK, this will be an ascii-fied string. */
- p += strlen (monitor_echo);
- /* Skip spaces */
- while (p[0] == '2' && p[1] == '0')
- p += 2; /* skip a space */
-
- while (p[0] && p[0] != '#')
- {
- c = hex_to_int (*p++) << 4;
- c += hex_to_int (*p++);
- fputc (c, stdout);
- }
- fprintf (stdout, "\n");
+ /* Reset replay buffer to beginning. */
+ /* NOTE: gdb doesn't know about target state changing, so
+ if you use this, you must accompany it with "flushregs". */
+ cur_frame = 0;
return OK;
}