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 | 1e03ad2088cfda4ebbf8d9358747660171ca33a6 (patch) | |
tree | e15ba838f492dffd45c91343a7a0e68bf2d81be1 /gdb/procfs.c | |
parent | 548bcbeca813f4c010178d1f8bb6b63b1f6de409 (diff) | |
download | gdb-1e03ad2088cfda4ebbf8d9358747660171ca33a6.zip gdb-1e03ad2088cfda4ebbf8d9358747660171ca33a6.tar.gz gdb-1e03ad2088cfda4ebbf8d9358747660171ca33a6.tar.bz2 |
* 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 7688899..79f5575 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 * |