current_regcache->raw_register_valid_p[regnum] = state;
}
-/* REGISTER_CHANGED
-
- invalidate a single register REGNUM in the cache */
-void
-register_changed (int regnum)
-{
- set_register_cached (regnum, 0);
-}
-
/* If REGNUM >= 0, return a pointer to register REGNUM's cache buffer area,
else return a pointer to the start of the cache buffer. */
return descr->register_offset[regnum];
}
-static void
-cooked_xfer_using_offset_hack (struct regcache *regcache,
- int buf_start, int buf_len, void *in_b,
- const void *out_b)
-{
- struct regcache_descr *descr = regcache->descr;
- struct gdbarch *gdbarch = descr->gdbarch;
- bfd_byte *in_buf = in_b;
- const bfd_byte *out_buf = out_b;
- int buf_end = buf_start + buf_len;
- int regnum;
- char *reg_buf = alloca (descr->max_register_size);
-
- /* NOTE: cagney/2002-08-17: This code assumes that the register
- offsets are strictly increasing and do not overlap. If this
- isn't the case then the bug is in the target architecture and NOT
- this code. */
-
- /* NOTE: cagney/2002-08-17: This code assumes that only the
- registers covered by BUF_START:BUF_LEN should be transfered. If,
- for some reason, there is a gap between two registers, then that
- gap isn't transfered. (The gap shouldn't be there but that is
- another story.) */
-
- /* Iterate through all registers looking for those that lie within
- BUF_START:BUF_LEN. */
-
- for (regnum = 0; regnum < descr->nr_cooked_registers; regnum++)
- {
- /* The register's location. */
- int reg_start = descr->register_offset[regnum];
- int reg_len = descr->sizeof_register[regnum];
- int reg_end = reg_start + reg_len;
-
- /* The START, END and LEN that falls within the current
- register. */
- int xfer_start;
- int xfer_end;
- int xfer_len;
-
- /* start = max (reg_start, buf_start) */
- if (reg_start > buf_start)
- xfer_start = reg_start;
- else
- xfer_start = buf_start;
-
- /* end = min (reg_end, buf_end) */
- if (reg_end < buf_end)
- xfer_end = reg_end;
- else
- xfer_end = buf_end;
-
- /* The number of bytes to transfer. If there isn't anything to
- transfer (the end is before the start) this will be -ve. */
- xfer_len = xfer_end - xfer_start;
-
- if (xfer_len > 0)
- regcache_xfer_part (regcache, regnum, xfer_start - reg_start,
- xfer_len, in_b, out_b, regcache_cooked_read,
- regcache_cooked_write);
- }
-}
-
-void
-regcache_cooked_read_using_offset_hack (struct regcache *regcache,
- int buf_start, int buf_len, void *b)
-{
- cooked_xfer_using_offset_hack (regcache, buf_start, buf_len, b, NULL);
-}
-
-void
-regcache_cooked_write_using_offset_hack (struct regcache *regcache,
- int buf_start, int buf_len,
- const void *b)
-{
- cooked_xfer_using_offset_hack (regcache, buf_start, buf_len, NULL, b);
-}
-
/* Return the contents of register REGNUM as an unsigned integer. */
ULONGEST
/* The register's ``offset''.
- NOTE: cagney/2002-08-17: The ``struct value'' and expression
- evaluator treat the register cache as a large liner buffer.
- Instead of reading/writing a register using its register number,
- the code read/writes registers by specifying their offset into the
- buffer and a number of bytes. The code also assumes that these
- byte read/writes can cross register boundaries, adjacent registers
- treated as a contiguous set of bytes.
-
- The below map that model onto the real register cache. New code
- should go out of their way to avoid using these interfaces.
-
- FIXME: cagney/2002-08-17: The ``struct value'' and expression
- evaluator should be fixed. Instead of using the { offset, length }
- pair to describe a value within one or more registers, the code
- should use a chain of { regnum, offset, len } tripples. */
+ FIXME: cagney/2002-11-07: The get_saved_register() function, when
+ specifying the real location of a register, does so using that
+ registers offset in the register cache. That offset is then used
+ by valops.c to determine the location of the register. The code
+ should instead use the register's number and a location expression
+ to describe a value spread across multiple registers or memory. */
extern int register_offset_hack (struct gdbarch *gdbarch, int regnum);
-extern void regcache_cooked_read_using_offset_hack (struct regcache *regcache,
- int offset, int len,
- void *buf);
-extern void regcache_cooked_write_using_offset_hack (struct regcache *regcache,
- int offset, int len,
- const void *buf);
/* The type of a register. This function is slightly more efficient
extern void set_register_cached (int regnum, int state);
-extern void register_changed (int regnum);
-
extern void registers_changed (void);