(register_cached): Remove.
(set_register_cached): Remove.
(deprecated_registers_fetched): Remove.
(registers_changed): Use regcache_invalidate instead
of set_register_cached.
(regcache_raw_read): Update comment.
* regcache.h (regcache_invalidate): Add prototype.
(register_cached): Remove.
(set_register_cached): Remove.
(deprecated_registers_fetched): Remove.
* findvar.c (value_of_register): Do not call register_cached.
* frame.c (frame_register): Likewise.
* tui/tui-regs.c (tui_get_register): Likewise.
* remote.c (fetch_register_using_p): Do not call set_register_cached.
(process_g_packet): Likewise.
(remote_fetch_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
* mt-tdep.c (mt_select_coprocessor): Replace set_register_cached call
by regcache_invalidate.
(mt_pseudo_register_write): Likewise.
* sh-tdep.c (sh_pseudo_register_write): Likewise.
* corelow.c (get_core_registers): Replace deprecated_registers_fetched
call by loop over regcache_raw_supply (..., NULL).
+2007-05-06 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * regcache.c (regcache_invalidate): New function.
+ (register_cached): Remove.
+ (set_register_cached): Remove.
+ (deprecated_registers_fetched): Remove.
+ (registers_changed): Use regcache_invalidate instead
+ of set_register_cached.
+ (regcache_raw_read): Update comment.
+
+ * regcache.h (regcache_invalidate): Add prototype.
+ (register_cached): Remove.
+ (set_register_cached): Remove.
+ (deprecated_registers_fetched): Remove.
+
+ * findvar.c (value_of_register): Do not call register_cached.
+ * frame.c (frame_register): Likewise.
+ * tui/tui-regs.c (tui_get_register): Likewise.
+
+ * remote.c (fetch_register_using_p): Do not call set_register_cached.
+ (process_g_packet): Likewise.
+ (remote_fetch_registers): Likewise.
+ * remote-sim.c (gdbsim_fetch_register): Likewise.
+ * mt-tdep.c (mt_select_coprocessor): Replace set_register_cached call
+ by regcache_invalidate.
+ (mt_pseudo_register_write): Likewise.
+ * sh-tdep.c (sh_pseudo_register_write): Likewise.
+
+ * corelow.c (get_core_registers): Replace deprecated_registers_fetched
+ call by loop over regcache_raw_supply (..., NULL).
+
2007-05-06 Ulrich Weigand <uweigand@de.ibm.com>
* target.h (struct target_ops): Add REGCACHE parameter to
static void
get_core_registers (struct regcache *regcache, int regno)
{
- int status;
+ int i;
if (!(core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
&& (core_vec == NULL || core_vec->core_read_registers == NULL))
get_core_register_section (regcache,
".reg-xfp", 3, "extended floating-point", 0);
- deprecated_registers_fetched ();
+ /* Supply dummy value for all registers not found in the core. */
+ for (i = 0; i < NUM_REGS; i++)
+ if (!regcache_valid_p (regcache, i))
+ regcache_raw_supply (regcache, i, NULL);
}
static void
/* Return a `value' with the contents of (virtual or cooked) register
REGNUM as found in the specified FRAME. The register's type is
- determined by register_type().
-
- NOTE: returns NULL if register value is not available. Caller will
- check return value or die! */
+ determined by register_type(). */
struct value *
value_of_register (int regnum, struct frame_info *frame)
frame_register (frame, regnum, &optim, &lval, &addr, &realnum, raw_buffer);
- /* FIXME: cagney/2002-05-15: This test is just bogus.
-
- It indicates that the target failed to supply a value for a
- register because it was "not available" at this time. Problem
- is, the target still has the register and so get saved_register()
- may be returning a value saved on the stack. */
-
- if (register_cached (regnum) < 0)
- return NULL; /* register value not available */
-
reg_val = allocate_value (register_type (current_gdbarch, regnum));
memcpy (value_contents_raw (reg_val), raw_buffer,
int realnum;
frame_register (frame, regnum, &optimized, &lval, &addr, &realnum, myaddr);
- /* FIXME: cagney/2002-05-15: This test is just bogus.
-
- It indicates that the target failed to supply a value for a
- register because it was "not available" at this time. Problem
- is, the target still has the register and so get saved_register()
- may be returning a value saved on the stack. */
-
- if (register_cached (regnum) < 0)
- return 0; /* register value not available */
-
return !optimized;
}
/* We must flush the cache, as it is now invalid. */
for (ix = MT_NUM_CPU_REGS; ix != MT_NUM_REGS; ix++)
- set_register_cached (ix, 0);
+ regcache_invalidate (regcache, ix);
}
return index;
case MT_COPRO_PSEUDOREG_REGNUM:
regcache_raw_write (regcache, MT_COPRO_REGNUM, buf);
for (i = MT_NUM_CPU_REGS; i < MT_NUM_REGS; i++)
- set_register_cached (i, 0);
+ regcache_invalidate (regcache, i);
break;
case MT_MAC_REGNUM:
case MT_MAC_PSEUDOREG_REGNUM:
return regcache->register_valid_p[regnum];
}
+void
+regcache_invalidate (struct regcache *regcache, int regnum)
+{
+ gdb_assert (regcache != NULL);
+ gdb_assert (regnum >= 0);
+ gdb_assert (!regcache->readonly_p);
+ gdb_assert (regnum < regcache->descr->nr_raw_registers);
+ regcache->register_valid_p[regnum] = 0;
+}
+
+
/* Global structure containing the current regcache. */
/* FIXME: cagney/2002-05-11: The two global arrays registers[] and
deprecated_register_valid[] currently point into this structure. */
static ptid_t registers_ptid;
-/*
- * FUNCTIONS:
- */
-
-/* REGISTER_CACHED()
-
- Returns 0 if the value is not in the cache (needs fetch).
- >0 if the value is in the cache.
- <0 if the value is permanently unavailable (don't ask again). */
-
-int
-register_cached (int regnum)
-{
- return current_regcache->register_valid_p[regnum];
-}
-
-/* Record that REGNUM's value is cached if STATE is >0, uncached but
- fetchable if STATE is 0, and uncached and unfetchable if STATE is <0. */
-
-void
-set_register_cached (int regnum, int state)
-{
- gdb_assert (regnum >= 0);
- gdb_assert (regnum < current_regcache->descr->nr_raw_registers);
- current_regcache->register_valid_p[regnum] = state;
-}
-
/* Observer for the target_changed event. */
void
alloca (0);
for (i = 0; i < current_regcache->descr->nr_raw_registers; i++)
- set_register_cached (i, 0);
+ regcache_invalidate (current_regcache, i);
}
-/* DEPRECATED_REGISTERS_FETCHED ()
-
- Indicate that all registers have been fetched, so mark them all valid. */
-
-/* FIXME: cagney/2001-12-04: This function is DEPRECATED. The target
- code was blatting the registers[] array and then calling this.
- Since targets should only be using regcache_raw_supply() the need for
- this function/hack is eliminated. */
-
-void
-deprecated_registers_fetched (void)
-{
- int i;
-
- for (i = 0; i < NUM_REGS; i++)
- set_register_cached (i, 1);
- /* Do not assume that the pseudo-regs have also been fetched.
- Fetching all real regs NEVER accounts for pseudo-regs. */
-}
void
regcache_raw_read (struct regcache *regcache, int regnum, gdb_byte *buf)
that a register is in one of the possible states: valid,
undefined, unknown. The last of which isn't yet
possible. */
- gdb_assert (register_cached (regnum));
+ gdb_assert (regcache_valid_p (regcache, regnum));
#endif
}
/* Copy the value directly into the register cache. */
int regcache_valid_p (const struct regcache *regcache, int regnum);
+void regcache_invalidate (struct regcache *regcache, int regnum);
+
/* Transfer a cooked register [0..NUM_REGS+NUM_PSEUDO_REGS). */
void regcache_cooked_read (struct regcache *regcache, int rawnum,
gdb_byte *buf);
extern void regcache_cpy (struct regcache *dest, struct regcache *src);
extern void regcache_cpy_no_passthrough (struct regcache *dest, struct regcache *src);
-/* NOTE: cagney/2002-11-05: This function has been superseeded by
- regcache_raw_supply(). */
-extern void deprecated_registers_fetched (void);
-
-extern int register_cached (int regnum);
-
-extern void set_register_cached (int regnum, int state);
-
extern void registers_changed (void);
int nr_bytes;
memset (buf, 0, MAX_REGISTER_SIZE);
regcache_raw_supply (regcache, regno, buf);
- set_register_cached (regno, -1);
break;
}
if (buf[0] == 'x')
{
regcache_raw_supply (regcache, reg->regnum, NULL);
- set_register_cached (reg->regnum, -1);
return 1;
}
/* The register isn't available, mark it as such (at
the same time setting the value to zero). */
regcache_raw_supply (regcache, r->regnum, NULL);
- set_register_cached (i, -1);
}
else
regcache_raw_supply (regcache, r->regnum,
/* This register is not available. */
regcache_raw_supply (regcache, reg->regnum, NULL);
- set_register_cached (reg->regnum, -1);
return;
}
{
/* This register is not available. */
regcache_raw_supply (regcache, i, NULL);
- set_register_cached (i, -1);
}
}
regcache_raw_write (regcache, BANK_REGNUM, buffer);
for (bregnum = R0_BANK0_REGNUM; bregnum < MACLB_REGNUM; ++bregnum)
- set_register_cached (bregnum, 0);
+ regcache_invalidate (regcache, bregnum);
}
else if (reg_nr >= DR0_REGNUM && reg_nr <= DR_LAST_REGNUM)
{
if (target_has_registers)
{
gdb_byte buf[MAX_REGISTER_SIZE];
-
get_frame_register (frame, regnum, buf);
- /* NOTE: cagney/2003-03-13: This is bogus. It is refering to
- the register cache and not the frame which could have pulled
- the register value off the stack. */
- if (register_cached (regnum) >= 0)
- {
- if (changedp)
- {
- int size = register_size (gdbarch, regnum);
- char *old = (char*) data->value;
- int i;
-
- for (i = 0; i < size; i++)
- if (buf[i] != old[i])
- {
- *changedp = TRUE;
- old[i] = buf[i];
- }
- }
- /* Reformat the data content if the value changed. */
- if (changedp == 0 || *changedp == TRUE)
- tui_register_format (gdbarch, frame, data, regnum);
- ret = TUI_SUCCESS;
- }
+ if (changedp)
+ {
+ int size = register_size (gdbarch, regnum);
+ char *old = (char*) data->value;
+ int i;
+
+ for (i = 0; i < size; i++)
+ if (buf[i] != old[i])
+ {
+ *changedp = TRUE;
+ old[i] = buf[i];
+ }
+ }
+
+ /* Reformat the data content if the value changed. */
+ if (changedp == 0 || *changedp == TRUE)
+ tui_register_format (gdbarch, frame, data, regnum);
+
+ ret = TUI_SUCCESS;
}
return ret;
}