This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH/SPARC] Hardware watchpoints for SPARC Solaris


This adds back the support for hardware watchpoints that was present
in the old code.  The procfs target_ops vector should be changed such
that these defines are no longer necessary, but not now...

Committed to the SPARC branch.


Index: ChangeLog
from  Mark Kettenis  <kettenis@gnu.org>

	* config/sparc/nm-sol2.h [NEW_PROC_API]
	(TARGET_HAS_HARDWARE_WAITCHPOINTS): Define.
	(TARGET_CAN_USE_HARDWARE_WATCHPOINT): Define to 1.
	(TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT): Define to 1.
	(HAVE_CONTINUABLE_WATCHPOINT): Define to 1.
	(procfs_stopped_by_watchpoint): New prototype.
	(STOPPED_BY_WATCHPOINT): New define.
	(procfs_set_watchpoint): New prototype.
	(target_insert_watchpoint, target_remove_watchpoint): Define using
	procfs_set_watchpoint.

Index: config/sparc/nm-sol2.h
===================================================================
RCS file: /cvs/src/src/gdb/config/sparc/Attic/nm-sol2.h,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 nm-sol2.h
--- config/sparc/nm-sol2.h 18 Sep 2003 21:11:29 -0000 1.1.2.1
+++ config/sparc/nm-sol2.h 29 Dec 2003 13:03:58 -0000
@@ -28,4 +28,37 @@
 
 #include "solib.h"
 
+/* Hardware wactchpoints.  */
+
+/* Solaris 2.6 and above can do HW watchpoints.  */
+#ifdef NEW_PROC_API
+
+#define TARGET_HAS_HARDWARE_WATCHPOINTS
+
+/* The man page for proc(4) on Solaris 2.6 and up says that the system
+   can support "thousands" of hardware watchpoints, but gives no
+   method for finding out how many.  So just tell GDB 'yes'.  */
+#define TARGET_CAN_USE_HARDWARE_WATCHPOINT(TYPE, CNT, OT) 1
+#define TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(SIZE) 1
+
+/* When a hardware watchpoint fires off the PC will be left at the
+   instruction following the one which caused the watchpoint.  It will
+   *NOT* be necessary for GDB to step over the watchpoint.  */
+#define HAVE_CONTINUABLE_WATCHPOINT 1
+
+extern int procfs_stopped_by_watchpoint (ptid_t);
+#define STOPPED_BY_WATCHPOINT(W) \
+  procfs_stopped_by_watchpoint(inferior_ptid)
+
+/* Use these macros for watchpoint insertion/deletion.  TYPE can be 0
+   (write watch), 1 (read watch), 2 (access watch (read/write).  */
+
+extern int procfs_set_watchpoint (ptid_t, CORE_ADDR, int, int, int);
+#define target_insert_watchpoint(ADDR, LEN, TYPE) \
+        procfs_set_watchpoint (inferior_ptid, ADDR, LEN, TYPE, 1)
+#define target_remove_watchpoint(ADDR, LEN, TYPE) \
+        procfs_set_watchpoint (inferior_ptid, ADDR, 0, 0, 0)
+
+#endif /* NEW_PROC_API */
+
 #endif /* nm-sol2.h */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]