old-cross-binutils/gdb/nat
Yao Qi 805035d70c [AArch64] Only check breakpoint alignment on inserting
This patch fixes the GDB internal error on AArch64 when running
watchpoint-fork.exp

 top?bt 15
 internal_error (file=file@entry=0x79d558 "../../binutils-gdb/gdb/linux-nat.c", line=line@entry=4866, fmt=0x793b20 "%s: Assertion `%s' failed.")
    at ../../binutils-gdb/gdb/common/errors.c:51
 #1  0x0000000000495bc4 in linux_nat_thread_address_space (t=<optimized out>, ptid=<error reading variable: Cannot access memory at address 0x1302>)
    at ../../binutils-gdb/gdb/linux-nat.c:4866
 #2  0x00000000005db2c8 in delegate_thread_address_space (self=<optimized out>, arg1=<error reading variable: Cannot access memory at address 0x1302>)
    at ../../binutils-gdb/gdb/target-delegates.c:2447
 #3  0x00000000005e8c7c in target_thread_address_space (ptid=<error reading variable: Cannot access memory at address 0x1302>)
    at ../../binutils-gdb/gdb/target.c:2727
 #4  0x000000000054eef8 in get_thread_arch_regcache (ptid=..., gdbarch=0xad51e0) at ../../binutils-gdb/gdb/regcache.c:529
 #5  0x000000000054efcc in get_thread_regcache (ptid=...) at ../../binutils-gdb/gdb/regcache.c:546
 #6  0x000000000054f120 in get_thread_regcache_for_ptid (ptid=...) at ../../binutils-gdb/gdb/regcache.c:560
 #7  0x00000000004a2278 in aarch64_point_is_aligned (is_watchpoint=0, addr=34168, len=2) at ../../binutils-gdb/gdb/nat/aarch64-linux-hw-point.c:122
 #8  0x00000000004a2e68 in aarch64_handle_breakpoint (type=hw_execute, addr=34168, len=2, is_insert=0, state=0xae8880)
    at ../../binutils-gdb/gdb/nat/aarch64-linux-hw-point.c:465
 #9  0x000000000048edf0 in aarch64_linux_remove_hw_breakpoint (self=<optimized out>, gdbarch=<optimized out>, bp_tgt=<optimized out>)
    at ../../binutils-gdb/gdb/aarch64-linux-nat.c:657
 #10 0x00000000005da8dc in delegate_remove_hw_breakpoint (self=<optimized out>, arg1=<optimized out>, arg2=<optimized out>)
    at ../../binutils-gdb/gdb/target-delegates.c:492
 #11 0x0000000000536a24 in bkpt_remove_location (bl=<optimized out>) at ../../binutils-gdb/gdb/breakpoint.c:13065
 #12 0x000000000053351c in remove_breakpoint_1 (bl=0xb3fe70, is=is@entry=mark_inserted) at ../../binutils-gdb/gdb/breakpoint.c:4026
 #13 0x000000000053ccc0 in detach_breakpoints (ptid=...) at ../../binutils-gdb/gdb/breakpoint.c:3930
 #14 0x00000000005a3ac0 in handle_inferior_event_1 (ecs=0x7ffffff048) at ../../binutils-gdb/gdb/infrun.c:5042

After the fork, GDB will physically remove the breakpoints from the child
process (in frame #14), but at that time, GDB doesn't create an inferior
yet for child, but inferior_ptid is set to child's ptid (in frame #13).
In aarch64_point_is_aligned, we'll get the regcache of current_lwp_ptid
to determine if the current process is 32-bit or 64-bit, so the inferior
can't be found, and the internal error is caused.

I don't find a better fix other than not checking alignment on removing
breakpoint.

gdb:

2015-11-27  Yao Qi  <yao.qi@linaro.org>

	* nat/aarch64-linux-hw-point.c (aarch64_dr_state_remove_one_point):
	Don't assert on alignment.
	(aarch64_handle_breakpoint): Only check alignment when IS_INSERT
	is true.
2015-11-27 14:53:32 +00:00
..
aarch64-linux-hw-point.c [AArch64] Only check breakpoint alignment on inserting 2015-11-27 14:53:32 +00: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 mmap casts in linux-btrace.c 2015-10-23 19:54:09 -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 Move __SIGRTMIN. 2015-10-26 13:30:57 -07: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 Display names of remote threads 2015-11-26 10:50:08 -05:00
linux-procfs.h Display names of remote threads 2015-11-26 10:50:08 -05:00
linux-ptrace.c Replace (void *) cast with (gdb_byte *) 2015-10-24 18:36:26 -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