|
@@ -24,6 +24,7 @@
|
|
#include "hw/qdev-core.h"
|
|
#include "hw/qdev-core.h"
|
|
#include "hw/qdev-properties.h"
|
|
#include "hw/qdev-properties.h"
|
|
#include "qemu/error-report.h"
|
|
#include "qemu/error-report.h"
|
|
|
|
+#include "qemu/qemu-print.h"
|
|
#include "migration/vmstate.h"
|
|
#include "migration/vmstate.h"
|
|
#ifdef CONFIG_USER_ONLY
|
|
#ifdef CONFIG_USER_ONLY
|
|
#include "qemu.h"
|
|
#include "qemu.h"
|
|
@@ -283,12 +284,34 @@ const char *parse_cpu_option(const char *cpu_option)
|
|
return cpu_type;
|
|
return cpu_type;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifndef cpu_list
|
|
|
|
+static void cpu_list_entry(gpointer data, gpointer user_data)
|
|
|
|
+{
|
|
|
|
+ CPUClass *cc = CPU_CLASS(OBJECT_CLASS(data));
|
|
|
|
+ const char *typename = object_class_get_name(OBJECT_CLASS(data));
|
|
|
|
+ g_autofree char *model = cpu_model_from_type(typename);
|
|
|
|
+
|
|
|
|
+ if (cc->deprecation_note) {
|
|
|
|
+ qemu_printf(" %s (deprecated)\n", model);
|
|
|
|
+ } else {
|
|
|
|
+ qemu_printf(" %s\n", model);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void cpu_list(void)
|
|
|
|
+{
|
|
|
|
+ GSList *list;
|
|
|
|
+
|
|
|
|
+ list = object_class_get_list_sorted(TYPE_CPU, false);
|
|
|
|
+ qemu_printf("Available CPUs:\n");
|
|
|
|
+ g_slist_foreach(list, cpu_list_entry, NULL);
|
|
|
|
+ g_slist_free(list);
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
void list_cpus(void)
|
|
void list_cpus(void)
|
|
{
|
|
{
|
|
- /* XXX: implement xxx_cpu_list for targets that still miss it */
|
|
|
|
-#if defined(cpu_list)
|
|
|
|
cpu_list();
|
|
cpu_list();
|
|
-#endif
|
|
|
|
}
|
|
}
|
|
|
|
|
|
#if defined(CONFIG_USER_ONLY)
|
|
#if defined(CONFIG_USER_ONLY)
|