Blame SOURCES/gdb-power8-2of2.patch

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