diff options
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/common/agent.c | 37 | ||||
-rw-r--r-- | gdb/gdbserver/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/gdbserver/target.c | 32 | ||||
-rw-r--r-- | gdb/target.c | 25 | ||||
-rw-r--r-- | gdb/target/target.h | 11 |
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) (¤t_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 */ |