Fix ARMv8.1/v8.2 for hw watchpoint and breakpoint
authorAndrew Pinski <apinski@cavium.com>
Sat, 23 Jul 2016 16:56:44 +0000 (09:56 -0700)
committerAndrew Pinski <apinski@cavium.com>
Sat, 23 Jul 2016 17:10:32 +0000 (10:10 -0700)
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>
gdb/ChangeLog
gdb/nat/aarch64-linux-hw-point.c
gdb/nat/aarch64-linux-hw-point.h

index 0f4a8b64196eec140ab8ff20fe0db5395ea06f92..56cd5ba387b7cdb44e01738156d8d1f4ec6b2881 100644 (file)
@@ -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 a06a6e628fedc90a4c17ebb95f529c425ad2c76d..f9e04d9d2b830455bfde40950e6b0a0558029459 100644 (file)
@@ -630,7 +630,9 @@ aarch64_linux_get_debug_reg_capacity (int tid)
 
   /* 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)
@@ -650,7 +652,9 @@ aarch64_linux_get_debug_reg_capacity (int tid)
 
   /* 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 acf0a49a0af855f61e82c4283f5708f28e4bac90..16efb7c67fc07d1fe63447fd9141deba4b050d93 100644 (file)
@@ -68,6 +68,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
 
 /* ptrace expects control registers to be formatted as follows: