aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/common/agent.c37
-rw-r--r--gdb/gdbserver/ChangeLog5
-rw-r--r--gdb/gdbserver/target.c32
-rw-r--r--gdb/target.c25
-rw-r--r--gdb/target/target.h11
6 files changed, 85 insertions, 35 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index dda7ed9..3dadc78 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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>
diff --git a/gdb/common/agent.c b/gdb/common/agent.c
index 9f8ea9a..0ac73a9 100644
--- a/gdb/common/agent.c
+++ b/gdb/common/agent.c
@@ -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)
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index f2f63b4..8a5ee1f 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -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>
diff --git a/gdb/gdbserver/target.c b/gdb/gdbserver/target.c
index 08506e5..e51b7db 100644
--- a/gdb/gdbserver/target.c
+++ b/gdb/gdbserver/target.c
@@ -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)
{
diff --git a/gdb/target.c b/gdb/target.c
index 711e7cb..339b1d1 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -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. */
diff --git a/gdb/target/target.h b/gdb/target/target.h
index 0a3c4b7..99a7966 100644
--- a/gdb/target/target.h
+++ b/gdb/target/target.h
@@ -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 */