diff --git a/qemu/aarch64.h b/qemu/aarch64.h index e519c462..75f750a4 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_aarch64 #define object_class_foreach_tramp object_class_foreach_tramp_aarch64 #define object_class_get_list object_class_get_list_aarch64 +#define object_class_get_list_sorted object_class_get_list_sorted_aarch64 #define object_class_get_list_tramp object_class_get_list_tramp_aarch64 #define object_class_get_parent object_class_get_parent_aarch64 #define object_deinit object_deinit_aarch64 diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h index cbcbab67..bfc98339 100644 --- a/qemu/aarch64eb.h +++ b/qemu/aarch64eb.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_aarch64eb #define object_class_foreach_tramp object_class_foreach_tramp_aarch64eb #define object_class_get_list object_class_get_list_aarch64eb +#define object_class_get_list_sorted object_class_get_list_sorted_aarch64eb #define object_class_get_list_tramp object_class_get_list_tramp_aarch64eb #define object_class_get_parent object_class_get_parent_aarch64eb #define object_deinit object_deinit_aarch64eb diff --git a/qemu/arm.h b/qemu/arm.h index a1974154..d7392f19 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_arm #define object_class_foreach_tramp object_class_foreach_tramp_arm #define object_class_get_list object_class_get_list_arm +#define object_class_get_list_sorted object_class_get_list_sorted_arm #define object_class_get_list_tramp object_class_get_list_tramp_arm #define object_class_get_parent object_class_get_parent_arm #define object_deinit object_deinit_arm diff --git a/qemu/armeb.h b/qemu/armeb.h index d900d7b0..ff5d1990 100644 --- a/qemu/armeb.h +++ b/qemu/armeb.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_armeb #define object_class_foreach_tramp object_class_foreach_tramp_armeb #define object_class_get_list object_class_get_list_armeb +#define object_class_get_list_sorted object_class_get_list_sorted_armeb #define object_class_get_list_tramp object_class_get_list_tramp_armeb #define object_class_get_parent object_class_get_parent_armeb #define object_deinit object_deinit_armeb diff --git a/qemu/header_gen.py b/qemu/header_gen.py index c148a23c..957d4857 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -1881,6 +1881,7 @@ symbols = ( 'object_class_foreach', 'object_class_foreach_tramp', 'object_class_get_list', + 'object_class_get_list_sorted', 'object_class_get_list_tramp', 'object_class_get_parent', 'object_deinit', diff --git a/qemu/include/qom/object.h b/qemu/include/qom/object.h index 63cb6ebd..d2f43989 100644 --- a/qemu/include/qom/object.h +++ b/qemu/include/qom/object.h @@ -800,6 +800,17 @@ void object_class_foreach(struct uc_struct *uc, void (*fn)(ObjectClass *klass, v GSList *object_class_get_list(struct uc_struct *uc, const char *implements_type, bool include_abstract); +/** + * object_class_get_list_sorted: + * @implements_type: The type to filter for, including its derivatives. + * @include_abstract: Whether to include abstract classes. + * + * Returns: A singly-linked list of the classes in alphabetical + * case-insensitive order. + */ +GSList *object_class_get_list_sorted(struct uc_struct *uc, const char *implements_type, + bool include_abstract); + /** * object_ref: * @obj: the object diff --git a/qemu/m68k.h b/qemu/m68k.h index b9da9330..078af1ab 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_m68k #define object_class_foreach_tramp object_class_foreach_tramp_m68k #define object_class_get_list object_class_get_list_m68k +#define object_class_get_list_sorted object_class_get_list_sorted_m68k #define object_class_get_list_tramp object_class_get_list_tramp_m68k #define object_class_get_parent object_class_get_parent_m68k #define object_deinit object_deinit_m68k diff --git a/qemu/mips.h b/qemu/mips.h index 0d5f22e5..be6b21fc 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_mips #define object_class_foreach_tramp object_class_foreach_tramp_mips #define object_class_get_list object_class_get_list_mips +#define object_class_get_list_sorted object_class_get_list_sorted_mips #define object_class_get_list_tramp object_class_get_list_tramp_mips #define object_class_get_parent object_class_get_parent_mips #define object_deinit object_deinit_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index 73f2944c..399e54e4 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_mips64 #define object_class_foreach_tramp object_class_foreach_tramp_mips64 #define object_class_get_list object_class_get_list_mips64 +#define object_class_get_list_sorted object_class_get_list_sorted_mips64 #define object_class_get_list_tramp object_class_get_list_tramp_mips64 #define object_class_get_parent object_class_get_parent_mips64 #define object_deinit object_deinit_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index 8edb64e1..434cb6dd 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_mips64el #define object_class_foreach_tramp object_class_foreach_tramp_mips64el #define object_class_get_list object_class_get_list_mips64el +#define object_class_get_list_sorted object_class_get_list_sorted_mips64el #define object_class_get_list_tramp object_class_get_list_tramp_mips64el #define object_class_get_parent object_class_get_parent_mips64el #define object_deinit object_deinit_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index 46ba1751..66c82783 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_mipsel #define object_class_foreach_tramp object_class_foreach_tramp_mipsel #define object_class_get_list object_class_get_list_mipsel +#define object_class_get_list_sorted object_class_get_list_sorted_mipsel #define object_class_get_list_tramp object_class_get_list_tramp_mipsel #define object_class_get_parent object_class_get_parent_mipsel #define object_deinit object_deinit_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index 92048014..9e02ce72 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_powerpc #define object_class_foreach_tramp object_class_foreach_tramp_powerpc #define object_class_get_list object_class_get_list_powerpc +#define object_class_get_list_sorted object_class_get_list_sorted_powerpc #define object_class_get_list_tramp object_class_get_list_tramp_powerpc #define object_class_get_parent object_class_get_parent_powerpc #define object_deinit object_deinit_powerpc diff --git a/qemu/qom/object.c b/qemu/qom/object.c index 5ef74649..306c5743 100644 --- a/qemu/qom/object.c +++ b/qemu/qom/object.c @@ -767,6 +767,19 @@ GSList *object_class_get_list(struct uc_struct *uc, const char *implements_type, return list; } +static gint object_class_cmp(gconstpointer a, gconstpointer b) +{ + return strcasecmp(object_class_get_name((ObjectClass *)a), + object_class_get_name((ObjectClass *)b)); +} + +GSList *object_class_get_list_sorted(struct uc_struct *uc, const char *implements_type, + bool include_abstract) +{ + return g_slist_sort(object_class_get_list(uc, implements_type, include_abstract), + object_class_cmp); +} + void object_ref(Object *obj) { if (!obj) { diff --git a/qemu/sparc.h b/qemu/sparc.h index ec19d7e6..6a997d0a 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_sparc #define object_class_foreach_tramp object_class_foreach_tramp_sparc #define object_class_get_list object_class_get_list_sparc +#define object_class_get_list_sorted object_class_get_list_sorted_sparc #define object_class_get_list_tramp object_class_get_list_tramp_sparc #define object_class_get_parent object_class_get_parent_sparc #define object_deinit object_deinit_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index 028f5809..82010fcc 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_sparc64 #define object_class_foreach_tramp object_class_foreach_tramp_sparc64 #define object_class_get_list object_class_get_list_sparc64 +#define object_class_get_list_sorted object_class_get_list_sorted_sparc64 #define object_class_get_list_tramp object_class_get_list_tramp_sparc64 #define object_class_get_parent object_class_get_parent_sparc64 #define object_deinit object_deinit_sparc64 diff --git a/qemu/x86_64.h b/qemu/x86_64.h index 171f1bcf..d1ce4d95 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -1875,6 +1875,7 @@ #define object_class_foreach object_class_foreach_x86_64 #define object_class_foreach_tramp object_class_foreach_tramp_x86_64 #define object_class_get_list object_class_get_list_x86_64 +#define object_class_get_list_sorted object_class_get_list_sorted_x86_64 #define object_class_get_list_tramp object_class_get_list_tramp_x86_64 #define object_class_get_parent object_class_get_parent_x86_64 #define object_deinit object_deinit_x86_64