aboutsummaryrefslogtreecommitdiff
path: root/src/target/register.c
diff options
context:
space:
mode:
authorSteven Stallion <stallion@squareup.com>2017-05-01 14:38:35 -0500
committerMatthias Welwarsky <matthias@welwarsky.de>2018-10-16 11:57:53 +0100
commitb5964191f0d2fc3ace607af001df3d57cbfbaf2b (patch)
tree67ae56c1524f8816903126ff5b89b17c991d8d39 /src/target/register.c
parent06589d2de48556f5216e3e671e656f4fd9069b43 (diff)
downloadriscv-openocd-b5964191f0d2fc3ace607af001df3d57cbfbaf2b.zip
riscv-openocd-b5964191f0d2fc3ace607af001df3d57cbfbaf2b.tar.gz
riscv-openocd-b5964191f0d2fc3ace607af001df3d57cbfbaf2b.tar.bz2
register: support non-existent registers
This patch fixes a number of bugs caused by incomplete support for non-existent registers. This is needed for targets that provide optional registers or non-linear register numbers. Change-Id: I216196e0051f28887a2c3da410959382369eed80 Signed-off-by: Steven Stallion <stallion@squareup.com> Reviewed-on: http://openocd.zylin.com/4113 Tested-by: jenkins Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
Diffstat (limited to 'src/target/register.c')
-rw-r--r--src/target/register.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/target/register.c b/src/target/register.c
index 1d63e12..8506414 100644
--- a/src/target/register.c
+++ b/src/target/register.c
@@ -44,6 +44,8 @@ struct reg *register_get_by_name(struct reg_cache *first,
while (cache) {
for (i = 0; i < cache->num_regs; i++) {
+ if (cache->reg_list[i].exist == false)
+ continue;
if (strcmp(cache->reg_list[i].name, name) == 0)
return &(cache->reg_list[i]);
}
@@ -84,6 +86,8 @@ void register_cache_invalidate(struct reg_cache *cache)
struct reg *reg = cache->reg_list;
for (unsigned n = cache->num_regs; n != 0; n--, reg++) {
+ if (reg->exist == false)
+ continue;
reg->valid = 0;
reg->dirty = 0;
}