Don't call set_gdbarch_cannot_step_breakpoint in aarch64_gdbarch_init
Commit Message
From: Yao Qi <yao.qi@linaro.org>
Hi,
I am looking at the following fails in aarch64-linux,
stepi^M
47 NOP; /* after permanent bp */^M
(gdb) FAIL: gdb.base/bp-permanent.exp: always_inserted=off, sw_watchpoint=0: stepi signal with handler: single-step to handler
the test expects GDB single step into signal handler, but GDB doesn't.
The code in infrun.c:resume
/* Most targets can step a breakpoint instruction, thus
executing it normally. But if this one cannot, just
continue and we will hit it anyway. */
if (gdbarch_cannot_step_breakpoint (gdbarch))
step = 0;
change the intended action from "step" to "continue". The gdbarch method
cannot_step_breakpoint isn't documented well, and I don't get much clue
after explore the history. However, from the comments above,
aarch64-linux can step a breakpoint instruction, so don't need to call
set_gdbarch_cannot_step_breakpoint.
Regression tested on aarch64-linux, both native and gdbserver.
gdb:
2015-03-17 Yao Qi <yao.qi@linaro.org>
* aarch64-tdep.c (aarch64_gdbarch_init): Don't call
set_gdbarch_cannot_step_breakpoint.
---
gdb/aarch64-tdep.c | 1 -
1 file changed, 1 deletion(-)
Comments
On 17/03/15 12:21, Yao Qi wrote:
> gdb:
>
> 2015-03-17 Yao Qi<yao.qi@linaro.org>
>
> * aarch64-tdep.c (aarch64_gdbarch_init): Don't call
> set_gdbarch_cannot_step_breakpoint.
I've pushed it in.
Hi Yao,
On 03/17/2015 12:21 PM, Yao Qi wrote:
> From: Yao Qi <yao.qi@linaro.org>
>
> Hi,
> I am looking at the following fails in aarch64-linux,
>
> stepi^M
> 47 NOP; /* after permanent bp */^M
> (gdb) FAIL: gdb.base/bp-permanent.exp: always_inserted=off, sw_watchpoint=0: stepi signal with handler: single-step to handler
>
> the test expects GDB single step into signal handler, but GDB doesn't.
> The code in infrun.c:resume
>
> /* Most targets can step a breakpoint instruction, thus
> executing it normally. But if this one cannot, just
> continue and we will hit it anyway. */
> if (gdbarch_cannot_step_breakpoint (gdbarch))
> step = 0;
>
> change the intended action from "step" to "continue". The gdbarch method
> cannot_step_breakpoint isn't documented well, and I don't get much clue
> after explore the history. However, from the comments above,
> aarch64-linux can step a breakpoint instruction, so don't need to call
> set_gdbarch_cannot_step_breakpoint.
I wondered about this before too. Thanks for cleaning this up.
Thanks,
Pedro Alves
@@ -2698,7 +2698,6 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Breakpoint manipulation. */
set_gdbarch_breakpoint_from_pc (gdbarch, aarch64_breakpoint_from_pc);
- set_gdbarch_cannot_step_breakpoint (gdbarch, 1);
set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
set_gdbarch_software_single_step (gdbarch, aarch64_software_single_step);