mirror of https://github.com/xqemu/xqemu.git
target-arm: Set DBGDSCR.MOE for debug exceptions taken to AArch32
For debug exceptions taken to AArch32 we have to set the DBGDSCR.MOE (Method Of Entry) bits; we can identify the kind of debug exception from the information in exception.syndrome. Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
3ff6fc9148
commit
16a906fd6e
|
@ -3629,11 +3629,37 @@ void arm_cpu_do_interrupt(CPUState *cs)
|
||||||
uint32_t mask;
|
uint32_t mask;
|
||||||
int new_mode;
|
int new_mode;
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
|
uint32_t moe;
|
||||||
|
|
||||||
assert(!IS_M(env));
|
assert(!IS_M(env));
|
||||||
|
|
||||||
arm_log_exception(cs->exception_index);
|
arm_log_exception(cs->exception_index);
|
||||||
|
|
||||||
|
/* If this is a debug exception we must update the DBGDSCR.MOE bits */
|
||||||
|
switch (env->exception.syndrome >> ARM_EL_EC_SHIFT) {
|
||||||
|
case EC_BREAKPOINT:
|
||||||
|
case EC_BREAKPOINT_SAME_EL:
|
||||||
|
moe = 1;
|
||||||
|
break;
|
||||||
|
case EC_WATCHPOINT:
|
||||||
|
case EC_WATCHPOINT_SAME_EL:
|
||||||
|
moe = 10;
|
||||||
|
break;
|
||||||
|
case EC_AA32_BKPT:
|
||||||
|
moe = 3;
|
||||||
|
break;
|
||||||
|
case EC_VECTORCATCH:
|
||||||
|
moe = 5;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
moe = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (moe) {
|
||||||
|
env->cp15.mdscr_el1 = deposit64(env->cp15.mdscr_el1, 2, 4, moe);
|
||||||
|
}
|
||||||
|
|
||||||
/* TODO: Vectored interrupt controller. */
|
/* TODO: Vectored interrupt controller. */
|
||||||
switch (cs->exception_index) {
|
switch (cs->exception_index) {
|
||||||
case EXCP_UDEF:
|
case EXCP_UDEF:
|
||||||
|
|
Loading…
Reference in New Issue