Remove all_lwps global.
* inferiors.h (ptid_of): Move here from linux-low.h. (pid_of, lwpid_of): Ditto. * linux-aarch64-low.c (debug_reg_change_callback): Update, "entry" parameter is a struct thread_info * now. (aarch64_notify_debug_reg_change): Fetch pid from current_inferior directly. Pass &all_threads to find_inferior instead of &all_lwps. (aarch64_stopped_data_address): Fetch lwpid from current_inferior directly. (aarch64_linux_prepare_to_resume): Fetch ptid from thread. (aarch64_arch_setup): Fetch lwpid from current_inferior directly. * linux-arm-low.c (update_registers_callback): Update, "entry" parameter is a struct thread_info * now. Fetch lwpid from current_inferior directly. (arm_insert_point): Pass &all_threads to find_inferior instead of &all_lwps. (arm_remove_point): Ditto. (arm_stopped_by_watchpoint): Fetch lwp from current_inferior. (arm_prepare_to_resume): Fetch pid from thread. (arm_read_description): Fetch lwpid from current_inferior directly. * linux-low.c (all_lwps): Delete. (delete_lwp): Delete call to remove_inferior. (handle_extended_wait): Fetch lwpid from thread. (add_lwp): Don't set lwp->entry.id. Remove call to add_inferior_to_list. (linux_attach_lwp_1): Fetch pid from current_inferior directly. (linux_kill_one_lwp): Fetch ptid,lwpid from thread. (kill_one_lwp_callback): Ditto. (linux_kill): Don't dereference NULL pointer. Fetch ptid,lwpid from thread. (get_detach_signal): Fetch ptid from thread. (linux_detach_one_lwp): Fetch ptid,lwpid from thread. Simplify call to regcache_invalidate_thread. (delete_lwp_callback): Update, "entry" parameter is a struct thread_info * now. Fetch pid from thread. (linux_mourn): Pass &all_threads to find_inferior instead of &all_lwps. (status_pending_p_callback): Update, "entry" parameter is a struct thread_info * now. Fetch ptid from thread. (find_lwp_pid): Update, "entry" parameter is a struct thread_info * now. (linux_wait_for_lwp): Fetch pid from thread. (linux_fast_tracepoint_collecting): Fetch lwpid from thread. (maybe_move_out_of_jump_pad): Fetch lwpid from current_inferior. (enqueue_one_deferred_signal): Fetch lwpid from thread. (dequeue_one_deferred_signal): Ditto. (cancel_breakpoint): Fetch ptid from current_inferior. (linux_wait_for_event): Pass &all_threads to find_inferior, not &all_lwps. Fetch ptid, lwpid from thread. (count_events_callback): Update, "entry" parameter is a struct thread_info * now. (select_singlestep_lwp_callback): Ditto. (select_event_lwp_callback): Ditto. (cancel_breakpoints_callback): Ditto. (linux_cancel_breakpoints): Pass &all_threads to find_inferior, not &all_lwps. (select_event_lwp): Ditto. Fetch ptid from event_thread. (unsuspend_one_lwp): Update, "entry" parameter is a struct thread_info * now. (unsuspend_all_lwps): Pass &all_threads to find_inferior, not &all_lwps. (linux_stabilize_threads): Ditto. And for for_each_inferior. Fetch lwpid from thread, not lwp. (linux_wait_1): Fetch ptid, lwpid from current_inferior. Pass &all_threads to find_inferior, not &all_lwps. (send_sigstop): Fetch lwpid from thread, not lwp. (send_sigstop_callback): Update, "entry" parameter is a struct thread_info * now. (suspend_and_send_sigstop_callback): Ditto. (wait_for_sigstop): Ditto. Fetch ptid, lwpid from thread, lwp. (stuck_in_jump_pad_callback): Update, "entry" parameter is a struct thread_info * now. (move_out_of_jump_pad_callback): Ditto. Fetch ptid, lwpid from thread, lwp. (lwp_running): Update, "entry" parameter is a struct thread_info * now. (stop_all_lwps): Fetch ptid from thread. Pass &all_threads to find_inferior, for_each_inferior, not &all_lwps. (linux_resume_one_lwp): Fetch lwpid from thread. (linux_set_resume_request): Update, "entry" parameter is a struct thread_info * now. Fetch pid, lwpid from thread. (resume_status_pending_p): Update, "entry" parameter is a struct thread_info * now. (need_step_over_p): Ditto. Fetch lwpid from thread. (start_step_over): Fetch lwpid from thread. (linux_resume_one_thread): Update, "entry" parameter is a struct thread_info * now. Fetch lwpid from thread. (linux_resume): Pass &all_threads to find_inferior, not &all_lwps. (proceed_one_lwp): Update, "entry" parameter is a struct thread_info * now. Fetch lwpid from thread. (unsuspend_and_proceed_one_lwp): Update, "entry" parameter is a struct thread_info * now. (proceed_all_lwps): Pass &all_threads to find_inferior, not &all_lwps. (unstop_all_lwps): Ditto. Fetch lwpid from thread. (regsets_fetch_inferior_registers): Fetch lwpid from current_inferior directly. (regsets_store_inferior_registers): Ditto. (fetch_register, store_register): Ditto. (linux_read_memory, linux_write_memory): Ditto. (linux_request_interrupt): Ditto. (linux_read_auxv): Ditto. (linux_xfer_siginfo): Ditto. (linux_qxfer_spu): Ditto. (linux_qxfer_libraries_svr4): Ditto. * linux-low.h (ptid_of, pid_of, lwpid_of): Delete, moved to inferiors.h. (get_lwp): Delete. (get_thread_lwp): Update. (struct lwp_info): Delete member "entry". Simplify comment for member "thread". (all_lwps): Delete. * linux-mips-low.c (mips_read_description): Fetch lwpid from current_inferior directly. (update_watch_registers_callback): Update, "entry" parameter is a struct thread_info * now. Fetch pid from thread. (mips_linux_prepare_to_resume): Fetch ptid from thread. (mips_insert_point): Fetch lwpid from current_inferior. Pass &all_threads to find_inferior, not &all_lwps. (mips_remove_point): Pass &all_threads to find_inferior, not &all_lwps. (mips_stopped_by_watchpoint): Fetch lwpid from current_inferior directly. (mips_stopped_data_address): Ditto. * linux-s390-low.c (s390_arch_setup): Fetch pid from current_inferior directly. * linux-tile-low.c (tile_arch_setup): Ditto. * linux-x86-low.c (x86_get_thread_area): Fetch lwpid from thread. (update_debug_registers_callback): Update, "entry" parameter is a struct thread_info * now. Fetch pid from thread. (i386_dr_low_set_addr): Fetch pid from current_inferior directly. Pass &all_threads to find_inferior, not &all_lwps. (i386_dr_low_get_addr): Fetch ptid from current_inferior directly. (i386_dr_low_set_control): Fetch pid from current_inferior directly. Pass &all_threads to find_inferior, not &all_lwps. (i386_dr_low_get_control): Fetch ptid from current_inferior directly. (i386_dr_low_get_status): Ditto. (x86_linux_prepare_to_resume): Fetch ptid from thread. (x86_siginfo_fixup): Fetch lwpid from current_inferior directly. (x86_linux_read_description): Ditto. * proc-service.c (ps_getpid): Fetch pid from current_inferior directly.
This commit is contained in:
parent
05227d1410
commit
d86d4aafd4
11 changed files with 459 additions and 292 deletions
|
@ -1,3 +1,143 @@
|
||||||
|
2014-02-20 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
* inferiors.h (ptid_of): Move here from linux-low.h.
|
||||||
|
(pid_of, lwpid_of): Ditto.
|
||||||
|
* linux-aarch64-low.c (debug_reg_change_callback): Update, "entry"
|
||||||
|
parameter is a struct thread_info * now.
|
||||||
|
(aarch64_notify_debug_reg_change): Fetch pid from current_inferior
|
||||||
|
directly. Pass &all_threads to find_inferior instead of &all_lwps.
|
||||||
|
(aarch64_stopped_data_address): Fetch lwpid from current_inferior
|
||||||
|
directly.
|
||||||
|
(aarch64_linux_prepare_to_resume): Fetch ptid from thread.
|
||||||
|
(aarch64_arch_setup): Fetch lwpid from current_inferior directly.
|
||||||
|
* linux-arm-low.c (update_registers_callback): Update, "entry"
|
||||||
|
parameter is a struct thread_info * now.
|
||||||
|
Fetch lwpid from current_inferior directly.
|
||||||
|
(arm_insert_point): Pass &all_threads to find_inferior instead of
|
||||||
|
&all_lwps.
|
||||||
|
(arm_remove_point): Ditto.
|
||||||
|
(arm_stopped_by_watchpoint): Fetch lwp from current_inferior.
|
||||||
|
(arm_prepare_to_resume): Fetch pid from thread.
|
||||||
|
(arm_read_description): Fetch lwpid from current_inferior directly.
|
||||||
|
* linux-low.c (all_lwps): Delete.
|
||||||
|
(delete_lwp): Delete call to remove_inferior.
|
||||||
|
(handle_extended_wait): Fetch lwpid from thread.
|
||||||
|
(add_lwp): Don't set lwp->entry.id. Remove call to
|
||||||
|
add_inferior_to_list.
|
||||||
|
(linux_attach_lwp_1): Fetch pid from current_inferior directly.
|
||||||
|
(linux_kill_one_lwp): Fetch ptid,lwpid from thread.
|
||||||
|
(kill_one_lwp_callback): Ditto.
|
||||||
|
(linux_kill): Don't dereference NULL pointer.
|
||||||
|
Fetch ptid,lwpid from thread.
|
||||||
|
(get_detach_signal): Fetch ptid from thread.
|
||||||
|
(linux_detach_one_lwp): Fetch ptid,lwpid from thread.
|
||||||
|
Simplify call to regcache_invalidate_thread.
|
||||||
|
(delete_lwp_callback): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now. Fetch pid from thread.
|
||||||
|
(linux_mourn): Pass &all_threads to find_inferior instead of &all_lwps.
|
||||||
|
(status_pending_p_callback): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now. Fetch ptid from thread.
|
||||||
|
(find_lwp_pid): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now.
|
||||||
|
(linux_wait_for_lwp): Fetch pid from thread.
|
||||||
|
(linux_fast_tracepoint_collecting): Fetch lwpid from thread.
|
||||||
|
(maybe_move_out_of_jump_pad): Fetch lwpid from current_inferior.
|
||||||
|
(enqueue_one_deferred_signal): Fetch lwpid from thread.
|
||||||
|
(dequeue_one_deferred_signal): Ditto.
|
||||||
|
(cancel_breakpoint): Fetch ptid from current_inferior.
|
||||||
|
(linux_wait_for_event): Pass &all_threads to find_inferior,
|
||||||
|
not &all_lwps. Fetch ptid, lwpid from thread.
|
||||||
|
(count_events_callback): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now.
|
||||||
|
(select_singlestep_lwp_callback): Ditto.
|
||||||
|
(select_event_lwp_callback): Ditto.
|
||||||
|
(cancel_breakpoints_callback): Ditto.
|
||||||
|
(linux_cancel_breakpoints): Pass &all_threads to find_inferior,
|
||||||
|
not &all_lwps.
|
||||||
|
(select_event_lwp): Ditto. Fetch ptid from event_thread.
|
||||||
|
(unsuspend_one_lwp): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now.
|
||||||
|
(unsuspend_all_lwps): Pass &all_threads to find_inferior,
|
||||||
|
not &all_lwps.
|
||||||
|
(linux_stabilize_threads): Ditto. And for for_each_inferior.
|
||||||
|
Fetch lwpid from thread, not lwp.
|
||||||
|
(linux_wait_1): Fetch ptid, lwpid from current_inferior.
|
||||||
|
Pass &all_threads to find_inferior, not &all_lwps.
|
||||||
|
(send_sigstop): Fetch lwpid from thread, not lwp.
|
||||||
|
(send_sigstop_callback): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now.
|
||||||
|
(suspend_and_send_sigstop_callback): Ditto.
|
||||||
|
(wait_for_sigstop): Ditto. Fetch ptid, lwpid from thread, lwp.
|
||||||
|
(stuck_in_jump_pad_callback): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now.
|
||||||
|
(move_out_of_jump_pad_callback): Ditto. Fetch ptid, lwpid
|
||||||
|
from thread, lwp.
|
||||||
|
(lwp_running): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now.
|
||||||
|
(stop_all_lwps): Fetch ptid from thread.
|
||||||
|
Pass &all_threads to find_inferior, for_each_inferior, not &all_lwps.
|
||||||
|
(linux_resume_one_lwp): Fetch lwpid from thread.
|
||||||
|
(linux_set_resume_request): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now. Fetch pid, lwpid from thread.
|
||||||
|
(resume_status_pending_p): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now.
|
||||||
|
(need_step_over_p): Ditto. Fetch lwpid from thread.
|
||||||
|
(start_step_over): Fetch lwpid from thread.
|
||||||
|
(linux_resume_one_thread): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now. Fetch lwpid from thread.
|
||||||
|
(linux_resume): Pass &all_threads to find_inferior, not &all_lwps.
|
||||||
|
(proceed_one_lwp): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now. Fetch lwpid from thread.
|
||||||
|
(unsuspend_and_proceed_one_lwp): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now.
|
||||||
|
(proceed_all_lwps): Pass &all_threads to find_inferior, not &all_lwps.
|
||||||
|
(unstop_all_lwps): Ditto. Fetch lwpid from thread.
|
||||||
|
(regsets_fetch_inferior_registers): Fetch lwpid from current_inferior
|
||||||
|
directly.
|
||||||
|
(regsets_store_inferior_registers): Ditto.
|
||||||
|
(fetch_register, store_register): Ditto.
|
||||||
|
(linux_read_memory, linux_write_memory): Ditto.
|
||||||
|
(linux_request_interrupt): Ditto.
|
||||||
|
(linux_read_auxv): Ditto.
|
||||||
|
(linux_xfer_siginfo): Ditto.
|
||||||
|
(linux_qxfer_spu): Ditto.
|
||||||
|
(linux_qxfer_libraries_svr4): Ditto.
|
||||||
|
* linux-low.h (ptid_of, pid_of, lwpid_of): Delete,
|
||||||
|
moved to inferiors.h.
|
||||||
|
(get_lwp): Delete.
|
||||||
|
(get_thread_lwp): Update.
|
||||||
|
(struct lwp_info): Delete member "entry". Simplify comment for
|
||||||
|
member "thread".
|
||||||
|
(all_lwps): Delete.
|
||||||
|
* linux-mips-low.c (mips_read_description): Fetch lwpid from
|
||||||
|
current_inferior directly.
|
||||||
|
(update_watch_registers_callback): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now. Fetch pid from thread.
|
||||||
|
(mips_linux_prepare_to_resume): Fetch ptid from thread.
|
||||||
|
(mips_insert_point): Fetch lwpid from current_inferior.
|
||||||
|
Pass &all_threads to find_inferior, not &all_lwps.
|
||||||
|
(mips_remove_point): Pass &all_threads to find_inferior, not &all_lwps.
|
||||||
|
(mips_stopped_by_watchpoint): Fetch lwpid from current_inferior
|
||||||
|
directly.
|
||||||
|
(mips_stopped_data_address): Ditto.
|
||||||
|
* linux-s390-low.c (s390_arch_setup): Fetch pid from current_inferior
|
||||||
|
directly.
|
||||||
|
* linux-tile-low.c (tile_arch_setup): Ditto.
|
||||||
|
* linux-x86-low.c (x86_get_thread_area): Fetch lwpid from thread.
|
||||||
|
(update_debug_registers_callback): Update, "entry" parameter is a
|
||||||
|
struct thread_info * now. Fetch pid from thread.
|
||||||
|
(i386_dr_low_set_addr): Fetch pid from current_inferior directly.
|
||||||
|
Pass &all_threads to find_inferior, not &all_lwps.
|
||||||
|
(i386_dr_low_get_addr): Fetch ptid from current_inferior directly.
|
||||||
|
(i386_dr_low_set_control): Fetch pid from current_inferior directly.
|
||||||
|
Pass &all_threads to find_inferior, not &all_lwps.
|
||||||
|
(i386_dr_low_get_control): Fetch ptid from current_inferior directly.
|
||||||
|
(i386_dr_low_get_status): Ditto.
|
||||||
|
(x86_linux_prepare_to_resume): Fetch ptid from thread.
|
||||||
|
(x86_siginfo_fixup): Fetch lwpid from current_inferior directly.
|
||||||
|
(x86_linux_read_description): Ditto.
|
||||||
|
* proc-service.c (ps_getpid): Fetch pid from current_inferior directly.
|
||||||
|
|
||||||
2014-02-20 Doug Evans <dje@google.com>
|
2014-02-20 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* inferiors.c (get_first_inferior): Fix buglet.
|
* inferiors.c (get_first_inferior): Fix buglet.
|
||||||
|
|
|
@ -72,6 +72,10 @@ struct process_info
|
||||||
struct process_info_private *private;
|
struct process_info_private *private;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define ptid_of(inf) ((inf)->entry.id)
|
||||||
|
#define pid_of(inf) ptid_get_pid ((inf)->entry.id)
|
||||||
|
#define lwpid_of(inf) ptid_get_lwp ((inf)->entry.id)
|
||||||
|
|
||||||
/* Return a pointer to the process that corresponds to the current
|
/* Return a pointer to the process that corresponds to the current
|
||||||
thread (current_inferior). It is an error to call this if there is
|
thread (current_inferior). It is an error to call this if there is
|
||||||
no current thread selected. */
|
no current thread selected. */
|
||||||
|
|
|
@ -638,7 +638,8 @@ struct aarch64_dr_update_callback_param
|
||||||
static int
|
static int
|
||||||
debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
|
debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
|
||||||
{
|
{
|
||||||
struct lwp_info *lwp = (struct lwp_info *) entry;
|
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 = param_p->pid;
|
||||||
|
@ -653,7 +654,7 @@ debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
|
||||||
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, tid: %ld, dr_changed_bp=0x%llx, "
|
||||||
"dr_changed_wp=0x%llx\n",
|
"dr_changed_wp=0x%llx\n",
|
||||||
pid, lwpid_of (lwp), info->dr_changed_bp,
|
pid, lwpid_of (thread), info->dr_changed_bp,
|
||||||
info->dr_changed_wp);
|
info->dr_changed_wp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -662,7 +663,7 @@ debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
|
||||||
dr_changed = *dr_changed_ptr;
|
dr_changed = *dr_changed_ptr;
|
||||||
|
|
||||||
/* Only update the threads of this process. */
|
/* Only update the threads of this process. */
|
||||||
if (pid_of (lwp) == pid)
|
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
|
||||||
|
@ -703,7 +704,8 @@ debug_reg_change_callback (struct inferior_list_entry *entry, void *ptr)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "\tOn exit:\n\tpid%d, tid: %ld, dr_changed_bp=0x%llx, "
|
fprintf (stderr, "\tOn exit:\n\tpid%d, tid: %ld, dr_changed_bp=0x%llx, "
|
||||||
"dr_changed_wp=0x%llx\n",
|
"dr_changed_wp=0x%llx\n",
|
||||||
pid, lwpid_of (lwp), info->dr_changed_bp, info->dr_changed_wp);
|
pid, lwpid_of (thread), info->dr_changed_bp,
|
||||||
|
info->dr_changed_wp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -721,12 +723,12 @@ aarch64_notify_debug_reg_change (const struct aarch64_debug_reg_state *state,
|
||||||
struct aarch64_dr_update_callback_param param;
|
struct aarch64_dr_update_callback_param param;
|
||||||
|
|
||||||
/* Only update the threads of this process. */
|
/* Only update the threads of this process. */
|
||||||
param.pid = pid_of (get_thread_lwp (current_inferior));
|
param.pid = pid_of (current_inferior);
|
||||||
|
|
||||||
param.is_watchpoint = is_watchpoint;
|
param.is_watchpoint = is_watchpoint;
|
||||||
param.idx = idx;
|
param.idx = idx;
|
||||||
|
|
||||||
find_inferior (&all_lwps, debug_reg_change_callback, (void *) ¶m);
|
find_inferior (&all_threads, debug_reg_change_callback, (void *) ¶m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1048,7 +1050,7 @@ aarch64_stopped_data_address (void)
|
||||||
int pid, i;
|
int pid, i;
|
||||||
struct aarch64_debug_reg_state *state;
|
struct aarch64_debug_reg_state *state;
|
||||||
|
|
||||||
pid = lwpid_of (get_thread_lwp (current_inferior));
|
pid = lwpid_of (current_inferior);
|
||||||
|
|
||||||
/* Get the siginfo. */
|
/* Get the siginfo. */
|
||||||
if (ptrace (PTRACE_GETSIGINFO, pid, NULL, &siginfo) != 0)
|
if (ptrace (PTRACE_GETSIGINFO, pid, NULL, &siginfo) != 0)
|
||||||
|
@ -1145,7 +1147,8 @@ aarch64_linux_new_thread (void)
|
||||||
static void
|
static void
|
||||||
aarch64_linux_prepare_to_resume (struct lwp_info *lwp)
|
aarch64_linux_prepare_to_resume (struct lwp_info *lwp)
|
||||||
{
|
{
|
||||||
ptid_t ptid = ptid_of (lwp);
|
struct thread_info *thread = get_lwp_thread (lwp);
|
||||||
|
ptid_t ptid = ptid_of (thread);
|
||||||
struct arch_lwp_info *info = lwp->arch_private;
|
struct arch_lwp_info *info = lwp->arch_private;
|
||||||
|
|
||||||
if (DR_HAS_CHANGED (info->dr_changed_bp)
|
if (DR_HAS_CHANGED (info->dr_changed_bp)
|
||||||
|
@ -1157,7 +1160,7 @@ aarch64_linux_prepare_to_resume (struct lwp_info *lwp)
|
||||||
= &proc->private->arch_private->debug_reg_state;
|
= &proc->private->arch_private->debug_reg_state;
|
||||||
|
|
||||||
if (debug_hw_points)
|
if (debug_hw_points)
|
||||||
fprintf (stderr, "prepare_to_resume thread %ld\n", lwpid_of (lwp));
|
fprintf (stderr, "prepare_to_resume thread %ld\n", lwpid_of (thread));
|
||||||
|
|
||||||
/* Watchpoints. */
|
/* Watchpoints. */
|
||||||
if (DR_HAS_CHANGED (info->dr_changed_wp))
|
if (DR_HAS_CHANGED (info->dr_changed_wp))
|
||||||
|
@ -1195,7 +1198,7 @@ aarch64_arch_setup (void)
|
||||||
|
|
||||||
current_process ()->tdesc = tdesc_aarch64;
|
current_process ()->tdesc = tdesc_aarch64;
|
||||||
|
|
||||||
pid = lwpid_of (get_thread_lwp (current_inferior));
|
pid = lwpid_of (current_inferior);
|
||||||
iov.iov_base = &dreg_state;
|
iov.iov_base = &dreg_state;
|
||||||
iov.iov_len = sizeof (dreg_state);
|
iov.iov_len = sizeof (dreg_state);
|
||||||
|
|
||||||
|
|
|
@ -536,11 +536,12 @@ struct update_registers_data
|
||||||
static int
|
static int
|
||||||
update_registers_callback (struct inferior_list_entry *entry, void *arg)
|
update_registers_callback (struct inferior_list_entry *entry, void *arg)
|
||||||
{
|
{
|
||||||
struct lwp_info *lwp = (struct lwp_info *) entry;
|
struct thread_info *thread = (struct thread_info *) entry;
|
||||||
|
struct lwp_info *lwp = get_thread_lwp (thread);
|
||||||
struct update_registers_data *data = (struct update_registers_data *) arg;
|
struct update_registers_data *data = (struct update_registers_data *) arg;
|
||||||
|
|
||||||
/* Only update the threads of the current process. */
|
/* Only update the threads of the current process. */
|
||||||
if (pid_of (lwp) == pid_of (get_thread_lwp (current_inferior)))
|
if (pid_of (thread) == pid_of (current_inferior))
|
||||||
{
|
{
|
||||||
/* The actual update is done later just before resuming the lwp,
|
/* The actual update is done later just before resuming the lwp,
|
||||||
we just mark that the registers need updating. */
|
we just mark that the registers need updating. */
|
||||||
|
@ -589,7 +590,7 @@ arm_insert_point (char type, CORE_ADDR addr, int len)
|
||||||
{
|
{
|
||||||
struct update_registers_data data = { watch, i };
|
struct update_registers_data data = { watch, i };
|
||||||
pts[i] = p;
|
pts[i] = p;
|
||||||
find_inferior (&all_lwps, update_registers_callback, &data);
|
find_inferior (&all_threads, update_registers_callback, &data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -628,7 +629,7 @@ arm_remove_point (char type, CORE_ADDR addr, int len)
|
||||||
{
|
{
|
||||||
struct update_registers_data data = { watch, i };
|
struct update_registers_data data = { watch, i };
|
||||||
pts[i].control = arm_hwbp_control_disable (pts[i].control);
|
pts[i].control = arm_hwbp_control_disable (pts[i].control);
|
||||||
find_inferior (&all_lwps, update_registers_callback, &data);
|
find_inferior (&all_threads, update_registers_callback, &data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -649,7 +650,7 @@ arm_stopped_by_watchpoint (void)
|
||||||
|
|
||||||
/* Retrieve siginfo. */
|
/* Retrieve siginfo. */
|
||||||
errno = 0;
|
errno = 0;
|
||||||
ptrace (PTRACE_GETSIGINFO, lwpid_of (lwp), 0, &siginfo);
|
ptrace (PTRACE_GETSIGINFO, lwpid_of (current_inferior), 0, &siginfo);
|
||||||
if (errno != 0)
|
if (errno != 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -707,8 +708,9 @@ arm_new_thread (void)
|
||||||
static void
|
static void
|
||||||
arm_prepare_to_resume (struct lwp_info *lwp)
|
arm_prepare_to_resume (struct lwp_info *lwp)
|
||||||
{
|
{
|
||||||
int pid = lwpid_of (lwp);
|
struct thread_info *thread = get_lwp_thread (lwp);
|
||||||
struct process_info *proc = find_process_pid (pid_of (lwp));
|
int pid = lwpid_of (thread);
|
||||||
|
struct process_info *proc = find_process_pid (pid_of (thread));
|
||||||
struct arch_process_info *proc_info = proc->private->arch_private;
|
struct arch_process_info *proc_info = proc->private->arch_private;
|
||||||
struct arch_lwp_info *lwp_info = lwp->arch_private;
|
struct arch_lwp_info *lwp_info = lwp->arch_private;
|
||||||
int i;
|
int i;
|
||||||
|
@ -780,7 +782,7 @@ arm_get_hwcap (unsigned long *valp)
|
||||||
static const struct target_desc *
|
static const struct target_desc *
|
||||||
arm_read_description (void)
|
arm_read_description (void)
|
||||||
{
|
{
|
||||||
int pid = lwpid_of (get_thread_lwp (current_inferior));
|
int pid = lwpid_of (current_inferior);
|
||||||
|
|
||||||
/* Query hardware watchpoint/breakpoint capabilities. */
|
/* Query hardware watchpoint/breakpoint capabilities. */
|
||||||
arm_linux_init_hwbp_cap (pid);
|
arm_linux_init_hwbp_cap (pid);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -223,21 +223,22 @@ struct linux_target_ops
|
||||||
|
|
||||||
extern struct linux_target_ops the_low_target;
|
extern struct linux_target_ops the_low_target;
|
||||||
|
|
||||||
#define ptid_of(proc) ((proc)->entry.id)
|
#define get_thread_lwp(thr) ((struct lwp_info *) (inferior_target_data (thr)))
|
||||||
#define pid_of(proc) ptid_get_pid ((proc)->entry.id)
|
|
||||||
#define lwpid_of(proc) ptid_get_lwp ((proc)->entry.id)
|
|
||||||
|
|
||||||
#define get_lwp(inf) ((struct lwp_info *)(inf))
|
|
||||||
#define get_thread_lwp(thr) (get_lwp (inferior_target_data (thr)))
|
|
||||||
#define get_lwp_thread(lwp) ((lwp)->thread)
|
#define get_lwp_thread(lwp) ((lwp)->thread)
|
||||||
|
|
||||||
|
/* This struct is recorded in the target_data field of struct thread_info.
|
||||||
|
|
||||||
|
On linux ``all_threads'' is keyed by the LWP ID, which we use as the
|
||||||
|
GDB protocol representation of the thread ID. Threads also have
|
||||||
|
a "process ID" (poorly named) which is (presently) the same as the
|
||||||
|
LWP ID.
|
||||||
|
|
||||||
|
There is also ``all_processes'' is keyed by the "overall process ID",
|
||||||
|
which GNU/Linux calls tgid, "thread group ID". */
|
||||||
|
|
||||||
struct lwp_info
|
struct lwp_info
|
||||||
{
|
{
|
||||||
struct inferior_list_entry entry;
|
/* Backlink to the parent object. */
|
||||||
|
|
||||||
/* Backlink to the thread_info object.
|
|
||||||
It is the "main" representation of the thread, we just contain
|
|
||||||
linux-specific subordinate data. */
|
|
||||||
struct thread_info *thread;
|
struct thread_info *thread;
|
||||||
|
|
||||||
/* If this flag is set, the next SIGSTOP will be ignored (the
|
/* If this flag is set, the next SIGSTOP will be ignored (the
|
||||||
|
@ -340,8 +341,6 @@ struct lwp_info
|
||||||
struct arch_lwp_info *arch_private;
|
struct arch_lwp_info *arch_private;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct inferior_list all_lwps;
|
|
||||||
|
|
||||||
int linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine);
|
int linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine);
|
||||||
|
|
||||||
void linux_attach_lwp (unsigned long pid);
|
void linux_attach_lwp (unsigned long pid);
|
||||||
|
|
|
@ -126,7 +126,7 @@ mips_read_description (void)
|
||||||
{
|
{
|
||||||
if (have_dsp < 0)
|
if (have_dsp < 0)
|
||||||
{
|
{
|
||||||
int pid = lwpid_of (get_thread_lwp (current_inferior));
|
int pid = lwpid_of (current_inferior);
|
||||||
|
|
||||||
ptrace (PTRACE_PEEKUSER, pid, DSP_CONTROL, 0);
|
ptrace (PTRACE_PEEKUSER, pid, DSP_CONTROL, 0);
|
||||||
switch (errno)
|
switch (errno)
|
||||||
|
@ -298,11 +298,12 @@ static int
|
||||||
update_watch_registers_callback (struct inferior_list_entry *entry,
|
update_watch_registers_callback (struct inferior_list_entry *entry,
|
||||||
void *pid_p)
|
void *pid_p)
|
||||||
{
|
{
|
||||||
struct lwp_info *lwp = (struct lwp_info *) entry;
|
struct thread_info *thread = (struct thread_info *) entry;
|
||||||
|
struct lwp_info *lwp = get_thread_lwp (thread);
|
||||||
int pid = *(int *) pid_p;
|
int pid = *(int *) pid_p;
|
||||||
|
|
||||||
/* Only update the threads of this process. */
|
/* Only update the threads of this process. */
|
||||||
if (pid_of (lwp) == pid)
|
if (pid_of (thread) == pid)
|
||||||
{
|
{
|
||||||
/* The actual update is done later just before resuming the lwp,
|
/* The actual update is done later just before resuming the lwp,
|
||||||
we just mark that the registers need updating. */
|
we just mark that the registers need updating. */
|
||||||
|
@ -349,7 +350,7 @@ mips_linux_new_thread (void)
|
||||||
static void
|
static void
|
||||||
mips_linux_prepare_to_resume (struct lwp_info *lwp)
|
mips_linux_prepare_to_resume (struct lwp_info *lwp)
|
||||||
{
|
{
|
||||||
ptid_t ptid = ptid_of (lwp);
|
ptid_t ptid = ptid_of (get_lwp_thread (lwp));
|
||||||
struct process_info *proc = find_process_pid (ptid_get_pid (ptid));
|
struct process_info *proc = find_process_pid (ptid_get_pid (ptid));
|
||||||
struct arch_process_info *private = proc->private->arch_private;
|
struct arch_process_info *private = proc->private->arch_private;
|
||||||
|
|
||||||
|
@ -418,7 +419,7 @@ mips_insert_point (char type, CORE_ADDR addr, int len)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
lwpid = lwpid_of (get_thread_lwp (current_inferior));
|
lwpid = lwpid_of (current_inferior);
|
||||||
if (!mips_linux_read_watch_registers (lwpid,
|
if (!mips_linux_read_watch_registers (lwpid,
|
||||||
&private->watch_readback,
|
&private->watch_readback,
|
||||||
&private->watch_readback_valid,
|
&private->watch_readback_valid,
|
||||||
|
@ -454,7 +455,7 @@ mips_insert_point (char type, CORE_ADDR addr, int len)
|
||||||
|
|
||||||
/* Only update the threads of this process. */
|
/* Only update the threads of this process. */
|
||||||
pid = pid_of (proc);
|
pid = pid_of (proc);
|
||||||
find_inferior (&all_lwps, update_watch_registers_callback, &pid);
|
find_inferior (&all_threads, update_watch_registers_callback, &pid);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -517,7 +518,7 @@ mips_remove_point (char type, CORE_ADDR addr, int len)
|
||||||
|
|
||||||
/* Only update the threads of this process. */
|
/* Only update the threads of this process. */
|
||||||
pid = pid_of (proc);
|
pid = pid_of (proc);
|
||||||
find_inferior (&all_lwps, update_watch_registers_callback, &pid);
|
find_inferior (&all_threads, update_watch_registers_callback, &pid);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -532,7 +533,7 @@ mips_stopped_by_watchpoint (void)
|
||||||
struct arch_process_info *private = proc->private->arch_private;
|
struct arch_process_info *private = proc->private->arch_private;
|
||||||
int n;
|
int n;
|
||||||
int num_valid;
|
int num_valid;
|
||||||
long lwpid = lwpid_of (get_thread_lwp (current_inferior));
|
long lwpid = lwpid_of (current_inferior);
|
||||||
|
|
||||||
if (!mips_linux_read_watch_registers (lwpid,
|
if (!mips_linux_read_watch_registers (lwpid,
|
||||||
&private->watch_readback,
|
&private->watch_readback,
|
||||||
|
@ -560,7 +561,7 @@ mips_stopped_data_address (void)
|
||||||
struct arch_process_info *private = proc->private->arch_private;
|
struct arch_process_info *private = proc->private->arch_private;
|
||||||
int n;
|
int n;
|
||||||
int num_valid;
|
int num_valid;
|
||||||
long lwpid = lwpid_of (get_thread_lwp (current_inferior));
|
long lwpid = lwpid_of (current_inferior);
|
||||||
|
|
||||||
/* On MIPS we don't know the low order 3 bits of the data address.
|
/* On MIPS we don't know the low order 3 bits of the data address.
|
||||||
GDB does not support remote targets that can't report the
|
GDB does not support remote targets that can't report the
|
||||||
|
|
|
@ -422,7 +422,7 @@ s390_arch_setup (void)
|
||||||
struct regset_info *regset;
|
struct regset_info *regset;
|
||||||
|
|
||||||
/* Check whether the kernel supports extra register sets. */
|
/* Check whether the kernel supports extra register sets. */
|
||||||
int pid = pid_of (get_thread_lwp (current_inferior));
|
int pid = pid_of (current_inferior);
|
||||||
int have_regset_last_break
|
int have_regset_last_break
|
||||||
= s390_check_regset (pid, NT_S390_LAST_BREAK, 8);
|
= s390_check_regset (pid, NT_S390_LAST_BREAK, 8);
|
||||||
int have_regset_system_call
|
int have_regset_system_call
|
||||||
|
|
|
@ -158,7 +158,7 @@ tile_regs_info (void)
|
||||||
static void
|
static void
|
||||||
tile_arch_setup (void)
|
tile_arch_setup (void)
|
||||||
{
|
{
|
||||||
int pid = pid_of (get_thread_lwp (current_inferior));
|
int pid = pid_of (current_inferior);
|
||||||
unsigned int machine;
|
unsigned int machine;
|
||||||
int is_elf64 = linux_pid_exe_is_elf_64_file (pid, &machine);
|
int is_elf64 = linux_pid_exe_is_elf_64_file (pid, &machine);
|
||||||
|
|
||||||
|
|
|
@ -285,7 +285,8 @@ x86_get_thread_area (int lwpid, CORE_ADDR *addr)
|
||||||
|
|
||||||
{
|
{
|
||||||
struct lwp_info *lwp = find_lwp_pid (pid_to_ptid (lwpid));
|
struct lwp_info *lwp = find_lwp_pid (pid_to_ptid (lwpid));
|
||||||
struct regcache *regcache = get_thread_regcache (get_lwp_thread (lwp), 1);
|
struct thread_info *thr = get_lwp_thread (lwp);
|
||||||
|
struct regcache *regcache = get_thread_regcache (thr, 1);
|
||||||
unsigned int desc[4];
|
unsigned int desc[4];
|
||||||
ULONGEST gs = 0;
|
ULONGEST gs = 0;
|
||||||
const int reg_thread_area = 3; /* bits to scale down register value. */
|
const int reg_thread_area = 3; /* bits to scale down register value. */
|
||||||
|
@ -296,7 +297,7 @@ x86_get_thread_area (int lwpid, CORE_ADDR *addr)
|
||||||
idx = gs >> reg_thread_area;
|
idx = gs >> reg_thread_area;
|
||||||
|
|
||||||
if (ptrace (PTRACE_GET_THREAD_AREA,
|
if (ptrace (PTRACE_GET_THREAD_AREA,
|
||||||
lwpid_of (lwp),
|
lwpid_of (thr),
|
||||||
(void *) (long) idx, (unsigned long) &desc) < 0)
|
(void *) (long) idx, (unsigned long) &desc) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -538,11 +539,12 @@ static int
|
||||||
update_debug_registers_callback (struct inferior_list_entry *entry,
|
update_debug_registers_callback (struct inferior_list_entry *entry,
|
||||||
void *pid_p)
|
void *pid_p)
|
||||||
{
|
{
|
||||||
struct lwp_info *lwp = (struct lwp_info *) entry;
|
struct thread_info *thr = (struct thread_info *) entry;
|
||||||
|
struct lwp_info *lwp = get_thread_lwp (thr);
|
||||||
int pid = *(int *) pid_p;
|
int pid = *(int *) pid_p;
|
||||||
|
|
||||||
/* Only update the threads of this process. */
|
/* Only update the threads of this process. */
|
||||||
if (pid_of (lwp) == pid)
|
if (pid_of (thr) == pid)
|
||||||
{
|
{
|
||||||
/* The actual update is done later just before resuming the lwp,
|
/* The actual update is done later just before resuming the lwp,
|
||||||
we just mark that the registers need updating. */
|
we just mark that the registers need updating. */
|
||||||
|
@ -563,12 +565,12 @@ void
|
||||||
i386_dr_low_set_addr (const struct i386_debug_reg_state *state, int regnum)
|
i386_dr_low_set_addr (const struct i386_debug_reg_state *state, int regnum)
|
||||||
{
|
{
|
||||||
/* Only update the threads of this process. */
|
/* Only update the threads of this process. */
|
||||||
int pid = pid_of (get_thread_lwp (current_inferior));
|
int pid = pid_of (current_inferior);
|
||||||
|
|
||||||
if (! (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR))
|
if (! (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR))
|
||||||
fatal ("Invalid debug register %d", regnum);
|
fatal ("Invalid debug register %d", regnum);
|
||||||
|
|
||||||
find_inferior (&all_lwps, update_debug_registers_callback, &pid);
|
find_inferior (&all_threads, update_debug_registers_callback, &pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the inferior's debug register REGNUM. */
|
/* Return the inferior's debug register REGNUM. */
|
||||||
|
@ -576,8 +578,7 @@ i386_dr_low_set_addr (const struct i386_debug_reg_state *state, int regnum)
|
||||||
CORE_ADDR
|
CORE_ADDR
|
||||||
i386_dr_low_get_addr (int regnum)
|
i386_dr_low_get_addr (int regnum)
|
||||||
{
|
{
|
||||||
struct lwp_info *lwp = get_thread_lwp (current_inferior);
|
ptid_t ptid = ptid_of (current_inferior);
|
||||||
ptid_t ptid = ptid_of (lwp);
|
|
||||||
|
|
||||||
/* DR6 and DR7 are retrieved with some other way. */
|
/* DR6 and DR7 are retrieved with some other way. */
|
||||||
gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR);
|
gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR);
|
||||||
|
@ -591,9 +592,9 @@ void
|
||||||
i386_dr_low_set_control (const struct i386_debug_reg_state *state)
|
i386_dr_low_set_control (const struct i386_debug_reg_state *state)
|
||||||
{
|
{
|
||||||
/* Only update the threads of this process. */
|
/* Only update the threads of this process. */
|
||||||
int pid = pid_of (get_thread_lwp (current_inferior));
|
int pid = pid_of (current_inferior);
|
||||||
|
|
||||||
find_inferior (&all_lwps, update_debug_registers_callback, &pid);
|
find_inferior (&all_threads, update_debug_registers_callback, &pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the inferior's DR7 debug control register. */
|
/* Return the inferior's DR7 debug control register. */
|
||||||
|
@ -601,8 +602,7 @@ i386_dr_low_set_control (const struct i386_debug_reg_state *state)
|
||||||
unsigned
|
unsigned
|
||||||
i386_dr_low_get_control (void)
|
i386_dr_low_get_control (void)
|
||||||
{
|
{
|
||||||
struct lwp_info *lwp = get_thread_lwp (current_inferior);
|
ptid_t ptid = ptid_of (current_inferior);
|
||||||
ptid_t ptid = ptid_of (lwp);
|
|
||||||
|
|
||||||
return x86_linux_dr_get (ptid, DR_CONTROL);
|
return x86_linux_dr_get (ptid, DR_CONTROL);
|
||||||
}
|
}
|
||||||
|
@ -613,8 +613,7 @@ i386_dr_low_get_control (void)
|
||||||
unsigned
|
unsigned
|
||||||
i386_dr_low_get_status (void)
|
i386_dr_low_get_status (void)
|
||||||
{
|
{
|
||||||
struct lwp_info *lwp = get_thread_lwp (current_inferior);
|
ptid_t ptid = ptid_of (current_inferior);
|
||||||
ptid_t ptid = ptid_of (lwp);
|
|
||||||
|
|
||||||
return x86_linux_dr_get (ptid, DR_STATUS);
|
return x86_linux_dr_get (ptid, DR_STATUS);
|
||||||
}
|
}
|
||||||
|
@ -728,7 +727,7 @@ x86_linux_new_thread (void)
|
||||||
static void
|
static void
|
||||||
x86_linux_prepare_to_resume (struct lwp_info *lwp)
|
x86_linux_prepare_to_resume (struct lwp_info *lwp)
|
||||||
{
|
{
|
||||||
ptid_t ptid = ptid_of (lwp);
|
ptid_t ptid = ptid_of (get_lwp_thread (lwp));
|
||||||
int clear_status = 0;
|
int clear_status = 0;
|
||||||
|
|
||||||
if (lwp->arch_private->debug_registers_changed)
|
if (lwp->arch_private->debug_registers_changed)
|
||||||
|
@ -1170,7 +1169,7 @@ x86_siginfo_fixup (siginfo_t *native, void *inf, int direction)
|
||||||
{
|
{
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
unsigned int machine;
|
unsigned int machine;
|
||||||
int tid = lwpid_of (get_thread_lwp (current_inferior));
|
int tid = lwpid_of (current_inferior);
|
||||||
int is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine);
|
int is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine);
|
||||||
|
|
||||||
/* Is the inferior 32-bit? If so, then fixup the siginfo object. */
|
/* Is the inferior 32-bit? If so, then fixup the siginfo object. */
|
||||||
|
@ -1255,7 +1254,7 @@ x86_linux_read_description (void)
|
||||||
static uint64_t xcr0;
|
static uint64_t xcr0;
|
||||||
struct regset_info *regset;
|
struct regset_info *regset;
|
||||||
|
|
||||||
tid = lwpid_of (get_thread_lwp (current_inferior));
|
tid = lwpid_of (current_inferior);
|
||||||
|
|
||||||
is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine);
|
is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine);
|
||||||
|
|
||||||
|
|
|
@ -157,5 +157,5 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, void *fpregset)
|
||||||
pid_t
|
pid_t
|
||||||
ps_getpid (gdb_ps_prochandle_t ph)
|
ps_getpid (gdb_ps_prochandle_t ph)
|
||||||
{
|
{
|
||||||
return pid_of (get_thread_lwp (current_inferior));
|
return pid_of (current_inferior);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue