enum lwp_stop_reason -> enum target_stop_reason

We're going to need the same enum as enum lwp_stop_reason in more
targets, so this promotes it to common code.

gdb/gdbserver/ChangeLog:
2015-03-04  Pedro Alves  <palves@redhat.com>

	enum lwp_stop_reason -> enum target_stop_reason
	* linux-low.c (check_stopped_by_breakpoint): Adjust.
	(thread_still_has_status_pending_p, check_stopped_by_watchpoint)
	(linux_wait_1, stuck_in_jump_pad_callback)
	(move_out_of_jump_pad_callback, linux_resume_one_lwp)
	(linux_stopped_by_watchpoint):
	* linux-low.h (enum lwp_stop_reason): Delete.
	(struct lwp_info) <stop_reason>: Now an enum target_stop_reason.
	* linux-x86-low.c (x86_linux_prepare_to_resume): Adjust.

gdb/ChangeLog:
2015-03-04  Pedro Alves  <palves@redhat.com>

	enum lwp_stop_reason -> enum target_stop_reason
	* linux-nat.c (linux_resume_one_lwp, check_stopped_by_watchpoint)
	(linux_nat_stopped_by_watchpoint, status_callback)
	(linux_nat_wait_1): Adjust.
	* linux-nat.h (enum lwp_stop_reason): Delete.
	(struct lwp_info) <stop_reason>: Now an enum target_stop_reason.
	* x86-linux-nat.c (x86_linux_prepare_to_resume): Adjust.
	* target/waitstatus.h (enum target_stop_reason): New.
This commit is contained in:
Pedro Alves 2015-03-04 20:41:15 +00:00
parent 1cf4d9513a
commit 15c66dd626
9 changed files with 74 additions and 67 deletions

View file

@ -1,3 +1,14 @@
2015-03-04 Pedro Alves <palves@redhat.com>
enum lwp_stop_reason -> enum target_stop_reason
* linux-nat.c (linux_resume_one_lwp, check_stopped_by_watchpoint)
(linux_nat_stopped_by_watchpoint, status_callback)
(linux_nat_wait_1): Adjust.
* linux-nat.h (enum lwp_stop_reason): Delete.
(struct lwp_info) <stop_reason>: Now an enum target_stop_reason.
* x86-linux-nat.c (x86_linux_prepare_to_resume): Adjust.
* target/waitstatus.h (enum target_stop_reason): New.
2015-03-04 Pedro Alves <palves@redhat.com> 2015-03-04 Pedro Alves <palves@redhat.com>
* breakpoint.c (need_moribund_for_location_type): New function. * breakpoint.c (need_moribund_for_location_type): New function.

View file

@ -1,3 +1,15 @@
2015-03-04 Pedro Alves <palves@redhat.com>
enum lwp_stop_reason -> enum target_stop_reason
* linux-low.c (check_stopped_by_breakpoint): Adjust.
(thread_still_has_status_pending_p, check_stopped_by_watchpoint)
(linux_wait_1, stuck_in_jump_pad_callback)
(move_out_of_jump_pad_callback, linux_resume_one_lwp)
(linux_stopped_by_watchpoint):
* linux-low.h (enum lwp_stop_reason): Delete.
(struct lwp_info) <stop_reason>: Now an enum target_stop_reason.
* linux-x86-low.c (x86_linux_prepare_to_resume): Adjust.
2015-03-04 Yao Qi <yao.qi@linaro.org> 2015-03-04 Yao Qi <yao.qi@linaro.org>
* Makefile.in (SFILES): Add linux-aarch64-low.c. * Makefile.in (SFILES): Add linux-aarch64-low.c.

View file

@ -528,7 +528,7 @@ check_stopped_by_breakpoint (struct lwp_info *lwp)
} }
lwp->stop_pc = sw_breakpoint_pc; lwp->stop_pc = sw_breakpoint_pc;
lwp->stop_reason = LWP_STOPPED_BY_SW_BREAKPOINT; lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
current_thread = saved_thread; current_thread = saved_thread;
return 1; return 1;
} }
@ -544,7 +544,7 @@ check_stopped_by_breakpoint (struct lwp_info *lwp)
} }
lwp->stop_pc = pc; lwp->stop_pc = pc;
lwp->stop_reason = LWP_STOPPED_BY_HW_BREAKPOINT; lwp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
current_thread = saved_thread; current_thread = saved_thread;
return 1; return 1;
} }
@ -1221,8 +1221,8 @@ thread_still_has_status_pending_p (struct thread_info *thread)
return 0; return 0;
if (thread->last_resume_kind != resume_stop if (thread->last_resume_kind != resume_stop
&& (lp->stop_reason == LWP_STOPPED_BY_SW_BREAKPOINT && (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
|| lp->stop_reason == LWP_STOPPED_BY_HW_BREAKPOINT)) || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT))
{ {
struct thread_info *saved_thread; struct thread_info *saved_thread;
CORE_ADDR pc; CORE_ADDR pc;
@ -1242,7 +1242,7 @@ thread_still_has_status_pending_p (struct thread_info *thread)
lwpid_of (thread)); lwpid_of (thread));
discard = 1; discard = 1;
} }
else if (lp->stop_reason == LWP_STOPPED_BY_SW_BREAKPOINT else if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
&& !(*the_low_target.breakpoint_at) (pc)) && !(*the_low_target.breakpoint_at) (pc))
{ {
if (debug_threads) if (debug_threads)
@ -1250,7 +1250,7 @@ thread_still_has_status_pending_p (struct thread_info *thread)
lwpid_of (thread)); lwpid_of (thread));
discard = 1; discard = 1;
} }
else if (lp->stop_reason == LWP_STOPPED_BY_HW_BREAKPOINT else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT
&& !hardware_breakpoint_inserted_here (pc)) && !hardware_breakpoint_inserted_here (pc))
{ {
if (debug_threads) if (debug_threads)
@ -1758,7 +1758,7 @@ check_stopped_by_watchpoint (struct lwp_info *child)
if (the_low_target.stopped_by_watchpoint ()) if (the_low_target.stopped_by_watchpoint ())
{ {
child->stop_reason = LWP_STOPPED_BY_WATCHPOINT; child->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
if (the_low_target.stopped_data_address != NULL) if (the_low_target.stopped_data_address != NULL)
child->stopped_data_address child->stopped_data_address
@ -1770,7 +1770,7 @@ check_stopped_by_watchpoint (struct lwp_info *child)
current_thread = saved_thread; current_thread = saved_thread;
} }
return child->stop_reason == LWP_STOPPED_BY_WATCHPOINT; return child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
} }
/* Do low-level handling of the event, and check if we should go on /* Do low-level handling of the event, and check if we should go on
@ -2553,7 +2553,7 @@ linux_wait_1 (ptid_t ptid,
Advance the PC manually past the breakpoint, otherwise the Advance the PC manually past the breakpoint, otherwise the
program would keep trapping the permanent breakpoint forever. */ program would keep trapping the permanent breakpoint forever. */
if (!ptid_equal (step_over_bkpt, null_ptid) if (!ptid_equal (step_over_bkpt, null_ptid)
&& event_child->stop_reason == LWP_STOPPED_BY_SW_BREAKPOINT) && event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT)
{ {
unsigned int increment_pc = the_low_target.breakpoint_len; unsigned int increment_pc = the_low_target.breakpoint_len;
@ -2572,7 +2572,7 @@ linux_wait_1 (ptid_t ptid,
(*the_low_target.set_pc) (regcache, event_child->stop_pc); (*the_low_target.set_pc) (regcache, event_child->stop_pc);
if (!(*the_low_target.breakpoint_at) (event_child->stop_pc)) if (!(*the_low_target.breakpoint_at) (event_child->stop_pc))
event_child->stop_reason = LWP_STOPPED_BY_NO_REASON; event_child->stop_reason = TARGET_STOPPED_BY_NO_REASON;
} }
} }
@ -2799,7 +2799,7 @@ linux_wait_1 (ptid_t ptid,
report_to_gdb = (!maybe_internal_trap report_to_gdb = (!maybe_internal_trap
|| (current_thread->last_resume_kind == resume_step || (current_thread->last_resume_kind == resume_step
&& !in_step_range) && !in_step_range)
|| event_child->stop_reason == LWP_STOPPED_BY_WATCHPOINT || event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT
|| (!step_over_finished && !in_step_range || (!step_over_finished && !in_step_range
&& !bp_explains_trap && !trace_event) && !bp_explains_trap && !trace_event)
|| (gdb_breakpoint_here (event_child->stop_pc) || (gdb_breakpoint_here (event_child->stop_pc)
@ -2863,7 +2863,7 @@ linux_wait_1 (ptid_t ptid,
else if (!lwp_in_step_range (event_child)) else if (!lwp_in_step_range (event_child))
debug_printf ("Out of step range, reporting event.\n"); debug_printf ("Out of step range, reporting event.\n");
} }
if (event_child->stop_reason == LWP_STOPPED_BY_WATCHPOINT) if (event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
debug_printf ("Stopped by watchpoint.\n"); debug_printf ("Stopped by watchpoint.\n");
else if (gdb_breakpoint_here (event_child->stop_pc)) else if (gdb_breakpoint_here (event_child->stop_pc))
debug_printf ("Stopped by GDB breakpoint.\n"); debug_printf ("Stopped by GDB breakpoint.\n");
@ -2939,7 +2939,7 @@ linux_wait_1 (ptid_t ptid,
/* Now that we've selected our final event LWP, un-adjust its PC if /* Now that we've selected our final event LWP, un-adjust its PC if
it was a software breakpoint. */ it was a software breakpoint. */
if (event_child->stop_reason == LWP_STOPPED_BY_SW_BREAKPOINT) if (event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT)
{ {
int decr_pc = the_low_target.decr_pc_after_break; int decr_pc = the_low_target.decr_pc_after_break;
@ -3216,7 +3216,7 @@ stuck_in_jump_pad_callback (struct inferior_list_entry *entry, void *data)
return (supports_fast_tracepoints () return (supports_fast_tracepoints ()
&& agent_loaded_p () && agent_loaded_p ()
&& (gdb_breakpoint_here (lwp->stop_pc) && (gdb_breakpoint_here (lwp->stop_pc)
|| lwp->stop_reason == LWP_STOPPED_BY_WATCHPOINT || lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT
|| thread->last_resume_kind == resume_step) || thread->last_resume_kind == resume_step)
&& linux_fast_tracepoint_collecting (lwp, NULL)); && linux_fast_tracepoint_collecting (lwp, NULL));
} }
@ -3235,7 +3235,7 @@ move_out_of_jump_pad_callback (struct inferior_list_entry *entry)
/* Allow debugging the jump pad, gdb_collect, etc. */ /* Allow debugging the jump pad, gdb_collect, etc. */
if (!gdb_breakpoint_here (lwp->stop_pc) if (!gdb_breakpoint_here (lwp->stop_pc)
&& lwp->stop_reason != LWP_STOPPED_BY_WATCHPOINT && lwp->stop_reason != TARGET_STOPPED_BY_WATCHPOINT
&& thread->last_resume_kind != resume_step && thread->last_resume_kind != resume_step
&& maybe_move_out_of_jump_pad (lwp, wstat)) && maybe_move_out_of_jump_pad (lwp, wstat))
{ {
@ -3500,7 +3500,7 @@ linux_resume_one_lwp (struct lwp_info *lwp,
regcache_invalidate_thread (thread); regcache_invalidate_thread (thread);
errno = 0; errno = 0;
lwp->stopped = 0; lwp->stopped = 0;
lwp->stop_reason = LWP_STOPPED_BY_NO_REASON; lwp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
lwp->stepping = step; lwp->stepping = step;
ptrace (step ? PTRACE_SINGLESTEP : PTRACE_CONT, lwpid_of (thread), ptrace (step ? PTRACE_SINGLESTEP : PTRACE_CONT, lwpid_of (thread),
(PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG3) 0,
@ -4906,7 +4906,7 @@ linux_stopped_by_watchpoint (void)
{ {
struct lwp_info *lwp = get_thread_lwp (current_thread); struct lwp_info *lwp = get_thread_lwp (current_thread);
return lwp->stop_reason == LWP_STOPPED_BY_WATCHPOINT; return lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
} }
static CORE_ADDR static CORE_ADDR

View file

@ -24,6 +24,7 @@
/* Included for ptrace type definitions. */ /* Included for ptrace type definitions. */
#include "nat/linux-ptrace.h" #include "nat/linux-ptrace.h"
#include "target/waitstatus.h" /* For enum target_stop_reason. */
#define PTRACE_XFER_TYPE long #define PTRACE_XFER_TYPE long
@ -230,24 +231,6 @@ extern struct linux_target_ops the_low_target;
#define get_thread_lwp(thr) ((struct lwp_info *) (inferior_target_data (thr))) #define get_thread_lwp(thr) ((struct lwp_info *) (inferior_target_data (thr)))
#define get_lwp_thread(lwp) ((lwp)->thread) #define get_lwp_thread(lwp) ((lwp)->thread)
/* Reasons an LWP last stopped. */
enum lwp_stop_reason
{
/* Either not stopped, or stopped for a reason that doesn't require
special tracking. */
LWP_STOPPED_BY_NO_REASON,
/* Stopped by a software breakpoint. */
LWP_STOPPED_BY_SW_BREAKPOINT,
/* Stopped by a hardware breakpoint. */
LWP_STOPPED_BY_HW_BREAKPOINT,
/* Stopped by a watchpoint. */
LWP_STOPPED_BY_WATCHPOINT
};
/* This struct is recorded in the target_data field of struct thread_info. /* 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 On linux ``all_threads'' is keyed by the LWP ID, which we use as the
@ -299,7 +282,7 @@ struct lwp_info
/* The reason the LWP last stopped, if we need to track it /* The reason the LWP last stopped, if we need to track it
(breakpoint, watchpoint, etc.) */ (breakpoint, watchpoint, etc.) */
enum lwp_stop_reason stop_reason; enum target_stop_reason stop_reason;
/* On architectures where it is possible to know the data address of /* On architectures where it is possible to know the data address of
a triggered watchpoint, STOPPED_DATA_ADDRESS is non-zero, and a triggered watchpoint, STOPPED_DATA_ADDRESS is non-zero, and

View file

@ -818,7 +818,7 @@ x86_linux_prepare_to_resume (struct lwp_info *lwp)
lwp->arch_private->debug_registers_changed = 0; lwp->arch_private->debug_registers_changed = 0;
} }
if (clear_status || lwp->stop_reason == LWP_STOPPED_BY_WATCHPOINT) if (clear_status || lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
x86_linux_dr_set (ptid, DR_STATUS, 0); x86_linux_dr_set (ptid, DR_STATUS, 0);
} }

View file

@ -1522,7 +1522,7 @@ linux_resume_one_lwp (struct lwp_info *lp, int step, enum gdb_signal signo)
if (linux_nat_prepare_to_resume != NULL) if (linux_nat_prepare_to_resume != NULL)
linux_nat_prepare_to_resume (lp); linux_nat_prepare_to_resume (lp);
linux_ops->to_resume (linux_ops, lp->ptid, step, signo); linux_ops->to_resume (linux_ops, lp->ptid, step, signo);
lp->stop_reason = LWP_STOPPED_BY_NO_REASON; lp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
lp->stopped = 0; lp->stopped = 0;
registers_changed_ptid (lp->ptid); registers_changed_ptid (lp->ptid);
} }
@ -2375,7 +2375,7 @@ check_stopped_by_watchpoint (struct lwp_info *lp)
if (linux_ops->to_stopped_by_watchpoint (linux_ops)) if (linux_ops->to_stopped_by_watchpoint (linux_ops))
{ {
lp->stop_reason = LWP_STOPPED_BY_WATCHPOINT; lp->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
if (linux_ops->to_stopped_data_address != NULL) if (linux_ops->to_stopped_data_address != NULL)
lp->stopped_data_address_p = lp->stopped_data_address_p =
@ -2387,7 +2387,7 @@ check_stopped_by_watchpoint (struct lwp_info *lp)
do_cleanups (old_chain); do_cleanups (old_chain);
return lp->stop_reason == LWP_STOPPED_BY_WATCHPOINT; return lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
} }
/* Called when the LWP stopped for a trap that could be explained by a /* Called when the LWP stopped for a trap that could be explained by a
@ -2396,7 +2396,7 @@ check_stopped_by_watchpoint (struct lwp_info *lp)
static void static void
save_sigtrap (struct lwp_info *lp) save_sigtrap (struct lwp_info *lp)
{ {
gdb_assert (lp->stop_reason == LWP_STOPPED_BY_NO_REASON); gdb_assert (lp->stop_reason == TARGET_STOPPED_BY_NO_REASON);
gdb_assert (lp->status != 0); gdb_assert (lp->status != 0);
if (check_stopped_by_watchpoint (lp)) if (check_stopped_by_watchpoint (lp))
@ -2415,7 +2415,7 @@ linux_nat_stopped_by_watchpoint (struct target_ops *ops)
gdb_assert (lp != NULL); gdb_assert (lp != NULL);
return lp->stop_reason == LWP_STOPPED_BY_WATCHPOINT; return lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
} }
static int static int
@ -2535,8 +2535,8 @@ status_callback (struct lwp_info *lp, void *data)
if (!lp->resumed) if (!lp->resumed)
return 0; return 0;
if (lp->stop_reason == LWP_STOPPED_BY_SW_BREAKPOINT if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
|| lp->stop_reason == LWP_STOPPED_BY_HW_BREAKPOINT) || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)
{ {
struct regcache *regcache = get_thread_regcache (lp->ptid); struct regcache *regcache = get_thread_regcache (lp->ptid);
struct gdbarch *gdbarch = get_regcache_arch (regcache); struct gdbarch *gdbarch = get_regcache_arch (regcache);
@ -2689,7 +2689,7 @@ check_stopped_by_breakpoint (struct lwp_info *lp)
regcache_write_pc (regcache, sw_bp_pc); regcache_write_pc (regcache, sw_bp_pc);
lp->stop_pc = sw_bp_pc; lp->stop_pc = sw_bp_pc;
lp->stop_reason = LWP_STOPPED_BY_SW_BREAKPOINT; lp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
return 1; return 1;
} }
@ -2701,7 +2701,7 @@ check_stopped_by_breakpoint (struct lwp_info *lp)
target_pid_to_str (lp->ptid)); target_pid_to_str (lp->ptid));
lp->stop_pc = pc; lp->stop_pc = pc;
lp->stop_reason = LWP_STOPPED_BY_HW_BREAKPOINT; lp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
return 1; return 1;
} }
@ -3361,7 +3361,7 @@ linux_nat_wait_1 (struct target_ops *ops,
/* Now that we've selected our final event LWP, un-adjust its PC if /* Now that we've selected our final event LWP, un-adjust its PC if
it was a software breakpoint. */ it was a software breakpoint. */
if (lp->stop_reason == LWP_STOPPED_BY_SW_BREAKPOINT) if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT)
{ {
struct regcache *regcache = get_thread_regcache (lp->ptid); struct regcache *regcache = get_thread_regcache (lp->ptid);
struct gdbarch *gdbarch = get_regcache_arch (regcache); struct gdbarch *gdbarch = get_regcache_arch (regcache);

View file

@ -23,24 +23,6 @@
struct arch_lwp_info; struct arch_lwp_info;
/* Reasons an LWP last stopped. */
enum lwp_stop_reason
{
/* Either not stopped, or stopped for a reason that doesn't require
special tracking. */
LWP_STOPPED_BY_NO_REASON,
/* Stopped by a software breakpoint. */
LWP_STOPPED_BY_SW_BREAKPOINT,
/* Stopped by a hardware breakpoint. */
LWP_STOPPED_BY_HW_BREAKPOINT,
/* Stopped by a watchpoint. */
LWP_STOPPED_BY_WATCHPOINT
};
/* Structure describing an LWP. This is public only for the purposes /* Structure describing an LWP. This is public only for the purposes
of ALL_LWPS; target-specific code should generally not access it of ALL_LWPS; target-specific code should generally not access it
directly. */ directly. */
@ -93,7 +75,7 @@ struct lwp_info
/* The reason the LWP last stopped, if we need to track it /* The reason the LWP last stopped, if we need to track it
(breakpoint, watchpoint, etc.) */ (breakpoint, watchpoint, etc.) */
enum lwp_stop_reason stop_reason; enum target_stop_reason stop_reason;
/* On architectures where it is possible to know the data address of /* On architectures where it is possible to know the data address of
a triggered watchpoint, STOPPED_DATA_ADDRESS_P is non-zero, and a triggered watchpoint, STOPPED_DATA_ADDRESS_P is non-zero, and

View file

@ -115,6 +115,25 @@ struct target_waitstatus
} value; } value;
}; };
/* Extended reasons that can explain why a target/thread stopped for a
trap signal. */
enum target_stop_reason
{
/* Either not stopped, or stopped for a reason that doesn't require
special tracking. */
TARGET_STOPPED_BY_NO_REASON,
/* Stopped by a software breakpoint. */
TARGET_STOPPED_BY_SW_BREAKPOINT,
/* Stopped by a hardware breakpoint. */
TARGET_STOPPED_BY_HW_BREAKPOINT,
/* Stopped by a watchpoint. */
TARGET_STOPPED_BY_WATCHPOINT
};
/* Prototypes */ /* Prototypes */
/* Return a pretty printed form of target_waitstatus. /* Return a pretty printed form of target_waitstatus.

View file

@ -223,7 +223,7 @@ x86_linux_prepare_to_resume (struct lwp_info *lwp)
lwp->arch_private->debug_registers_changed = 0; lwp->arch_private->debug_registers_changed = 0;
} }
if (clear_status || lwp->stop_reason == LWP_STOPPED_BY_WATCHPOINT) if (clear_status || lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
x86_linux_dr_set (lwp->ptid, DR_STATUS, 0); x86_linux_dr_set (lwp->ptid, DR_STATUS, 0);
} }