2009-09-10 Michael Snyder <msnyder@vmware.com>
authorMichael Snyder <msnyder@vmware.com>
Thu, 10 Sep 2009 21:02:46 +0000 (21:02 +0000)
committerMichael Snyder <msnyder@vmware.com>
Thu, 10 Sep 2009 21:02:46 +0000 (21:02 +0000)
* 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.

gdb/ChangeLog
gdb/NEWS
gdb/remote.c

index e7b274847fa32a0db8d8a8faa764504f1a8dbb11..3767c4807ec1eca54dd0f0742072a14235f236f2 100644 (file)
@@ -1,3 +1,11 @@
+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.
+
 2009-09-10  Joel Brobecker  <brobecker@adacore.com>
 
        * top.c (interactive_mode): New static variable.
index 14da6c829f2404b2dc0026750a2260dbb3bfdfed..56fdae9f8f8cad37cf54216882e8f22f0c184a3c 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -309,6 +309,14 @@ show remote write-siginfo-object
   Control use of remote protocol `qXfer:siginfo:write' (write-siginfo-object)
   packet.
 
+set remote reverse-continue
+show remote reverse-continue
+  Control use of remote protocol 'bc' (reverse-continue) packet.
+
+set remote reverse-step
+show remote reverse-step
+  Control use of remote protocol 'bs' (reverse-step) packet.
+
 set displaced-stepping
 show displaced-stepping
   Control displaced stepping mode.  Displaced stepping is a way to
index e2672d3fc873725f2494e9bbcd629a6d4cdace30..9fe88f6ee4dfb5ce296cf93e03af4e50eef79339 100644 (file)
@@ -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);