Introduce target_{stop,continue}_ptid
authorGary Benson <gbenson@redhat.com>
Thu, 11 Sep 2014 10:19:56 +0000 (11:19 +0100)
committerGary Benson <gbenson@redhat.com>
Thu, 11 Sep 2014 10:19:56 +0000 (11:19 +0100)
This commit introduces two new functions to stop and restart target
processes that shared code can use and that clients must implement.
It also changes some shared code to use these functions.

gdb/ChangeLog:

* target/target.h (target_stop_ptid, target_continue_ptid):
Declare.
* target.c (target_stop_ptid, target_continue_ptid): New
functions.
* common/agent.c [!GDBSERVER]: Don't include infrun.h.
(agent_run_command): Always use target_stop_ptid and
target_continue_ptid.

gdb/gdbserver/ChangeLog:

* target.c (target_stop_ptid, target_continue_ptid): New
functions.

gdb/ChangeLog
gdb/common/agent.c
gdb/gdbserver/ChangeLog
gdb/gdbserver/target.c
gdb/target.c
gdb/target/target.h

index dda7ed96dbb2334100340e8f98ce67b54682384f..3dadc7838176bb10982de30755a5f6b010e48fe1 100644 (file)
@@ -1,3 +1,13 @@
+2014-09-11  Gary Benson  <gbenson@redhat.com>
+
+       * target/target.h (target_stop_ptid, target_continue_ptid):
+       Declare.
+       * target.c (target_stop_ptid, target_continue_ptid): New
+       functions.
+       * common/agent.c [!GDBSERVER]: Don't include infrun.h.
+       (agent_run_command): Always use target_stop_ptid and
+       target_continue_ptid.
+
 2014-09-11  Tom Tromey  <tromey@redhat.com>
            Gary Benson  <gbenson@redhat.com>
 
index 9f8ea9a469125c0d9660b37f6765a2a6b072e2a2..0ac73a9591c19e635427ef3ec10a80f569f4257d 100644 (file)
@@ -21,7 +21,6 @@
 #include "server.h"
 #else
 #include "defs.h"
-#include "infrun.h"
 #include "objfiles.h"
 #endif
 #include "target/target.h"
@@ -218,18 +217,7 @@ agent_run_command (int pid, const char *cmd, int len)
   DEBUG_AGENT ("agent: resumed helper thread\n");
 
   /* Resume helper thread.  */
-#ifdef GDBSERVER
-{
-  struct thread_resume resume_info;
-
-  resume_info.thread = ptid;
-  resume_info.kind = resume_continue;
-  resume_info.sig = GDB_SIGNAL_0;
-  (*the_target->resume) (&resume_info, 1);
-}
-#else
- target_resume (ptid, 0, GDB_SIGNAL_0);
-#endif
+  target_continue_ptid (ptid);
 
   fd = gdb_connect_sync_socket (pid);
   if (fd >= 0)
@@ -261,30 +249,9 @@ agent_run_command (int pid, const char *cmd, int len)
   /* Need to read response with the inferior stopped.  */
   if (!ptid_equal (ptid, null_ptid))
     {
-      struct target_waitstatus status;
-      int was_non_stop = non_stop;
       /* Stop thread PTID.  */
       DEBUG_AGENT ("agent: stop helper thread\n");
-#ifdef GDBSERVER
-      {
-       struct thread_resume resume_info;
-
-       resume_info.thread = ptid;
-       resume_info.kind = resume_stop;
-       resume_info.sig = GDB_SIGNAL_0;
-       (*the_target->resume) (&resume_info, 1);
-      }
-
-      non_stop = 1;
-      mywait (ptid, &status, 0, 0);
-#else
-      non_stop = 1;
-      target_stop (ptid);
-
-      memset (&status, 0, sizeof (status));
-      target_wait (ptid, &status, 0);
-#endif
-      non_stop = was_non_stop;
+      target_stop_ptid (ptid);
     }
 
   if (fd >= 0)
index f2f63b4dd78d99c5bffb9a0beaf4710b9649efe8..8a5ee1f125b6f3e0667cab4411fef4d3784fa9e6 100644 (file)
@@ -1,3 +1,8 @@
+2014-09-11  Gary Benson  <gbenson@redhat.com>
+
+       * target.c (target_stop_ptid, target_continue_ptid): New
+       functions.
+
 2014-09-11  Tom Tromey  <tromey@redhat.com>
            Gary Benson  <gbenson@redhat.com>
 
index 08506e516bceb384a1787ac2cb5d4eef15b0d6d7..e51b7db5e89a7ff54e8882493d24747fb4882942 100644 (file)
@@ -134,6 +134,38 @@ mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options,
   return ret;
 }
 
+/* See target/target.h.  */
+
+void
+target_stop_ptid (ptid_t ptid)
+{
+  struct target_waitstatus status;
+  int was_non_stop = non_stop;
+  struct thread_resume resume_info;
+
+  resume_info.thread = ptid;
+  resume_info.kind = resume_stop;
+  resume_info.sig = GDB_SIGNAL_0;
+  (*the_target->resume) (&resume_info, 1);
+
+  non_stop = 1;
+  mywait (ptid, &status, 0, 0);
+  non_stop = was_non_stop;
+}
+
+/* See target/target.h.  */
+
+void
+target_continue_ptid (ptid_t ptid)
+{
+  struct thread_resume resume_info;
+
+  resume_info.thread = ptid;
+  resume_info.kind = resume_continue;
+  resume_info.sig = GDB_SIGNAL_0;
+  (*the_target->resume) (&resume_info, 1);
+}
+
 int
 start_non_stop (int nonstop)
 {
index 711e7cb7052e17e881f1de5feb783312390b60dc..339b1d14e640d3d95077fe7d7f9fe278d40125a2 100644 (file)
@@ -3027,6 +3027,31 @@ target_stop (ptid_t ptid)
   (*current_target.to_stop) (&current_target, ptid);
 }
 
+/* See target/target.h.  */
+
+void
+target_stop_ptid (ptid_t ptid)
+{
+  struct target_waitstatus status;
+  int was_non_stop = non_stop;
+
+  non_stop = 1;
+  target_stop (ptid);
+
+  memset (&status, 0, sizeof (status));
+  target_wait (ptid, &status, 0);
+
+  non_stop = was_non_stop;
+}
+
+/* See target/target.h.  */
+
+void
+target_continue_ptid (ptid_t ptid)
+{
+  target_resume (ptid, 0, GDB_SIGNAL_0);
+}
+
 /* Concatenate ELEM to LIST, a comma separate list, and return the
    result.  The LIST incoming argument is released.  */
 
index 0a3c4b7d4e7bb4680a10f8c3bea6cfb4a169d3e0..99a79667e234f5afff75f2ae0191e4372e1bfcfe 100644 (file)
@@ -59,4 +59,15 @@ extern int target_read_uint32 (CORE_ADDR memaddr, uint32_t *result);
 extern int target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr,
                                ssize_t len);
 
+/* Make target stop in a continuable fashion.  (For instance, under
+   Unix, this should act like SIGSTOP).  This function must be
+   provided by the client.  */
+
+extern void target_stop_ptid (ptid_t ptid);
+
+/* Restart a target that was previously stopped by target_stop_ptid.
+   This function must be provided by the client.  */
+
+extern void target_continue_ptid (ptid_t ptid);
+
 #endif /* TARGET_COMMON_H */