Blame SOURCES/gdb-power8-2of2.patch

01917d
[PATCH] Enable hw watchpoint with longer ranges using DAWR on Power
01917d
http://sourceware.org/ml/gdb-patches/2013-07/msg00085.html
01917d
http://sourceware.org/ml/gdb-cvs/2013-07/msg00097.html
01917d
01917d
### src/gdb/ChangeLog	2013/07/22 11:42:30	1.15812
01917d
### src/gdb/ChangeLog	2013/07/22 13:17:51	1.15813
01917d
## -1,3 +1,9 @@
01917d
+2013-07-22  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>
01917d
+
01917d
+	* ppc-linux-nat.c (PPC_DEBUG_FEATURE_DATA_BP_DAWR): New define.
01917d
+	(ppc_linux_region_ok_for_hw_watchpoint): Add checking to use the new
01917d
+	DAWR interface for longer ranges hardware watchpoint (up to 512 bytes).
01917d
+
01917d
 2013-07-22  Phil Muldoon  <pmuldoon@redhat.com>
01917d
 
01917d
 	* top.c (print_gdb_version): Add help, apropos description and
01917d
--- gdb-7.6/gdb/ppc-linux-nat.c.orig	2013-07-24 17:39:30.434549279 +0200
01917d
+++ gdb-7.6/gdb/ppc-linux-nat.c	2013-07-24 17:41:31.337706502 +0200
01917d
@@ -178,7 +178,11 @@ struct ppc_hw_breakpoint
01917d
         (1<<((n)+PPC_BREAKPOINT_CONDITION_BE_SHIFT))
01917d
 #endif /* PPC_PTRACE_GETHWDBGINFO */
01917d
 
01917d
-
01917d
+/* Feature defined on Linux kernel v3.9: DAWR interface, that enables wider
01917d
+   watchpoint (up to 512 bytes).  */
01917d
+#ifndef PPC_DEBUG_FEATURE_DATA_BP_DAWR
01917d
+#define PPC_DEBUG_FEATURE_DATA_BP_DAWR	0x10
01917d
+#endif /* PPC_DEBUG_FEATURE_DATA_BP_DAWR */
01917d
 
01917d
 /* Similarly for the general-purpose (gp0 -- gp31)
01917d
    and floating-point registers (fp0 -- fp31).  */
01917d
@@ -1503,6 +1507,7 @@ ppc_linux_region_ok_for_hw_watchpoint (C
01917d
      to determine the hardcoded watchable region for watchpoints.  */
01917d
   if (have_ptrace_booke_interface ())
01917d
     {
01917d
+      int region_size;
01917d
       /* Embedded DAC-based processors, like the PowerPC 440 have ranged
01917d
 	 watchpoints and can watch any access within an arbitrary memory
01917d
 	 region. This is useful to watch arrays and structs, for instance.  It
01917d
@@ -1511,11 +1516,17 @@ ppc_linux_region_ok_for_hw_watchpoint (C
01917d
 	  && booke_debug_info.features & PPC_DEBUG_FEATURE_DATA_BP_RANGE
01917d
 	  && ppc_linux_get_hwcap () & PPC_FEATURE_BOOKE)
01917d
 	return 2;
01917d
+      /* Check if the processor provides DAWR interface.  */
01917d
+      if (booke_debug_info.features & PPC_DEBUG_FEATURE_DATA_BP_DAWR)
01917d
+	/* DAWR interface allows to watch up to 512 byte wide ranges which
01917d
+	   can't cross a 512 byte boundary.  */
01917d
+	region_size = 512;
01917d
+      else
01917d
+	region_size = booke_debug_info.data_bp_alignment;
01917d
       /* Server processors provide one hardware watchpoint and addr+len should
01917d
          fall in the watchable region provided by the ptrace interface.  */
01917d
-      if (booke_debug_info.data_bp_alignment
01917d
-	  && (addr + len > (addr & ~(booke_debug_info.data_bp_alignment - 1))
01917d
-	      + booke_debug_info.data_bp_alignment))
01917d
+      if (region_size
01917d
+	  && (addr + len > (addr & ~(region_size - 1)) + region_size))
01917d
 	return 0;
01917d
     }
01917d
   /* addr+len must fall in the 8 byte watchable region for DABR-based