diff options
author | John Baldwin <jhb@FreeBSD.org> | 2021-07-13 08:16:12 -0700 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2021-07-13 08:16:12 -0700 |
commit | 30a696c543419bb9cadb844f9d2e2d6ecc66d3b5 (patch) | |
tree | b5cf1f5c88247850a01aca413ccefc7bb03fcbc0 /gdb/regcache.c | |
parent | 3a76f8f489428bada97c9dea2145448a3e0f7135 (diff) | |
download | fsf-binutils-gdb-30a696c543419bb9cadb844f9d2e2d6ecc66d3b5.zip fsf-binutils-gdb-30a696c543419bb9cadb844f9d2e2d6ecc66d3b5.tar.gz fsf-binutils-gdb-30a696c543419bb9cadb844f9d2e2d6ecc66d3b5.tar.bz2 |
Add regcache_map_supplies helper routine.
This helper can be used in the fetch_registers and store_registers
target methods to determine if a register set includes a specific
register.
Diffstat (limited to 'gdb/regcache.c')
-rw-r--r-- | gdb/regcache.c | 27 |
1 files changed, 27 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 |