gdbserver: turn prepare_to_access_memory & done_accessing_memory into methods

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

	Turn process_stratum_target's prepare_to_access_memory and
	done_accessing_memory ops into methods of process_target.

	* target.h (struct process_stratum_target): Remove the target ops.
	(class process_target): Add the target ops.
	* target.cc (process_target::prepare_to_access_memory): Define.
	(process_target::done_accessing_memory): Define.
	(prepare_to_access_memory): Update.
	(done_accessing_memory): Update.

	Update the derived classes and callers below.

	* linux-low.cc (linux_target_ops): Update.
	(linux_prepare_to_access_memory): Turn into ...
	(linux_process_target::prepare_to_access_memory): ... this.
	(linux_done_accessing_memory): Turn into ...
	(linux_process_target::done_accessing_memory): ... this.
	* 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:11:53 +01:00
parent a5a4d4cd0c
commit 79b4408780
8 changed files with 63 additions and 39 deletions

View File

@ -1,3 +1,27 @@
2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Turn process_stratum_target's prepare_to_access_memory and
done_accessing_memory ops into methods of process_target.
* target.h (struct process_stratum_target): Remove the target ops.
(class process_target): Add the target ops.
* target.cc (process_target::prepare_to_access_memory): Define.
(process_target::done_accessing_memory): Define.
(prepare_to_access_memory): Update.
(done_accessing_memory): Update.
Update the derived classes and callers below.
* linux-low.cc (linux_target_ops): Update.
(linux_prepare_to_access_memory): Turn into ...
(linux_process_target::prepare_to_access_memory): ... this.
(linux_done_accessing_memory): Turn into ...
(linux_process_target::done_accessing_memory): ... this.
* 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 fetch_registers and store_registers

View File

@ -6505,8 +6505,8 @@ linux_unpause_all (int unfreeze)
unstop_all_lwps (unfreeze, NULL);
}
static int
linux_prepare_to_access_memory (void)
int
linux_process_target::prepare_to_access_memory ()
{
/* Neither ptrace nor /proc/PID/mem allow accessing memory through a
running LWP. */
@ -6515,8 +6515,8 @@ linux_prepare_to_access_memory (void)
return 0;
}
static void
linux_done_accessing_memory (void)
void
linux_process_target::done_accessing_memory ()
{
/* Neither ptrace nor /proc/PID/mem allow accessing memory through a
running LWP. */
@ -7359,8 +7359,6 @@ linux_get_hwcap2 (int wordsize)
static linux_process_target the_linux_target;
static process_stratum_target linux_target_ops = {
linux_prepare_to_access_memory,
linux_done_accessing_memory,
linux_read_memory,
linux_write_memory,
linux_look_up_symbols,

View File

@ -295,6 +295,10 @@ public:
void fetch_registers (regcache *regcache, int regno) override;
void store_registers (regcache *regcache, int regno) override;
int prepare_to_access_memory () override;
void done_accessing_memory () override;
};
#define get_thread_lwp(thr) ((struct lwp_info *) (thread_target_data (thr)))

View File

@ -727,8 +727,6 @@ static lynx_process_target the_lynx_target;
/* The LynxOS target_ops vector. */
static process_stratum_target lynx_target_ops = {
NULL, /* prepare_to_access_memory */
NULL, /* done_accessing_memory */
lynx_read_memory,
lynx_write_memory,
NULL, /* look_up_symbols */

View File

@ -941,8 +941,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, /* prepare_to_access_memory */
NULL, /* done_accessing_memory */
nto_read_memory,
nto_write_memory,
NULL, /* nto_look_up_symbols */

View File

@ -57,14 +57,9 @@ prepare_to_access_memory (void)
it. */
prev_general_thread = cs.general_thread;
if (the_target->prepare_to_access_memory != NULL)
{
int res;
res = the_target->prepare_to_access_memory ();
if (res != 0)
return res;
}
int res = the_target->pt->prepare_to_access_memory ();
if (res != 0)
return res;
for_each_thread (prev_general_thread.pid (), [&] (thread_info *thread)
{
@ -114,8 +109,7 @@ done_accessing_memory (void)
{
client_state &cs = get_client_state ();
if (the_target->done_accessing_memory != NULL)
the_target->done_accessing_memory ();
the_target->pt->done_accessing_memory ();
/* Restore the previous selected thread. */
cs.general_thread = prev_general_thread;
@ -402,3 +396,15 @@ process_target::post_create_inferior ()
{
/* Nop. */
}
int
process_target::prepare_to_access_memory ()
{
return 0;
}
void
process_target::done_accessing_memory ()
{
/* Nop. */
}

View File

@ -70,23 +70,6 @@ class process_target;
shared code. */
struct process_stratum_target
{
/* Prepare to read or write memory from the inferior process.
Targets use this to do what is necessary to get the state of the
inferior such that it is possible to access memory.
This should generally only be called from client facing routines,
such as gdb_read_memory/gdb_write_memory, or the GDB breakpoint
insertion routine.
Like `read_memory' and `write_memory' below, returns 0 on success
and errno on failure. */
int (*prepare_to_access_memory) (void);
/* Undo the effects of prepare_to_access_memory. */
void (*done_accessing_memory) (void);
/* Read memory from the inferior process. This should generally be
called through read_inferior_memory, which handles breakpoint shadowing.
@ -480,6 +463,21 @@ public:
If REGNO is -1, store all registers; otherwise, store at least REGNO. */
virtual void store_registers (regcache *regcache, int regno) = 0;
/* Prepare to read or write memory from the inferior process.
Targets use this to do what is necessary to get the state of the
inferior such that it is possible to access memory.
This should generally only be called from client facing routines,
such as gdb_read_memory/gdb_write_memory, or the GDB breakpoint
insertion routine.
Like `read_memory' and `write_memory' below, returns 0 on success
and errno on failure. */
virtual int prepare_to_access_memory ();
/* Undo the effects of prepare_to_access_memory. */
virtual void done_accessing_memory ();
};
extern process_stratum_target *the_target;

View File

@ -1837,8 +1837,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, /* prepare_to_access_memory */
NULL, /* done_accessing_memory */
win32_read_inferior_memory,
win32_write_inferior_memory,
NULL, /* lookup_symbols */