diff options
-rw-r--r-- | gdb/regcache.c | 27 | ||||
-rw-r--r-- | gdb/regcache.h | 9 |
2 files changed, 36 insertions, 0 deletions
diff --git a/gdb/regcache.c b/gdb/regcache.c index ac44d71..672da05 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -1264,6 +1264,33 @@ regcache::collect_regset (const struct regset *regset, transfer_regset (regset, 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) +{ + int offs = 0, count; + + for (; (count = map->count) != 0; map++) + { + int regno = map->regno; + int slot_size = map->size; + + if (slot_size == 0 && regno != REGCACHE_MAP_SKIP) + slot_size = register_size (gdbarch, regno); + + if (regno != REGCACHE_MAP_SKIP && regnum >= regno + && regnum < regno + count) + return offs + (regnum - regno + 1) * slot_size <= size; + + offs += count * slot_size; + if (offs >= size) + return false; + } + return false; +} + /* See gdbsupport/common-regcache.h. */ bool diff --git a/gdb/regcache.h b/gdb/regcache.h index ee254f3..cd2e441 100644 --- a/gdb/regcache.h +++ b/gdb/regcache.h @@ -150,6 +150,15 @@ extern void regcache_collect_regset (const struct regset *regset, int regnum, void *buf, size_t size); +/* Return true if a set of registers contains the value of the + register numbered REGNUM. The size of the set of registers is + given in SIZE, and the layout of the set of registers is described + by MAP. */ + +extern bool regcache_map_supplies (const struct regcache_map_entry *map, + int regnum, struct gdbarch *gdbarch, + size_t size); + /* The type of a register. This function is slightly more efficient then its gdbarch vector counterpart since it returns a precomputed value stored in a table. */ |