mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 06:17:47 +08:00
[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:
@ -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.
|
||||||
|
@ -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 *) ¶m);
|
iterate_over_lwps (pid_ptid, debug_reg_change_callback, (void *) ¶m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user