[gdbserver] Use iterate_over_lwps in aarch64_notify_debug_reg_change

This patch makes more bits on aarch64 watchpoint between GDB and GDBserver
look similar.

gdb/gdbserver:

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

	* linux-aarch64-low.c (aarch64_dr_update_callback_param) <pid>:
	Remove.
	(debug_reg_change_callback): Remove argument entry and add argument
	lwp.  Remove local variable thread.  Don't print thread id in the
	debugging output.  Don't check whether pid of thread equals to pid.
	(aarch64_notify_debug_reg_change): Don't set param.pid.  Call
	iterate_over_lwps instead find_inferior.
This commit is contained in:
Yao Qi
2015-08-25 11:38:28 +01:00
parent 9a11754213
commit ff3f0f45c5
2 changed files with 21 additions and 19 deletions

View File

@ -1,3 +1,13 @@
2015-08-25 Yao Qi <yao.qi@linaro.org>
* linux-aarch64-low.c (aarch64_dr_update_callback_param) <pid>:
Remove.
(debug_reg_change_callback): Remove argument entry and add argument
lwp. Remove local variable thread. Don't print thread id in the
debugging output. Don't check whether pid of thread equals to pid.
(aarch64_notify_debug_reg_change): Don't set param.pid. Call
iterate_over_lwps instead find_inferior.
2015-08-24 Pedro Alves <palves@redhat.com> 2015-08-24 Pedro Alves <palves@redhat.com>
* inferiors.c (get_first_process): New function. * inferiors.c (get_first_process): New function.

View File

@ -236,25 +236,23 @@ aarch64_init_debug_reg_state (struct aarch64_debug_reg_state *state)
struct aarch64_dr_update_callback_param struct aarch64_dr_update_callback_param
{ {
int pid;
int is_watchpoint; int is_watchpoint;
unsigned int idx; unsigned int idx;
}; };
/* Callback function which records the information about the change of /* Callback for iterate_over_lwps. Records the
one hardware breakpoint/watchpoint setting for the thread ENTRY. information about the change of one hardware breakpoint/watchpoint
setting for the thread LWP.
The information is passed in via PTR. The information is passed in via PTR.
N.B. The actual updating of hardware debug registers is not N.B. The actual updating of hardware debug registers is not
carried out until the moment the thread is resumed. */ carried out until the moment the thread is resumed. */
static int static int
debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr) debug_reg_change_callback (struct lwp_info *lwp, void *ptr)
{ {
struct thread_info *thread = (struct thread_info *) entry;
struct lwp_info *lwp = get_thread_lwp (thread);
struct aarch64_dr_update_callback_param *param_p struct aarch64_dr_update_callback_param *param_p
= (struct aarch64_dr_update_callback_param *) ptr; = (struct aarch64_dr_update_callback_param *) ptr;
int pid = param_p->pid; int pid = pid_of (lwp->thread);
int idx = param_p->idx; int idx = param_p->idx;
int is_watchpoint = param_p->is_watchpoint; int is_watchpoint = param_p->is_watchpoint;
struct arch_lwp_info *info = lwp->arch_private; struct arch_lwp_info *info = lwp->arch_private;
@ -264,9 +262,9 @@ debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
if (show_debug_regs) if (show_debug_regs)
{ {
fprintf (stderr, "debug_reg_change_callback: \n\tOn entry:\n"); fprintf (stderr, "debug_reg_change_callback: \n\tOn entry:\n");
fprintf (stderr, "\tpid%d, tid: %ld, dr_changed_bp=0x%llx, " fprintf (stderr, "\tpid%d, dr_changed_bp=0x%llx, "
"dr_changed_wp=0x%llx\n", "dr_changed_wp=0x%llx\n",
pid, lwpid_of (thread), info->dr_changed_bp, pid, info->dr_changed_bp,
info->dr_changed_wp); info->dr_changed_wp);
} }
@ -274,9 +272,6 @@ debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
: &info->dr_changed_bp; : &info->dr_changed_bp;
dr_changed = *dr_changed_ptr; dr_changed = *dr_changed_ptr;
/* Only update the threads of this process. */
if (pid_of (thread) == pid)
{
gdb_assert (idx >= 0 gdb_assert (idx >= 0
&& (idx <= (is_watchpoint ? aarch64_num_wp_regs && (idx <= (is_watchpoint ? aarch64_num_wp_regs
: aarch64_num_bp_regs))); : aarch64_num_bp_regs)));
@ -310,13 +305,12 @@ debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
we can update its debug registers. */ we can update its debug registers. */
if (!lwp->stopped) if (!lwp->stopped)
linux_stop_lwp (lwp); linux_stop_lwp (lwp);
}
if (show_debug_regs) if (show_debug_regs)
{ {
fprintf (stderr, "\tOn exit:\n\tpid%d, tid: %ld, dr_changed_bp=0x%llx, " fprintf (stderr, "\tOn exit:\n\tpid%d, dr_changed_bp=0x%llx, "
"dr_changed_wp=0x%llx\n", "dr_changed_wp=0x%llx\n",
pid, lwpid_of (thread), info->dr_changed_bp, pid, info->dr_changed_bp,
info->dr_changed_wp); info->dr_changed_wp);
} }
@ -333,14 +327,12 @@ aarch64_notify_debug_reg_change (const struct aarch64_debug_reg_state *state,
int is_watchpoint, unsigned int idx) int is_watchpoint, unsigned int idx)
{ {
struct aarch64_dr_update_callback_param param; struct aarch64_dr_update_callback_param param;
ptid_t pid_ptid = pid_to_ptid (pid_of (current_thread));
/* Only update the threads of this process. */
param.pid = pid_of (current_thread);
param.is_watchpoint = is_watchpoint; param.is_watchpoint = is_watchpoint;
param.idx = idx; param.idx = idx;
find_inferior (&all_threads, debug_reg_change_callback, (void *) &param); iterate_over_lwps (pid_ptid, debug_reg_change_callback, (void *) &param);
} }