diff options
author | Antoine Tremblay <antoine.tremblay@ericsson.com> | 2015-11-30 15:08:04 -0500 |
---|---|---|
committer | Antoine Tremblay <antoine.tremblay@ericsson.com> | 2015-11-30 15:08:04 -0500 |
commit | 769ef81fec526f3c7513c88e82f98045f8971d14 (patch) | |
tree | 3c540206c97b423611558c38efbae5e4dcd35278 /gdb/inflow.c | |
parent | fddedbe665db9cb9824150e454c89abdc750957a (diff) | |
download | gdb-769ef81fec526f3c7513c88e82f98045f8971d14.zip gdb-769ef81fec526f3c7513c88e82f98045f8971d14.tar.gz gdb-769ef81fec526f3c7513c88e82f98045f8971d14.tar.bz2 |
Fix breakpoint size when stepping over a permanent breakpoint in GDBServer.
When manually stepping over a permanent breakpoint on ARM we need to fetch the
right breakpoint size based on the current instruction set used.
Since this is not encoded in the stop_pc, the instruction mode needs to be
fetched from the CPSR register.
This is done by introducing a new target operation called :
breakpoint_kind_from_current_state.
For other targets that do not need this, breakpoint_kind_from_pc is used.
No regressions, tested on ubuntu 14.04 ARMv7 and x86.
With gdbserver-{native,extended} / { -marm -mthumb }
gdb/gdbserver/ChangeLog:
* linux-arm-low.c (arm_is_thumb_mode): New function.
(arm_breakpoint_at): Use arm_is_thumb_mode.
(arm_breakpoint_kind_from_current_state): New function.
(struct linux_target_ops) <breakpoint_kind_from_current_state>:
Initialize.
* linux-low.c (linux_wait_1): Call breakpoint_kind_from_current_state.
(linux_breakpoint_kind_from_current_state): New function.
(struct target_ops <breakpoint_kind_from_current_state>: Initialize.
* linux-low.h (struct linux_target_ops)
<breakpoint_kind_from_current_state>: New field.
* target.h (struct target_ops): Likewise.
(target_breakpoint_kind_from_current_state): New macro.
Diffstat (limited to 'gdb/inflow.c')
0 files changed, 0 insertions, 0 deletions