Currently we have a class hierarchy for Arm CPUs where all the 32-bit CPUs (including M-profile) inherit directly from TYPE_ARM_CPU, but the 64-bit CPUs inherit from TYPE_AARCH64_CPU, which is a subclass of TYPE_ARM_CPU. This subclass does essentially two things: * it sets up fields and methods for the gdbstub so that the gdbstub presents an AArch64 CPU to gdb rather than an AArch32 one * it defines the 'aarch64' CPU property which you can use with KVM to disable AArch64 and create a 32-bit VM (with "-cpu host,aarch64=off")
This is a bit weird, because the 32-bit CPU you create with KVM and aarch64=off is still a subclass of TYPE_AARCH64_CPU. It also still presents gdb with an AArch64 CPU, so you effectively can't use the gdbstub with this kind of VM. This patchseries removes TYPE_AARCH64_CPU so that all CPUs, both AArch32 and AArch64, directly inherit from TYPE_ARM_CPU. This lets us fix the bug with gdbstub and "aarch64=off". In this version I fix the bug that Philippe found where we were calling arm_gdbstub_is_aarch64() too early, before the object had been created and the "is it AArch64 or not?" question resolved. This is basically moving the gdb_init_cpu() call into cpu_exec_realizefn(), but we need to do a little adjustment of microblaze for that to work. Version 2 of the patchset: * patches 1-5 from v1 are already upstream * new patches 1-3 here delay the call to gdb_init_cpu() so that it is done only after the CPU object is at least inited and we definitely know the final value of the 'aarch64' property * patches 4-7 are the old 6-9 and have been reviewed thanks -- PMM Peter Maydell (7): target/microblaze: Use 'obj' in DEVICE() casts in mb_cpu_initfn() target/microblaze: Delay gdb_register_coprocessor() to realize hw/core/cpu-common: Don't init gdbstub until cpu_exec_realizefn() target/arm: Present AArch64 gdbstub based on ARM_FEATURE_AARCH64 target/arm: Move aarch64 CPU property code to TYPE_ARM_CPU target/arm/kvm: don't check TYPE_AARCH64_CPU target/arm: Remove TYPE_AARCH64_CPU target/arm/cpu-qom.h | 5 --- target/arm/cpu.h | 4 -- target/arm/internals.h | 3 +- hw/core/cpu-common.c | 3 +- target/arm/cpu.c | 36 ++++++++++++++++++ target/arm/cpu64.c | 82 +---------------------------------------- target/arm/kvm.c | 3 +- target/arm/tcg/cpu64.c | 2 +- target/microblaze/cpu.c | 22 +++++------ 9 files changed, 52 insertions(+), 108 deletions(-) -- 2.43.0