/* See regcache.h. */
void
-regcache::transfer_regset (const struct regset *regset,
+regcache::transfer_regset (const struct regset *regset, int regbase,
struct regcache *out_regcache,
int regnum, const gdb_byte *in_buf,
gdb_byte *out_buf, size_t size) const
int regno = map->regno;
int slot_size = map->size;
+ if (regno != REGCACHE_MAP_SKIP)
+ regno += regbase;
+
if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
slot_size = m_descr->sizeof_register[regno];
regcache->supply_regset (regset, regnum, (const gdb_byte *) buf, size);
}
+/* See regcache.h. */
+
void
-regcache::supply_regset (const struct regset *regset,
+regcache::supply_regset (const struct regset *regset, int regbase,
int regnum, const void *buf, size_t size)
{
- transfer_regset (regset, this, regnum, (const gdb_byte *) buf, nullptr, size);
+ transfer_regset (regset, regbase, this, regnum, (const gdb_byte *) buf,
+ nullptr, size);
}
/* Collect register REGNUM from REGCACHE to BUF, using the register
regcache->collect_regset (regset, regnum, (gdb_byte *) buf, size);
}
+/* See regcache.h */
+
void
-regcache::collect_regset (const struct regset *regset,
+regcache::collect_regset (const struct regset *regset, int regbase,
int regnum, void *buf, size_t size) const
{
- transfer_regset (regset, nullptr, regnum, nullptr, (gdb_byte *) buf, size);
+ transfer_regset (regset, regbase, nullptr, regnum, nullptr, (gdb_byte *) buf,
+ size);
}
-/* See regcache.h */
-
bool
regcache_map_supplies (const struct regcache_map_entry *map, int regnum,
struct gdbarch *gdbarch, size_t size)
void cooked_write_part (int regnum, int offset, int len,
const gdb_byte *buf);
- void supply_regset (const struct regset *regset,
+ /* 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'. The valid register numbers in each
+ entry in 'struct regcache_map_entry' are offset by REGBASE. */
+
+ void supply_regset (const struct regset *regset, int regbase,
int regnum, const void *buf, size_t size);
+ void collect_regset (const struct regset *regset, int regbase, int regnum,
+ void *buf, size_t size) const;
+
+ /* Same as the above, but with REGBASE == 0. */
+
+ void supply_regset (const struct regset *regset,
+ int regnum, const void *buf, size_t size)
+ {
+ supply_regset (regset, 0, regnum, buf, size);
+ }
void collect_regset (const struct regset *regset, int regnum,
- void *buf, size_t size) const;
+ void *buf, size_t size) const
+ {
+ collect_regset (regset, 0, regnum, buf, size);
+ }
/* Return REGCACHE's ptid. */
/* Transfer a single or all registers belonging to a certain register
set to or from a buffer. This is the main worker function for
regcache_supply_regset and regcache_collect_regset. */
- void transfer_regset (const struct regset *regset,
+ void transfer_regset (const struct regset *regset, int regbase,
struct regcache *out_regcache,
int regnum, const gdb_byte *in_buf,
gdb_byte *out_buf, size_t size) const;