Introduce the TypeInfo::registerable() callback to allow runtime decision on whether register a QOM type or not.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- include/qom/object.h | 1 + qom/object.c | 4 ++++ qom/trace-events | 1 + 3 files changed, 6 insertions(+) diff --git a/include/qom/object.h b/include/qom/object.h index 9192265db76..f046791f60c 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -476,6 +476,7 @@ struct TypeInfo { const char *name; const char *parent; + bool (*registerable)(void); size_t instance_size; size_t instance_align; diff --git a/qom/object.c b/qom/object.c index 01618d06bd8..c62b7fd1695 100644 --- a/qom/object.c +++ b/qom/object.c @@ -168,6 +168,10 @@ static TypeImpl *type_register_internal(const TypeInfo *info) fprintf(stderr, "Registering '%s' with illegal type name\n", info->name); abort(); } + if (info->registerable && !info->registerable()) { + trace_object_register_skipped(info->name); + return NULL; + } ti = type_new(info); diff --git a/qom/trace-events b/qom/trace-events index b2e9f4a7127..29af95d8507 100644 --- a/qom/trace-events +++ b/qom/trace-events @@ -3,3 +3,4 @@ # object.c object_dynamic_cast_assert(const char *type, const char *target, const char *file, int line, const char *func) "%s->%s (%s:%d:%s)" object_class_dynamic_cast_assert(const char *type, const char *target, const char *file, int line, const char *func) "%s->%s (%s:%d:%s)" +object_register_skipped(const char *type) "Not registering '%s' type" -- 2.47.1