gdbserver: turn target op 'stabilize_threads' into a method

gdbserver/ChangeLog:
2020-02-20  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	Turn process_stratum_target's stabilize_threads op into a
	method of process_target.

	* target.h (struct process_stratum_target): Remove the target op.
	(class process_target): Add the target op.
	(target_stabilize_threads): Update the macro.
	* target.cc (process_target::stabilize_threads): Define.

	Update the derived classes and callers below.

	* server.cc (handle_status): Update.
	* tracepoint.cc (cmd_qtdp): Update.
	(cmd_qtstart): Update.
	* linux-low.cc (linux_target_ops): Update.
	(linux_stabilize_threads): Turn into ...
	(linux_process_target::stabilize_threads): ... this.
	(linux_wait_1): Update.
	* linux-low.h (class linux_process_target): Update.
	* lynx-low.cc (lynx_target_ops): Update.
	* nto-low.cc (nto_target_ops): Update.
	* win32-low.cc (win32_target_ops): Update.
This commit is contained in:
Tankut Baris Aktemur 2020-02-17 16:12:00 +01:00
parent 29e8dc09ff
commit 5c9eb2f2b5
10 changed files with 44 additions and 20 deletions

View File

@ -1,3 +1,27 @@
2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Turn process_stratum_target's stabilize_threads op into a
method of process_target.
* target.h (struct process_stratum_target): Remove the target op.
(class process_target): Add the target op.
(target_stabilize_threads): Update the macro.
* target.cc (process_target::stabilize_threads): Define.
Update the derived classes and callers below.
* server.cc (handle_status): Update.
* tracepoint.cc (cmd_qtdp): Update.
(cmd_qtstart): Update.
* linux-low.cc (linux_target_ops): Update.
(linux_stabilize_threads): Turn into ...
(linux_process_target::stabilize_threads): ... this.
(linux_wait_1): Update.
* linux-low.h (class linux_process_target): Update.
* lynx-low.cc (lynx_target_ops): Update.
* nto-low.cc (nto_target_ops): Update.
* win32-low.cc (win32_target_ops): Update.
2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Turn process_stratum_target's pause_all and unpause_all ops

View File

@ -1628,7 +1628,7 @@ linux_process_target::detach (process_info *process)
#endif
/* Stabilize threads (move out of jump pads). */
stabilize_threads ();
target_stabilize_threads ();
/* Detach from the clone lwps first. If the thread group exits just
while we're detaching, we must reap the clone lwps before we're
@ -2934,8 +2934,8 @@ static ptid_t linux_wait_1 (ptid_t ptid,
since for something else in the new run, the thread would now
execute the wrong / random instructions. */
static void
linux_stabilize_threads (void)
void
linux_process_target::stabilize_threads ()
{
thread_info *thread_stuck = find_thread (stuck_in_jump_pad_callback);
@ -3721,7 +3721,7 @@ linux_wait_1 (ptid_t ptid,
/* Stabilize threads (move out of jump pads). */
if (!non_stop)
stabilize_threads ();
target_stabilize_threads ();
}
else
{
@ -7455,7 +7455,6 @@ linux_get_hwcap2 (int wordsize)
static linux_process_target the_linux_target;
static process_stratum_target linux_target_ops = {
linux_stabilize_threads,
linux_install_fast_tracepoint_jump_pad,
linux_emit_ops,
linux_supports_disable_randomization,

View File

@ -400,6 +400,8 @@ public:
void pause_all (bool freeze) override;
void unpause_all (bool unfreeze) override;
void stabilize_threads () override;
};
#define get_thread_lwp(thr) ((struct lwp_info *) (thread_target_data (thr)))

View File

@ -735,7 +735,6 @@ static lynx_process_target the_lynx_target;
/* The LynxOS target_ops vector. */
static process_stratum_target lynx_target_ops = {
NULL, /* stabilize_threads */
NULL, /* install_fast_tracepoint_jump_pad */
NULL, /* emit_ops */
NULL, /* supports_disable_randomization */

View File

@ -947,7 +947,6 @@ nto_sw_breakpoint_from_kind (int kind, int *size)
static nto_process_target the_nto_target;
static process_stratum_target nto_target_ops = {
NULL, /* stabilize_threads */
NULL, /* install_fast_tracepoint_jump_pad */
NULL, /* emit_ops */
NULL, /* supports_disable_randomization */

View File

@ -3324,7 +3324,7 @@ handle_status (char *own_buf)
thread_info *thread = NULL;
target_pause_all (false);
stabilize_threads ();
target_stabilize_threads ();
gdb_wants_all_threads_stopped ();
/* We can only report one status, but we might be coming out of

View File

@ -662,3 +662,9 @@ process_target::unpause_all (bool unfreeze)
{
/* Nop. */
}
void
process_target::stabilize_threads ()
{
/* Nop. */
}

View File

@ -70,9 +70,6 @@ class process_target;
shared code. */
struct process_stratum_target
{
/* Stabilize all threads. That is, force them out of jump pads. */
void (*stabilize_threads) (void);
/* Install a fast tracepoint jump pad. TPOINT is the address of the
tracepoint internal object as used by the IPA agent. TPADDR is
the address of tracepoint. COLLECTOR is address of the function
@ -494,6 +491,9 @@ public:
pair should not end up resuming threads that were stopped before
the pause call. */
virtual void unpause_all (bool unfreeze);
/* Stabilize all threads. That is, force them out of jump pads. */
virtual void stabilize_threads ();
};
extern process_stratum_target *the_target;
@ -574,12 +574,8 @@ int kill_inferior (process_info *proc);
#define target_unpause_all(unfreeze) \
the_target->pt->unpause_all (unfreeze)
#define stabilize_threads() \
do \
{ \
if (the_target->stabilize_threads) \
(*the_target->stabilize_threads) (); \
} while (0)
#define target_stabilize_threads() \
the_target->pt->stabilize_threads ()
#define install_fast_tracepoint_jump_pad(tpoint, tpaddr, \
collector, lockaddr, \

View File

@ -2606,7 +2606,7 @@ cmd_qtdp (char *own_buf)
/* download_tracepoint will update global `tracepoints'
list, so it is unsafe to leave threads in jump pad. */
stabilize_threads ();
target_stabilize_threads ();
/* Freeze threads. */
target_pause_all (true);
@ -3226,7 +3226,7 @@ cmd_qtstart (char *packet)
top level command. And, required to do here, since we're
deleting/rewriting jump pads. */
stabilize_threads ();
target_stabilize_threads ();
/* Freeze threads. */
target_pause_all (true);

View File

@ -1858,7 +1858,6 @@ win32_sw_breakpoint_from_kind (int kind, int *size)
static win32_process_target the_win32_target;
static process_stratum_target win32_target_ops = {
NULL, /* stabilize_threads */
NULL, /* install_fast_tracepoint_jump_pad */
NULL, /* emit_ops */
NULL, /* supports_disable_randomization */