From: Michael Snyder <msnyder@redhat.com>
To: Kevin Buettner <kevinb@redhat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [RFA] procfs.c: TARGET_CAN_USE_HARDWARE_WATCHPOINT via target vector
Date: Mon, 12 Aug 2002 17:40:00 -0000 [thread overview]
Message-ID: <3D585101.CA20A2E2@redhat.com> (raw)
In-Reply-To: <1020812213802.ZM1237@localhost.localdomain>
Kevin Buettner wrote:
>
> 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?
Sure -- but don't you think it should default to zero?
Or is being able to do it the norm? (I don't remember).
>
> 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
next prev parent reply other threads:[~2002-08-13 0:40 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-08-12 14:38 Kevin Buettner
2002-08-12 17:40 ` Michael Snyder [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3D585101.CA20A2E2@redhat.com \
--to=msnyder@redhat.com \
--cc=gdb-patches@sources.redhat.com \
--cc=kevinb@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox