target/armv7m, cortex_m: fix misleading comments
authorTomas Vanek <vanekt@fbl.cz>
Thu, 22 Oct 2020 18:36:30 +0000 (20:36 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sun, 15 Nov 2020 21:09:08 +0000 (21:09 +0000)
Change-Id: I4fea29f07f4d3b8b2578b538ef0eef5f1eea285f
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: http://openocd.zylin.com/5876
Tested-by: jenkins
Reviewed-by: Christopher Head <chead@zaber.com>
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/target/armv7m.c
src/target/cortex_m.c

index 13370b54b954600b56afbc214921fc1f003f98a3..f14ce0d880ae83c490ea9d705c24ee0fdcd42961 100644 (file)
@@ -493,8 +493,7 @@ int armv7m_start_algorithm(struct target *target,
                return ERROR_TARGET_NOT_HALTED;
        }
 
-       /* refresh core register cache
-        * Not needed if core register cache is always consistent with target process state */
+       /* Store all non-debug execution registers to armv7m_algorithm_info context */
        for (unsigned i = 0; i < armv7m->arm.core_cache->num_regs; i++) {
 
                armv7m_algorithm_info->context[i] = buf_get_u32(
index fc72c0ed0793a83de7778d9b8619d5e072436472..94cf824893e732edbc856f612b0fa4424c0ba8ad 100644 (file)
@@ -817,15 +817,19 @@ static int cortex_m_resume(struct target *target, int current,
                 * in parallel with disabled interrupts can cause local faults
                 * to not be taken.
                 *
-                * REVISIT this clearly breaks non-debug execution, since the
-                * PRIMASK register state isn't saved/restored...  workaround
-                * by never resuming app code after debug execution.
+                * This breaks non-debug (application) execution if not
+                * called from armv7m_start_algorithm() which saves registers.
                 */
                buf_set_u32(r->value, 0, 1, 1);
                r->dirty = true;
                r->valid = true;
 
-               /* Make sure we are in Thumb mode */
+               /* Make sure we are in Thumb mode, set xPSR.T bit */
+               /* armv7m_start_algorithm() initializes entire xPSR register.
+                * This duplicity handles the case when cortex_m_resume()
+                * is used with the debug_execution flag directly,
+                * not called through armv7m_start_algorithm().
+                */
                r = armv7m->arm.cpsr;
                buf_set_u32(r->value, 24, 1, 1);
                r->dirty = true;