On 11/8/18 5:33 PM, Alex Bennée wrote:
> The test was incomplete and incorrectly caused debug exceptions to be
> generated when returning to EL2 after a failed attempt to single-step
> an EL1 instruction. Fix this while cleaning up the function a little.
>
> Signed-off-by: Alex Bennée <[email protected]>
> ---
> target/arm/cpu.h | 27 +++++++++++++++++----------
> 1 file changed, 17 insertions(+), 10 deletions(-)
>
> diff --git a/target/arm/cpu.h b/target/arm/cpu.h
> index 1efff21a18..a6d8eb14f6 100644
> --- a/target/arm/cpu.h
> +++ b/target/arm/cpu.h
> @@ -2764,23 +2764,33 @@ static inline bool arm_v7m_csselr_razwi(ARMCPU *cpu)
> return (cpu->clidr & R_V7M_CLIDR_CTYPE_ALL_MASK) != 0;
> }
>
> +/* See AArch64.GenerateDebugExceptionsFrom() in ARM ARM pseudocode */
> static inline bool aa64_generate_debug_exceptions(CPUARMState *env)
> {
> + int cur_el = arm_current_el(env);
> + int debug_el;
> +
> if (arm_is_secure(env)) {
> /* MDCR_EL3.SDD disables debug events from Secure state */
> if (extract32(env->cp15.mdcr_el3, 16, 1) != 0
> - || arm_current_el(env) == 3) {
> + || cur_el == 3) {
Hmm. Perhaps better as
if (cur_el == 3) {
return false;
}
/* MDCR_EL3.SDD disables... */
if (arm_is_secure_below_el3(env)
&& extract32(env->cp15.mdcr_el3, 16, 1)) {
return false;
}
and of course more symbols would be nice, but it's not wrong as-is.
r~