mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
target-arm: Override do_interrupt for ARMv7-M profile
Enable ARMCPUInfo to specify a custom class_init functions. Introduce arm_v7m_class_init() and use it for "cortex-m3" model. Instead of forwarding from arm_cpu_do_interrupt() to do_interrupt_v7m(), override CPUClass::do_interrupt with arm_v7m_cpu_do_interrupt() in arm_v7m_class_init(). Acked-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
97a8ea5a3a
commit
e6f010cc27
3 changed files with 19 additions and 6 deletions
|
@ -1725,8 +1725,10 @@ static void do_v7m_exception_exit(CPUARMState *env)
|
|||
pointer. */
|
||||
}
|
||||
|
||||
static void do_interrupt_v7m(CPUARMState *env)
|
||||
void arm_v7m_cpu_do_interrupt(CPUState *cs)
|
||||
{
|
||||
ARMCPU *cpu = ARM_CPU(cs);
|
||||
CPUARMState *env = &cpu->env;
|
||||
uint32_t xpsr = xpsr_read(env);
|
||||
uint32_t lr;
|
||||
uint32_t addr;
|
||||
|
@ -1811,10 +1813,8 @@ void arm_cpu_do_interrupt(CPUState *cs)
|
|||
int new_mode;
|
||||
uint32_t offset;
|
||||
|
||||
if (IS_M(env)) {
|
||||
do_interrupt_v7m(env);
|
||||
return;
|
||||
}
|
||||
assert(!IS_M(env));
|
||||
|
||||
/* TODO: Vectored interrupt controller. */
|
||||
switch (env->exception_index) {
|
||||
case EXCP_UDEF:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue