diff options
author | Kevin Buettner <kevinb@redhat.com> | 2002-08-13 18:03:38 +0000 |
---|---|---|
committer | Kevin Buettner <kevinb@redhat.com> | 2002-08-13 18:03:38 +0000 |
commit | 85a9cc82e022097f1f9875ac6b0b6e22fda60787 (patch) | |
tree | 91d0d931f7a426244a3de1f6886fb12bbb1cae43 /gdb/procfs.c | |
parent | d42215f4626802aa3538451e768465dd7ae18ef2 (diff) | |
download | gdb-85a9cc82e022097f1f9875ac6b0b6e22fda60787.tar.gz |
* 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.
Diffstat (limited to 'gdb/procfs.c')
-rw-r--r-- | gdb/procfs.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gdb/procfs.c b/gdb/procfs.c index 76888992646..79f55758dfe 100644 --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -136,6 +136,8 @@ static int proc_find_memory_regions (int (*) (CORE_ADDR, 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; } @@ -5138,6 +5141,37 @@ procfs_set_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rwflag, 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 +} + /* * Function: stopped_by_watchpoint * |