This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[patch] Add regcache cooked read/write
- From: Andrew Cagney <ac131313 at ges dot redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Fri, 02 Aug 2002 14:06:48 -0400
- Subject: [patch] Add regcache cooked read/write
Hello,
The attached adds the long awaited cooked register read/write functions.
committed,
Andrew
2002-08-02 Andrew Cagney <ac131313@redhat.com>
* regcache.c (regcache_cooked_read): New function.
(regcache_cooked_write): New function.
(read_register_gen): Rewrite using regcache_cooked_read.
(write_register_gen): Rewrite using regcache_cooked_write.
* regcache.h (regcache_cooked_read, regcache_cooked_write):
Declare.
Index: gdb/regcache.c
===================================================================
RCS file: /cvs/src/src/gdb/regcache.c,v
retrieving revision 1.44
diff -c -r1.44 regcache.c
*** gdb/regcache.c 2 Aug 2002 14:48:19 -0000 1.44
--- gdb/regcache.c 2 Aug 2002 14:56:58 -0000
***************
*** 719,734 ****
legacy_read_register_gen (regnum, buf);
return;
}
gdb_assert (regnum >= 0);
! gdb_assert (regnum < current_regcache->descr->nr_cooked_registers);
! if (regnum < current_regcache->descr->nr_raw_registers)
! regcache_raw_read (current_regcache, regnum, buf);
else
! gdbarch_pseudo_register_read (current_gdbarch, current_regcache,
! regnum, buf);
}
-
/* Write register REGNUM at MYADDR to the target. MYADDR points at
REGISTER_RAW_BYTES(REGNUM), which must be in target byte-order. */
--- 719,739 ----
legacy_read_register_gen (regnum, buf);
return;
}
+ regcache_cooked_read (current_regcache, regnum, buf);
+ }
+
+ void
+ regcache_cooked_read (struct regcache *regcache, int rawnum, void *buf)
+ {
gdb_assert (regnum >= 0);
! gdb_assert (regnum < regcache->descr->nr_cooked_registers);
! if (regnum < regcache->descr->nr_raw_registers)
! regcache_raw_read (regcache, regnum, buf);
else
! gdbarch_pseudo_register_read (regcache->descr->gdbarch, regcache,
! regnum, buf);
}
/* Write register REGNUM at MYADDR to the target. MYADDR points at
REGISTER_RAW_BYTES(REGNUM), which must be in target byte-order. */
***************
*** 834,845 ****
legacy_write_register_gen (regnum, buf);
return;
}
gdb_assert (regnum >= 0);
! gdb_assert (regnum < current_regcache->descr->nr_cooked_registers);
! if (regnum < current_regcache->descr->nr_raw_registers)
! regcache_raw_write (current_regcache, regnum, buf);
else
! gdbarch_pseudo_register_write (current_gdbarch, current_regcache,
regnum, buf);
}
--- 839,857 ----
legacy_write_register_gen (regnum, buf);
return;
}
+ regcache_cooked_write (current_regcache, regnum, buf);
+ }
+
+ void
+ regcache_cooked_write (struct regcache *regcache, int rawnum,
+ const void *buf)
+ {
gdb_assert (regnum >= 0);
! gdb_assert (regnum < regcache->descr->nr_cooked_registers);
! if (regnum < regcache->descr->nr_raw_registers)
! regcache_raw_write (regcache, regnum, buf);
else
! gdbarch_pseudo_register_write (regcache->descr->gdbarch, regcache,
regnum, buf);
}
Index: gdb/regcache.h
===================================================================
RCS file: /cvs/src/src/gdb/regcache.h,v
retrieving revision 1.11
diff -c -r1.11 regcache.h
*** gdb/regcache.h 24 Jul 2002 19:43:43 -0000 1.11
--- gdb/regcache.h 2 Aug 2002 14:56:58 -0000
***************
*** 41,46 ****
--- 41,51 ----
int regcache_valid_p (struct regcache *regcache, int regnum);
CORE_ADDR regcache_raw_read_as_address (struct regcache *regcache, int rawnum);
+ /* Transfer a cooked register [0..NUM_REGS+NUM_PSEUDO_REGS). */
+ void regcache_cooked_read (struct regcache *regcache, int rawnum, void *buf);
+ void regcache_cooked_write (struct regcache *regcache, int rawnum,
+ const void *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(). */