summaryrefslogtreecommitdiff
path: root/src/target/armv4_5.c
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2010-02-21 14:28:53 -0800
committerDavid Brownell <dbrownell@users.sourceforge.net>2010-02-21 14:28:53 -0800
commitce1feaa7322affd3b979c9fe93dd8f7462ea9eca (patch)
tree60758943030509a05a6dba71e554c8a019243b7f /src/target/armv4_5.c
parentb853b9dbc0ba3d68a501d8badc4491f8108cd11b (diff)
downloadopenocd+libswd-ce1feaa7322affd3b979c9fe93dd8f7462ea9eca.tar.gz
openocd+libswd-ce1feaa7322affd3b979c9fe93dd8f7462ea9eca.tar.bz2
openocd+libswd-ce1feaa7322affd3b979c9fe93dd8f7462ea9eca.tar.xz
openocd+libswd-ce1feaa7322affd3b979c9fe93dd8f7462ea9eca.zip
ARMv7-M: start using "struct arm"
This sets up a few of the core "struct arm" data structures so they can be used with ARMv7-M cores. Specifically, it: - defines new ARM core_modes to match the microcontroller modes (e.g. HANDLER not IRQ, and two types of thread mode); - Establishes a new microcontroller "core_type", which can be used to make sure v7-M (and v6-M) cores are handled right; - adds "struct arm" to "struct armv7m" and arranges for the target_to_armv7m() converter to use it; - sets up the arm.core_cache and arm.cpsr values - makes the Cortex-M3 code maintain arm.map and arm.core_mode. This is currently set up as a parallel data structure, primarily to minimize special cases for the semihosting support with microcontroller profile cores. Later patches can rip out the duplicative ARMv7-M support and start reusing core ARM code. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Diffstat (limited to 'src/target/armv4_5.c')
-rw-r--r--src/target/armv4_5.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c
index c7b73676..8d3a8917 100644
--- a/src/target/armv4_5.c
+++ b/src/target/armv4_5.c
@@ -1426,10 +1426,12 @@ int arm_init_arch_info(struct target *target, struct arm *armv4_5)
armv4_5->target = target;
armv4_5->common_magic = ARM_COMMON_MAGIC;
- arm_set_cpsr(armv4_5, ARM_MODE_USR);
/* core_type may be overridden by subtype logic */
- armv4_5->core_type = ARM_MODE_ANY;
+ if (armv4_5->core_type != ARM_MODE_THREAD) {
+ armv4_5->core_type = ARM_MODE_ANY;
+ arm_set_cpsr(armv4_5, ARM_MODE_USR);
+ }
/* default full_context() has no core-specific optimizations */
if (!armv4_5->full_context && armv4_5->read_core_reg)