old-cross-binutils/gdb/nat
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
..
aarch64-linux-hw-point.c aarch64 multi-arch part 6: HW breakpoint on unaligned address 2015-10-15 15:05:10 +01:00
aarch64-linux-hw-point.h [aarch64] Check region OK for HW watchpoint in GDBserver 2015-09-03 14:01:49 +01:00
aarch64-linux.c aarch64 multi-arch (part 3): get thread area 2015-09-18 13:59:42 +01:00
aarch64-linux.h aarch64 multi-arch (part 3): get thread area 2015-09-18 13:59:42 +01:00
gdb_ptrace.h C++: handle glibc's ptrace(enum __ptrace_request, ...) 2015-07-24 15:12:15 +01:00
gdb_thread_db.h Protect nat/gdb_thread_db.h against multiple inclusion. 2015-08-05 16:30:57 +02:00
glibc_thread_db.h Move shared native target specific code to gdb/nat 2014-06-20 14:06:48 +01:00
linux-btrace.c Add casts to memory allocation related calls 2015-09-25 14:08:06 -04:00
linux-btrace.h btrace: kernel address filtering 2015-09-09 10:35:35 +02:00
linux-namespaces.c Fix stale cleanup left by linux_mntns_access_fs 2015-08-21 16:56:22 +01:00
linux-namespaces.h Introduce nat/linux-namespaces.[ch] 2015-06-10 14:28:43 +01:00
linux-nat.h Include header for enum target_stop_reason 2015-05-15 16:00:40 +01:00
linux-osdata.c Add casts to memory allocation related calls 2015-09-25 14:08:06 -04:00
linux-osdata.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
linux-personality.c Fix nat/linux-personality.c regression on RHEL-5 2015-01-16 11:42:28 -05:00
linux-personality.h Move code to disable ASR to nat/ 2015-01-15 15:10:49 -05:00
linux-procfs.c Remove linux_proc_pid_get_ns 2015-06-10 14:28:43 +01:00
linux-procfs.h Remove linux_proc_pid_get_ns 2015-06-10 14:28:43 +01:00
linux-ptrace.c Add casts to memory allocation related calls 2015-09-25 14:08:06 -04:00
linux-ptrace.h Extended-remote follow-exec 2015-09-11 11:12:46 -07:00
linux-waitpid.c Fix gdbserver --debug issues caught by Valgrind 2015-08-06 13:32:27 +01:00
linux-waitpid.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
mips-linux-watch.c Mostly trivial enum fixes 2015-07-31 13:19:53 -04:00
mips-linux-watch.h Mostly trivial enum fixes 2015-07-31 13:19:53 -04:00
ppc-linux.c Detect 64-bit-ness in PowerPC Book III-E 2015-01-14 22:28:27 +08:00
ppc-linux.h Detect 64-bit-ness in PowerPC Book III-E 2015-01-14 22:28:27 +08:00
x86-cpuid.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
x86-dregs.c C++ keyword cleanliness, mostly auto-generated 2015-02-27 16:33:07 +00:00
x86-dregs.h Add x86_debug_reg_state to gdbserver 2015-03-24 14:05:43 +00:00
x86-gcc-cpuid.h Update year range in copyright notice of all files owned by the GDB project. 2015-01-01 13:32:14 +04:00
x86-linux-dregs.c Linux: sys/ptrace.h -> nat/gdb_ptrace.h everywhere 2015-07-24 15:14:47 +01:00
x86-linux-dregs.h Move low-level Linux x86 debug register code to a shared file 2015-03-24 14:05:45 +00:00
x86-linux.c Move duplicated Linux x86 code to nat/x86-linux.c 2015-03-24 14:05:45 +00:00
x86-linux.h Move duplicated Linux x86 code to nat/x86-linux.c 2015-03-24 14:05:45 +00:00