Skip to content

Commit

Permalink
target-arm: Fix regression that disabled VFP for ARMv5 CPUs
Browse files Browse the repository at this point in the history
Commit 2c7ffc4 added support for honouring the CPACR coprocessor
access control register bits which may disable access to VFP
and Neon instructions. However it failed to account for the
fact that the CPACR is only present starting from the ARMv6
architecture version, so it accidentally disabled VFP completely
for ARMv5 CPUs like the ARM926. Linux would detect this as
"no VFP present" and probably fall back to its own emulation,
but other guest OSes might crash or misbehave.

This fixes bug LP:1359930.

Reported-by: Jakub Jermar <jakub@jermar.eu>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1408714940-7192-1-git-send-email-peter.maydell@linaro.org
Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
pm215 committed Aug 29, 2014
1 parent 508280f commit ed1f13d
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion target-arm/cpu.h
Expand Up @@ -1255,7 +1255,14 @@ static inline bool arm_singlestep_active(CPUARMState *env)
static inline void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc,
target_ulong *cs_base, int *flags)
{
int fpen = extract32(env->cp15.c1_coproc, 20, 2);
int fpen;

if (arm_feature(env, ARM_FEATURE_V6)) {
fpen = extract32(env->cp15.c1_coproc, 20, 2);
} else {
/* CPACR doesn't exist before v6, so VFP is always accessible */
fpen = 3;
}

if (is_a64(env)) {
*pc = env->pc;
Expand Down

0 comments on commit ed1f13d

Please sign in to comment.