On 5/14/2026 10:22 AM, Pierrick Bouvier wrote: > We are getting close to be able to link several targets in a single QEMU > system > binary, and the last obstacle on the road is to embed several TargetInfo in > the > same binary. The end result of this series is to have a single definition for > target_info symbol. > > This series adds TargetInfo types in QOM, and retrieve them dynamically(). At > the moment, we don't deal yet with multiple TargetInfo selection, but install > all that is needed to be able to do it easily. > > Because TargetInfo data is set through class_init, it creates an issue at > startup, where we may try to instantiate additional (unrelated) types just to > retrieve the list of "target-info-X" types. Those other types class_init may > be > using target information, to add target specific properties for instance. > This issue has been fixed by adding a new object_class_get_list_by_name_prefix > that does not force instantiation of all QOM types, but only those matching a > specific pattern. This way, we first initialize and retrieve target-info types > before others. > > An alternative would be to leave all this out of QOM, and use startup > initializer to add them in a single list. However, because all the > single-binary > work has been using QOM where possible, it would be really sad to not use it > for > this final step. Comments are welcome! > > Finally, sticking to our promise not create a special "single-binary > configuration", the goal is to use the *exact* same codepath for normal > binaries > also. It means that even for existing system binaries, the goal will be to use > QOM to retrieve current target, even if there is only one. > > v7 > -- > > - Init target info in oss-fuzz main. Fixes job build-oss-fuzz. > > v6 > -- > > - Simplify QOM types as suggested by Richard > - Use class_base_init + class_data mechanic to initialize target-info pointer > > v5 > -- > > - Fix header guard name for target-info-init.h > (TARGET_INFO_INIT_H -> QEMU_TARGET_INFO_INIT_H) > - add a new patch to initialize type_table with TYPE_OBJECT and > TYPE_INTERFACE, > as suggested by Richard > - use a single class_init for all target-info-* classes. > > v4 > -- > > - Revert to v2 MODULE_INIT_TARGET_INFO as Daniel didn't comment on issues > about > about MODULE_INIT_QOM_EARLY. > > v3 > -- > > - fix rebase mistake for one header guard > - remove MODULE_INIT_TARGET_INFO and introduce MODULE_INIT_QOM_EARLY, as > requested by Daniel > > v2 > -- > > - fix header guards > - introduce new module init step (MODULE_INIT_TARGET_INFO) > - as a consequence of item above, we need to register TYPE_OBJECT before > startup > - fix xtensa core type registration using type_init instead of static ctor > > Pierrick Bouvier (5): > qom/object: register OBJECT and INTERFACE QOM types before main > qom/object: initialize type_table in static ctor with fundamental QOM > types > target-info: introduce TargetInfo in QOM > target-info-qom: detect target from QOM > target-info: replace target_info() in system-mode > > configs/targets/aarch64-softmmu.c | 6 ++-- > configs/targets/arm-softmmu.c | 6 ++-- > include/qemu/module.h | 1 + > include/qemu/target-info-init.h | 53 +++++++++++++++++++++++++++++++ > include/qemu/target-info-qom.h | 30 +++++++++++++++++ > qom/object.c | 22 ++++--------- > system/vl.c | 4 +++ > target-info-qom.c | 45 ++++++++++++++++++++++++++ > target-info-stub.c | 6 ++-- > tests/qtest/fuzz/fuzz.c | 3 ++ > 10 files changed, 148 insertions(+), 28 deletions(-) > create mode 100644 include/qemu/target-info-init.h > create mode 100644 include/qemu/target-info-qom.h >
This was merged into master (66f0b110b6654d876cfe18ad735902622003eb5e). Regards, Pierrick
