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 :|

Reply via email to