diff options
author | Antoine Tremblay <antoine.tremblay@ericsson.com> | 2015-12-18 11:33:59 -0500 |
---|---|---|
committer | Antoine Tremblay <antoine.tremblay@ericsson.com> | 2015-12-18 11:39:02 -0500 |
commit | d0e59a68884ad3a346ff0f6f763636c7245e4cb3 (patch) | |
tree | fff48f87fd5a2933f0acb4af7d80274ac4e06cc3 /gdb/arm-tdep.h | |
parent | cba7e83fda349cbf423fab274f5b8677d8148947 (diff) | |
download | gdb-d0e59a68884ad3a346ff0f6f763636c7245e4cb3.zip gdb-d0e59a68884ad3a346ff0f6f763636c7245e4cb3.tar.gz gdb-d0e59a68884ad3a346ff0f6f763636c7245e4cb3.tar.bz2 |
Refactor arm_software_single_step to use regcache
This patch is in preparation for software single step support on ARM in
GDBServer. It refactors arm_*_software_single_step and sub-functions to
use regcache instead of frame to access registers so that the code can be
shared more easily between GDB and GDBServer.
Note also that since the intention is at some point to get rid of frame
completely in that function, memory reads have also been replaced by
read_memory_unsigned_integer rather than get_frame_memory_unsigned.
No regressions, tested on ubuntu 14.04 ARMv7 and x86.
With gdbserver-{native,extended} / { -marm -mthumb }
gdb/ChangeLog:
* arm-linux-tdep.c (arm_linux_sigreturn_next_pc_offset): New function.
(arm_linux_sigreturn_next_pc): Likewise.
(arm_linux_syscall_next_pc): Use regcache instead of frame.
(arm_linux_software_single_step): Likewise.
* arm-tdep.c (arm_is_thumb): New function.
(shifted_reg_va): Use regcache instead of frame.
(thumb_get_next_pc_raw): Likewise.
(arm_get_next_pc_raw): Likewise.
(arm_get_next_pc): Likewise.
(thumb_deal_with_atomic_sequence_raw): Likewise.
(arm_deal_with_atomic_sequence_raw): Likewise.
(arm_deal_with_atomic_sequence): Likewise.
(arm_software_single_step): Likewise.
* arm-tdep.h (struct gdbarch_tdep): Use regcache for syscall_next_pc.
(arm_get_next_pc): Use regcache.
(arm_deal_with_atomic_sequence): Likewise.
(arm_is_thumb): New declaration.
* regcache.c (regcache_raw_get_unsigned): New function.
* regcache.h (regcache_raw_get_unsigned): New function declaration.
Diffstat (limited to 'gdb/arm-tdep.h')
-rw-r--r-- | gdb/arm-tdep.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gdb/arm-tdep.h b/gdb/arm-tdep.h index 9b8447b..0063fef 100644 --- a/gdb/arm-tdep.h +++ b/gdb/arm-tdep.h @@ -135,9 +135,9 @@ struct gdbarch_tdep struct type *neon_double_type; struct type *neon_quad_type; - /* Return the expected next PC if FRAME is stopped at a syscall + /* Return the expected next PC if the program is stopped at a syscall instruction. */ - CORE_ADDR (*syscall_next_pc) (struct frame_info *frame); + CORE_ADDR (*syscall_next_pc) (struct regcache *regcache); /* syscall record. */ int (*arm_syscall_record) (struct regcache *regcache, unsigned long svc_number); @@ -250,11 +250,12 @@ extern void ULONGEST val, enum pc_write_style write_pc); CORE_ADDR arm_skip_stub (struct frame_info *, CORE_ADDR); -CORE_ADDR arm_get_next_pc (struct frame_info *, CORE_ADDR); +CORE_ADDR arm_get_next_pc (struct regcache *regcache, CORE_ADDR pc); void arm_insert_single_step_breakpoint (struct gdbarch *, struct address_space *, CORE_ADDR); -int arm_deal_with_atomic_sequence (struct frame_info *); +int arm_deal_with_atomic_sequence (struct regcache *); int arm_software_single_step (struct frame_info *); +int arm_is_thumb (struct regcache *regcache); int arm_frame_is_thumb (struct frame_info *frame); extern struct displaced_step_closure * |