target/arm: Factor out code to calculate FSR for debug exceptions
commit81621d9ab8a0f07956e67850b15eebf6d6992eec
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 23 Mar 2018 18:26:46 +0000 (23 18:26 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 23 Mar 2018 18:26:46 +0000 (23 18:26 +0000)
treec16006016c742900766a69f3c0f35a900c3baf63
parentc900a2e62dd6dde11c8f5249b638caad05bb15be
target/arm: Factor out code to calculate FSR for debug exceptions

When a debug exception is taken to AArch32, it appears as a Prefetch
Abort, and the Instruction Fault Status Register (IFSR) must be set.
The IFSR has two possible formats, depending on whether LPAE is in
use. Factor out the code in arm_debug_excp_handler() which picks
an FSR value into its own utility function, update it to use
arm_fi_to_lfsc() and arm_fi_to_sfsc() rather than hard-coded constants,
and use the correct condition to select long or short format.

In particular this fixes a bug where we could select the short
format because we're at EL0 and the EL1 translation regime is
not using LPAE, but then route the debug exception to EL2 because
of MDCR_EL2.TDE and hand EL2 the wrong format FSR.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20180320134114.30418-3-peter.maydell@linaro.org
target/arm/internals.h
target/arm/op_helper.c