Introduce target_{stop,continue}_ptid

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.
This commit is contained in:
Gary Benson 2014-09-11 11:19:56 +01:00
parent 721ec300e1
commit f8c1d06b82
6 changed files with 85 additions and 35 deletions

View 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>

View 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)

View 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>

View 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)
{

View 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. */

View 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 */