On Wed, Feb 18, 2026 at 10:22:27AM +0100, Markus Armbruster wrote: > Daniel P. Berrangé <[email protected]> writes: > > > Functions marked with __attribute__((__constructor__)) will be > > invoked in linker order. In theory this is well defined, but > > in practice, it is hard to determine what this order will be > > with the layers of indirection through meson, ninja and the > > static libraries QEMU builds. > > > > Notably, the order currently appears different between Linux > > and Windows (as tested with Wine on Linux). This can cause > > problems when certain QEMU constructors have a dependancy on > > other QEMU constructors. > > > > To address this define a QEMU_CONSTRUCTOR_EARLY constant which > > provides a priority value that will run before other default > > constructors. This is to be used for QEMU constructors that > > are themselves self-contained, but may be relied upon by other > > constructors. > > > > Reviewed-by: Richard Henderson <[email protected]> > > Reviewed-by: Dr. David Alan Gilbert <[email protected]> > > Signed-off-by: Daniel P. Berrangé <[email protected]> > > I'm no fan of doing non-trivial work in constructors. We discussed > possible alternatives in review of v5. This is an opinion, not a > demand. And Paolo's opinion counts a lot more here.
I think that it is worth exploring the alternative idea, but not as part of this series which is already getting way longer than I would like. This constructor usage is trivially removed later if we get there. > > > --- > > include/qemu/compiler.h | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > > > diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h > > index 1c2b673c05..4c49f52eb0 100644 > > --- a/include/qemu/compiler.h > > +++ b/include/qemu/compiler.h > > @@ -194,6 +194,14 @@ > > # define QEMU_USED > > #endif > > > > +/* > > + * A priority for __attribute__((constructor(...))) that > > + * will run earlier than the default constructors. Must > > + * only be used for functions that have no dependency > > + * on global initialization of other QEMU subsystems. > > + */ > > +#define QEMU_CONSTRUCTOR_EARLY 101 > > + > > /* > > * Disable -ftrivial-auto-var-init on a local variable. > > * > With regards, Daniel -- |: https://berrange.com ~~ https://hachyderm.io/@berrange :| |: https://libvirt.org ~~ https://entangle-photo.org :| |: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|
