New qom-cpu style requested by Igor.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
target/rx/cpu.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/target/rx/cpu.c b/target/rx/cpu.c
index 3c43467534..c370f65faa 100644
--- a/target/rx/cpu.c
+++ b/target/rx/cpu.c
@@ -80,7 +80,7 @@ static void rx_cpu_list_entry(gpointer data, gpointer user_data)
void rx_cpu_list(void)
{
GSList *list;
- list = object_class_get_list_sorted(TYPE_RXCPU, false);
+ list = object_class_get_list_sorted(TYPE_RX_CPU, false);
g_slist_foreach(list, rx_cpu_list_entry, NULL);
g_slist_free(list);
}
@@ -88,15 +88,26 @@ void rx_cpu_list(void)
static ObjectClass *rx_cpu_class_by_name(const char *cpu_model)
{
ObjectClass *oc;
- char *typename = NULL;
+ char *typename;
- typename = g_strdup_printf(RX_CPU_TYPE_NAME(""));
+ oc = object_class_by_name(cpu_model);
+ if (oc != NULL && object_class_dynamic_cast(oc, TYPE_RX_CPU) != NULL &&
+ !object_class_is_abstract(oc)) {
+ return oc;
+ }
+
+ typename = g_strdup_printf(RX_CPU_TYPE_NAME("%s"), cpu_model);
oc = object_class_by_name(typename);
if (oc != NULL && object_class_is_abstract(oc)) {
oc = NULL;
}
-
g_free(typename);
+
+ if (!oc) {
+ /* default to rx62n */
+ oc = object_class_by_name(RX_CPU_TYPE_NAME("rx62n"));
+ }
+
return oc;
}
--
2.20.1