Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [RFA] procfs.c: TARGET_CAN_USE_HARDWARE_WATCHPOINT via target vector
@ 2002-08-12 14:38 Kevin Buettner
  2002-08-12 17:40 ` Michael Snyder
  2002-08-13 14:11 ` Andrew Cagney
  0 siblings, 2 replies; 8+ messages in thread
From: Kevin Buettner @ 2002-08-12 14:38 UTC (permalink / raw)
  To: gdb-patches; +Cc: msnyder

On Irix, it's possible to debug processes using the o32, n32, and n64
ABIs from a single gdb.  Unfortunately, due to some limitations with
the watchpoint support in procfs.c, it is not possible to use hardware
watchpoints in all cases.  (See patch comments for details.)

My first cut at a patch simply changed the macro in
config/mips/nm-irix5.h.  However, since this same solution will be
required for each platform requiring procfs.c, I decided to use the
newly added hardware breakpoint facilities in the target vector.

Okay to commit?

Kevin

	* procfs.c (procfs_can_use_hw_breakpoint): New function.
	(init_procfs_ops): Define ``to_can_use_hw_breakpoint'' for procfs
	target vector.
	* config/mips/nm-irix5.h (TARGET_CAN_USE_HARDWARE_WATCHPOINT):
	Delete.  Add comment regarding this now-deleted target method.

Index: procfs.c
===================================================================
RCS file: /cvs/src/src/gdb/procfs.c,v
retrieving revision 1.38
diff -u -p -r1.38 procfs.c
--- procfs.c	11 Jul 2002 13:50:49 -0000	1.38
+++ procfs.c	12 Aug 2002 21:18:34 -0000
@@ -136,6 +136,8 @@ static int proc_find_memory_regions (int
 
 static char * procfs_make_note_section (bfd *, int *);
 
+static int procfs_can_use_hw_breakpoint (int, int, int);
+
 struct target_ops procfs_ops;		/* the target vector */
 
 static void
@@ -183,6 +185,7 @@ init_procfs_ops (void)
   procfs_ops.to_has_thread_control  = tc_schedlock;
   procfs_ops.to_find_memory_regions = proc_find_memory_regions;
   procfs_ops.to_make_corefile_notes = procfs_make_note_section;
+  procfs_ops.to_can_use_hw_breakpoint = procfs_can_use_hw_breakpoint;
   procfs_ops.to_magic               = OPS_MAGIC;
 }
 
@@ -5136,6 +5139,37 @@ procfs_set_watchpoint (ptid_t ptid, CORE
 #endif /* AIX5 */
 #endif /* UNIXWARE */
   return 0;
+}
+
+/* Return non-zero if we can set a hardware watchpoint of type TYPE.  TYPE
+   is one of bp_hardware_watchpoint, bp_read_watchpoint, bp_write_watchpoint,
+   or bp_hardware_watchpoint.  CNT is the number of watchpoints used so
+   far.
+   
+   Note:  procfs_can_use_hw_breakpoint() is not yet used by all
+   procfs.c targets due to the fact that some of them still define
+   TARGET_CAN_USE_HARDWARE_WATCHPOINT.  */
+
+static int
+procfs_can_use_hw_breakpoint (int type, int cnt, int othertype)
+{
+#ifndef TARGET_HAS_HARDWARE_WATCHPOINTS
+  return 0;
+#else
+  /* Due to the way that proc_set_watchpoint() is implemented, host
+     and target pointers must be of the same size.  If they are not,
+     we can't use hardware watchpoints.  This limitation is due to the
+     fact that proc_set_watchpoint() calls address_to_host_pointer();
+     a close inspection of address_to_host_pointer will reveal that
+     an internal error will be generated when the host and target
+     pointer sizes are different.  */
+  if (sizeof (void *) != TYPE_LENGTH (builtin_type_void_data_ptr))
+    return 0;
+
+  /* Other tests here???  */
+
+  return 1;
+#endif
 }
 
 /*
Index: config/mips/nm-irix5.h
===================================================================
RCS file: /cvs/src/src/gdb/config/mips/nm-irix5.h,v
retrieving revision 1.5
diff -u -p -r1.5 nm-irix5.h
--- config/mips/nm-irix5.h	5 Jun 2002 19:18:24 -0000	1.5
+++ config/mips/nm-irix5.h	12 Aug 2002 21:18:34 -0000
@@ -24,7 +24,9 @@
 
 #define TARGET_HAS_HARDWARE_WATCHPOINTS
 
-#define TARGET_CAN_USE_HARDWARE_WATCHPOINT(type, cnt, ot) 1
+/* TARGET_CAN_USE_HARDWARE_WATCHPOINT is now defined to go through
+   the target vector.  For Irix5, procfs_can_use_hw_watchpoint()
+   should be invoked.  */
 
 /* When a hardware watchpoint fires off the PC will be left at the
    instruction which caused the watchpoint.  It will be necessary for


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2002-08-27  1:24 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-08-12 14:38 [RFA] procfs.c: TARGET_CAN_USE_HARDWARE_WATCHPOINT via target vector Kevin Buettner
2002-08-12 17:40 ` Michael Snyder
2002-08-12 18:11   ` Kevin Buettner
2002-08-12 19:40     ` Michael Snyder
2002-08-13 14:11 ` Andrew Cagney
2002-08-13 14:39   ` Kevin Buettner
2002-08-13 17:21     ` Andrew Cagney
2002-08-26 18:31     ` Michael Snyder

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox