Move debug_reg_change_callback and aarch64_notify_debug_reg_change to nat/aarch64-linux-hw-point.c

gdb:

2015-08-25  Yao Qi  <yao.qi@linaro.org>

	* aarch64-linux-nat.c (struct arch64_dr_update_callback_param):
	Move it to nat/aarch64-linux-hw-point.c.
	(debug_reg_change_callback): Likewise.
	(aarch64_notify_debug_reg_change): :Likewise.
	* nat/aarch64-linux-hw-point.c: Include nat/linux-nat.h.
	(aarch64_dr_update_callback_param): New.
	(debug_reg_change_callback): New function.
	(aarch64_notify_debug_reg_change): Likewise.
	* nat/aarch64-linux-hw-point.h (aarch64_notify_debug_reg_change):
	Remove the declaration.

gdb/gdbserver:

2015-08-25  Yao Qi  <yao.qi@linaro.org>

	* linux-aarch64-low.c (struct arch64_dr_update_callback_param):
	Remove.
	(debug_reg_change_callback): Remove.
	(aarch64_notify_debug_reg_change): Remove.
This commit is contained in:
Yao Qi
2015-08-25 11:38:29 +01:00
parent 75e1f0f7a0
commit 5e35436ed1
6 changed files with 108 additions and 170 deletions

View File

@@ -147,91 +147,6 @@ aarch64_get_debug_reg_state (pid_t pid)
return &aarch64_process_info_get (pid)->state;
}
struct aarch64_dr_update_callback_param
{
int is_watchpoint;
unsigned int idx;
};
/* Callback for iterate_over_lwps. Records the
information about the change of one hardware breakpoint/watchpoint
setting for the thread LWP.
The information is passed in via PTR.
N.B. The actual updating of hardware debug registers is not
carried out until the moment the thread is resumed. */
static int
debug_reg_change_callback (struct lwp_info *lwp, void *ptr)
{
struct aarch64_dr_update_callback_param *param_p
= (struct aarch64_dr_update_callback_param *) ptr;
int pid = ptid_get_pid (ptid_of_lwp (lwp));
int idx = param_p->idx;
int is_watchpoint = param_p->is_watchpoint;
struct arch_lwp_info *info = lwp->arch_private;
dr_changed_t *dr_changed_ptr;
dr_changed_t dr_changed;
if (info == NULL)
info = lwp->arch_private = XCNEW (struct arch_lwp_info);
if (show_debug_regs)
{
debug_printf ("debug_reg_change_callback: \n\tOn entry:\n");
debug_printf ("\tpid%d, dr_changed_bp=0x%s, "
"dr_changed_wp=0x%s\n", pid,
phex (info->dr_changed_bp, 8),
phex (info->dr_changed_wp, 8));
}
dr_changed_ptr = is_watchpoint ? &info->dr_changed_wp
: &info->dr_changed_bp;
dr_changed = *dr_changed_ptr;
gdb_assert (idx >= 0
&& (idx <= (is_watchpoint ? aarch64_num_wp_regs
: aarch64_num_bp_regs)));
/* The actual update is done later just before resuming the lwp,
we just mark that one register pair needs updating. */
DR_MARK_N_CHANGED (dr_changed, idx);
*dr_changed_ptr = dr_changed;
/* If the lwp isn't stopped, force it to momentarily pause, so
we can update its debug registers. */
if (!lwp->stopped)
linux_stop_lwp (lwp);
if (show_debug_regs)
{
debug_printf ("\tOn exit:\n\tpid%d, dr_changed_bp=0x%s, "
"dr_changed_wp=0x%s\n", pid,
phex (info->dr_changed_bp, 8),
phex (info->dr_changed_wp, 8));
}
/* Continue the iteration. */
return 0;
}
/* Notify each thread that their IDXth breakpoint/watchpoint register
pair needs to be updated. The message will be recorded in each
thread's arch-specific data area, the actual updating will be done
when the thread is resumed. */
void
aarch64_notify_debug_reg_change (const struct aarch64_debug_reg_state *state,
int is_watchpoint, unsigned int idx)
{
struct aarch64_dr_update_callback_param param;
ptid_t pid_ptid = pid_to_ptid (ptid_get_pid (current_lwp_ptid ()));
param.is_watchpoint = is_watchpoint;
param.idx = idx;
iterate_over_lwps (pid_ptid, debug_reg_change_callback, (void *) &param);
}
/* Fill GDB's register array with the general-purpose register values
from the current thread. */