* regcache.c (register_buffer): Make static.
(regcache_collect): New function.
* regcache.h (register_buffer): Delete declaration.
(regcache_collect): Declare.
* remote.c (store_register_using_P): Rewrite using
regcache_collect.
(remote_store_registers): Ditto.
* go32-nat.c (store_register): Ditto.
+2001-11-15 Andrew Cagney <ac131313@redhat.com>
+
+ * TODO (register_buffer): Delete.
+ * regcache.c (register_buffer): Make static.
+ (regcache_collect): New function.
+ * regcache.h (register_buffer): Delete declaration.
+ (regcache_collect): Declare.
+ * remote.c (store_register_using_P): Rewrite using
+ regcache_collect.
+ (remote_store_registers): Ditto.
+ * go32-nat.c (store_register): Ditto.
+
2001-11-14 Andrew Cagney <ac131313@redhat.com>
* remote.c (struct remote_state): Declare.
register[]
register_valid[]
- register_buffer()
REGISTER_BYTE()
Replaced by, on the target side
supply_register()
store_register (int regno)
{
void *rp;
- void *v = (void *) register_buffer (regno);
+ void *v = alloca (MAX_REGISTER_RAW_SIZE);
+ regcache_collect (regno, v);
if (regno < FP0_REGNUM)
memcpy ((char *) &a_tss + regno_mapping[regno].tss_ofs,
/* If REGNUM >= 0, return a pointer to register REGNUM's cache buffer area,
else return a pointer to the start of the cache buffer. */
-char *
+static char *
register_buffer (int regnum)
{
if (regnum < 0)
#endif
}
+void
+regcache_collect (int regnum, void *buf)
+{
+ memcpy (buf, register_buffer (regnum), REGISTER_RAW_SIZE (regnum));
+}
+
+
/* read_pc, write_pc, read_sp, write_sp, read_fp, write_fp, etc.
Special handling for registers PC, SP, and FP. */
void regcache_read (int rawnum, char *buf);
void regcache_write (int rawnum, char *buf);
+/* Transfer a raw register [0..NUM_REGS) between the regcache and the
+ target. These functions are called by the target in response to a
+ target_fetch_registers() or target_store_registers(). */
+
+extern void supply_register (int regnum, char *val);
+extern void regcache_collect (int regnum, void *buf);
+
+
/* DEPRECATED: Character array containing an image of the inferior
programs' registers for the most recently referenced thread. */
extern void register_changed (int regnum);
-/* DEPRECATED: Functional interface returning pointer into registers[]
- array. */
-
-extern char *register_buffer (int regnum);
-
extern void registers_changed (void);
extern void registers_fetched (void);
extern void write_register_pid (int regnum, CORE_ADDR val, ptid_t ptid);
-extern void supply_register (int regnum, char *val);
-
#endif /* REGCACHE_H */
struct remote_state *rs = get_remote_state ();
/* Try storing a single register. */
char *buf = alloca (rs->remote_packet_size);
- char *regp;
+ char *regp = alloca (MAX_REGISTER_RAW_SIZE);
char *p;
int i;
sprintf (buf, "P%x=", regno);
p = buf + strlen (buf);
- regp = register_buffer (regno);
+ regcache_collect (regno, regp);
bin2hex (regp, p, REGISTER_RAW_SIZE (regno));
remote_send (buf, (rs->remote_packet_size));
remote_store_registers (int regno)
{
struct remote_state *rs = get_remote_state ();
- char *buf = alloca (rs->remote_packet_size);
+ char *buf;
+ char *regs;
int i;
char *p;
- char *regs;
set_thread (PIDGET (inferior_ptid), 1);
}
}
- buf[0] = 'G';
+ /* Extract all the registers in the regcache copying them into a
+ local buffer. */
+ {
+ int i;
+ regs = alloca (REGISTER_BYTES);
+ memset (regs, REGISTER_BYTES, 0);
+ for (i = 0; i < NUM_REGS; i++)
+ {
+ regcache_collect (i, regs + REGISTER_BYTE (i));
+ }
+ }
/* Command describes registers byte by byte,
each byte encoded as two hex characters. */
-
- regs = register_buffer (-1);
- p = buf + 1;
+ buf = alloca (rs->remote_packet_size);
+ p = buf;
+ *p++ = 'G';
/* remote_prepare_to_store insures that register_bytes_found gets set. */
bin2hex (regs, p, register_bytes_found);
remote_send (buf, (rs->remote_packet_size));