From 675bf4cbc866316506d5aff06471c3580ba289fa Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Sun, 15 Dec 2002 20:08:02 +0000 Subject: [PATCH] * infrun.c (handle_inferior_event): Assume that catchpoints are not affected by DECR_PC_AFTER_BREAK. --- gdb/ChangeLog | 5 +++++ gdb/infrun.c | 54 +++++++++++++++++++++++---------------------------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 390ce96cbe..994556d59b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2002-12-15 Daniel Jacobowitz + + * infrun.c (handle_inferior_event): Assume that catchpoints + are not affected by DECR_PC_AFTER_BREAK. + 2002-12-15 Daniel Jacobowitz * target.c (update_current_target): Don't inherit DONT_USE. diff --git a/gdb/infrun.c b/gdb/infrun.c index 664351ef77..2aaab67faf 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1335,17 +1335,15 @@ handle_inferior_event (struct execution_control_state *ecs) stop_pc = read_pc_pid (ecs->ptid); ecs->saved_inferior_ptid = inferior_ptid; inferior_ptid = ecs->ptid; - /* The second argument of bpstat_stop_status is meant to help - distinguish between a breakpoint trap and a singlestep trap. - This is only important on targets where DECR_PC_AFTER_BREAK - is non-zero. The prev_pc test is meant to distinguish between - singlestepping a trap instruction, and singlestepping thru a - jump to the instruction following a trap instruction. */ - stop_bpstat = bpstat_stop_status (&stop_pc, - currently_stepping (ecs) && - prev_pc != - stop_pc - DECR_PC_AFTER_BREAK); + /* Assume that catchpoints are not really software breakpoints. If + some future target implements them using software breakpoints then + that target is responsible for fudging DECR_PC_AFTER_BREAK. Thus + we pass 1 for the NOT_A_SW_BREAKPOINT argument, so that + bpstat_stop_status will not decrement the PC. */ + + stop_bpstat = bpstat_stop_status (&stop_pc, 1); + ecs->random_signal = !bpstat_explains_signal (stop_bpstat); inferior_ptid = ecs->saved_inferior_ptid; goto process_event_stop_test; @@ -1386,17 +1384,15 @@ handle_inferior_event (struct execution_control_state *ecs) } stop_pc = read_pc (); - /* The second argument of bpstat_stop_status is meant to help - distinguish between a breakpoint trap and a singlestep trap. - This is only important on targets where DECR_PC_AFTER_BREAK - is non-zero. The prev_pc test is meant to distinguish between - singlestepping a trap instruction, and singlestepping thru a - jump to the instruction following a trap instruction. */ - stop_bpstat = bpstat_stop_status (&stop_pc, - currently_stepping (ecs) && - prev_pc != - stop_pc - DECR_PC_AFTER_BREAK); + /* Assume that catchpoints are not really software breakpoints. If + some future target implements them using software breakpoints then + that target is responsible for fudging DECR_PC_AFTER_BREAK. Thus + we pass 1 for the NOT_A_SW_BREAKPOINT argument, so that + bpstat_stop_status will not decrement the PC. */ + + stop_bpstat = bpstat_stop_status (&stop_pc, 1); + ecs->random_signal = !bpstat_explains_signal (stop_bpstat); goto process_event_stop_test; @@ -1435,17 +1431,15 @@ handle_inferior_event (struct execution_control_state *ecs) stop_pc = read_pc_pid (ecs->ptid); ecs->saved_inferior_ptid = inferior_ptid; inferior_ptid = ecs->ptid; - /* The second argument of bpstat_stop_status is meant to help - distinguish between a breakpoint trap and a singlestep trap. - This is only important on targets where DECR_PC_AFTER_BREAK - is non-zero. The prev_pc test is meant to distinguish between - singlestepping a trap instruction, and singlestepping thru a - jump to the instruction following a trap instruction. */ - stop_bpstat = bpstat_stop_status (&stop_pc, - currently_stepping (ecs) && - prev_pc != - stop_pc - DECR_PC_AFTER_BREAK); + /* Assume that catchpoints are not really software breakpoints. If + some future target implements them using software breakpoints then + that target is responsible for fudging DECR_PC_AFTER_BREAK. Thus + we pass 1 for the NOT_A_SW_BREAKPOINT argument, so that + bpstat_stop_status will not decrement the PC. */ + + stop_bpstat = bpstat_stop_status (&stop_pc, 1); + ecs->random_signal = !bpstat_explains_signal (stop_bpstat); inferior_ptid = ecs->saved_inferior_ptid; goto process_event_stop_test;