aboutsummaryrefslogtreecommitdiff
path: root/gdb/regcache.h
diff options
context:
space:
mode:
authorAndreas Arnez <arnez@linux.vnet.ibm.com>2014-07-22 10:28:32 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2014-08-07 17:31:48 +0200
commit0b3092721e5cfa1697f1dafe81efefdbb0236f21 (patch)
treeadbc0263825317a4c1320db8a26da6e3cd8e6ec1 /gdb/regcache.h
parent7fefa8d7d6359ec905dbc59bb4e616f386ea2e3d (diff)
downloadgdb-0b3092721e5cfa1697f1dafe81efefdbb0236f21.zip
gdb-0b3092721e5cfa1697f1dafe81efefdbb0236f21.tar.gz
gdb-0b3092721e5cfa1697f1dafe81efefdbb0236f21.tar.bz2
regcache: Add functions suitable for regset_supply/collect.
These functions are intended to suit all targets that don't require too special logic in their regset supply/collect methods. Having such generic functions helps reducing target-specific complexity.
Diffstat (limited to 'gdb/regcache.h')
-rw-r--r--gdb/regcache.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/gdb/regcache.h b/gdb/regcache.h
index 8423f57..0361f22 100644
--- a/gdb/regcache.h
+++ b/gdb/regcache.h
@@ -147,6 +147,51 @@ extern void regcache_raw_supply (struct regcache *regcache,
extern void regcache_raw_collect (const struct regcache *regcache,
int regnum, void *buf);
+/* Mapping between register numbers and offsets in a buffer, for use
+ in the '*regset' functions below. In an array of
+ 'regcache_map_entry' each element is interpreted like follows:
+
+ - If 'regno' is a register number: Map register 'regno' to the
+ current offset (starting with 0) and increase the current offset
+ by 'size' (or the register's size, if 'size' is zero). Repeat
+ this with consecutive register numbers up to 'regno+count-1'.
+
+ - If 'regno' is REGCACHE_MAP_SKIP: Add 'count*size' to the current
+ offset.
+
+ - If count=0: End of the map. */
+
+struct regcache_map_entry
+{
+ int count;
+ int regno;
+ int size;
+};
+
+/* Special value for the 'regno' field in the struct above. */
+
+enum
+ {
+ REGCACHE_MAP_SKIP = -1,
+ };
+
+/* Transfer a set of registers (as described by REGSET) between
+ REGCACHE and BUF. If REGNUM == -1, transfer all registers
+ belonging to the regset, otherwise just the register numbered
+ REGNUM. The REGSET's 'regmap' field must point to an array of
+ 'struct regcache_map_entry'.
+
+ These functions are suitable for the 'regset_supply' and
+ 'regset_collect' fields in a regset structure. */
+
+extern void regcache_supply_regset (const struct regset *regset,
+ struct regcache *regcache,
+ int regnum, const void *buf,
+ size_t size);
+extern void regcache_collect_regset (const struct regset *regset,
+ const struct regcache *regcache,
+ int regnum, void *buf, size_t size);
+
/* The type of a register. This function is slightly more efficient
then its gdbarch vector counterpart since it returns a precomputed