You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
4.7 KiB
109 lines
4.7 KiB
commit 49ecef2a7da2ee9df4ae675f99b70518fbf1bb23 |
|
Author: Andrew Pinski <apinski@cavium.com> |
|
Date: Sat Jul 23 09:56:44 2016 -0700 |
|
|
|
Fix ARMv8.1/v8.2 for hw watchpoint and breakpoint |
|
|
|
The problem here is ARMv8.1 (and ARMv8.2) define a |
|
different debug version than ARMv8 (7 and 8 respectively). |
|
This fixes hw watchpoints and breakpoints by checking |
|
for those debug versions too. |
|
|
|
Committed as obvious after a test on aarch64-linux-gnu |
|
(on a ThunderX machine which has ARMv8.1 support enabled). |
|
|
|
ChangeLog: |
|
* nat/aarch64-linux-hw-point.c |
|
(aarch64_linux_get_debug_reg_capacity): Handle |
|
ARMv8.1 and ARMv8.2 debug versions. |
|
* nat/aarch64-linux-hw-point.h |
|
(AARCH64_DEBUG_ARCH_V8_1): New define. |
|
(AARCH64_DEBUG_ARCH_V8_2): New define. |
|
|
|
Signed-off-by: Andrew Pinski <apinski@cavium.com> |
|
|
|
### a/gdb/ChangeLog |
|
### b/gdb/ChangeLog |
|
## -1,3 +1,12 @@ |
|
+2016-07-23 Andrew Pinski <apinski@cavium.com> |
|
+ |
|
+ * nat/aarch64-linux-hw-point.c |
|
+ (aarch64_linux_get_debug_reg_capacity): Handle |
|
+ ARMv8.1 and ARMv8.2 debug versions. |
|
+ * nat/aarch64-linux-hw-point.h |
|
+ (AARCH64_DEBUG_ARCH_V8_1): New define. |
|
+ (AARCH64_DEBUG_ARCH_V8_2): New define. |
|
+ |
|
2016-06-30 Руслан Ижбулатов <lrn1986@gmail.com> |
|
|
|
PR gdb/14529 |
|
Index: gdb-7.6.1/gdb/aarch64-linux-nat.c |
|
=================================================================== |
|
--- gdb-7.6.1.orig/gdb/aarch64-linux-nat.c 2016-08-03 23:00:09.338705164 +0200 |
|
+++ gdb-7.6.1/gdb/aarch64-linux-nat.c 2016-08-03 23:00:55.016092435 +0200 |
|
@@ -110,6 +110,8 @@ |
|
|
|
/* Macro for the expected version of the ARMv8-A debug architecture. */ |
|
#define AARCH64_DEBUG_ARCH_V8 0x6 |
|
+#define AARCH64_DEBUG_ARCH_V8_1 0x7 |
|
+#define AARCH64_DEBUG_ARCH_V8_2 0x8 |
|
|
|
/* Number of hardware breakpoints/watchpoints the target supports. |
|
They are initialized with values obtained via the ptrace calls |
|
@@ -789,7 +791,9 @@ |
|
|
|
/* Get hardware watchpoint register info. */ |
|
if (ptrace (PTRACE_GETREGSET, tid, NT_ARM_HW_WATCH, &iov) == 0 |
|
- && AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8) |
|
+ && (AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8 |
|
+ || AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8_1 |
|
+ || AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8_2)) |
|
{ |
|
aarch64_num_wp_regs = AARCH64_DEBUG_NUM_SLOTS (dreg_state.dbg_info); |
|
if (aarch64_num_wp_regs > AARCH64_HWP_MAX_NUM) |
|
@@ -809,7 +813,9 @@ |
|
|
|
/* Get hardware breakpoint register info. */ |
|
if (ptrace (PTRACE_GETREGSET, tid, NT_ARM_HW_BREAK, &iov) == 0 |
|
- && AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8) |
|
+ && (AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8 |
|
+ || AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8_1 |
|
+ || AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8_2)) |
|
{ |
|
aarch64_num_bp_regs = AARCH64_DEBUG_NUM_SLOTS (dreg_state.dbg_info); |
|
if (aarch64_num_bp_regs > AARCH64_HBP_MAX_NUM) |
|
Index: gdb-7.6.1/gdb/gdbserver/linux-aarch64-low.c |
|
=================================================================== |
|
--- gdb-7.6.1.orig/gdb/gdbserver/linux-aarch64-low.c 2016-08-03 23:00:08.117694812 +0200 |
|
+++ gdb-7.6.1/gdb/gdbserver/linux-aarch64-low.c 2016-08-03 23:02:00.471647393 +0200 |
|
@@ -1187,6 +1187,8 @@ |
|
#define AARCH64_DEBUG_NUM_SLOTS(x) ((x) & 0xff) |
|
#define AARCH64_DEBUG_ARCH(x) (((x) >> 8) & 0xff) |
|
#define AARCH64_DEBUG_ARCH_V8 0x6 |
|
+#define AARCH64_DEBUG_ARCH_V8_1 0x7 |
|
+#define AARCH64_DEBUG_ARCH_V8_2 0x8 |
|
|
|
static void |
|
aarch64_arch_setup (void) |
|
@@ -1203,7 +1205,9 @@ |
|
|
|
/* Get hardware watchpoint register info. */ |
|
if (ptrace (PTRACE_GETREGSET, pid, NT_ARM_HW_WATCH, &iov) == 0 |
|
- && AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8) |
|
+ && (AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8 |
|
+ || AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8_1 |
|
+ || AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8_2)) |
|
{ |
|
aarch64_num_wp_regs = AARCH64_DEBUG_NUM_SLOTS (dreg_state.dbg_info); |
|
if (aarch64_num_wp_regs > AARCH64_HWP_MAX_NUM) |
|
@@ -1223,7 +1227,9 @@ |
|
|
|
/* Get hardware breakpoint register info. */ |
|
if (ptrace (PTRACE_GETREGSET, pid, NT_ARM_HW_BREAK, &iov) == 0 |
|
- && AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8) |
|
+ && (AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8 |
|
+ || AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8_1 |
|
+ || AARCH64_DEBUG_ARCH (dreg_state.dbg_info) == AARCH64_DEBUG_ARCH_V8_2)) |
|
{ |
|
aarch64_num_bp_regs = AARCH64_DEBUG_NUM_SLOTS (dreg_state.dbg_info); |
|
if (aarch64_num_bp_regs > AARCH64_HBP_MAX_NUM)
|
|
|