This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [commit] Allow cached cooked reads
- From: Kevin Buettner <kevinb at redhat dot com>
- To: Andrew Cagney <ac131313 at redhat dot com>, gdb-patches at sources dot redhat dot com
- Date: Tue, 24 Jun 2003 15:06:09 -0700
- Subject: Re: [commit] Allow cached cooked reads
- References: <3EEDC499.4010209@redhat.com>
On Jun 16, 9:22am, Andrew Cagney wrote:
> Just stumbled across this. When trying to save cooked registers the
> regcache was triggering an assertion failure instead of ignoring a bogus
> request.
>
> 2003-06-16 Andrew Cagney <cagney@redhat.com>
>
> * regcache.c (do_cooked_read): Do not use register_valid_p.
>
> Index: regcache.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/regcache.c,v
> retrieving revision 1.87
> diff -u -r1.87 regcache.c
> --- regcache.c 9 Jun 2003 01:02:06 -0000 1.87
> +++ regcache.c 16 Jun 2003 13:18:46 -0000
> @@ -423,8 +423,7 @@
> do_cooked_read (void *src, int regnum, void *buf)
> {
> struct regcache *regcache = src;
> - if (!regcache_valid_p (regcache, regnum)
> - && regcache->readonly_p)
> + if (!regcache->register_valid_p[regnum] && regcache->readonly_p)
> /* Don't even think about fetching a register from a read-only
> cache when the register isn't yet valid. There isn't a target
> from which the register value can be fetched. */
Which assertion was failing? The check for regcache != NULL or the
bounds check?
I'm wondering if the new code above should include some bounds checks.
Alternately, go back to using regcache_valid_p() and weaken the
assertions in regcache_valid_p() somewhat. E.g, perhaps rewrite
regcache_valid_p() from:
int
regcache_valid_p (struct regcache *regcache, int regnum)
{
gdb_assert (regcache != NULL);
gdb_assert (regnum >= 0 && regnum < regcache->descr->nr_raw_registers);
return regcache->register_valid_p[regnum];
}
to:
int
regcache_valid_p (struct regcache *regcache, int regnum)
{
gdb_assert (regcache != NULL);
gdb_assert (regnum >= 0);
return regnum < regcache->descr->nr_raw_registers)
&& regcache->register_valid_p[regnum];
}
Kevin