Use target_continue{,_no_signal} instead of target_resume

This commit implements a new function, target_continue, on top of the
target_resume function.  Then, it replaces all calls to target_resume
by calls to target_continue or to the already existing
target_continue_no_signal.

This is one of the (many) necessary steps needed to consolidate the
target interface between GDB and gdbserver.  In particular, I am
interested in the impact this change will have on the unification of
the fork_inferior function (which I have been working on).

Tested on the BuildBot, no regressions introduced.

gdb/gdbserver/ChangeLog:
2016-09-31  Sergio Durigan Junior  <sergiodj@redhat.com>

	* server.c (start_inferior): New variable 'ptid'.  Replace calls
	to the_target->resume by target_continue{,_no_signal}, depending
	on the case.
	* target.c (target_stop_and_wait): Call target_continue_no_signal
	instead of the_target->resume.
	(target_continue): New function.

gdb/ChangeLog:
2016-09-31  Sergio Durigan Junior  <sergiodj@redhat.com>

	* fork-child.c (startup_inferior): Replace calls to target_resume
	by target_continue{,_no_signal}, depending on the case.
	* linux-nat.c (cleanup_target_stop): Call
	target_continue_no_signal instead of target_resume.
	* procfs.c (procfs_wait): Likewise.
	* target.c (target_continue): New function.
	* target/target.h (target_continue): New prototype.
This commit is contained in:
Sergio Durigan Junior 2016-08-25 16:26:24 -04:00
parent 424844864a
commit 049a857091
9 changed files with 60 additions and 31 deletions

View File

@ -1,3 +1,13 @@
2016-09-01 Sergio Durigan Junior <sergiodj@redhat.com>
* fork-child.c (startup_inferior): Replace calls to target_resume
by target_continue{,_no_signal}, depending on the case.
* linux-nat.c (cleanup_target_stop): Call
target_continue_no_signal instead of target_resume.
* procfs.c (procfs_wait): Likewise.
* target.c (target_continue): New function.
* target/target.h (target_continue): New prototype.
2016-08-31 Yao Qi <yao.qi@linaro.org> 2016-08-31 Yao Qi <yao.qi@linaro.org>
* record-full.c (record_full_insert_breakpoint): Fix typo. * record-full.c (record_full_insert_breakpoint): Fix typo.

View File

@ -514,7 +514,7 @@ startup_inferior (int ntraps)
if (resume_signal != GDB_SIGNAL_TRAP) if (resume_signal != GDB_SIGNAL_TRAP)
{ {
/* Let shell child handle its own signals in its own way. */ /* Let shell child handle its own signals in its own way. */
target_resume (resume_ptid, 0, resume_signal); target_continue (resume_ptid, resume_signal);
} }
else else
{ {
@ -540,7 +540,7 @@ startup_inferior (int ntraps)
break; break;
/* Just make it go on. */ /* Just make it go on. */
target_resume (resume_ptid, 0, GDB_SIGNAL_0); target_continue_no_signal (resume_ptid);
} }
} }

View File

@ -1,3 +1,12 @@
2016-09-01 Sergio Durigan Junior <sergiodj@redhat.com>
* server.c (start_inferior): New variable 'ptid'. Replace calls
to the_target->resume by target_continue{,_no_signal}, depending
on the case.
* target.c (target_stop_and_wait): Call target_continue_no_signal
instead of the_target->resume.
(target_continue): New function.
2016-08-31 Antoine Tremblay <antoine.tremblay@ericsson.com> 2016-08-31 Antoine Tremblay <antoine.tremblay@ericsson.com>
* linux-low.c (linux_wait_1): Move event switch after unsuspend_lwps. * linux-low.c (linux_wait_1): Move event switch after unsuspend_lwps.

View File

@ -258,12 +258,7 @@ start_inferior (char **argv)
if (wrapper_argv != NULL) if (wrapper_argv != NULL)
{ {
struct thread_resume resume_info; ptid_t ptid = pid_to_ptid (signal_pid);
memset (&resume_info, 0, sizeof (resume_info));
resume_info.thread = pid_to_ptid (signal_pid);
resume_info.kind = resume_continue;
resume_info.sig = 0;
last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0); last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
@ -271,7 +266,7 @@ start_inferior (char **argv)
{ {
do do
{ {
(*the_target->resume) (&resume_info, 1); target_continue_no_signal (ptid);
last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0); last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
if (last_status.kind != TARGET_WAITKIND_STOPPED) if (last_status.kind != TARGET_WAITKIND_STOPPED)
@ -3929,7 +3924,6 @@ process_serial_event (void)
if ((tracing && disconnected_tracing) || any_persistent_commands ()) if ((tracing && disconnected_tracing) || any_persistent_commands ())
{ {
struct thread_resume resume_info;
struct process_info *process = find_process_pid (pid); struct process_info *process = find_process_pid (pid);
if (process == NULL) if (process == NULL)
@ -3965,10 +3959,7 @@ process_serial_event (void)
process->gdb_detached = 1; process->gdb_detached = 1;
/* Detaching implicitly resumes all threads. */ /* Detaching implicitly resumes all threads. */
resume_info.thread = minus_one_ptid; target_continue_no_signal (minus_one_ptid);
resume_info.kind = resume_continue;
resume_info.sig = 0;
(*the_target->resume) (&resume_info, 1);
write_ok (own_buf); write_ok (own_buf);
break; /* from switch/case */ break; /* from switch/case */
@ -4428,7 +4419,7 @@ handle_target_event (int err, gdb_client_data client_data)
/* A thread stopped with a signal, but gdb isn't /* A thread stopped with a signal, but gdb isn't
connected to handle it. Pass it down to the connected to handle it. Pass it down to the
inferior, as if it wasn't being traced. */ inferior, as if it wasn't being traced. */
struct thread_resume resume_info; enum gdb_signal signal;
if (debug_threads) if (debug_threads)
debug_printf ("GDB not connected; forwarding event %d for" debug_printf ("GDB not connected; forwarding event %d for"
@ -4436,13 +4427,11 @@ handle_target_event (int err, gdb_client_data client_data)
(int) last_status.kind, (int) last_status.kind,
target_pid_to_str (last_ptid)); target_pid_to_str (last_ptid));
resume_info.thread = last_ptid;
resume_info.kind = resume_continue;
if (last_status.kind == TARGET_WAITKIND_STOPPED) if (last_status.kind == TARGET_WAITKIND_STOPPED)
resume_info.sig = gdb_signal_to_host (last_status.value.sig); signal = last_status.value.sig;
else else
resume_info.sig = 0; signal = GDB_SIGNAL_0;
(*the_target->resume) (&resume_info, 1); target_continue (last_ptid, signal);
} }
} }
else else

View File

@ -248,12 +248,8 @@ target_stop_and_wait (ptid_t ptid)
{ {
struct target_waitstatus status; struct target_waitstatus status;
int was_non_stop = non_stop; int was_non_stop = non_stop;
struct thread_resume resume_info;
resume_info.thread = ptid; target_continue_no_signal (ptid);
resume_info.kind = resume_stop;
resume_info.sig = GDB_SIGNAL_0;
(*the_target->resume) (&resume_info, 1);
non_stop = 1; non_stop = 1;
mywait (ptid, &status, 0, 0); mywait (ptid, &status, 0, 0);
@ -273,6 +269,19 @@ target_continue_no_signal (ptid_t ptid)
(*the_target->resume) (&resume_info, 1); (*the_target->resume) (&resume_info, 1);
} }
/* See target/target.h. */
void
target_continue (ptid_t ptid, enum gdb_signal signal)
{
struct thread_resume resume_info;
resume_info.thread = ptid;
resume_info.kind = resume_continue;
resume_info.sig = gdb_signal_to_host (signal);
(*the_target->resume) (&resume_info, 1);
}
int int
start_non_stop (int nonstop) start_non_stop (int nonstop)
{ {

View File

@ -4289,7 +4289,7 @@ cleanup_target_stop (void *arg)
gdb_assert (arg != NULL); gdb_assert (arg != NULL);
/* Unpause all */ /* Unpause all */
target_resume (*ptid, 0, GDB_SIGNAL_0); target_continue_no_signal (*ptid);
} }
static VEC(static_tracepoint_marker_p) * static VEC(static_tracepoint_marker_p) *

View File

@ -3716,7 +3716,7 @@ wait_again:
else else
{ {
/* How to keep going without returning to wfi: */ /* How to keep going without returning to wfi: */
target_resume (ptid, 0, GDB_SIGNAL_0); target_continue_no_signal (ptid);
goto wait_again; goto wait_again;
} }
} }
@ -3742,7 +3742,7 @@ wait_again:
/* This is an internal event and should be transparent /* This is an internal event and should be transparent
to wfi, so resume the execution and wait again. See to wfi, so resume the execution and wait again. See
comment in procfs_init_inferior() for more details. */ comment in procfs_init_inferior() for more details. */
target_resume (ptid, 0, GDB_SIGNAL_0); target_continue_no_signal (ptid);
goto wait_again; goto wait_again;
} }
#endif #endif

View File

@ -3449,6 +3449,14 @@ target_continue_no_signal (ptid_t ptid)
target_resume (ptid, 0, GDB_SIGNAL_0); target_resume (ptid, 0, GDB_SIGNAL_0);
} }
/* See target/target.h. */
void
target_continue (ptid_t ptid, enum gdb_signal signal)
{
target_resume (ptid, 0, signal);
}
/* Concatenate ELEM to LIST, a comma separate list, and return the /* Concatenate ELEM to LIST, a comma separate list, and return the
result. The LIST incoming argument is released. */ result. The LIST incoming argument is released. */

View File

@ -64,10 +64,14 @@ extern int target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr,
extern void target_stop_and_wait (ptid_t ptid); extern void target_stop_and_wait (ptid_t ptid);
/* Restart a target previously stopped by target_stop_and_wait. /* Restart a target previously stopped. No signal is delivered to the
No signal is delivered to the target. This function must be target. This function must be provided by the client. */
provided by the client. */
extern void target_continue_no_signal (ptid_t ptid); extern void target_continue_no_signal (ptid_t ptid);
/* Restart a target previously stopped. SIGNAL is delivered to the
target. This function must be provided by the client. */
extern void target_continue (ptid_t ptid, enum gdb_signal signal);
#endif /* TARGET_COMMON_H */ #endif /* TARGET_COMMON_H */