diff options
author | Tomas Vanek <vanekt@fbl.cz> | 2020-10-22 20:36:30 +0200 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2020-11-15 21:09:08 +0000 |
commit | b1f488ec1ea4c8b5410026610c621f85b5ff17f3 (patch) | |
tree | 013edd9d573169f008385c0b799fc6e85a9aa9dd /src/target/cortex_m.c | |
parent | 608299484d52a60082bb7ff5bcde5249f9a3a1de (diff) | |
download | riscv-openocd-b1f488ec1ea4c8b5410026610c621f85b5ff17f3.zip riscv-openocd-b1f488ec1ea4c8b5410026610c621f85b5ff17f3.tar.gz riscv-openocd-b1f488ec1ea4c8b5410026610c621f85b5ff17f3.tar.bz2 |
target/armv7m, cortex_m: fix misleading comments
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>
Diffstat (limited to 'src/target/cortex_m.c')
-rw-r--r-- | src/target/cortex_m.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index fc72c0e..94cf824 100644 --- a/src/target/cortex_m.c +++ b/src/target/cortex_m.c @@ -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; |