+2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ Turn process_stratum_target's pause_all and unpause_all ops
+ into methods of process_target.
+
+ * target.h (struct process_stratum_target): Remove the target ops.
+ (class process_target): Add the target ops.
+ (pause_all): Update the macro and rename to...
+ (target_pause_all): ... this.
+ (unpause_all): Update the macro and rename to...
+ (target_unpause_all): ... this.
+ * target.cc (process_target::pause_all): Define.
+ (process_target::unpause_all): Define.
+
+ Update the derived classes and callers below.
+
+ * server.cc (handle_status): Update.
+ * tracepoint.cc (clear_installed_tracepoints): Update.
+ (cmd_qtdp): Update.
+ (cmd_qtstart): Update.
+ (stop_tracing): Update.
+ (cmd_qtstatus): Update.
+ (upload_fast_traceframes): Update.
+ (run_inferior_command): Update.
+ * linux-low.cc (linux_target_ops): Update.
+ (linux_pause_all): Turn into ...
+ (linux_process_target::pause_all): ... this.
+ (linux_unpause_all): Turn into ...
+ (linux_process_target::unpause_all): ... this.
+ (linux_process_target::prepare_to_access_memory): Update.
+ (linux_process_target::done_accessing_memory): 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 get_tib_address op into a method of
/* This exposes stop-all-threads functionality to other modules. */
-static void
-linux_pause_all (int freeze)
+void
+linux_process_target::pause_all (bool freeze)
{
stop_all_lwps (freeze, NULL);
}
/* This exposes unstop-all-threads functionality to other gdbserver
modules. */
-static void
-linux_unpause_all (int unfreeze)
+void
+linux_process_target::unpause_all (bool unfreeze)
{
unstop_all_lwps (unfreeze, NULL);
}
/* Neither ptrace nor /proc/PID/mem allow accessing memory through a
running LWP. */
if (non_stop)
- linux_pause_all (1);
+ target_pause_all (true);
return 0;
}
/* Neither ptrace nor /proc/PID/mem allow accessing memory through a
running LWP. */
if (non_stop)
- linux_unpause_all (1);
+ target_unpause_all (true);
}
static int
static linux_process_target the_linux_target;
static process_stratum_target linux_target_ops = {
- linux_pause_all,
- linux_unpause_all,
linux_stabilize_threads,
linux_install_fast_tracepoint_jump_pad,
linux_emit_ops,
bool supports_thread_stopped () override;
bool thread_stopped (thread_info *thread) override;
+
+ void pause_all (bool freeze) override;
+
+ void unpause_all (bool unfreeze) override;
};
#define get_thread_lwp(thr) ((struct lwp_info *) (thread_target_data (thr)))
/* The LynxOS target_ops vector. */
static process_stratum_target lynx_target_ops = {
- NULL, /* pause_all */
- NULL, /* unpause_all */
NULL, /* stabilize_threads */
NULL, /* install_fast_tracepoint_jump_pad */
NULL, /* emit_ops */
static nto_process_target the_nto_target;
static process_stratum_target nto_target_ops = {
- NULL, /* pause_all */
- NULL, /* unpause_all */
NULL, /* stabilize_threads */
NULL, /* install_fast_tracepoint_jump_pad */
NULL, /* emit_ops */
{
thread_info *thread = NULL;
- pause_all (0);
+ target_pause_all (false);
stabilize_threads ();
gdb_wants_all_threads_stopped ();
{
gdb_assert_not_reached ("target op get_tib_address not supported");
}
+
+void
+process_target::pause_all (bool freeze)
+{
+ /* Nop. */
+}
+
+void
+process_target::unpause_all (bool unfreeze)
+{
+ /* Nop. */
+}
shared code. */
struct process_stratum_target
{
- /* Pause all threads. If FREEZE, arrange for any resume attempt to
- be ignored until an unpause_all call unfreezes threads again.
- There can be nested calls to pause_all, so a freeze counter
- should be maintained. */
- void (*pause_all) (int freeze);
-
- /* Unpause all threads. Threads that hadn't been resumed by the
- client should be left stopped. Basically a pause/unpause call
- pair should not end up resuming threads that were stopped before
- the pause call. */
- void (*unpause_all) (int unfreeze);
-
/* Stabilize all threads. That is, force them out of jump pads. */
void (*stabilize_threads) (void);
/* Read Thread Information Block address. */
virtual int get_tib_address (ptid_t ptid, CORE_ADDR *address);
+
+ /* Pause all threads. If FREEZE, arrange for any resume attempt to
+ be ignored until an unpause_all call unfreezes threads again.
+ There can be nested calls to pause_all, so a freeze counter
+ should be maintained. */
+ virtual void pause_all (bool freeze);
+
+ /* Unpause all threads. Threads that hadn't been resumed by the
+ client should be left stopped. Basically a pause/unpause call
+ pair should not end up resuming threads that were stopped before
+ the pause call. */
+ virtual void unpause_all (bool unfreeze);
};
extern process_stratum_target *the_target;
#define target_thread_stopped(thread) \
the_target->pt->thread_stopped (thread)
-#define pause_all(freeze) \
- do \
- { \
- if (the_target->pause_all) \
- (*the_target->pause_all) (freeze); \
- } while (0)
+#define target_pause_all(freeze) \
+ the_target->pt->pause_all (freeze)
-#define unpause_all(unfreeze) \
- do \
- { \
- if (the_target->unpause_all) \
- (*the_target->unpause_all) (unfreeze); \
- } while (0)
+#define target_unpause_all(unfreeze) \
+ the_target->pt->unpause_all (unfreeze)
#define stabilize_threads() \
do \
struct tracepoint *tpoint;
struct tracepoint *prev_stpoint;
- pause_all (1);
+ target_pause_all (true);
prev_stpoint = NULL;
tpoint->handle = NULL;
}
- unpause_all (1);
+ target_unpause_all (true);
}
/* Parse a packet that defines a tracepoint. */
struct tracepoint *tp = NULL;
/* Pause all threads temporarily while we patch tracepoints. */
- pause_all (0);
+ target_pause_all (false);
/* download_tracepoint will update global `tracepoints'
list, so it is unsafe to leave threads in jump pad. */
stabilize_threads ();
/* Freeze threads. */
- pause_all (1);
+ target_pause_all (true);
if (tpoint->type != trap_tracepoint)
write_ok (own_buf);
}
- unpause_all (1);
+ target_unpause_all (true);
return;
}
trace_debug ("Starting the trace");
/* Pause all threads temporarily while we patch tracepoints. */
- pause_all (0);
+ target_pause_all (false);
/* Get threads out of jump pads. Safe to do here, since this is a
top level command. And, required to do here, since we're
stabilize_threads ();
/* Freeze threads. */
- pause_all (1);
+ target_pause_all (true);
/* Sync the fast tracepoints list in the inferior ftlib. */
if (agent_loaded_p ())
clear_installed_tracepoints ();
if (*packet == '\0')
write_enn (packet);
- unpause_all (1);
+ target_unpause_all (true);
return;
}
error ("Error setting flush_trace_buffer breakpoint");
}
- unpause_all (1);
+ target_unpause_all (true);
write_ok (packet);
}
when we're sure we can move all threads out of the jump pads).
We can't now, since we may be getting here due to the inferior
agent calling us. */
- pause_all (1);
+ target_pause_all (true);
/* Stop logging. Tracepoints can still be hit, but they will not be
recorded. */
flush_trace_buffer_bkpt = NULL;
}
- unpause_all (1);
+ target_unpause_all (true);
}
static int
if (agent_loaded_p ())
{
- pause_all (1);
+ target_pause_all (true);
upload_fast_traceframes ();
- unpause_all (1);
+ target_unpause_all (true);
}
stop_reason_rsp = (char *) tracing_stop_reason;
trace_debug ("Done uploading traceframes [%d]\n", curr_tbctrl_idx);
- pause_all (1);
+ target_pause_all (true);
delete_breakpoint (about_to_request_buffer_space_bkpt);
about_to_request_buffer_space_bkpt = NULL;
- unpause_all (1);
+ target_unpause_all (true);
if (trace_buffer_is_full)
stop_tracing ();
trace_debug ("run_inferior_command: running: %s", cmd);
- pause_all (0);
+ target_pause_all (false);
uninsert_all_breakpoints ();
err = agent_run_command (pid, (const char *) cmd, len);
reinsert_all_breakpoints ();
- unpause_all (0);
+ target_unpause_all (false);
return err;
}
static win32_process_target the_win32_target;
static process_stratum_target win32_target_ops = {
- NULL, /* pause_all */
- NULL, /* unpause_all */
NULL, /* stabilize_threads */
NULL, /* install_fast_tracepoint_jump_pad */
NULL, /* emit_ops */