binutils-gdb/gdb/common
Antoine Tremblay d9311bfaf5 Support software single step on ARM in GDBServer
This patch teaches GDBServer how to software single step on ARM
linux by sharing code with GDB.

The arm_get_next_pcs function in GDB is now shared with GDBServer.  So
that GDBServer can use the function to return the possible addresses of
the next PC.

A proper shared context was also needed so that we could share the code,
this context is described in the arm_get_next_pcs structure.

Testing :

No regressions, tested on ubuntu 14.04 ARMv7 and x86.
With gdbserver-{native,extended} / { -marm -mthumb }

gdb/ChangeLog:

	* Makefile.in (ALL_TARGET_OBS): Append arm-get-next-pcs.o,
	arm-linux.o.
	(ALLDEPFILES): Append arm-get-next-pcs.c, arm-linux.c
	(arm-linux.o): New rule.
	(arm-get-next-pcs.o): New rule.
	* arch/arm-get-next-pcs.c: New file.
	* arch/arm-get-next-pcs.h: New file.
	* arch/arm-linux.h: New file.
	* arch/arm-linux.c: New file.
	* arm.c: Include common-regcache.c.
	(thumb_advance_itstate): Moved from arm-tdep.c.
	(arm_instruction_changes_pc): Likewise.
	(thumb_instruction_changes_pc): Likewise.
	(thumb2_instruction_changes_pc): Likewise.
	(shifted_reg_val): Likewise.
	* arm.h (submask): Move macro from arm-tdep.h
	(bit): Likewise.
	(bits): Likewise.
	(sbits): Likewise.
	(BranchDest): Likewise.
	(thumb_advance_itstate): Moved declaration from arm-tdep.h
	(arm_instruction_changes_pc): Likewise.
	(thumb_instruction_changes_pc): Likewise.
	(thumb2_instruction_changes_pc): Likewise.
	(shifted_reg_val): Likewise.
	* arm-linux-tdep.c: Include arch/arm.h, arch/arm-get-next-pcs.h
	arch/arm-linux.h.
	(arm_linux_get_next_pcs_ops): New struct.
	(ARM_SIGCONTEXT_R0, ARM_UCONTEXT_SIGCONTEXT,
	ARM_OLD_RT_SIGFRAME_SIGINFO, ARM_OLD_RT_SIGFRAME_UCONTEXT,
	ARM_NEW_RT_SIGFRAME_UCONTEXT, ARM_NEW_SIGFRAME_MAGIC): Move stack
	layout defines to arch/arm-linux.h.
	(arm_linux_sigreturn_next_pc_offset): Move to arch/arm-linux.c.
	(arm_linux_software_single_step): Adjust for arm_get_next_pcs
	implementation.
	* arm-tdep.c: Include arch/arm-get-next-pcs.h.
	(arm_get_next_pcs_ops): New struct.
	(submask): Move macro to arm.h.
	(bit): Likewise.
	(bits): Likewise.
	(sbits): Likewise.
	(BranchDest): Likewise.
	(thumb_instruction_changes_pc): Move to arm.c
	(thumb2_instruction_changes_pc): Likewise.
	(arm_instruction_changes_pc): Likewise.
	(shifted_reg_val): Likewise.
	(thumb_advance_itstate): Likewise.
	(thumb_get_next_pc_raw): Move to arm-get-next-pcs.c.
	(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_get_next_pcs_read_memory_unsigned_integer): New function.
	(arm_get_next_pcs_addr_bits_remove): Likewise.
	(arm_get_next_pcs_syscall_next_pc): Likewise.
	(arm_get_next_pcs_is_thumb): Likewise.
	(arm_software_single_step): Adjust for arm_get_next_pcs
	implementation.
	* arm-tdep.h: (arm_get_next_pc): Remove declaration.
	(arm_get_next_pcs_read_memory_unsigned_integer):
	New declaration.
	(arm_get_next_pcs_addr_bits_remove): Likewise.
	(arm_get_next_pcs_syscall_next_pc): Likewise.
	(arm_get_next_pcs_is_thumb): Likewise.
	(arm_deal_with_atomic_sequence: Remove declaration.
	* common/gdb_vecs.h: Add CORE_ADDR vector definition.
	* configure.tgt (aarch64*-*-linux): Add arm-get-next-pcs.o,
	arm-linux.o.
	(arm*-wince-pe): Add arm-get-next-pcs.o.
	(arm*-*-linux*): Add arm-get-next-pcs.o, arm-linux.o,
	arm-get-next-pcs.o
	(arm*-*-netbsd*,arm*-*-knetbsd*-gnu): Add arm-get-next-pcs.o.
	(arm*-*-openbsd*): Likewise.
	(arm*-*-symbianelf*): Likewise.
	(arm*-*-*): Likewise.
	* symtab.h: Move CORE_ADDR vector definition to gdb_vecs.h.

gdb/gdbserver/ChangeLog:

	* Makefile.in (SFILES): Append arch/arm-linux.c,
	arch/arm-get-next-pcs.c.
	(arm-linux.o): New rule.
	(arm-get-next-pcs.o): New rule.
	* configure.srv (arm*-*-linux*): Add arm-get-next-pcs.o,
	arm-linux.o.
	* linux-aarch32-low.c (arm_abi_breakpoint): Remove macro.  Moved
	to linux-aarch32-low.c.
	(arm_eabi_breakpoint, arm_breakpoint): Likewise.
	(arm_breakpoint_len, thumb_breakpoint): Likewise.
	(thumb_breakpoint_len, thumb2_breakpoint): Likewise.
	(thumb2_breakpoint_len): Likewise.
	(arm_is_thumb_mode): Make non-static.
	* linux-aarch32-low.h (arm_abi_breakpoint): New macro.  Moved
	from linux-aarch32-low.c.
	(arm_eabi_breakpoint, arm_breakpoint): Likewise.
	(arm_breakpoint_len, thumb_breakpoint): Likewise.
	(thumb_breakpoint_len, thumb2_breakpoint): Likewise.
	(thumb2_breakpoint_len): Likewise.
	(arm_is_thumb_mode): New declaration.
	* linux-arm-low.c: Include arch/arm-linux.h
	aarch/arm-get-next-pcs.h, sys/syscall.h.
	(get_next_pcs_ops): New struct.
	(get_next_pcs_addr_bits_remove): New function.
	(get_next_pcs_is_thumb): New function.
	(get_next_pcs_read_memory_unsigned_integer): Likewise.
	(arm_sigreturn_next_pc): Likewise.
	(get_next_pcs_syscall_next_pc): Likewise.
	(arm_gdbserver_get_next_pcs): Likewise.
	(struct linux_target_ops) <arm_gdbserver_get_next_pcs>:
	Initialize.
	* linux-low.h: Move CORE_ADDR vector definition to gdb_vecs.h.
	* server.h: Include gdb_vecs.h.
2015-12-18 11:39:48 -05:00
..
agent.c Add some more casts (1/2) 2015-09-25 14:08:07 -04:00
agent.h
ax.def
break-common.h
btrace-common.c Add casts to memory allocation related calls 2015-09-25 14:08:06 -04:00
btrace-common.h ari, btrace: avoid unsigned long long 2015-07-15 08:40:57 +02:00
buffer.c Add casts to memory allocation related calls 2015-09-25 14:08:06 -04:00
buffer.h
cleanups.c Replace some xmalloc-family functions with XNEW-family ones 2015-08-26 17:18:12 -04:00
cleanups.h
common-debug.c
common-debug.h
common-defs.h MinGW and attribute format(printf/gnu_printf) 2015-11-17 15:22:39 +00:00
common-exceptions.c [C++] Always use setjmp/longjmp for exceptions 2015-11-17 15:23:15 +00:00
common-exceptions.h [C++] Always use setjmp/longjmp for exceptions 2015-11-17 15:23:15 +00:00
common-regcache.c Share regcache function regcache_raw_read_unsigned 2015-12-18 11:39:21 -05:00
common-regcache.h Share regcache function regcache_raw_read_unsigned 2015-12-18 11:39:21 -05:00
common-types.h Call target_can_download_tracepoint if there are tracepoints to download 2015-09-10 12:31:36 +01:00
common-utils.c Move utility functions to common/ 2015-06-15 17:04:56 +02:00
common-utils.h Move utility functions to common/ 2015-06-15 17:04:56 +02:00
common.host
common.m4 Revert the previous 7 commits of: Validate binary before use 2015-07-15 20:27:32 +02:00
create-version.sh
enum-flags.h Type-safe wrapper for enum flags 2015-11-17 13:31:29 +00:00
errors.c
errors.h
fileio.c Don't assume File-I/O mode bits match the host's format 2015-06-09 13:24:46 +01:00
fileio.h Don't assume File-I/O mode bits match the host's format 2015-06-09 13:24:46 +01:00
filestuff.c common/filestuff.c (make_cleanup_close): Update comment. 2015-09-28 11:31:54 -07:00
filestuff.h Move make_cleanup_close to common code 2015-06-10 14:28:43 +01:00
format.c Add some more casts (1/2) 2015-09-25 14:08:07 -04:00
format.h
gdb_assert.h
gdb_locale.h
gdb_setjmp.h
gdb_signals.h
gdb_sys_time.h Prepare for gnulib update 2015-08-24 18:50:55 +01:00
gdb_vecs.c More char constification 2015-10-13 19:40:50 +01:00
gdb_vecs.h Support software single step on ARM in GDBServer 2015-12-18 11:39:48 -05:00
gdb_wait.h musl: Move W_STOPCODE to common/gdb_wait.h. 2015-10-26 13:24:01 -07:00
host-defs.h Move utility functions to common/ 2015-06-15 17:04:56 +02:00
mingw-strerror.c
posix-strerror.c
print-utils.c Make host_address_to_string/gdb_print_host_address cast parameter to 'void *' 2015-10-27 17:33:01 +00:00
print-utils.h Make host_address_to_string/gdb_print_host_address cast parameter to 'void *' 2015-10-27 17:33:01 +00:00
ptid.c
ptid.h
queue.h Replace some xmalloc-family functions with XNEW-family ones 2015-08-26 17:18:12 -04:00
rsp-low.c remote: consider addressable unit size when reading/writing memory 2015-06-18 13:12:39 -04:00
rsp-low.h remote: consider addressable unit size when reading/writing memory 2015-06-18 13:12:39 -04:00
signals.c
symbol.h
vec.c Add some more casts (1/2) 2015-09-25 14:08:07 -04:00
vec.h [C++] Fix -Winvalid-offsetof warnings with g++ 4.4 2015-12-16 19:25:32 +00:00
version.h
x86-xstate.h
xml-utils.c Add casts to memory allocation related calls 2015-09-25 14:08:06 -04:00
xml-utils.h