diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-11-02 18:50:26 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-11-02 18:50:26 +0000 |
commit | 95c3a1758f78b739aef176d73b376321e5b48b8d (patch) | |
tree | 67703af226dc1ef8dc88b5dd99ed2c31a854af53 /src | |
parent | 75fdc23e07225cc8e3488c4faa7ff2a158e98f01 (diff) | |
download | openocd_libswd-95c3a1758f78b739aef176d73b376321e5b48b8d.tar.gz openocd_libswd-95c3a1758f78b739aef176d73b376321e5b48b8d.tar.bz2 openocd_libswd-95c3a1758f78b739aef176d73b376321e5b48b8d.tar.xz openocd_libswd-95c3a1758f78b739aef176d73b376321e5b48b8d.zip |
Rick Altherr <kc8apf@kc8apf.net> - In cortex_m3_resume if debug_execution is non-zero, the PRIMASK and xSPR are modified. The problem is that while the register value is changed, it isn't marked valid or dirty.
git-svn-id: svn://svn.berlios.de/openocd/trunk@1119 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src')
-rw-r--r-- | src/target/cortex_m3.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/target/cortex_m3.c b/src/target/cortex_m3.c index ee9ee257..d97d912c 100644 --- a/src/target/cortex_m3.c +++ b/src/target/cortex_m3.c @@ -567,9 +567,14 @@ int cortex_m3_resume(struct target_s *target, int current, u32 address, int hand * This is probably the same inssue as Cortex-M3 Errata 377493: * C_MASKINTS in parallel with disabled interrupts can cause local faults to not be taken. */ buf_set_u32(armv7m->core_cache->reg_list[ARMV7M_PRIMASK].value, 0, 32, 1); + armv7m->core_cache->reg_list[ARMV7M_PRIMASK].dirty = 1; + armv7m->core_cache->reg_list[ARMV7M_PRIMASK].valid = 1; + /* Make sure we are in Thumb mode */ buf_set_u32(armv7m->core_cache->reg_list[ARMV7M_xPSR].value, 0, 32, buf_get_u32(armv7m->core_cache->reg_list[ARMV7M_xPSR].value, 0, 32) | (1<<24)); + armv7m->core_cache->reg_list[ARMV7M_xPSR].dirty = 1; + armv7m->core_cache->reg_list[ARMV7M_xPSR].valid = 1; } /* current = 1: continue on current pc, otherwise continue at <address> */ |