summaryrefslogtreecommitdiff
path: root/gdb/remote.c
diff options
context:
space:
mode:
authorMichael Snyder <msnyder@specifix.com>2009-09-10 21:02:46 +0000
committerMichael Snyder <msnyder@specifix.com>2009-09-10 21:02:46 +0000
commit86cd6c482a1ae005482e5ff67195e919ac03308c (patch)
tree0e34c457426001e40773786104169a7ae2d9ebd0 /gdb/remote.c
parent439b2c04aa5870f7ac1c7a094363e7802e0471ff (diff)
downloadgdb-86cd6c482a1ae005482e5ff67195e919ac03308c.tar.gz
2009-09-10 Michael Snyder <msnyder@vmware.com>
* remote.c (PACKET_bc, PACKET_bs): New enums. (remote_protocol_features): Add ReverseStep, ReverseContinue. (remote_resume): Check for reverse capability. (_initialize_remote): Add packet config for "bs" and "bc" packets. * NEWS (new options): Mention set/show for "bs" and "bc" packets.
Diffstat (limited to 'gdb/remote.c')
-rw-r--r--gdb/remote.c34
1 files changed, 29 insertions, 5 deletions
diff --git a/gdb/remote.c b/gdb/remote.c
index e2672d3fc87..9fe88f6ee4d 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -1000,6 +1000,8 @@ enum {
PACKET_qXfer_siginfo_write,
PACKET_qAttached,
PACKET_ConditionalTracepoints,
+ PACKET_bc,
+ PACKET_bs,
PACKET_MAX
};
@@ -3051,6 +3053,10 @@ static struct protocol_feature remote_protocol_features[] = {
PACKET_qXfer_siginfo_write },
{ "ConditionalTracepoints", PACKET_DISABLE, remote_cond_tracepoint_feature,
PACKET_ConditionalTracepoints },
+ { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
+ PACKET_bc },
+ { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
+ PACKET_bs },
};
static void
@@ -3801,8 +3807,10 @@ remote_resume (struct target_ops *ops,
remote_pass_signals ();
/* The vCont packet doesn't need to specify threads via Hc. */
- if (remote_vcont_resume (ptid, step, siggnal))
- goto done;
+ /* No reverse support (yet) for vCont. */
+ if (execution_direction != EXEC_REVERSE)
+ if (remote_vcont_resume (ptid, step, siggnal))
+ goto done;
/* All other supported resume packets do use Hc, so set the continue
thread. */
@@ -3818,6 +3826,14 @@ remote_resume (struct target_ops *ops,
if (info_verbose && siggnal != TARGET_SIGNAL_0)
warning (" - Can't pass signal %d to target in reverse: ignored.\n",
siggnal);
+
+ if (step
+ && remote_protocol_packets[PACKET_bs].support == PACKET_DISABLE)
+ error (_("Remote reverse-step not supported."));
+ if (!step
+ && remote_protocol_packets[PACKET_bc].support == PACKET_DISABLE)
+ error ("_(Remote reverse-continue not supported."));
+
strcpy (buf, step ? "bs" : "bc");
}
else if (siggnal != TARGET_SIGNAL_0)
@@ -8730,12 +8746,14 @@ remote_command (char *args, int from_tty)
help_list (remote_cmdlist, "remote ", -1, gdb_stdout);
}
-static int remote_target_can_reverse = 1;
-
static int
remote_can_execute_reverse (void)
{
- return remote_target_can_reverse;
+ if (remote_protocol_packets[PACKET_bs].support == PACKET_ENABLE
+ || remote_protocol_packets[PACKET_bc].support == PACKET_ENABLE)
+ return 1;
+ else
+ return 0;
}
static int
@@ -9165,6 +9183,12 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
"qGetTLSAddr", "get-thread-local-storage-address",
0);
+ add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
+ "bc", "reverse-continue", 0);
+
+ add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
+ "bs", "reverse-step", 0);
+
add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
"qSupported", "supported-packets", 0);