This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH/SPARC] Hardware watchpoints for SPARC Solaris
- From: Mark Kettenis <kettenis at chello dot nl>
- To: gdb-patches at sources dot redhat dot com
- Date: Mon, 29 Dec 2003 14:09:19 +0100 (CET)
- Subject: [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 */