aboutsummaryrefslogtreecommitdiff
path: root/src/target/cortex_m.c
diff options
context:
space:
mode:
authorTomas Vanek <vanekt@fbl.cz>2020-10-22 20:36:30 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2020-11-15 21:09:08 +0000
commitb1f488ec1ea4c8b5410026610c621f85b5ff17f3 (patch)
tree013edd9d573169f008385c0b799fc6e85a9aa9dd /src/target/cortex_m.c
parent608299484d52a60082bb7ff5bcde5249f9a3a1de (diff)
downloadriscv-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.c12
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;