On 3/5/25 08:12, Philippe Mathieu-Daudé wrote:
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"

That's a good way to be able to select at runtime the objects enabled, even though we'll have a binary with all qom objects code present.

Reviewed-by: Pierrick Bouvier <pierrick.bouv...@linaro.org>

Reply via email to