qom/object: register OBJECT and INTERFACE QOM types before main

Those types are special, as they are the base of all other QOM types. In
next commit, we'll introduce an extra step in module initialization for
target-info-* types.

However, those types depend on TYPE_OBJECT, which is only registered
at MODULE_INIT_QOM step.

To avoid having to introduce another step, and modify all code calling
module_call_init(MODULE_INIT_QOM), we simply register those base types
directly in the static constructor, before anything else.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Link: https://lore.kernel.org/qemu-devel/20260514172303.1484273-2-pierrick.bouvier@oss.qualcomm.com
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
This commit is contained in:
Pierrick Bouvier
2026-05-14 10:22:59 -07:00
parent edcc429e9e
commit 8758aeca2c

View File

@@ -2844,7 +2844,7 @@ static void object_class_init(ObjectClass *klass, const void *data)
NULL);
}
static void register_types(void)
static void __attribute__((constructor)) register_types(void)
{
static const TypeInfo interface_info = {
.name = TYPE_INTERFACE,
@@ -2862,5 +2862,3 @@ static void register_types(void)
type_interface = type_register_internal(&interface_info);
type_register_internal(&object_info);
}
type_init(register_types)