old-cross-binutils/gdb/common
Yao Qi 8d689ee570 aarch64 multi-arch part 6: HW breakpoint on unaligned address
Nowadays, both aarch64 GDB and linux kernel assumes that address for
setting breakpoint should be 4-byte aligned.  However that is not true
after we support multi-arch, because thumb instruction can be at 2-byte
aligned address.  Patch http://lists.infradead.org/pipermail/linux-arm-kernel/2015-October/375141.html
to linux kernel is to teach kernel to handle 2-byte aligned address for
HW breakpoint, while this patch is to teach aarch64 GDB handle 2-byte
aligned address.

First of all, we call gdbarch_breakpoint_from_pc to get the instruction
length rather than using hard-coded 4.  Secondly, in GDBserver, we set
length back to 2 if it is 3, because GDB encode 3 in it to indicate it
is a 32-bit thumb breakpoint.  Then we relax the address alignment
check from 4-byte aligned to 2-byte aligned.

This patch enables some tests (such as gdb.base/break-idempotent.exp,
gdb.base/cond-eval-mode.exp, gdb.base/watchpoint-reuse-slot.exp,) and
fixes many fails (such as gdb.base/hbreak2.exp) when the program is
compiled in thumb mode on aarch64.

Regression tested on aarch64-linux, both native and gdbserver.  This
is the last patch of multi-arch work.

gdb:

2015-10-15  Yao Qi  <yao.qi@linaro.org>

	* aarch64-linux-nat.c (aarch64_linux_insert_hw_breakpoint):
	Call gdbarch_breakpoint_from_pc to instruction length.
	(aarch64_linux_remove_hw_breakpoint): Likewise.
	* common/common-regcache.h (regcache_register_size): Declare.
	* nat/aarch64-linux-hw-point.c: Include "common-regcache.h".
	(aarch64_point_is_aligned): Set alignment to 2 for breakpoint if
	the process is 32bit, otherwise set alignment to 4.
	(aarch64_handle_breakpoint): Update comments.
	* regcache.c (regcache_register_size): New function.

gdb/gdbserver:

2015-10-15  Yao Qi  <yao.qi@linaro.org>

	* linux-aarch64-low.c (aarch64_insert_point): Set len to 2
	if it is 3.
	(aarch64_remove_point): Likewise.
	* regcache.c (regcache_register_size): New function.
2015-10-15 15:05:10 +01:00
..
agent.c Add some more casts (1/2) 2015-09-25 14:08:07 -04:00
agent.h Make functions and variables exported by the IPA be extern "C" 2015-02-27 17:27:29 +00:00
ax.def [gdb/ax] small "setv" fix and documentation's adjustment. 2015-02-19 19:04:16 +04:00
break-common.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
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 Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
cleanups.c Replace some xmalloc-family functions with XNEW-family ones 2015-08-26 17:18:12 -04:00
cleanups.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
common-debug.c Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
common-debug.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
common-defs.h Move utility functions to common/ 2015-06-15 17:04:56 +02:00
common-exceptions.c Replace some xmalloc-family functions with XNEW-family ones 2015-08-26 17:18:12 -04:00
common-exceptions.h Make TRY/CATCH use real C++ try/catch in C++ mode 2015-03-07 15:26:27 +00:00
common-regcache.h aarch64 multi-arch part 6: HW breakpoint on unaligned address 2015-10-15 15:05:10 +01: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 Move safe_strerror to common/ 2015-01-15 15:09:15 -05:00
common.m4 Revert the previous 7 commits of: Validate binary before use 2015-07-15 20:27:32 +02:00
create-version.sh Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
errors.c Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
errors.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
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 Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
gdb_assert.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
gdb_locale.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
gdb_setjmp.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
gdb_signals.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
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 Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
gdb_wait.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
host-defs.h Move utility functions to common/ 2015-06-15 17:04:56 +02:00
mingw-strerror.c Move safe_strerror to common/ 2015-01-15 15:09:15 -05:00
posix-strerror.c Move safe_strerror to common/ 2015-01-15 15:09:15 -05:00
print-utils.c Remove redundant include directives. 2015-06-24 13:52:29 +01:00
print-utils.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
ptid.c Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
ptid.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
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 Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
symbol.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
vec.c Add some more casts (1/2) 2015-09-25 14:08:07 -04:00
vec.h vec.h: Add casts for C++ compat 2015-10-01 11:29:08 -04:00
version.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
x86-xstate.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
xml-utils.c Add casts to memory allocation related calls 2015-09-25 14:08:06 -04:00
xml-utils.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00