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>
This commit is contained in:
David Brownell
2010-02-21 14:28:53 -08:00
parent b853b9dbc0
commit ce1feaa732
5 changed files with 74 additions and 9 deletions

View File

@@ -100,6 +100,8 @@ enum
struct armv7m_common
{
struct arm arm;
int common_magic;
struct reg_cache *core_cache;
enum armv7m_mode core_mode;
@@ -128,7 +130,7 @@ struct armv7m_common
static inline struct armv7m_common *
target_to_armv7m(struct target *target)
{
return target->arch_info;
return container_of(target->arch_info, struct armv7m_common, arm);
}
static inline bool is_armv7m(struct armv7m_common *armv7m)