diff --git a/gdb-upstream.patch b/gdb-upstream.patch index 776aa40..da4c127 100644 --- a/gdb-upstream.patch +++ b/gdb-upstream.patch @@ -75,3 +75,129 @@ index 8e66425..bcfcce2 100644 set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); + + + +pre-req for: +[PATCH, AArch64] Fix bug in hardware watchpoint/breakpoint handling +commit c623a6ef72a8d7dbbb646345f75646710cb9bb68 +Author: Will Newton +Date: Mon Sep 16 14:22:19 2013 +0000 + + gdbserver, aarch64: Zero out regs in aarch64_linux_set_debug_regs. + + Apply the same fix that was applied to aarch64-linux-nat.c. + + 2013-09-16 Will Newton + + * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Zero + out regs. + +diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog +index 73191f4..1082e78 100644 +### a/gdb/gdbserver/ChangeLog +### b/gdb/gdbserver/ChangeLog +## -1,3 +1,8 @@ ++2013-09-16 Will Newton ++ ++ * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Zero ++ out regs. ++ + 2013-09-06 Pedro Alves + + * Makefile.in (gdb_proc_service_h, regdef_h, regcache_h) +diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c +index e37f602..93246b3 100644 +--- a/gdb/gdbserver/linux-aarch64-low.c ++++ b/gdb/gdbserver/linux-aarch64-low.c +@@ -600,6 +600,7 @@ aarch64_linux_set_debug_regs (const struct aarch64_debug_reg_state *state, + const CORE_ADDR *addr; + const unsigned int *ctrl; + ++ memset (®s, 0, sizeof (regs)); + iov.iov_base = ®s; + iov.iov_len = sizeof (regs); + count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs; + + + +[PATCH, AArch64] Fix bug in hardware watchpoint/breakpoint handling +https://sourceware.org/ml/gdb-patches/2013-12/msg00707.html +commit f45c82da381e0ce5ce51b7fb24d0d28611d266b8 +Author: Yufeng Zhang +Date: Wed Dec 18 16:47:33 2013 +0000 + + gdb/ + + * aarch64-linux-nat.c (aarch64_linux_set_debug_regs): Set + iov.iov_len with the real length in use. + + gdb/gdbserver/ + + * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Set + iov.iov_len with the real length in use. + +diff --git a/gdb/ChangeLog b/gdb/ChangeLog +index 7d9308f..513c593 100644 +### a/gdb/ChangeLog +### b/gdb/ChangeLog +## -1,3 +1,8 @@ ++2013-12-18 Yufeng Zhang ++ ++ * aarch64-linux-nat.c (aarch64_linux_set_debug_regs): Set ++ iov.iov_len with the real length in use. ++ + 2013-12-18 Yao Qi + + * target.h (target_xfer_partial_ftype): New typedef. +diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c +index 256725b..7d76833 100644 +--- a/gdb/aarch64-linux-nat.c ++++ b/gdb/aarch64-linux-nat.c +@@ -314,10 +314,13 @@ aarch64_linux_set_debug_regs (const struct aarch64_debug_reg_state *state, + + memset (®s, 0, sizeof (regs)); + iov.iov_base = ®s; +- iov.iov_len = sizeof (regs); + count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs; + addr = watchpoint ? state->dr_addr_wp : state->dr_addr_bp; + ctrl = watchpoint ? state->dr_ctrl_wp : state->dr_ctrl_bp; ++ if (count == 0) ++ return; ++ iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs[count - 1]) ++ + sizeof (regs.dbg_regs [count - 1])); + + for (i = 0; i < count; i++) + { +diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog +index c73840f..2847796 100644 +### a/gdb/gdbserver/ChangeLog +### b/gdb/gdbserver/ChangeLog +## -1,3 +1,8 @@ ++2013-12-18 Yufeng Zhang ++ ++ * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Set ++ iov.iov_len with the real length in use. ++ + 2013-12-13 Joel Brobecker + + * Makefile.in (safe-ctype.o, lbasename.o): New rules. +diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c +index 93246b3..c2d271a 100644 +--- a/gdb/gdbserver/linux-aarch64-low.c ++++ b/gdb/gdbserver/linux-aarch64-low.c +@@ -602,10 +602,13 @@ aarch64_linux_set_debug_regs (const struct aarch64_debug_reg_state *state, + + memset (®s, 0, sizeof (regs)); + iov.iov_base = ®s; +- iov.iov_len = sizeof (regs); + count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs; + addr = watchpoint ? state->dr_addr_wp : state->dr_addr_bp; + ctrl = watchpoint ? state->dr_ctrl_wp : state->dr_ctrl_bp; ++ if (count == 0) ++ return; ++ iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs[count - 1]) ++ + sizeof (regs.dbg_regs [count - 1])); + + for (i = 0; i < count; i++) + { diff --git a/gdb.spec b/gdb.spec index 0a88357..1067ac8 100644 --- a/gdb.spec +++ b/gdb.spec @@ -38,7 +38,7 @@ Version: 7.6.50.%{snap} # The release always contains a leading reserved number, start it at 1. # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing. -Release: 17%{?dist} +Release: 18%{?dist} License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain Group: Development/Debuggers @@ -1346,6 +1346,9 @@ fi %endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch" %changelog +* Wed Dec 25 2013 Jan Kratochvil - 7.6.50.20130731-18.fc20 +- [aarch64] Backport two breakpoint/watchpoint fixes. + * Mon Nov 18 2013 Jan Kratochvil - 7.6.50.20130731-17.fc20 - [rhel7] [--with testsuite] Remove gcc-java&co. BuildRequires.