target/arm: Suppress bp for exceptions with more priority
Both single-step and pc alignment faults have priority over breakpoint exceptions. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
7055fe4baf
commit
8dc89f1faa
@ -220,6 +220,7 @@ bool arm_debug_check_breakpoint(CPUState *cs)
|
|||||||
{
|
{
|
||||||
ARMCPU *cpu = ARM_CPU(cs);
|
ARMCPU *cpu = ARM_CPU(cs);
|
||||||
CPUARMState *env = &cpu->env;
|
CPUARMState *env = &cpu->env;
|
||||||
|
target_ulong pc;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -231,6 +232,28 @@ bool arm_debug_check_breakpoint(CPUState *cs)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Single-step exceptions have priority over breakpoint exceptions.
|
||||||
|
* If single-step state is active-pending, suppress the bp.
|
||||||
|
*/
|
||||||
|
if (arm_singlestep_active(env) && !(env->pstate & PSTATE_SS)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PC alignment faults have priority over breakpoint exceptions.
|
||||||
|
*/
|
||||||
|
pc = is_a64(env) ? env->pc : env->regs[15];
|
||||||
|
if ((is_a64(env) || !env->thumb) && (pc & 3) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instruction aborts have priority over breakpoint exceptions.
|
||||||
|
* TODO: We would need to look up the page for PC and verify that
|
||||||
|
* it is present and executable.
|
||||||
|
*/
|
||||||
|
|
||||||
for (n = 0; n < ARRAY_SIZE(env->cpu_breakpoint); n++) {
|
for (n = 0; n < ARRAY_SIZE(env->cpu_breakpoint); n++) {
|
||||||
if (bp_wp_matches(cpu, n, false)) {
|
if (bp_wp_matches(cpu, n, false)) {
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user