[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 07/18] target/arm: Hoist arm_current_el in arm_generate_debug_exc
From: |
Richard Henderson |
Subject: |
[PATCH 07/18] target/arm: Hoist arm_current_el in arm_generate_debug_exceptions |
Date: |
Mon, 23 May 2022 13:47:31 -0700 |
Read this value once in the main function, and pass it
around between the subroutines.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/arm/debug_helper.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/target/arm/debug_helper.c b/target/arm/debug_helper.c
index 20a0e4261a..2bbf065b3a 100644
--- a/target/arm/debug_helper.c
+++ b/target/arm/debug_helper.c
@@ -13,9 +13,8 @@
/* See AArch64.GenerateDebugExceptionsFrom() in ARM ARM pseudocode */
-static bool aa64_generate_debug_exceptions(CPUARMState *env)
+static bool aa64_generate_debug_exceptions(CPUARMState *env, int cur_el)
{
- int cur_el = arm_current_el(env);
int debug_el;
if (cur_el == 3) {
@@ -43,18 +42,16 @@ static bool aa64_generate_debug_exceptions(CPUARMState *env)
return debug_el > cur_el;
}
-static bool aa32_generate_debug_exceptions(CPUARMState *env)
+static bool aa32_generate_debug_exceptions(CPUARMState *env, int cur_el)
{
- int el = arm_current_el(env);
-
- if (el == 0 && arm_el_is_aa64(env, 1)) {
- return aa64_generate_debug_exceptions(env);
+ if (cur_el == 0 && arm_el_is_aa64(env, 1)) {
+ return aa64_generate_debug_exceptions(env, cur_el);
}
if (arm_is_secure(env)) {
int spd;
- if (el == 0 && (env->cp15.sder & 1)) {
+ if (cur_el == 0 && (env->cp15.sder & 1)) {
/*
* SDER.SUIDEN means debug exceptions from Secure EL0
* are always enabled. Otherwise they are controlled by
@@ -82,7 +79,7 @@ static bool aa32_generate_debug_exceptions(CPUARMState *env)
}
}
- return el != 2;
+ return cur_el != 2;
}
/*
@@ -99,10 +96,12 @@ static bool aa32_generate_debug_exceptions(CPUARMState *env)
*/
bool arm_generate_debug_exceptions(CPUARMState *env)
{
+ int cur_el = arm_current_el(env);
+
if (env->aarch64) {
- return aa64_generate_debug_exceptions(env);
+ return aa64_generate_debug_exceptions(env, cur_el);
} else {
- return aa32_generate_debug_exceptions(env);
+ return aa32_generate_debug_exceptions(env, cur_el);
}
}
--
2.34.1
- Re: [PATCH 01/18] target/arm: Allow raise_exception to handle finding target EL, (continued)
[PATCH 02/18] target/arm: Use arm_current_el for simple exceptions, Richard Henderson, 2022/05/23
[PATCH 04/18] target/arm: Move HCR_TGE check into exception_target_el, Richard Henderson, 2022/05/23
[PATCH 05/18] target/arm: Move arm_singlestep_active out of line, Richard Henderson, 2022/05/23
[PATCH 09/18] target/arm: Move exception_bkpt_insn to debug_helper.c, Richard Henderson, 2022/05/23
[PATCH 07/18] target/arm: Hoist arm_current_el in arm_generate_debug_exceptions,
Richard Henderson <=
[PATCH 11/18] target/arm: Move arm_debug_target_el to internals.h, Richard Henderson, 2022/05/23
[PATCH 10/18] target/arm: Move arm_debug_exception_fsr to debug_helper.c, Richard Henderson, 2022/05/23
[PATCH 06/18] target/arm: Move arm_generate_debug_exceptions out of line, Richard Henderson, 2022/05/23
[PATCH 14/18] target/arm: Mark exception helpers as noreturn, Richard Henderson, 2022/05/23
[PATCH 08/18] target/arm: Use is_a64 in arm_generate_debug_exceptions, Richard Henderson, 2022/05/23