mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
cpu: Convert CpuInfo into flat union
The CpuInfo struct is used only by the 'query-cpus' output command, so we are free to modify it by adding fields (clients are already supposed to ignore unknown output fields), or by changing optional members to mandatory, while still keeping QMP wire compatibility with older versions of qemu. When qapi type CpuInfo was originally created for 0.14, we had no notion of a flat union, and instead just listed a bunch of optional fields with documentation about the mutually-exclusive choice of which instruction pointer field(s) would be provided for a given architecture. But now that we have flat unions and introspection, it is better to segregate off which fields will be provided according to the actual architecture. With this in place, we no longer need the fields to be optional, because the choice of the new 'arch' discriminator serves that role. This has an additional benefit: the old all-in-one struct was the only place in the code base that had a case-sensitive naming of members 'pc' vs. 'PC'. Separating these spellings into different branches of the flat union will allow us to add restrictions against future case-insensitive collisions, since that is generally a poor interface practice. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1447836791-369-25-git-send-email-eblake@redhat.com> [Spelling of CPUInfo{SPARC,PPC,MIPS} fixed] Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
04e0639d4e
commit
86f4b6871c
4 changed files with 143 additions and 42 deletions
30
hmp.c
30
hmp.c
|
@ -311,17 +311,25 @@ void hmp_info_cpus(Monitor *mon, const QDict *qdict)
|
|||
|
||||
monitor_printf(mon, "%c CPU #%" PRId64 ":", active, cpu->value->CPU);
|
||||
|
||||
if (cpu->value->has_pc) {
|
||||
monitor_printf(mon, " pc=0x%016" PRIx64, cpu->value->pc);
|
||||
}
|
||||
if (cpu->value->has_nip) {
|
||||
monitor_printf(mon, " nip=0x%016" PRIx64, cpu->value->nip);
|
||||
}
|
||||
if (cpu->value->has_npc) {
|
||||
monitor_printf(mon, " npc=0x%016" PRIx64, cpu->value->npc);
|
||||
}
|
||||
if (cpu->value->has_PC) {
|
||||
monitor_printf(mon, " PC=0x%016" PRIx64, cpu->value->PC);
|
||||
switch (cpu->value->arch) {
|
||||
case CPU_INFO_ARCH_X86:
|
||||
monitor_printf(mon, " pc=0x%016" PRIx64, cpu->value->u.x86->pc);
|
||||
break;
|
||||
case CPU_INFO_ARCH_PPC:
|
||||
monitor_printf(mon, " nip=0x%016" PRIx64, cpu->value->u.ppc->nip);
|
||||
break;
|
||||
case CPU_INFO_ARCH_SPARC:
|
||||
monitor_printf(mon, " pc=0x%016" PRIx64, cpu->value->u.sparc->pc);
|
||||
monitor_printf(mon, " npc=0x%016" PRIx64, cpu->value->u.sparc->npc);
|
||||
break;
|
||||
case CPU_INFO_ARCH_MIPS:
|
||||
monitor_printf(mon, " PC=0x%016" PRIx64, cpu->value->u.mips->PC);
|
||||
break;
|
||||
case CPU_INFO_ARCH_TRICORE:
|
||||
monitor_printf(mon, " PC=0x%016" PRIx64, cpu->value->u.tricore->PC);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (cpu->value->halted) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue