summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2004-05-13 16:39:11 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2004-05-13 16:39:11 +0000
commit19d1daaefed7bf5584f210132e4c07c35a961c45 (patch)
tree4570b18ee3efa5d96e91cba148e17cfe10432f20 /gdb
parenta2fe627a93947c8ca362ae797a2bc18d5fd9edff (diff)
downloadgdb-19d1daaefed7bf5584f210132e4c07c35a961c45.tar.gz
* breakpoint.c (bpstat_stop_status): Add new argument
STOPPED_BY_WATCHPOINT. Use it instead of testing target_stopped_data_address agaist 0 to check whether or not we stopped due to a hardware watchpoint. * breakpoint.h (bpstat_stop_status): Adapt prototype. * infrun.c (handle_inferior_event): Call bpstat_stop_status with new argument.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/breakpoint.c7
-rw-r--r--gdb/breakpoint.h3
-rw-r--r--gdb/infrun.c10
4 files changed, 22 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7c2a80b40d0..4f45b6f8210 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,13 @@
+2004-05-13 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * breakpoint.c (bpstat_stop_status): Add new argument
+ STOPPED_BY_WATCHPOINT. Use it instead of testing
+ target_stopped_data_address agaist 0 to check whether
+ or not we stopped due to a hardware watchpoint.
+ * breakpoint.h (bpstat_stop_status): Adapt prototype.
+ * infrun.c (handle_inferior_event): Call bpstat_stop_status
+ with new argument.
+
2004-05-12 Jim Blandy <jimb@redhat.com>
* configure.in: When checking whether we should use the -bbigtoc
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 96cf0f9b36e..8d0b3c8116a 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -2559,7 +2559,8 @@ which its expression is valid.\n");
}
/* Get a bpstat associated with having just stopped at address
- BP_ADDR. */
+ BP_ADDR in thread PTID. STOPPED_BY_WATCHPOINT is true if the
+ target thinks we stopped due to a hardware watchpoint. */
/* Determine whether we stopped at a breakpoint, etc, or whether we
don't understand this stop. Result is a chain of bpstat's such that:
@@ -2576,7 +2577,7 @@ which its expression is valid.\n");
commands, FIXME??? fields. */
bpstat
-bpstat_stop_status (CORE_ADDR bp_addr, ptid_t ptid)
+bpstat_stop_status (CORE_ADDR bp_addr, ptid_t ptid, int stopped_by_watchpoint)
{
struct breakpoint *b, *temp;
/* True if we've hit a breakpoint (as opposed to a watchpoint). */
@@ -2600,7 +2601,7 @@ bpstat_stop_status (CORE_ADDR bp_addr, ptid_t ptid)
&& !((b->type == bp_hardware_watchpoint
|| b->type == bp_read_watchpoint
|| b->type == bp_access_watchpoint)
- && target_stopped_data_address () != 0)
+ && stopped_by_watchpoint)
&& b->type != bp_hardware_breakpoint
&& b->type != bp_catch_fork
&& b->type != bp_catch_vfork
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 93b6850661e..67a67e34054 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -414,7 +414,8 @@ extern void bpstat_clear (bpstat *);
is part of the bpstat is copied as well. */
extern bpstat bpstat_copy (bpstat);
-extern bpstat bpstat_stop_status (CORE_ADDR pc, ptid_t ptid);
+extern bpstat bpstat_stop_status (CORE_ADDR pc, ptid_t ptid,
+ int stopped_by_watchpoint);
/* This bpstat_what stuff tells wait_for_inferior what to do with a
breakpoint (a challenging task). */
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 96f38a5cb18..bec87465bdf 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -1356,6 +1356,7 @@ handle_inferior_event (struct execution_control_state *ecs)
defined in the file "config/pa/nm-hppah.h", accesses the variable
indirectly. Mutter something rude about the HP merge. */
int sw_single_step_trap_p = 0;
+ int stopped_by_watchpoint = 0;
/* Cache the last pid/waitstatus. */
target_last_wait_ptid = ecs->ptid;
@@ -1545,7 +1546,7 @@ handle_inferior_event (struct execution_control_state *ecs)
stop_pc = read_pc ();
- stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid);
+ stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid, 0);
ecs->random_signal = !bpstat_explains_signal (stop_bpstat);
@@ -1594,7 +1595,7 @@ handle_inferior_event (struct execution_control_state *ecs)
ecs->saved_inferior_ptid = inferior_ptid;
inferior_ptid = ecs->ptid;
- stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid);
+ stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid, 0);
ecs->random_signal = !bpstat_explains_signal (stop_bpstat);
inferior_ptid = ecs->saved_inferior_ptid;
@@ -1910,7 +1911,7 @@ handle_inferior_event (struct execution_control_state *ecs)
/* It may be possible to simply continue after a watchpoint. */
if (HAVE_CONTINUABLE_WATCHPOINT)
- STOPPED_BY_WATCHPOINT (ecs->ws);
+ stopped_by_watchpoint = STOPPED_BY_WATCHPOINT (ecs->ws);
ecs->stop_func_start = 0;
ecs->stop_func_end = 0;
@@ -1990,7 +1991,8 @@ handle_inferior_event (struct execution_control_state *ecs)
else
{
/* See if there is a breakpoint at the current PC. */
- stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid);
+ stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid,
+ stopped_by_watchpoint);
/* Following in case break condition called a
function. */