cortex_m: avoid reading and writing non-existent registers
authorTarek BOCHKATI <tarek.bouchkati@gmail.com>
Fri, 12 Feb 2021 20:12:43 +0000 (21:12 +0100)
committerAntonio Borneo <borneo.antonio@gmail.com>
Wed, 10 Mar 2021 21:35:31 +0000 (21:35 +0000)
Change-Id: Iedc24352c8d3444372da06d00fcec9603540f950
Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
Reviewed-on: http://openocd.zylin.com/6059
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/target/armv7m.c
src/target/cortex_m.c
src/target/hla_target.c

index f14ce0d880ae83c490ea9d705c24ee0fdcd42961..101094a971bd7dd79756d03011897a6608ba32d7 100644 (file)
@@ -166,10 +166,10 @@ int armv7m_restore_context(struct target *target)
         * packing of ARMV7M_PMSK_BPRI_FLTMSK_CTRL!
         * See also comments in the register table above */
        for (i = cache->num_regs - 1; i >= 0; i--) {
-               if (cache->reg_list[i].dirty) {
-                       armv7m->arm.write_core_reg(target, &cache->reg_list[i], i,
-                                                  ARM_MODE_ANY, cache->reg_list[i].value);
-               }
+               struct reg *r = &cache->reg_list[i];
+
+               if (r->exist && r->dirty)
+                       armv7m->arm.write_core_reg(target, r, i, ARM_MODE_ANY, r->value);
        }
 
        return ERROR_OK;
index b998b7ac76ae38f963c39593d56d3c4e7bb2a27f..2a973e1f631b43ece9e467c0df0443c3f4dc22ad 100644 (file)
@@ -521,7 +521,7 @@ static int cortex_m_debug_entry(struct target *target)
 
        for (i = 0; i < num_regs; i++) {
                r = &armv7m->arm.core_cache->reg_list[i];
-               if (!r->valid)
+               if (r->exist && !r->valid)
                        arm->read_core_reg(target, r, i, ARM_MODE_ANY);
        }
 
index ca8b5874afd9baba202bba390dc3bb1649d10b80..9ac3442453d4147cced34a7125949ac121d6361a 100644 (file)
@@ -226,7 +226,7 @@ static int adapter_load_context(struct target *target)
        for (int i = 0; i < num_regs; i++) {
 
                struct reg *r = &armv7m->arm.core_cache->reg_list[i];
-               if (!r->valid)
+               if (r->exist && !r->valid)
                        armv7m->arm.read_core_reg(target, r, i, ARM_MODE_ANY);
        }