* regcache.c (regcache_raw_read): If the target didn't supply a

given raw register, mark it as unavailable.
This commit is contained in:
Pedro Alves 2011-03-24 11:22:03 +00:00
parent 29b2c556d2
commit 788c8b10e3
2 changed files with 17 additions and 17 deletions

View File

@ -1,3 +1,8 @@
2011-03-23 Pedro Alves <pedro@codesourcery.com>
* regcache.c (regcache_raw_read): If the target didn't supply a
given raw register, mark it as unavailable.
2011-03-23 Kai Tietz <ktietz@redhat.com>
* breakpoint.c (clear_command): Use filename_cmp

View File

@ -586,25 +586,20 @@ regcache_raw_read (struct regcache *regcache, int regnum, gdb_byte *buf)
to the current thread. This switching shouldn't be necessary
only there is still only one target side register cache. Sigh!
On the bright side, at least there is a regcache object. */
if (!regcache->readonly_p)
if (!regcache->readonly_p
&& regcache_register_status (regcache, regnum) == REG_UNKNOWN)
{
if (regcache_register_status (regcache, regnum) == REG_UNKNOWN)
{
struct cleanup *old_chain = save_inferior_ptid ();
struct cleanup *old_chain = save_inferior_ptid ();
inferior_ptid = regcache->ptid;
target_fetch_registers (regcache, regnum);
do_cleanups (old_chain);
}
#if 0
/* FIXME: cagney/2004-08-07: At present a number of targets
forget (or didn't know that they needed) to set this leading to
panics. Also is the problem that targets need to indicate
that a register is in one of the possible states: valid,
undefined, unknown. The last of which isn't yet
possible. */
gdb_assert (regcache_register_status (regcache, regnum) == REG_VALID);
#endif
inferior_ptid = regcache->ptid;
target_fetch_registers (regcache, regnum);
do_cleanups (old_chain);
/* A number of targets can't access the whole set of raw
registers (because the debug API provides no means to get at
them). */
if (regcache->register_status[regnum] == REG_UNKNOWN)
regcache->register_status[regnum] = REG_UNAVAILABLE;
}
if (regcache->register_status[regnum] != REG_VALID)