target-arm: Log bad system register accesses with LOG_UNIMP
Log guest attempts to access unimplemented system registers via the LOG_UNIMP reporting mechanism (for both the 32 bit and 64 bit instruction sets). This is particularly useful for debugging problems where the guest is trying to use a system register that QEMU doesn't implement. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
This commit is contained in:
parent
1456364ff0
commit
626187d86b
@ -1177,7 +1177,12 @@ static void handle_sys(DisasContext *s, uint32_t insn, bool isread,
|
||||
crn, crm, op0, op1, op2));
|
||||
|
||||
if (!ri) {
|
||||
/* Unknown register */
|
||||
/* Unknown register; this might be a guest error or a QEMU
|
||||
* unimplemented feature.
|
||||
*/
|
||||
qemu_log_mask(LOG_UNIMP, "%s access to unsupported AArch64 "
|
||||
"system register op0:%d op1:%d crn:%d crm:%d op2:%d\n",
|
||||
isread ? "read" : "write", op0, op1, crn, crm, op2);
|
||||
unallocated_encoding(s);
|
||||
return;
|
||||
}
|
||||
|
@ -6962,6 +6962,19 @@ static int disas_coproc_insn(CPUARMState * env, DisasContext *s, uint32_t insn)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Unknown register; this might be a guest error or a QEMU
|
||||
* unimplemented feature.
|
||||
*/
|
||||
if (is64) {
|
||||
qemu_log_mask(LOG_UNIMP, "%s access to unsupported AArch32 "
|
||||
"64 bit system register cp:%d opc1: %d crm:%d\n",
|
||||
isread ? "read" : "write", cpnum, opc1, crm);
|
||||
} else {
|
||||
qemu_log_mask(LOG_UNIMP, "%s access to unsupported AArch32 "
|
||||
"system register cp:%d opc1:%d crn:%d crm:%d opc2:%d\n",
|
||||
isread ? "read" : "write", cpnum, opc1, crn, crm, opc2);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user