mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-23 13:21:43 +08:00
gdbserver: turn non-stop and async target ops into methods
gdbserver/ChangeLog: 2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> Turn process_stratum_target's supports_non_stop, async, and start_non_stop ops into methods of process_target. * target.h (struct process_stratum_target): Remove the target ops. (class process_target): Add the target ops. (target_supports_non_stop): Update the macro. (target_async): Update the macro. (start_non_stop): Remove declaration. * target.cc (process_target::supports_non_stop): Define. (process_target::async): Define. (process_target::start_non_stop): Define. (start_non_stop): Remove. Update the derived classes and callers below. * server.cc (handle_qxfer_siginfo): Update. (handle_query): Update. * linux-low.cc (linux_target_ops): Update. (linux_supports_non_stop): Turn into ... (linux_process_target::supports_non_stop): ... this. (linux_async): Turn into ... (linux_process_target::async): ... this. (linux_start_non_stop): Turn into ... (linux_process_target::start_non_stop): ... this. * linux-low.h (class linux_process_target): Update. * lynx-low.cc (lynx_target_ops): Update. * nto-low.cc (nto_target_ops): Update. (nto_supports_non_stop): Remove; rely on the default behavior instead. * win32-low.cc (win32_target_ops): Update.
This commit is contained in:
parent
d7abedf7e7
commit
0dc587d425
@ -1,3 +1,36 @@
|
||||
2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
|
||||
|
||||
Turn process_stratum_target's supports_non_stop, async, and
|
||||
start_non_stop ops into methods of process_target.
|
||||
|
||||
* target.h (struct process_stratum_target): Remove the target ops.
|
||||
(class process_target): Add the target ops.
|
||||
(target_supports_non_stop): Update the macro.
|
||||
(target_async): Update the macro.
|
||||
(start_non_stop): Remove declaration.
|
||||
* target.cc (process_target::supports_non_stop): Define.
|
||||
(process_target::async): Define.
|
||||
(process_target::start_non_stop): Define.
|
||||
(start_non_stop): Remove.
|
||||
|
||||
Update the derived classes and callers below.
|
||||
|
||||
* server.cc (handle_qxfer_siginfo): Update.
|
||||
(handle_query): Update.
|
||||
* linux-low.cc (linux_target_ops): Update.
|
||||
(linux_supports_non_stop): Turn into ...
|
||||
(linux_process_target::supports_non_stop): ... this.
|
||||
(linux_async): Turn into ...
|
||||
(linux_process_target::async): ... this.
|
||||
(linux_start_non_stop): Turn into ...
|
||||
(linux_process_target::start_non_stop): ... this.
|
||||
* linux-low.h (class linux_process_target): Update.
|
||||
* lynx-low.cc (lynx_target_ops): Update.
|
||||
* nto-low.cc (nto_target_ops): Update.
|
||||
(nto_supports_non_stop): Remove; rely on the default behavior
|
||||
instead.
|
||||
* win32-low.cc (win32_target_ops): Update.
|
||||
|
||||
2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
|
||||
|
||||
Turn process_stratum_target's qxfer_siginfo op into a method of
|
||||
|
@ -6265,16 +6265,16 @@ sigchld_handler (int signo)
|
||||
errno = old_errno;
|
||||
}
|
||||
|
||||
static int
|
||||
linux_supports_non_stop (void)
|
||||
bool
|
||||
linux_process_target::supports_non_stop ()
|
||||
{
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int
|
||||
linux_async (int enable)
|
||||
bool
|
||||
linux_process_target::async (bool enable)
|
||||
{
|
||||
int previous = target_is_async_p ();
|
||||
bool previous = target_is_async_p ();
|
||||
|
||||
if (debug_threads)
|
||||
debug_printf ("linux_async (%d), previous=%d\n",
|
||||
@ -6326,13 +6326,13 @@ linux_async (int enable)
|
||||
return previous;
|
||||
}
|
||||
|
||||
static int
|
||||
linux_start_non_stop (int nonstop)
|
||||
int
|
||||
linux_process_target::start_non_stop (bool nonstop)
|
||||
{
|
||||
/* Register or unregister from event-loop accordingly. */
|
||||
linux_async (nonstop);
|
||||
target_async (nonstop);
|
||||
|
||||
if (target_is_async_p () != (nonstop != 0))
|
||||
if (target_is_async_p () != (nonstop != false))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
@ -7429,9 +7429,6 @@ linux_get_hwcap2 (int wordsize)
|
||||
static linux_process_target the_linux_target;
|
||||
|
||||
static process_stratum_target linux_target_ops = {
|
||||
linux_supports_non_stop,
|
||||
linux_async,
|
||||
linux_start_non_stop,
|
||||
linux_supports_multi_process,
|
||||
linux_supports_fork_events,
|
||||
linux_supports_vfork_events,
|
||||
|
@ -357,6 +357,12 @@ class linux_process_target : public process_target
|
||||
int qxfer_siginfo (const char *annex, unsigned char *readbuf,
|
||||
unsigned const char *writebuf,
|
||||
CORE_ADDR offset, int len) override;
|
||||
|
||||
bool supports_non_stop () override;
|
||||
|
||||
bool async (bool enable) override;
|
||||
|
||||
int start_non_stop (bool enable) override;
|
||||
};
|
||||
|
||||
#define get_thread_lwp(thr) ((struct lwp_info *) (thread_target_data (thr)))
|
||||
|
@ -735,9 +735,6 @@ static lynx_process_target the_lynx_target;
|
||||
/* The LynxOS target_ops vector. */
|
||||
|
||||
static process_stratum_target lynx_target_ops = {
|
||||
NULL, /* supports_non_stop */
|
||||
NULL, /* async */
|
||||
NULL, /* start_non_stop */
|
||||
NULL, /* supports_multi_process */
|
||||
NULL, /* supports_fork_events */
|
||||
NULL, /* supports_vfork_events */
|
||||
|
@ -933,15 +933,6 @@ nto_process_target::stopped_data_address ()
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* We do not currently support non-stop. */
|
||||
|
||||
static int
|
||||
nto_supports_non_stop (void)
|
||||
{
|
||||
TRACE ("%s\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Implementation of the target_ops method "sw_breakpoint_from_kind". */
|
||||
|
||||
static const gdb_byte *
|
||||
@ -956,9 +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 = {
|
||||
nto_supports_non_stop,
|
||||
NULL, /* async */
|
||||
NULL, /* start_non_stop */
|
||||
NULL, /* supports_multi_process */
|
||||
NULL, /* supports_fork_events */
|
||||
NULL, /* supports_vfork_events */
|
||||
|
@ -740,7 +740,7 @@ handle_general_set (char *own_buf)
|
||||
}
|
||||
|
||||
req_str = req ? "non-stop" : "all-stop";
|
||||
if (start_non_stop (req) != 0)
|
||||
if (the_target->pt->start_non_stop (req == 1) != 0)
|
||||
{
|
||||
fprintf (stderr, "Setting %s mode failed\n", req_str);
|
||||
write_enn (own_buf);
|
||||
@ -1234,7 +1234,7 @@ handle_detach (char *own_buf)
|
||||
debug_printf ("Forcing non-stop mode\n");
|
||||
|
||||
non_stop = true;
|
||||
start_non_stop (1);
|
||||
the_target->pt->start_non_stop (true);
|
||||
}
|
||||
|
||||
process->gdb_detached = 1;
|
||||
@ -3885,7 +3885,7 @@ captured_main (int argc, char *argv[])
|
||||
down without informing GDB. */
|
||||
if (!non_stop)
|
||||
{
|
||||
if (start_non_stop (1))
|
||||
if (the_target->pt->start_non_stop (true))
|
||||
non_stop = 1;
|
||||
|
||||
/* Detaching implicitly resumes all threads;
|
||||
|
@ -264,20 +264,6 @@ target_supports_multi_process (void)
|
||||
(*the_target->supports_multi_process) () : 0);
|
||||
}
|
||||
|
||||
int
|
||||
start_non_stop (int nonstop)
|
||||
{
|
||||
if (the_target->start_non_stop == NULL)
|
||||
{
|
||||
if (nonstop)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (*the_target->start_non_stop) (nonstop);
|
||||
}
|
||||
|
||||
void
|
||||
set_target_ops (process_stratum_target *target)
|
||||
{
|
||||
@ -541,3 +527,24 @@ process_target::qxfer_siginfo (const char *annex, unsigned char *readbuf,
|
||||
{
|
||||
gdb_assert_not_reached ("target op qxfer_siginfo not supported");
|
||||
}
|
||||
|
||||
bool
|
||||
process_target::supports_non_stop ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
process_target::async (bool enable)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
process_target::start_non_stop (bool enable)
|
||||
{
|
||||
if (enable)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
@ -70,16 +70,6 @@ class process_target;
|
||||
shared code. */
|
||||
struct process_stratum_target
|
||||
{
|
||||
int (*supports_non_stop) (void);
|
||||
|
||||
/* Enables async target events. Returns the previous enable
|
||||
state. */
|
||||
int (*async) (int enable);
|
||||
|
||||
/* Switch to non-stop (1) or all-stop (0) mode. Return 0 on
|
||||
success, -1 otherwise. */
|
||||
int (*start_non_stop) (int);
|
||||
|
||||
/* Returns true if the target supports multi-process debugging. */
|
||||
int (*supports_multi_process) (void);
|
||||
|
||||
@ -485,6 +475,17 @@ class process_target
|
||||
virtual int qxfer_siginfo (const char *annex, unsigned char *readbuf,
|
||||
unsigned const char *writebuf,
|
||||
CORE_ADDR offset, int len);
|
||||
|
||||
/* Return true if non-stop mode is supported. */
|
||||
virtual bool supports_non_stop ();
|
||||
|
||||
/* Enables async target events. Returns the previous enable
|
||||
state. */
|
||||
virtual bool async (bool enable);
|
||||
|
||||
/* Switch to non-stop (ENABLE == true) or all-stop (ENABLE == false)
|
||||
mode. Return 0 on success, -1 otherwise. */
|
||||
virtual int start_non_stop (bool enable);
|
||||
};
|
||||
|
||||
extern process_stratum_target *the_target;
|
||||
@ -537,10 +538,10 @@ int kill_inferior (process_info *proc);
|
||||
the_target->pt->join (pid)
|
||||
|
||||
#define target_supports_non_stop() \
|
||||
(the_target->supports_non_stop ? (*the_target->supports_non_stop ) () : 0)
|
||||
the_target->pt->supports_non_stop ()
|
||||
|
||||
#define target_async(enable) \
|
||||
(the_target->async ? (*the_target->async) (enable) : 0)
|
||||
the_target->pt->async (enable)
|
||||
|
||||
#define target_process_qsupported(features, count) \
|
||||
do \
|
||||
@ -696,10 +697,6 @@ target_read_btrace_conf (struct btrace_target_info *tinfo,
|
||||
(the_target->supports_software_single_step ? \
|
||||
(*the_target->supports_software_single_step) () : 0)
|
||||
|
||||
/* Start non-stop mode, returns 0 on success, -1 on failure. */
|
||||
|
||||
int start_non_stop (int nonstop);
|
||||
|
||||
ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options,
|
||||
int connected_wait);
|
||||
|
||||
|
@ -1852,9 +1852,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, /* supports_non_stop */
|
||||
NULL, /* async */
|
||||
NULL, /* start_non_stop */
|
||||
NULL, /* supports_multi_process */
|
||||
NULL, /* supports_fork_events */
|
||||
NULL, /* supports_vfork_events */
|
||||
|
Loading…
Reference in New Issue
Block a user